diff options
author | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-05-25 09:42:28 -0300 |
---|---|---|
committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-06-18 23:54:13 -0300 |
commit | 8593964d9741704ff030e3bdf61e0ed64526ecec (patch) | |
tree | 6ef5368dd403dfb0d293dc8b8885f7d6d0c92a60 /activerecord | |
parent | 757f7231cccd2bcbfb83fba5cb203fb320f3e613 (diff) | |
download | rails-8593964d9741704ff030e3bdf61e0ed64526ecec.tar.gz rails-8593964d9741704ff030e3bdf61e0ed64526ecec.tar.bz2 rails-8593964d9741704ff030e3bdf61e0ed64526ecec.zip |
Refactor and use class_attribute
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 14 | ||||
-rw-r--r-- | activerecord/lib/active_record/store.rb | 8 |
2 files changed, 15 insertions, 7 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 633198c4bb..10bfe1945a 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,10 +1,16 @@ ## Rails 4.0.0 (unreleased) ## -* Added a `stored_attributes` hash which contains the attributes stored - using ActiveRecord::Store. This allows you to retrieve the list of - attributes you've defined. +* Added `stored_attributes` hash which contains the attributes stored using + ActiveRecord::Store. This allows you to retrieve the list of attributes + you've defined. - *Joost Baaij* + class User < ActiveRecord::Base + store :settings, accessors: [:color, :homepage] + end + + User.stored_attributes[:settings] # [:color, :homepage] + + *Joost Baaij & Carlos Antonio da Silva* * `composed_of` was removed. You'll have to write your own accessor and mutator methods if you'd like to use value objects to represent some diff --git a/activerecord/lib/active_record/store.rb b/activerecord/lib/active_record/store.rb index f5c7a9f034..d13491502e 100644 --- a/activerecord/lib/active_record/store.rb +++ b/activerecord/lib/active_record/store.rb @@ -1,5 +1,6 @@ require 'active_support/concern' require 'active_support/core_ext/hash/indifferent_access' +require 'active_support/core_ext/class/attribute' module ActiveRecord # Store gives you a thin wrapper around serialize for the purpose of storing hashes in a single column. @@ -42,7 +43,7 @@ module ActiveRecord extend ActiveSupport::Concern included do - config_attribute :stored_attributes + class_attribute :stored_attributes self.stored_attributes = {} end @@ -53,7 +54,8 @@ module ActiveRecord end def store_accessor(store_attribute, *keys) - keys.flatten.each do |key| + keys = keys.flatten + keys.each do |key| define_method("#{key}=") do |value| initialize_store_attribute(store_attribute) send(store_attribute)[key] = value @@ -66,7 +68,7 @@ module ActiveRecord end end - self.stored_attributes[store_attribute] = keys.flatten + self.stored_attributes[store_attribute] = keys end end |