Module: Structure::ClassMethods
- Defined in:
- lib/structure.rb
Overview
The class interface
Instance Attribute Summary collapse
-
#attribute_names ⇒ Object
readonly
Returns the value of attribute attribute_names.
Class Method Summary collapse
Instance Method Summary collapse
Instance Attribute Details
#attribute_names ⇒ Object (readonly)
Returns the value of attribute attribute_names.
62 63 64 |
# File 'lib/structure.rb', line 62 def attribute_names @attribute_names end |
Class Method Details
.extended(base) ⇒ Object
65 66 67 68 |
# File 'lib/structure.rb', line 65 def extended(base) base.instance_variable_set :@attribute_names, [] base.send :override_initialize end |
Instance Method Details
#attribute(name, &block) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/structure.rb', line 73 def attribute(name, &block) name = name.to_s if name.end_with?('?') name = name.chop module_eval <<-CODE, __FILE__, __LINE__ + 1 def #{name}? #{name} end CODE end module_eval <<-CODE, __FILE__, __LINE__ + 1 def #{name} with_mutex do break if defined?(@#{name}) @#{name} = unmemoized_#{name} end @#{name} end CODE private define_method "unmemoized_#{name}", block @attribute_names << name name.to_sym end |