module Mingo::Properties::ClassMethods

Attributes

properties[R]

Public Instance Methods

inherited(klass) click to toggle source
Calls superclass method
# File lib/mingo/properties.rb, line 37
def inherited(klass)
  super
  (@subclasses ||= Array.new) << klass
  klass.instance_variable_set('@properties', self.properties.dup)
end
property(name, options = nil) click to toggle source
# File lib/mingo/properties.rb, line 14
      def property(name, options = nil)
        self.properties << name.to_sym

        setter_name = "#{name}="
        unless method_defined?(setter_name)
          methods = Module.new
          methods.module_eval <<-RUBY, __FILE__, __LINE__ + 1
            def #{name}(&block)
              self.[](#{name.to_s.inspect}, &block)
            end

            def #{setter_name}(value)
              self.[]=(#{name.to_s.inspect}, value)
            end
          RUBY
          include methods
        end

        if defined? @subclasses
          @subclasses.each { |klass| klass.property(property_name, options) }
        end
      end