class GraphQL::Relay::ArrayConnection

Public Instance Methods

cursor_from_node(item) click to toggle source
# File lib/graphql/relay/array_connection.rb, line 4
def cursor_from_node(item)
  idx = starting_offset + sliced_nodes.find_index(item) + 1
  Base64.strict_encode64(idx.to_s)
end

Private Instance Methods

index_from_cursor(cursor) click to toggle source
# File lib/graphql/relay/array_connection.rb, line 32
def index_from_cursor(cursor)
  Base64.decode64(cursor).to_i
end
limit() click to toggle source
# File lib/graphql/relay/array_connection.rb, line 54
def limit
  @limit ||= begin
    limit_from_arguments = if first
      first
    else
      if previous_offset < 0
        previous_offset + (last ? last : 0)
      else
        last
      end
    end
    [limit_from_arguments, max_page_size].compact.min
  end
end
paged_nodes() click to toggle source

apply first / last limit results

# File lib/graphql/relay/array_connection.rb, line 12
def paged_nodes
  @paged_nodes = begin
    items = sliced_nodes

    if limit
      items.first(limit)
    else
      items
    end
  end
end
previous_offset() click to toggle source
# File lib/graphql/relay/array_connection.rb, line 44
def previous_offset
  @previous_offset ||= if after
    index_from_cursor(after)
  elsif before
    index_from_cursor(before) - (last ? last : 0) - 1
  else
    0
  end
end
sliced_nodes() click to toggle source

Apply cursors to edges

# File lib/graphql/relay/array_connection.rb, line 25
def sliced_nodes
  @sliced_nodes ||= begin
    items = object
    items[starting_offset..-1]
  end
end
starting_offset() click to toggle source
# File lib/graphql/relay/array_connection.rb, line 36
def starting_offset
  @starting_offset = if before
    [previous_offset, 0].max
  else
    previous_offset
  end
end