class GraphQL::Relay::RelationConnection
-
‘Sequel::Dataset`
- `ActiveRecord::Relation`
It works for:
A connection implementation to expose SQL collection objects.
def cursor_from_node(item)
def cursor_from_node(item) offset = starting_offset + paged_nodes_array.index(item) + 1 Base64.strict_encode64(offset.to_s) end
def has_next_page
def has_next_page !!(first && sliced_nodes.limit(limit + 1).count > limit) end
def has_previous_page
def has_previous_page !!(last && starting_offset > 0) end
def limit
- don't exceed max_page_size
- find a value from the query
Limit to apply to this query:
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
def offset_from_cursor(cursor)
def offset_from_cursor(cursor) Base64.decode64(cursor).to_i end
def paged_nodes
def paged_nodes @paged_nodes ||= sliced_nodes.limit(limit) end
def paged_nodes_array
def paged_nodes_array @paged_nodes_array ||= paged_nodes.to_a end
def previous_offset
Offset from the previous selection, if there was one
def previous_offset @previous_offset ||= if after offset_from_cursor(after) elsif before prev_page_size = [max_page_size, last].compact.min || 0 offset_from_cursor(before) - prev_page_size - 1 else 0 end end
def sliced_nodes
def sliced_nodes @sliced_nodes ||= nodes.offset(starting_offset) end
def starting_offset
def starting_offset @starting_offset ||= begin if before [previous_offset, 0].max else previous_offset end end end