Sha256: 17e667ca7ba2334925cb6f8237b05aa009f7f0b4727806df84ba6204df1fd6eb

Contents?: true

Size: 1.18 KB

Versions: 28

Compression:

Stored size: 1.18 KB

Contents

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

        def self.#{sym}
          @@#{sym}
        end
      EOS

      class_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{sym}
          @@#{sym}
        end
      EOS
    end
  end

  def mattr_writer(*syms)
    syms.each do |sym|
      class_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def self.#{sym}=(obj)
          @@#{sym} = obj
        end
      EOS

      class_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{sym}=(obj)
          @@#{sym} = obj
        end
      EOS
    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

28 entries across 28 versions & 1 rubygems

Version Path
ors-0.2.10 lib/ors/core_ext.rb
ors-0.2.9 lib/ors/core_ext.rb
ors-0.2.8 lib/ors/core_ext.rb
ors-0.2.7 lib/ors/core_ext.rb
ors-0.2.6 lib/ors/core_ext.rb
ors-0.2.5 lib/ors/core_ext.rb
ors-0.2.4 lib/ors/core_ext.rb
ors-0.2.3 lib/ors/core_ext.rb
ors-0.2.2 lib/ors/core_ext.rb
ors-0.2.1 lib/ors/core_ext.rb
ors-0.2.0 lib/ors/core_ext.rb
ors-0.1.8 lib/ors/core_ext.rb
ors-0.1.7 lib/ors/core_ext.rb
ors-0.1.5 lib/ors/core_ext.rb
ors-0.1.4 lib/ors/core_ext.rb
ors-0.1.3 lib/ors/core_ext.rb
ors-0.1.2 lib/ors/core_ext.rb
ors-0.1.1 lib/ors/core_ext.rb
ors-0.1.0 lib/ors/core_ext.rb
ors-0.0.9 lib/ors/core_ext.rb