diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-05-21 09:46:24 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-05-21 09:46:24 -0700 |
commit | 525839fdd8cc34d6d524f204528d5b6f36fe410c (patch) | |
tree | e15467aac15f54951e2b263379952d74f875fc47 /activerecord/test | |
parent | 9c3cd9cb8e2417ea0027f1c19cedfad32c62a0d2 (diff) | |
parent | fa5f037551dfb860bf6359acf901915856646fea (diff) | |
download | rails-525839fdd8cc34d6d524f204528d5b6f36fe410c.tar.gz rails-525839fdd8cc34d6d524f204528d5b6f36fe410c.tar.bz2 rails-525839fdd8cc34d6d524f204528d5b6f36fe410c.zip |
Merge pull request #6143 from senny/composed_of_converter_returns_nil
allow the :converter Proc form composed_of to return nil
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/aggregations_test.rb | 18 | ||||
-rw-r--r-- | activerecord/test/models/customer.rb | 5 |
2 files changed, 23 insertions, 0 deletions
diff --git a/activerecord/test/cases/aggregations_test.rb b/activerecord/test/cases/aggregations_test.rb index 3e0e6dce2c..5bd8f76ba2 100644 --- a/activerecord/test/cases/aggregations_test.rb +++ b/activerecord/test/cases/aggregations_test.rb @@ -109,6 +109,24 @@ class AggregationsTest < ActiveRecord::TestCase assert_nil customers(:david).gps_location end + def test_nil_return_from_converter_is_respected_when_allow_nil_is_true + customers(:david).non_blank_gps_location = "" + customers(:david).save + customers(:david).reload + assert_nil customers(:david).non_blank_gps_location + end + + def test_nil_return_from_converter_results_in_failure_when_allow_nil_is_false + assert_raises(NoMethodError) do + customers(:barney).gps_location = "" + end + end + + def test_do_not_run_the_converter_when_nil_was_set + customers(:david).non_blank_gps_location = nil + assert_nil Customer.gps_conversion_was_run + end + def test_custom_constructor assert_equal 'Barney GUMBLE', customers(:barney).fullname.to_s assert_kind_of Fullname, customers(:barney).fullname diff --git a/activerecord/test/models/customer.rb b/activerecord/test/models/customer.rb index 777f6b5ba0..807f25b687 100644 --- a/activerecord/test/models/customer.rb +++ b/activerecord/test/models/customer.rb @@ -1,7 +1,12 @@ class Customer < ActiveRecord::Base + + cattr_accessor :gps_conversion_was_run + composed_of :address, :mapping => [ %w(address_street street), %w(address_city city), %w(address_country country) ], :allow_nil => true composed_of :balance, :class_name => "Money", :mapping => %w(balance amount), :converter => Proc.new { |balance| balance.to_money } composed_of :gps_location, :allow_nil => true + composed_of :non_blank_gps_location, :class_name => "GpsLocation", :allow_nil => true, :mapping => %w(gps_location gps_location), + :converter => lambda { |gps| self.gps_conversion_was_run = true; gps.blank? ? nil : GpsLocation.new(gps)} composed_of :fullname, :mapping => %w(name to_s), :constructor => Proc.new { |name| Fullname.parse(name) }, :converter => :parse end |