c79587147434938a1e756c1340e6543a41bf80f7
[feedcatcher.git] / vendor / rails / activesupport / lib / active_support / core_ext / class / attribute_accessors.rb
1 # Extends the class object with class and instance accessors for class attributes,
2 # just like the native attr* accessors for instance attributes.
3 #
4 # class Person
5 # cattr_accessor :hair_colors
6 # end
7 #
8 # Person.hair_colors = [:brown, :black, :blonde, :red]
9 class Class
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
16 end # end
17 #
18 def self.#{sym} # def self.hair_colors
19 @@#{sym} # @@hair_colors
20 end # end
21 #
22 def #{sym} # def hair_colors
23 @@#{sym} # @@hair_colors
24 end # end
25 EOS
26 end
27 end
28
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
35 end # end
36 #
37 def self.#{sym}=(obj) # def self.hair_colors=(obj)
38 @@#{sym} = obj # @@hair_colors = obj
39 end # end
40 #
41 #{" #
42 def #{sym}=(obj) # def hair_colors=(obj)
43 @@#{sym} = obj # @@hair_colors = obj
44 end # end
45 " unless options[:instance_writer] == false } # # instance writer above is generated unless options[:instance_writer] == false
46 EOS
47 end
48 end
49
50 def cattr_accessor(*syms)
51 cattr_reader(*syms)
52 cattr_writer(*syms)
53 end
54 end