Permalink
Browse files

remove deprecated define_attr_method from ActiveModel::AttributeMethods

  • Loading branch information...
1 parent cf0fd05 commit 9813c62330afa59e9f6f52eb5d07cf713b5b8968 @lest lest committed Dec 24, 2011
@@ -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')

0 comments on commit 9813c62

Please sign in to comment.