aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/lookup_context.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-03-12 11:50:45 +0100
committerJosé Valim <jose.valim@gmail.com>2010-03-12 11:50:45 +0100
commit839362fa07de3f7bdf1fc1a361ff456cd02efc4e (patch)
treea42bf1eeba5db1428d2ddabb2c1ec2650a907071 /actionpack/lib/action_view/lookup_context.rb
parentf10631e13d373523c1ede9c73a5d7eb2e0529a27 (diff)
downloadrails-839362fa07de3f7bdf1fc1a361ff456cd02efc4e.tar.gz
rails-839362fa07de3f7bdf1fc1a361ff456cd02efc4e.tar.bz2
rails-839362fa07de3f7bdf1fc1a361ff456cd02efc4e.zip
Make all AP tests pass for Ruby 1.9.1.
Diffstat (limited to 'actionpack/lib/action_view/lookup_context.rb')
-rw-r--r--actionpack/lib/action_view/lookup_context.rb19
1 files changed, 11 insertions, 8 deletions
diff --git a/actionpack/lib/action_view/lookup_context.rb b/actionpack/lib/action_view/lookup_context.rb
index 0bb73b590d..27ee8b23c9 100644
--- a/actionpack/lib/action_view/lookup_context.rb
+++ b/actionpack/lib/action_view/lookup_context.rb
@@ -13,18 +13,21 @@ module ActionView
mattr_accessor :registered_details
self.registered_details = []
- def self.register_detail(name, options = {})
+ def self.register_detail(name, options = {}, &block)
self.registered_details << name
- Setters.send :define_method, :"#{name}=" do |value|
- value = Array(value.presence || yield)
- value |= [nil] unless options[:allow_nil] == false
+ Setters.send :define_method, :"_#{name}_defaults", &block
+ Setters.module_eval <<-METHOD, __FILE__, __LINE__ + 1
+ def #{name}=(value)
+ value = Array(value.presence || _#{name}_defaults)
+ #{"value << nil unless value.include?(nil)" unless options[:allow_nil] == false}
- unless value == @details[name]
- @details_key, @details = nil, @details.merge(name => value)
- @details.freeze
+ unless value == @details[:#{name}]
+ @details_key, @details = nil, @details.merge(:#{name} => value)
+ @details.freeze
+ end
end
- end
+ METHOD
end
# Holds raw setters for the registered details.