Sha256: 152b28ce1a2ea9edac5fd583c63d0938c401f63ba3a9865234c6782010d5b216

Contents?: true

Size: 1.22 KB

Versions: 52

Compression:

Stored size: 1.22 KB

Contents

# Extends the class object with class and instance accessors for class attributes, 
# just like the native attr* accessors for instance attributes.
class Class # :nodoc:
  def cattr_reader(*syms)
    syms.each do |sym|
      class_eval <<-EOS
        if ! defined? @@#{sym.id2name}
          @@#{sym.id2name} = nil
        end
        
        def self.#{sym.id2name}
          @@#{sym}
        end

        def #{sym.id2name}
          @@#{sym}
        end

        def call_#{sym.id2name}
          case @@#{sym.id2name}
            when Symbol then send(@@#{sym})
            when Proc   then @@#{sym}.call(self)
            when String then @@#{sym}
            else nil
          end
        end
      EOS
    end
  end
  
  def cattr_writer(*syms)
    syms.each do |sym|
      class_eval <<-EOS
        if ! defined? @@#{sym.id2name}
          @@#{sym.id2name} = nil
        end
        
        def self.#{sym.id2name}=(obj)
          @@#{sym.id2name} = obj
        end

        def self.set_#{sym.id2name}(obj)
          @@#{sym.id2name} = obj
        end

        def #{sym.id2name}=(obj)
          @@#{sym} = obj
        end
      EOS
    end
  end
  
  def cattr_accessor(*syms)
    cattr_reader(*syms)
    cattr_writer(*syms)
  end
end

Version data entries

52 entries across 52 versions & 10 rubygems

Version Path
brandon-money-1.7.2 lib/support/cattr_accessor.rb
collectiveidea-money-1.7.3 lib/support/cattr_accessor.rb
garrytan-ebayapi-0.12.0 lib/support/cattr_accessor.rb
garrytan-ebayapi-0.12.1 lib/support/cattr_accessor.rb
garrytan-ebayapi-0.12.2 lib/support/cattr_accessor.rb
devise_sociable-0.1.0 vendor/bundle/gems/actionpack-1.4.0/lib/action_controller/support/class_attribute_accessors.rb
ebayapi-0.12.0 lib/support/cattr_accessor.rb
actionpack-0.9.5 lib/action_controller/support/class_attribute_accessors.rb
actionpack-0.9.0 lib/action_controller/support/class_attribute_accessors.rb
actionpack-1.1.0 lib/action_controller/support/class_attribute_accessors.rb
actionpack-1.0.0 lib/action_controller/support/class_attribute_accessors.rb
actionpack-1.0.1 lib/action_controller/support/class_attribute_accessors.rb
actionpack-1.4.0 lib/action_controller/support/class_attribute_accessors.rb
actionpack-1.2.0 lib/action_controller/support/class_attribute_accessors.rb
actionpack-1.3.0 lib/action_controller/support/class_attribute_accessors.rb
actionpack-1.3.1 lib/action_controller/support/class_attribute_accessors.rb
activerecord-1.4.0 lib/active_record/support/class_attribute_accessors.rb
activerecord-1.5.0 lib/active_record/support/class_attribute_accessors.rb
activerecord-1.5.1 lib/active_record/support/class_attribute_accessors.rb
activerecord-1.6.0 lib/active_record/support/class_attribute_accessors.rb