Method: Module#mattr_writer

Defined in:
lib/core/facets/module/mattr.rb

#mattr_writer(*syms) ⇒ Object

Creates a class-variable attr_writer that can be accessed both on an instance and class level.

c = Class.new do
  mattr_writer :a
  def self.a
    @@a
  end
end

c.a = 10
c.a            #=> 10

c.new.a = 29
c.a            #=> 29

NOTE: This methiod is not a common core extension and is not loaded automatically when using require 'facets'.

CREDIT: David Heinemeier Hansson

Uncommon:

  • require ‘facets/module/cattr’



235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# File 'lib/core/facets/module/mattr.rb', line 235

def mattr_writer(*syms)
  syms.flatten.each do |sym|
    module_eval("      unless defined? @@\#{sym}\n        @@\#{sym} = nil\n      end\n\n      def self.\#{sym}=(obj)\n        @@\#{sym} = obj\n      end\n\n      def \#{sym}=(obj)\n        @@\#{sym}=(obj)\n      end\n    EOS\n  end\n  return syms\nend\n", __FILE__, __LINE__)