提交 e3daaeea 编写于 作者: J Jeremy Kemper

Merge pull request #4168 from lest/remove-define-attr-method

remove deprecated define_attr_method from ActiveModel::AttributeMethods
......@@ -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.
#
......
......@@ -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')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册