class GraphQL::FancyConnection

Public Class Methods

new(loader, args, key, **super_args) click to toggle source
Calls superclass method
# File lib/graphql/fancy_connection.rb, line 3
def initialize(loader, args, key, **super_args)
  @loader = loader
  @args = args
  @key = key
  @then = nil

  super(nil, **super_args)
end

Public Instance Methods

cursor_for(item) click to toggle source
# File lib/graphql/fancy_connection.rb, line 72
def cursor_for(item)
  item && encode(item.attributes['row_number'].to_s)
end
edges() click to toggle source
# File lib/graphql/fancy_connection.rb, line 21
def edges
  @edges ||= nodes.then do |nodes|
    nodes.map { |n| @edge_class.new(n, self) }
  end
end
end_cursor() click to toggle source
# File lib/graphql/fancy_connection.rb, line 66
def end_cursor
  base_nodes.then do |results|
    cursor_for(results.last)
  end
end
has_next_page() click to toggle source

@return [Promise<Boolean>]

# File lib/graphql/fancy_connection.rb, line 39
def has_next_page # rubocop:disable Naming/PredicateName
  base_nodes.then do |results|
    if results.last
      results.last.attributes['row_number'] < results.last.attributes['total_count']
    else
      false
    end
  end
end
has_previous_page() click to toggle source

@return [Promise<Boolean>]

# File lib/graphql/fancy_connection.rb, line 50
def has_previous_page # rubocop:disable Naming/PredicateName
  base_nodes.then do |results|
    if results.first
      results.first.attributes['row_number'] > 1
    else
      false
    end
  end
end
nodes() click to toggle source

@return [Promise<Array<ApplicationRecord>>]

# File lib/graphql/fancy_connection.rb, line 13
def nodes
  if @then
    base_nodes.then(@then)
  else
    base_nodes
  end
end
start_cursor() click to toggle source
# File lib/graphql/fancy_connection.rb, line 60
def start_cursor
  base_nodes.then do |results|
    cursor_for(results.first)
  end
end
then(&block) click to toggle source
# File lib/graphql/fancy_connection.rb, line 76
def then(&block)
  @then = block
  self
end
total_count() click to toggle source

@return [Promise<Integer>]

# File lib/graphql/fancy_connection.rb, line 28
def total_count
  base_nodes.then do |results|
    if results.first
      results.first.attributes['total_count']
    else
      0
    end
  end
end

Private Instance Methods

after_offset() click to toggle source
# File lib/graphql/fancy_connection.rb, line 87
def after_offset
  @after_offset ||= after && decode(after).to_i
end
base_nodes() click to toggle source
# File lib/graphql/fancy_connection.rb, line 83
def base_nodes
  @base_nodes ||= @loader.for(**loader_args).load(@key)
end
before_offset() click to toggle source
# File lib/graphql/fancy_connection.rb, line 91
def before_offset
  @before_offset ||= before && decode(before).to_i
end
loader_args() click to toggle source
# File lib/graphql/fancy_connection.rb, line 95
def loader_args
  @args.merge(
    before: before_offset,
    after: after_offset,
    first: first,
    last: last,
    context: context
  )
end