Upgraded Rails and RSpec
[monkeycharger.git] / vendor / rails / activesupport / lib / active_support / core_ext / module / attribute_accessors.rb
blob58ff363244f92504008bff0485f97255f737f870
1 # Extends the module object with module and instance accessors for class attributes, 
2 # just like the native attr* accessors for instance attributes.
3 class Module # :nodoc:
4   def mattr_reader(*syms)
5     syms.each do |sym|
6       next if sym.is_a?(Hash)
7       class_eval(<<-EOS, __FILE__, __LINE__)
8         unless defined? @@#{sym}
9           @@#{sym} = nil
10         end
11         
12         def self.#{sym}
13           @@#{sym}
14         end
16         def #{sym}
17           @@#{sym}
18         end
19       EOS
20     end
21   end
22   
23   def mattr_writer(*syms)
24     options = syms.extract_options!
25     syms.each do |sym|
26       class_eval(<<-EOS, __FILE__, __LINE__)
27         unless defined? @@#{sym}
28           @@#{sym} = nil
29         end
30         
31         def self.#{sym}=(obj)
32           @@#{sym} = obj
33         end
34         
35         #{"
36         def #{sym}=(obj)
37           @@#{sym} = obj
38         end
39         " unless options[:instance_writer] == false }
40       EOS
41     end
42   end
43   
44   def mattr_accessor(*syms)
45     mattr_reader(*syms)
46     mattr_writer(*syms)
47   end
48 end