Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Allow column accessors to be created even if Kernel. or Object# metho…

…ds of the same name exist.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7729 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit b31aa639e7c8a1f510b8df5e7c57d23440a9a765 1 parent 12d740d
Tobias Lütke authored
Showing with 15 additions and 4 deletions.
  1. +15 −4 activerecord/lib/active_record/attribute_methods.rb
19 activerecord/lib/active_record/attribute_methods.rb
View
@@ -58,7 +58,7 @@ def generated_methods?
def define_attribute_methods
return if generated_methods?
columns_hash.each do |name, column|
- unless instance_method_already_defined?(name)
+ unless instance_method_already_implemented?(name)
if self.serialized_attributes[name]
define_read_method_for_serialized_attribute(name)
else
@@ -66,11 +66,11 @@ def define_attribute_methods
end
end
- unless instance_method_already_defined?("#{name}=")
+ unless instance_method_already_implemented?("#{name}=")
define_write_method(name.to_sym)
end
- unless instance_method_already_defined?("#{name}?")
+ unless instance_method_already_implemented?("#{name}?")
define_question_method(name)
end
end
@@ -81,7 +81,18 @@ def instance_method_already_defined?(method_name)
private_method_defined?(method_name) ||
protected_method_defined?(method_name)
end
-
+
+ def instance_method_already_implemented?(method_name)
+ if instance_method_already_defined?(method_name)
+ # method is defined but maybe its a simple library or kernel method
+ # which we could simply override:
+ @@_overrideable_method_names ||= Set.new(Object.instance_methods + Kernel.methods)
+ @@_overrideable_method_names.include?(method_name) ? false : true
+ else
+ false
+ end
+ end
+
alias :define_read_methods :define_attribute_methods
Please sign in to comment.
Something went wrong with that request. Please try again.