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

and(scope=nil)
Alias for: limit_by
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?
is_ordered_by?(scope)
Also aliased as: ordered_by?
Alias for: is_limited_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
Also aliased as: and, order_by
limited_by?(scope)
Alias for: is_limited_by?
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
order_by(scope=nil)
Alias for: limit_by
ordered_by?(scope)
Alias for: is_ordered_by?
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