Module: Composable::Core::InheritableAttributes::ClassMethods
- Defined in:
- lib/composable/core/inheritable_attributes.rb
Instance Method Summary collapse
- #inheritable_attributes(*attributes) ⇒ Object
- #inherited(subclass) ⇒ Object
- #uninheritable_attributes(*attributes) ⇒ Object
Instance Method Details
#inheritable_attributes(*attributes) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/composable/core/inheritable_attributes.rb', line 9 def inheritable_attributes(*attributes) = attributes. @inheritable_attributes ||= [{attribute: :inheritable_attributes}] attributes.each do |attribute| @inheritable_attributes << {attribute: attribute, default: [:default]} class_eval <<-RUBY, __FILE__, __LINE__ + 1 class << self; attr_accessor :#{attribute} end RUBY send("#{attribute}=", [:default]) unless [:default].nil? end @inheritable_attributes end |
#inherited(subclass) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/composable/core/inheritable_attributes.rb', line 41 def inherited(subclass) super Array(@inheritable_attributes).each do |hash| inheritable_attribute = hash[:attribute] instance_name = "@#{inheritable_attribute}" instance_value = instance_variable_get(instance_name).deep_dup subclass.instance_variable_set(instance_name, instance_value || hash[:default].deep_dup) end Array(@uninheritable_attributes).each do |hash| uninheritable_attribute = hash[:attribute] instance_name = "@#{uninheritable_attribute}" if instance_name == "@uninheritable_attributes" instance_value = instance_variable_get(instance_name).deep_dup subclass.instance_variable_set(instance_name, instance_value) else subclass.instance_variable_set(instance_name, hash[:default].deep_dup) end end end |
#uninheritable_attributes(*attributes) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/composable/core/inheritable_attributes.rb', line 24 def uninheritable_attributes(*attributes) = attributes. @uninheritable_attributes ||= [{attribute: :uninheritable_attributes}] attributes.each do |attribute| @uninheritable_attributes << {attribute: attribute, default: [:default]} class_eval <<-RUBY, __FILE__, __LINE__ + 1 class << self; attr_accessor :#{attribute} end RUBY send("#{attribute}=", [:default]) unless [:default].nil? end @uninheritable_attributes end |