class RecordCollection
Attributes
base_scope[RW]
scopes[RW]
Public Class Methods
new(base_scope)
click to toggle source
# File lib/record-collection.rb, line 4 def initialize(base_scope) self.base_scope = coerce_to_relation(base_scope) self.scopes = Set.new end
Public Instance Methods
coerce_to_relation(base_scope)
click to toggle source
# File lib/record-collection.rb, line 9 def coerce_to_relation(base_scope) # rails 3 if base_scope.respond_to?(:scoped) base_scope.scoped else # rails 4 base_scope.all end end
is_limited_by?(scope)
click to toggle source
# File lib/record-collection.rb, line 29 def is_limited_by?(scope) # because ActiveRecord::Relations do not implement hashing correctly, we must do case by case equality base_scope == scope || scopes.any? { |s| s == scope } end
Also aliased as: limited_by?, is_ordered_by?
limit_by(scope=nil) { |base_scope| ... }
click to toggle source
# File lib/record-collection.rb, line 19 def limit_by(scope=nil) raise ArgumentError, "A relation or block is required" if scope.nil? && !block_given? scope ||= yield(base_scope) scopes.add(scope) self end
method_missing(name, *args, &block)
click to toggle source
# File lib/record-collection.rb, line 43 def method_missing(name, *args, &block) final_scope.__send__(name, *args, &block) end
respond_to?(name)
click to toggle source
Calls superclass method
# File lib/record-collection.rb, line 39 def respond_to?(name) super || final_scope.respond_to?(name) end
Private Instance Methods
final_scope()
click to toggle source
# File lib/record-collection.rb, line 51 def final_scope scopes.reduce(base_scope) { |scope, base| base.merge(scope) } end