Sha256: e234422211ae9bb97962e6756f8f99b48f068669cb5ffaf4c86deb508604331b

Contents?: true

Size: 1.51 KB

Versions: 10

Compression:

Stored size: 1.51 KB

Contents

require 'active_support/core_ext/array/extract_options'

class Module
  def mattr_reader(*syms)
    options = syms.extract_options!
    syms.each do |sym|
      class_eval(<<-EOS, __FILE__, __LINE__ + 1)
        unless defined? @@#{sym}
          @@#{sym} = nil
        end

        def self.#{sym}
          @@#{sym}
        end
      EOS
      
      unless options[:instance_reader] == false
        class_eval(<<-EOS, __FILE__, __LINE__ + 1)
          def #{sym}
            @@#{sym}
          end
        EOS
      end
    end
  end

  def mattr_writer(*syms)
    options = syms.extract_options!
    syms.each do |sym|
      class_eval(<<-EOS, __FILE__, __LINE__ + 1)
        unless defined? @@#{sym}
          @@#{sym} = nil
        end

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

      unless options[:instance_writer] == false
        class_eval(<<-EOS, __FILE__, __LINE__ + 1)
          def #{sym}=(obj)
            @@#{sym} = obj
          end
        EOS
      end
    end
  end

  # Extends the module object with module and instance accessors for class attributes,
  # just like the native attr* accessors for instance attributes.
  #
  #  module AppConfiguration
  #    mattr_accessor :google_api_key
  #    self.google_api_key = "123456789"
  #
  #    mattr_accessor :paypal_url
  #    self.paypal_url = "www.sandbox.paypal.com"
  #  end
  #
  #  AppConfiguration.google_api_key = "overriding the api key!"
  def mattr_accessor(*syms)
    mattr_reader(*syms)
    mattr_writer(*syms)
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
csd-0.1.5 lib/active_support/core_ext/module/attribute_accessors.rb
csd-0.1.4 lib/active_support/core_ext/module/attribute_accessors.rb
csd-0.1.3 lib/active_support/core_ext/module/attribute_accessors.rb
csd-0.1.2 lib/active_support/core_ext/module/attribute_accessors.rb
csd-0.1.1 lib/active_support/core_ext/module/attribute_accessors.rb
csd-0.1.0 lib/active_support/core_ext/module/attribute_accessors.rb
csd-0.0.16 lib/active_support/core_ext/module/attribute_accessors.rb
activesupport-3.0.0.beta4 lib/active_support/core_ext/module/attribute_accessors.rb
activesupport-3.0.0.beta3 lib/active_support/core_ext/module/attribute_accessors.rb
activesupport-3.0.0.beta2 lib/active_support/core_ext/module/attribute_accessors.rb