class GraphQL::Pagination::ActiveRecordRelationConnection
Customizes ‘RelationConnection` to work with `ActiveRecord::Relation`s.
Private Instance Methods
already_loaded?(relation)
click to toggle source
# File lib/graphql/pagination/active_record_relation_connection.rb, line 80 def already_loaded?(relation) relation.is_a?(Array) || relation.loaded? end
null_relation(relation)
click to toggle source
# File lib/graphql/pagination/active_record_relation_connection.rb, line 51 def null_relation(relation) if relation.respond_to?(:none) relation.none else # Rails 3 relation.where("1=2") end end
relation_count(relation)
click to toggle source
# File lib/graphql/pagination/active_record_relation_connection.rb, line 18 def relation_count(relation) int_or_hash = if already_loaded?(relation) relation.size elsif relation.respond_to?(:unscope) relation.unscope(:order).count(:all) else # Rails 3 relation.count end if int_or_hash.is_a?(Integer) int_or_hash else # Grouped relations return count-by-group hashes int_or_hash.length end end
relation_larger_than(relation, initial_offset, size)
click to toggle source
# File lib/graphql/pagination/active_record_relation_connection.rb, line 10 def relation_larger_than(relation, initial_offset, size) if already_loaded?(relation) (relation.size + initial_offset) > size else set_offset(sliced_nodes, initial_offset + size).exists? end end
relation_limit(relation)
click to toggle source
# File lib/graphql/pagination/active_record_relation_connection.rb, line 35 def relation_limit(relation) if relation.is_a?(Array) nil else relation.limit_value end end
relation_offset(relation)
click to toggle source
# File lib/graphql/pagination/active_record_relation_connection.rb, line 43 def relation_offset(relation) if relation.is_a?(Array) nil else relation.offset_value end end
set_limit(nodes, limit)
click to toggle source
Calls superclass method
GraphQL::Pagination::RelationConnection#set_limit
# File lib/graphql/pagination/active_record_relation_connection.rb, line 60 def set_limit(nodes, limit) if already_loaded?(nodes) nodes.take(limit) else super end end
set_offset(nodes, offset)
click to toggle source
Calls superclass method
GraphQL::Pagination::RelationConnection#set_offset
# File lib/graphql/pagination/active_record_relation_connection.rb, line 68 def set_offset(nodes, offset) if already_loaded?(nodes) # If the client sent a bogus cursor beyond the size of the relation, # it might get `nil` from `#[...]`, so return an empty array in that case nodes[offset..-1] || [] else super end end