module Composable::Core::InheritableAttributes::ClassMethods

Public Instance Methods

inheritable_attributes(*attributes) click to toggle source
# File lib/composable/core/inheritable_attributes.rb, line 9
        def inheritable_attributes(*attributes)
          options = attributes.extract_options!

          @inheritable_attributes ||= [{attribute: :inheritable_attributes}]
          attributes.each do |attribute|
            @inheritable_attributes << {attribute: attribute, default: options[:default]}

            class_eval <<-RUBY, __FILE__, __LINE__ + 1
              class << self; attr_accessor :#{attribute} end
            RUBY
            send("#{attribute}=", options[:default]) unless options[:default].nil?
          end
          @inheritable_attributes
        end
inherited(subclass) click to toggle source
Calls superclass method
# 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) click to toggle source
# File lib/composable/core/inheritable_attributes.rb, line 24
        def uninheritable_attributes(*attributes)
          options = attributes.extract_options!

          @uninheritable_attributes ||= [{attribute: :uninheritable_attributes}]

          attributes.each do |attribute|
            @uninheritable_attributes << {attribute: attribute, default: options[:default]}

            class_eval <<-RUBY, __FILE__, __LINE__ + 1
              class << self; attr_accessor :#{attribute} end
            RUBY
            send("#{attribute}=", options[:default]) unless options[:default].nil?
          end

          @uninheritable_attributes
        end