1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

r3216@asus: jeremy | 2005-11-20 03:05:20 -0800

simplify cattr_ and mattr_accessor


git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3128 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jeremy Kemper 2005-11-21 07:29:12 +00:00
parent a821c3dd93
commit 3148216cbb
2 changed files with 29 additions and 55 deletions

View file

@ -2,48 +2,35 @@
# just like the native attr* accessors for instance attributes. # just like the native attr* accessors for instance attributes.
class Class # :nodoc: class Class # :nodoc:
def cattr_reader(*syms) def cattr_reader(*syms)
syms.select { |sym| sym.respond_to?(:id2name) }.each do |sym| syms.flatten.each do |sym|
class_eval <<-EOS class_eval(<<-EOS, __FILE__, __LINE__)
if ! defined? @@#{sym.id2name} unless defined? @@#{sym}
@@#{sym.id2name} = nil @@#{sym} = nil
end end
def self.#{sym.id2name} def self.#{sym}
@@#{sym} @@#{sym}
end end
def #{sym.id2name} def #{sym}
@@#{sym} @@#{sym}
end 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 EOS
end end
end end
def cattr_writer(*syms) def cattr_writer(*syms)
syms.select { |sym| sym.respond_to?(:id2name) }.each do |sym| syms.flatten.each do |sym|
class_eval <<-EOS class_eval(<<-EOS, __FILE__, __LINE__)
if ! defined? @@#{sym.id2name} unless defined? @@#{sym}
@@#{sym.id2name} = nil @@#{sym} = nil
end end
def self.#{sym.id2name}=(obj) def self.#{sym}=(obj)
@@#{sym.id2name} = obj @@#{sym} = obj
end end
def self.set_#{sym.id2name}(obj) def #{sym}=(obj)
@@#{sym.id2name} = obj
end
def #{sym.id2name}=(obj)
@@#{sym} = obj @@#{sym} = obj
end end
EOS EOS

View file

@ -3,47 +3,34 @@
class Module # :nodoc: class Module # :nodoc:
def mattr_reader(*syms) def mattr_reader(*syms)
syms.each do |sym| syms.each do |sym|
class_eval <<-EOS class_eval(<<-EOS, __FILE__, __LINE__)
if ! defined? @@#{sym.id2name} unless defined? @@#{sym}
@@#{sym.id2name} = nil @@#{sym} = nil
end end
def self.#{sym.id2name} def self.#{sym}
@@#{sym} @@#{sym}
end end
def #{sym.id2name} def #{sym}
@@#{sym} @@#{sym}
end 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 EOS
end end
end end
def mattr_writer(*syms) def mattr_writer(*syms)
syms.each do |sym| syms.each do |sym|
class_eval <<-EOS class_eval(<<-EOS, __FILE__, __LINE__)
if ! defined? @@#{sym.id2name} unless defined? @@#{sym}
@@#{sym.id2name} = nil @@#{sym} = nil
end end
def self.#{sym.id2name}=(obj) def self.#{sym}=(obj)
@@#{sym.id2name} = obj @@#{sym} = obj
end end
def self.set_#{sym.id2name}(obj) def #{sym}=(obj)
@@#{sym.id2name} = obj
end
def #{sym.id2name}=(obj)
@@#{sym} = obj @@#{sym} = obj
end end
EOS EOS