Skip to content

Commit

Permalink
Merge pull request #4168 from lest/remove-define-attr-method
Browse files Browse the repository at this point in the history
remove deprecated define_attr_method from ActiveModel::AttributeMethods
  • Loading branch information
jeremy committed Dec 24, 2011
2 parents 734ce00 + 9813c62 commit e3daaee
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 72 deletions.
41 changes: 0 additions & 41 deletions activemodel/lib/active_model/attribute_methods.rb
Expand Up @@ -66,47 +66,6 @@ module AttributeMethods
end

module ClassMethods
def define_attr_method(name, value=nil, deprecation_warning = true, &block) #:nodoc:
# This deprecation_warning param is for internal use so that we can silence
# the warning from Active Record, because we are implementing more specific
# messages there instead.
#
# It doesn't apply to the original_#{name} method as we want to warn if
# people are calling that regardless.
if deprecation_warning
ActiveSupport::Deprecation.warn("define_attr_method is deprecated and will be removed without replacement.")
end

sing = singleton_class
sing.class_eval <<-eorb, __FILE__, __LINE__ + 1
remove_possible_method :'original_#{name}'
remove_possible_method :'_original_#{name}'
alias_method :'_original_#{name}', :'#{name}'
define_method :'original_#{name}' do
ActiveSupport::Deprecation.warn(
"This method is generated by ActiveModel::AttributeMethods::ClassMethods#define_attr_method, " \
"which is deprecated and will be removed."
)
send(:'_original_#{name}')
end
eorb
if block_given?
sing.send :define_method, name, &block
else
# If we can compile the method name, do it. Otherwise use define_method.
# This is an important *optimization*, please don't change it. define_method
# has slower dispatch and consumes more memory.
if name =~ NAME_COMPILABLE_REGEXP
sing.class_eval <<-RUBY, __FILE__, __LINE__ + 1
def #{name}; #{value.nil? ? 'nil' : value.to_s.inspect}; end
RUBY
else
value = value.to_s if value
sing.send(:define_method, name) { value }
end
end
end

# Declares a method available for all attributes with the given prefix.
# Uses +method_missing+ and <tt>respond_to?</tt> to rewrite the method.
#
Expand Down
31 changes: 0 additions & 31 deletions activemodel/test/cases/attribute_methods_test.rb
Expand Up @@ -133,37 +133,6 @@ def foo
assert_equal "value of foo bar", ModelWithAttributesWithSpaces.new.send(:'foo bar')
end

test '#define_attr_method generates attribute method' do
assert_deprecated do
ModelWithAttributes.define_attr_method(:bar, 'bar')
end

assert_respond_to ModelWithAttributes, :bar

assert_deprecated do
assert_equal "original bar", ModelWithAttributes.original_bar
end

assert_equal "bar", ModelWithAttributes.bar
ActiveSupport::Deprecation.silence do
ModelWithAttributes.define_attr_method(:bar)
end
assert !ModelWithAttributes.bar
end

test '#define_attr_method generates attribute method with invalid identifier characters' do
ActiveSupport::Deprecation.silence do
ModelWithWeirdNamesAttributes.define_attr_method(:'c?d', 'c?d')
end

assert_respond_to ModelWithWeirdNamesAttributes, :'c?d'

ActiveSupport::Deprecation.silence do
assert_equal "original c?d", ModelWithWeirdNamesAttributes.send('original_c?d')
end
assert_equal "c?d", ModelWithWeirdNamesAttributes.send('c?d')
end

test '#alias_attribute works with attributes with spaces in their names' do
ModelWithAttributesWithSpaces.define_attribute_methods([:'foo bar'])
ModelWithAttributesWithSpaces.alias_attribute(:'foo_bar', :'foo bar')
Expand Down

0 comments on commit e3daaee

Please sign in to comment.