Module | Innate::Traited |
In: |
lib/innate/traited.rb
|
Traited helps you doing configuration similar to class variables.
It‘s built on a simple Hash, where keys are objects and the values the configuration. By using {Traited#ancestral_trait} you will get nicely inherited configuration, where keys later in the ancestors will take precedence.
@example usage
class Foo include Innate::Traited trait :hello => 'Hello' def initialize trait :hello => 'World!' end def show [class_trait[:hello], trait[:hello], ancestral_trait[:hello]] end end Foo.trait[:hello] # => "Hello" foo = Foo.new foo.trait[:hello] # => "World!" foo.show # => ["Hello", "World!", "World!"]
ANCESTRAL_VALUES | = | {}, {}, {} |
Builds a trait from all the ancestors, closer ancestors overwrite distant ancestors
class Foo
include Innate::Traited trait :one => :eins, :first => :erstes
end
class Bar < Foo
trait :two => :zwei
end
class Foobar < Bar
trait :three => :drei, :first => :overwritten
end
Foobar.ancestral_trait # => {:three => :drei, :two => :zwei, :one => :eins, :first => :overwritten}