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