diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2009-11-17 22:47:23 +0000 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2009-11-17 22:47:23 +0000 |
commit | 5446d5cb05b50a9a3f317ded774be438e0eff909 (patch) | |
tree | 6b0b87efe3e95783763208215a3159fb63217a6d /activesupport/lib/active_support/core_ext/class/delegating_attributes.rb | |
parent | 9754debb9a72f9385950e5282f3642b995ab76d8 (diff) | |
parent | f8877d4b2a2a6f68770b376f0b1391a6295f62f2 (diff) | |
download | rails-5446d5cb05b50a9a3f317ded774be438e0eff909.tar.gz rails-5446d5cb05b50a9a3f317ded774be438e0eff909.tar.bz2 rails-5446d5cb05b50a9a3f317ded774be438e0eff909.zip |
Merge remote branch 'mainstream/master'
Conflicts:
activesupport/lib/active_support/core_ext/hash/conversions.rb
Diffstat (limited to 'activesupport/lib/active_support/core_ext/class/delegating_attributes.rb')
-rw-r--r-- | activesupport/lib/active_support/core_ext/class/delegating_attributes.rb | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/activesupport/lib/active_support/core_ext/class/delegating_attributes.rb b/activesupport/lib/active_support/core_ext/class/delegating_attributes.rb index 6c67df7f50..301c09fc73 100644 --- a/activesupport/lib/active_support/core_ext/class/delegating_attributes.rb +++ b/activesupport/lib/active_support/core_ext/class/delegating_attributes.rb @@ -1,39 +1,57 @@ require 'active_support/core_ext/object/blank' +require 'active_support/core_ext/object/duplicable' +require 'active_support/core_ext/array/extract_options' class Class def superclass_delegating_reader(*names) - class_name_to_stop_searching_on = superclass.name.blank? ? "Object" : superclass.name + class_to_stop_searching_on = superclass.name.blank? ? "Object" : superclass.name + options = names.extract_options! + names.each do |name| - class_eval(<<-EOS, __FILE__, __LINE__ + 1) - def self.#{name} # def self.only_reader - if defined?(@#{name}) # if defined?(@only_reader) - @#{name} # @only_reader - elsif superclass < #{class_name_to_stop_searching_on} && # elsif superclass < Object && - superclass.respond_to?(:#{name}) # superclass.respond_to?(:only_reader) - superclass.#{name} # superclass.only_reader - end # end - end # end - def #{name} # def only_reader - self.class.#{name} # self.class.only_reader - end # end - def self.#{name}? # def self.only_reader? - !!#{name} # !!only_reader - end # end - def #{name}? # def only_reader? - !!#{name} # !!only_reader - end # end + # def self.only_reader + # if defined?(@only_reader) + # @only_reader + # elsif superclass < Object && superclass.respond_to?(:only_reader) + # superclass.only_reader + # end + # end + class_eval <<-EOS, __FILE__, __LINE__ + 1 + def self.#{name} + if defined?(@#{name}) + @#{name} + elsif superclass < #{class_to_stop_searching_on} && superclass.respond_to?(:#{name}) + superclass.#{name} + end + end EOS + + unless options[:instance_reader] == false + class_eval <<-EOS, __FILE__, __LINE__ + 1 + def #{name} # def only_reader + self.class.#{name} # self.class.only_reader + end # end + def self.#{name}? # def self.only_reader? + !!#{name} # !!only_reader + end # end + def #{name}? # def only_reader? + !!#{name} # !!only_reader + end # end + EOS + end end end def superclass_delegating_writer(*names, &block) + options = names.extract_options! + names.each do |name| - class_eval(<<-EOS, __FILE__, __LINE__ + 1) + class_eval <<-EOS, __FILE__, __LINE__ + 1 def self.#{name}=(value) # def self.property=(value) @#{name} = value # @property = value end # end EOS - self.send("#{name}=", yield) if block_given? + + self.send(:"#{name}=", yield) if block_given? end end |