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