diff options
-rw-r--r-- | activesupport/lib/active_support/ordered_options.rb | 8 | ||||
-rw-r--r-- | activesupport/test/ordered_options_test.rb | 18 |
2 files changed, 26 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/ordered_options.rb b/activesupport/lib/active_support/ordered_options.rb index 3952ba41f2..5cd7fdadd7 100644 --- a/activesupport/lib/active_support/ordered_options.rb +++ b/activesupport/lib/active_support/ordered_options.rb @@ -15,6 +15,14 @@ class OrderedOptions < Array pair ? pair.last : nil end + def method_missing(name, *args) + if name.to_s =~ /(.*)=$/ + self[$1.to_sym] = args.first + else + self[name] + end + end + private def find_pair(key) self.each { |i| return i if i.first == key } diff --git a/activesupport/test/ordered_options_test.rb b/activesupport/test/ordered_options_test.rb index 83a3e2e561..0247331c6a 100644 --- a/activesupport/test/ordered_options_test.rb +++ b/activesupport/test/ordered_options_test.rb @@ -34,4 +34,22 @@ class OrderedOptionsTest < Test::Unit::TestCase assert_equal test[index].last, value end end + + def test_method_access + a = OrderedOptions.new + + assert_nil a.not_set + + a.allow_concurreny = true + assert_equal 1, a.size + assert a.allow_concurreny + + a.allow_concurreny = false + assert_equal 1, a.size + assert !a.allow_concurreny + + a.else_where = 56 + assert_equal 2, a.size + assert_equal 56, a.else_where + end end |