class GraphQL::FancyLoader::PaginationFilter

Public Class Methods

new(query, before: nil, after: nil, first: nil, last: nil) click to toggle source
# File lib/graphql/fancy_loader/pagination_filter.rb, line 4
def initialize(query, before: nil, after: nil, first: nil, last: nil)
  @query = query
  @before = before
  @after = after
  @first = first
  @last = last
end

Public Instance Methods

arel() click to toggle source
# File lib/graphql/fancy_loader/pagination_filter.rb, line 12
def arel
  [
    after_filter,
    before_filter,
    first_filter,
    last_filter
  ].compact.inject(&:and)
end

Private Instance Methods

after_filter() click to toggle source
# File lib/graphql/fancy_loader/pagination_filter.rb, line 31
def after_filter
  return unless @after

  row.gt(@after)
end
before_filter() click to toggle source
# File lib/graphql/fancy_loader/pagination_filter.rb, line 37
def before_filter
  return unless @before

  row.lt(@before)
end
count() click to toggle source
# File lib/graphql/fancy_loader/pagination_filter.rb, line 27
def count
  @count ||= @query[:total_count]
end
first_filter() click to toggle source
# File lib/graphql/fancy_loader/pagination_filter.rb, line 43
def first_filter
  return unless @first

  if @after
    row.lteq(@after + @first)
  else
    row.lteq(@first)
  end
end
last_filter() click to toggle source
# File lib/graphql/fancy_loader/pagination_filter.rb, line 53
def last_filter
  return unless @last

  if @before
    row.gteq(@before - @last)
  else
    row.gt(Arel::Nodes::Subtraction.new(count, @last))
  end
end
row() click to toggle source
# File lib/graphql/fancy_loader/pagination_filter.rb, line 23
def row
  @row ||= @query[:row_number]
end