Read more

Defining class methods with Modularity traits

Henning Koch
March 08, 2011Software engineer at makandra GmbH

There are two ways to define a class method from a Modularity Show archive.org snapshot trait. Note that the usual caveats regarding class method visibility apply.

Using define_method

Illustration web development

Do you need DevOps-experts?

Your development team has a full backlog? No time for infrastructure architecture? Our DevOps team is ready to support you!

  • We build reliable cloud solutions with Infrastructure as code
  • We are experts in security, Linux and databases
  • We support your dev team to perform
Read more Show archive.org snapshot

The recommended way is to define a method on your module's singleton class:

module SomeTrait
  as_trait do
    define_singleton_method :foo do
      # ...
    end
  end
end

Using def (has caveats!)

Alternatively, you can def the method on self:

module SomeTrait
  as_trait do
    def self.foo
      # ...
    end
  end
end

This is quite concise and results in faster methods than using define_method. However, you cannot use it with parametrized traits.

The following will fail:

module SomeTrait
  as_trait do |name|
    def self.foo
      puts name # will raise an error because the variable 'name' is not bound to the method body
    end
  end
end
Posted by Henning Koch to makandra dev (2011-03-08 19:48)