diff options
author | Arthur Neves <arthurnn@gmail.com> | 2014-04-03 10:39:05 -0400 |
---|---|---|
committer | Arthur Neves <arthurnn@gmail.com> | 2014-04-03 16:40:01 -0400 |
commit | 815c9deae8de557688e1c99aabe30454bcbe5970 (patch) | |
tree | df11e8eb468b6b22540d7127a698966257848bf2 /activerecord/lib/active_record/attribute_methods.rb | |
parent | ae110ce5d4de8cb3a22f826b0e824f333d2b2742 (diff) | |
download | rails-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.rb | 4 |
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 |