mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
bd323b3c99
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@273 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
57 lines
No EOL
1.2 KiB
Ruby
57 lines
No EOL
1.2 KiB
Ruby
# Extends the module object with module and instance accessors for class attributes,
|
|
# just like the native attr* accessors for instance attributes.
|
|
class Module # :nodoc:
|
|
def mattr_reader(*syms)
|
|
syms.each do |sym|
|
|
class_eval <<-EOS
|
|
if ! defined? @@#{sym.id2name}
|
|
@@#{sym.id2name} = nil
|
|
end
|
|
|
|
def self.#{sym.id2name}
|
|
@@#{sym}
|
|
end
|
|
|
|
def #{sym.id2name}
|
|
@@#{sym}
|
|
end
|
|
|
|
def call_#{sym.id2name}
|
|
case @@#{sym.id2name}
|
|
when Symbol then send(@@#{sym})
|
|
when Proc then @@#{sym}.call(self)
|
|
when String then @@#{sym}
|
|
else nil
|
|
end
|
|
end
|
|
EOS
|
|
end
|
|
end
|
|
|
|
def mattr_writer(*syms)
|
|
syms.each do |sym|
|
|
class_eval <<-EOS
|
|
if ! defined? @@#{sym.id2name}
|
|
@@#{sym.id2name} = nil
|
|
end
|
|
|
|
def self.#{sym.id2name}=(obj)
|
|
@@#{sym.id2name} = obj
|
|
end
|
|
|
|
def self.set_#{sym.id2name}(obj)
|
|
@@#{sym.id2name} = obj
|
|
end
|
|
|
|
def #{sym.id2name}=(obj)
|
|
@@#{sym} = obj
|
|
end
|
|
EOS
|
|
end
|
|
end
|
|
|
|
def mattr_accessor(*syms)
|
|
mattr_reader(*syms)
|
|
mattr_writer(*syms)
|
|
end
|
|
end |