c79587147434938a1e756c1340e6543a41bf80f7
1 # Extends the class object with class and instance accessors for class attributes,
2 # just like the native attr* accessors for instance attributes.
5 # cattr_accessor :hair_colors
8 # Person.hair_colors = [:brown, :black, :blonde, :red]
10 def cattr_reader(*syms
)
11 syms
.flatten
.each
do |sym
|
12 next if sym
.is_a
?(Hash
)
13 class_eval(<<-EOS, __FILE__, __LINE__)
14 unless defined? @@#{sym} # unless defined? @@hair_colors
15 @@#{sym} = nil # @@hair_colors = nil
18 def self.#{sym} # def self.hair_colors
19 @@#{sym} # @@hair_colors
22 def #{sym} # def hair_colors
23 @@#{sym} # @@hair_colors
29 def cattr_writer(*syms
)
30 options
= syms
.extract_options
!
31 syms
.flatten
.each
do |sym
|
32 class_eval(<<-EOS, __FILE__, __LINE__)
33 unless defined? @@#{sym} # unless defined? @@hair_colors
34 @@#{sym} = nil # @@hair_colors = nil
37 def self.#{sym}=(obj) # def self.hair_colors=(obj)
38 @@#{sym} = obj # @@hair_colors = obj
42 def #{sym}=(obj) # def hair_colors=(obj)
43 @@#{sym} = obj # @@hair_colors = obj
45 " unless options[:instance_writer] == false } # # instance writer above is generated unless options[:instance_writer] == false
50 def cattr_accessor(*syms
)