Class: Class
- Inherits:
-
Object
- Object
- Class
- Defined in:
- lib/redisarray/core_ext/class/attribute_accessors.rb
Overview
Extends the class object with class and instance accessors for class attributes, just like the native attr* accessors for instance attributes.
Note that unlike class_attribute
, if a subclass changes the value then that would also change the value for parent class. Similarly if parent class changes the value then that would change the value of subclasses too.
class Person
cattr_accessor :hair_colors
end
Person.hair_colors = [:brown, :black, :blonde, :red]
Person.hair_colors # => [:brown, :black, :blonde, :red]
Person.new.hair_colors # => [:brown, :black, :blonde, :red]
To opt out of the instance writer method, pass :instance_writer => false. To opt out of the instance reader method, pass :instance_reader => false.
class Person
cattr_accessor :hair_colors, :instance_writer => false, :instance_reader => false
end
Person.new.hair_colors = [:brown] # => NoMethodError
Person.new.hair_colors # => NoMethodError
Instance Method Summary collapse
Instance Method Details
#cattr_accessor(*syms, &blk) ⇒ Object
75 76 77 78 |
# File 'lib/redisarray/core_ext/class/attribute_accessors.rb', line 75 def cattr_accessor(*syms, &blk) cattr_reader(*syms) cattr_writer(*syms, &blk) end |
#cattr_reader(*syms) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/redisarray/core_ext/class/attribute_accessors.rb', line 28 def cattr_reader(*syms) = syms. syms.each do |sym| class_eval(<<-EOS, __FILE__, __LINE__ + 1) unless defined? @@#{sym} @@#{sym} = nil end def self.#{sym} @@#{sym} end EOS unless [:instance_reader] == false class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym} @@#{sym} end EOS end end end |
#cattr_writer(*syms) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/redisarray/core_ext/class/attribute_accessors.rb', line 51 def cattr_writer(*syms) = syms. 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 [:instance_writer] == false class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym}=(obj) @@#{sym} = obj end EOS end self.send("#{sym}=", yield) if block_given? end end |