Method: Class#cattr_writer

Defined in:
lib/wukong/extensions/class.rb

#cattr_writer(*syms) ⇒ Array[#to_s]

Defines class-level (and optionally instance-level) attribute writer.

Parameters:

  • Array (Array[*#to_s, Hash{:instance_writer => Boolean}])

    of attributes to define writer for.

  • syms (Hash)

    a customizable set of options

Options Hash (*syms):

  • :instance_writer (Boolean)

    if true, instance-level attribute writer is defined.

Returns:

  • (Array[#to_s])

    List of attributes that were made into cattr_writers



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/wukong/extensions/class.rb', line 69

def cattr_writer(*syms)
  options = syms.last.is_a?(Hash) ? syms.pop : {}
  syms.flatten.each do |sym|
    class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
      unless defined? @@#{sym}
        @@#{sym} = nil
      end

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

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