aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/attribute_methods.rb
diff options
context:
space:
mode:
authorArthur Neves <arthurnn@gmail.com>2014-04-03 10:39:05 -0400
committerArthur Neves <arthurnn@gmail.com>2014-04-03 16:40:01 -0400
commit815c9deae8de557688e1c99aabe30454bcbe5970 (patch)
treedf11e8eb468b6b22540d7127a698966257848bf2 /activerecord/lib/active_record/attribute_methods.rb
parentae110ce5d4de8cb3a22f826b0e824f333d2b2742 (diff)
downloadrails-815c9deae8de557688e1c99aabe30454bcbe5970.tar.gz
rails-815c9deae8de557688e1c99aabe30454bcbe5970.tar.bz2
rails-815c9deae8de557688e1c99aabe30454bcbe5970.zip
Block a few default Class methods as scope name.
Add tests to make sure scopes cannot be create with names such as: private, protected, public. Make sure enum values don't collide with those methods too.
Diffstat (limited to 'activerecord/lib/active_record/attribute_methods.rb')
-rw-r--r--activerecord/lib/active_record/attribute_methods.rb4
1 files changed, 3 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/attribute_methods.rb b/activerecord/lib/active_record/attribute_methods.rb
index ea48a13ea8..4b1733619a 100644
--- a/activerecord/lib/active_record/attribute_methods.rb
+++ b/activerecord/lib/active_record/attribute_methods.rb
@@ -29,6 +29,8 @@ module ActiveRecord
end
}
+ BLACKLISTED_CLASS_METHODS = %w(private public protected)
+
class AttributeMethodCache
def initialize
@module = Module.new
@@ -132,7 +134,7 @@ module ActiveRecord
# A class method is 'dangerous' if it is already (re)defined by Active Record, but
# not by any ancestors. (So 'puts' is not dangerous but 'new' is.)
def dangerous_class_method?(method_name)
- class_method_defined_within?(method_name, Base)
+ BLACKLISTED_CLASS_METHODS.include?(method_name.to_s) || class_method_defined_within?(method_name, Base)
end
def class_method_defined_within?(name, klass, superklass = klass.superclass) # :nodoc