diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-06-22 07:51:11 -0700 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-06-22 07:51:11 -0700 |
commit | fb8cf55868d555b7f06215db5976c8aaf083d30b (patch) | |
tree | 0e7ac61acba88d4a0b6f137343a98eb465353ce8 /activemodel | |
parent | 9298d60af08767d427d28f1b0dbf76b2d54418b4 (diff) | |
parent | f984b8152fb497919b30c9c96e471e0736f3a6d2 (diff) | |
download | rails-fb8cf55868d555b7f06215db5976c8aaf083d30b.tar.gz rails-fb8cf55868d555b7f06215db5976c8aaf083d30b.tar.bz2 rails-fb8cf55868d555b7f06215db5976c8aaf083d30b.zip |
Merge pull request #6800 from mschneider/dynamic_finders_for_aliased_attributes
Dynamic finders for aliased attributes
Diffstat (limited to 'activemodel')
-rw-r--r-- | activemodel/lib/active_model/attribute_methods.rb | 4 | ||||
-rw-r--r-- | activemodel/test/cases/attribute_methods_test.rb | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/activemodel/lib/active_model/attribute_methods.rb b/activemodel/lib/active_model/attribute_methods.rb index a5c9026886..16fcf14009 100644 --- a/activemodel/lib/active_model/attribute_methods.rb +++ b/activemodel/lib/active_model/attribute_methods.rb @@ -61,7 +61,8 @@ module ActiveModel CALL_COMPILABLE_REGEXP = /\A[a-zA-Z_]\w*[!?]?\z/ included do - class_attribute :attribute_method_matchers, instance_writer: false + class_attribute :attribute_aliases, :attribute_method_matchers, instance_writer: false + self.attribute_aliases = {} self.attribute_method_matchers = [ClassMethods::AttributeMethodMatcher.new] end @@ -192,6 +193,7 @@ module ActiveModel # person.nickname # => "Bob" # person.name # => "Bob" def alias_attribute(new_name, old_name) + self.attribute_aliases = attribute_aliases.merge(new_name.to_s => old_name.to_s) attribute_method_matchers.each do |matcher| matcher_new = matcher.method_name(new_name).to_s matcher_old = matcher.method_name(old_name).to_s diff --git a/activemodel/test/cases/attribute_methods_test.rb b/activemodel/test/cases/attribute_methods_test.rb index e2f2cecc09..baaf842222 100644 --- a/activemodel/test/cases/attribute_methods_test.rb +++ b/activemodel/test/cases/attribute_methods_test.rb @@ -154,6 +154,15 @@ class AttributeMethodsTest < ActiveModel::TestCase assert_equal "value of foo", ModelWithAttributes.new.foo end + test '#alias_attribute generates attribute_aliases lookup hash' do + klass = Class.new(ModelWithAttributes) do + define_attribute_methods :foo + alias_attribute :bar, :foo + end + + assert_equal({ "bar" => "foo" }, klass.attribute_aliases) + end + test '#define_attribute_methods generates attribute methods with spaces in their names' do ModelWithAttributesWithSpaces.define_attribute_methods(:'foo bar') |