diff options
Diffstat (limited to 'activesupport/lib/active_support/core_ext/module/attribute_accessors.rb')
-rw-r--r-- | activesupport/lib/active_support/core_ext/module/attribute_accessors.rb | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb b/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb index 9402cb8534..62bc64d137 100644 --- a/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb +++ b/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb @@ -1,35 +1,25 @@ -# Extends the module object with module and instance accessors for class attributes, -# just like the native attr* accessors for instance attributes. -# -# module AppConfiguration -# mattr_accessor :google_api_key -# self.google_api_key = "123456789" -# -# mattr_accessor :paypal_url -# self.paypal_url = "www.sandbox.paypal.com" -# end -# -# AppConfiguration.google_api_key = "overriding the api key!" +require 'active_support/core_ext/array/extract_options' + class Module def mattr_reader(*syms) + syms.extract_options! syms.each do |sym| - next if sym.is_a?(Hash) class_eval(<<-EOS, __FILE__, __LINE__) unless defined? @@#{sym} # unless defined? @@pagination_options @@#{sym} = nil # @@pagination_options = nil end # end - # + def self.#{sym} # def self.pagination_options @@#{sym} # @@pagination_options end # end - # + def #{sym} # def pagination_options @@#{sym} # @@pagination_options end # end EOS end end - + def mattr_writer(*syms) options = syms.extract_options! syms.each do |sym| @@ -37,20 +27,34 @@ class Module unless defined? @@#{sym} # unless defined? @@pagination_options @@#{sym} = nil # @@pagination_options = nil end # end - # + def self.#{sym}=(obj) # def self.pagination_options=(obj) @@#{sym} = obj # @@pagination_options = obj end # end - # - #{" # - def #{sym}=(obj) # def pagination_options=(obj) - @@#{sym} = obj # @@pagination_options = obj - end # end - " unless options[:instance_writer] == false } # # instance writer above is generated unless options[:instance_writer] == false EOS + + unless options[:instance_writer] == false + class_eval(<<-EOS, __FILE__, __LINE__) + def #{sym}=(obj) # def pagination_options=(obj) + @@#{sym} = obj # @@pagination_options = obj + end # end + EOS + end end end - + + # Extends the module object with module and instance accessors for class attributes, + # just like the native attr* accessors for instance attributes. + # + # module AppConfiguration + # mattr_accessor :google_api_key + # self.google_api_key = "123456789" + # + # mattr_accessor :paypal_url + # self.paypal_url = "www.sandbox.paypal.com" + # end + # + # AppConfiguration.google_api_key = "overriding the api key!" def mattr_accessor(*syms) mattr_reader(*syms) mattr_writer(*syms) |