diff options
author | Steve Klabnik <steve@steveklabnik.com> | 2012-06-15 11:04:43 +0200 |
---|---|---|
committer | Steve Klabnik <steve@steveklabnik.com> | 2012-06-18 15:38:51 -0400 |
commit | 44b313bc4e3762da64dde7894548f81c595147de (patch) | |
tree | bf2485313247567c13f0a4e29eb7ab06cafe2d85 /activerecord/test/models | |
parent | a8e22aeadcf53a30893fbfbf6d446d504bd87b67 (diff) | |
download | rails-44b313bc4e3762da64dde7894548f81c595147de.tar.gz rails-44b313bc4e3762da64dde7894548f81c595147de.tar.bz2 rails-44b313bc4e3762da64dde7894548f81c595147de.zip |
Deprecating composed_of in ActiveRecord
This feature adds a lot of complication to ActiveRecord for dubious
value. Let's talk about what it does currently:
class Customer < ActiveRecord::Base
composed_of :balance, :class_name => "Money", :mapping => %w(balance
amount)
end
Instead, you can do something like this:
def balance
@balance ||= Money.new(value, currency)
end
def balance=(balance)
self[:value] = balance.value
self[:currency] = balance.currency
@balance = balance
end
Since that's fairly easy code to write, and doesn't need anything
extra from the framework, if you use composed_of today, you'll
have to add accessors/mutators like that.
This feature will be removed in Rails 4.
Diffstat (limited to 'activerecord/test/models')
-rw-r--r-- | activerecord/test/models/customer.rb | 10 | ||||
-rw-r--r-- | activerecord/test/models/developer.rb | 4 |
2 files changed, 9 insertions, 5 deletions
diff --git a/activerecord/test/models/customer.rb b/activerecord/test/models/customer.rb index 777f6b5ba0..7f1687be5e 100644 --- a/activerecord/test/models/customer.rb +++ b/activerecord/test/models/customer.rb @@ -1,8 +1,10 @@ class Customer < ActiveRecord::Base - 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 :fullname, :mapping => %w(name to_s), :constructor => Proc.new { |name| Fullname.parse(name) }, :converter => :parse + ActiveSupport::Deprecation.silence do + 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 :fullname, :mapping => %w(name to_s), :constructor => Proc.new { |name| Fullname.parse(name) }, :converter => :parse + end end class Address diff --git a/activerecord/test/models/developer.rb b/activerecord/test/models/developer.rb index 4dc9fff9fd..7ff769f0bf 100644 --- a/activerecord/test/models/developer.rb +++ b/activerecord/test/models/developer.rb @@ -73,7 +73,9 @@ end DeveloperSalary = Struct.new(:amount) class DeveloperWithAggregate < ActiveRecord::Base self.table_name = 'developers' - composed_of :salary, :class_name => 'DeveloperSalary', :mapping => [%w(salary amount)] + ActiveSupport::Deprecation.silence do + composed_of :salary, :class_name => 'DeveloperSalary', :mapping => [%w(salary amount)] + end end class DeveloperWithBeforeDestroyRaise < ActiveRecord::Base |