diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-04-18 23:35:22 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2011-04-18 23:35:22 +0100 |
commit | 019cd51a3f36ec7631bf1b63c069e62a3b5185d4 (patch) | |
tree | 6bdb235ccdd5389b381e129fdeef3582db71175e /activerecord/lib | |
parent | 6f84c73dc48538202766cff3d973a53d3c30848e (diff) | |
download | rails-019cd51a3f36ec7631bf1b63c069e62a3b5185d4.tar.gz rails-019cd51a3f36ec7631bf1b63c069e62a3b5185d4.tar.bz2 rails-019cd51a3f36ec7631bf1b63c069e62a3b5185d4.zip |
Bring back support for passing a callable object to the default_scope macro. You can also just use a block.
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/base.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 5b316c17be..9a01d793f9 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1196,6 +1196,15 @@ MSG # Article.new.published # => true # Article.create.published # => true # + # You can also use <tt>default_scope</tt> with a block, in order to have it lazily evaluated: + # + # class Article < ActiveRecord::Base + # default_scope { where(:published_at => Time.now - 1.week) } + # end + # + # (You can also pass any object which responds to <tt>call</tt> to the <tt>default_scope</tt> + # macro, and it will be called when building the default scope.) + # # If you need to do more complex things with a default scope, you can alternatively # define it as a class method: # @@ -1233,6 +1242,7 @@ end WARN end + scope = Proc.new if block_given? self.default_scopes = default_scopes.dup << scope end @@ -1245,6 +1255,8 @@ end default_scopes.inject(relation) do |default_scope, scope| if scope.is_a?(Hash) default_scope.apply_finder_options(scope) + elsif !scope.is_a?(Relation) && scope.respond_to?(:call) + default_scope.merge(scope.call) else default_scope.merge(scope) end |