Sha256: e472f2d91d7e017175048caad4f401da7f2d4036634052aa383072ab819fed4c

Contents?: true

Size: 1.44 KB

Versions: 18

Compression:

Stored size: 1.44 KB

Contents

module GraphQL
  module Relay
    class ArrayConnection < BaseConnection
      # Just to encode data in the cursor, use something that won't conflict
      CURSOR_SEPARATOR = "---"

      def cursor_from_node(item)
        idx = sliced_nodes.find_index(item)
        cursor_parts = [(order || "none"), idx]
        Base64.strict_encode64(cursor_parts.join(CURSOR_SEPARATOR))
      end

      private

      # apply first / last limit results
      def paged_nodes
        @paged_nodes = begin
          items = sliced_nodes
          first && items = items.first(first)
          last && items.length > last && items.last(last)
          items
        end
      end

      # Apply cursors to edges
      def sliced_nodes
        @sliced_nodes ||= begin
          items = object
          if order
            # Remove possible direction marker:
            order_name = order.sub(/^-/, '')
            items = items.sort_by { |item| item.public_send(order_name) }
            order.start_with?("-") && items = items.reverse
          end
          after && items = items[(1 + index_from_cursor(after))..-1]
          before && items = items[0..(index_from_cursor(before) - 1)]
          items
        end
      end

      def index_from_cursor(cursor)
        decoded = Base64.decode64(cursor)
        order, index = decoded.split(CURSOR_SEPARATOR)
        index.to_i
      end
    end
    BaseConnection.register_connection_implementation(Array, ArrayConnection)
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
graphql-relay-0.6.2 lib/graphql/relay/array_connection.rb
graphql-relay-0.6.1 lib/graphql/relay/array_connection.rb
graphql-relay-0.6.0 lib/graphql/relay/array_connection.rb
graphql-relay-0.5.1 lib/graphql/relay/array_connection.rb
graphql-relay-0.5.0 lib/graphql/relay/array_connection.rb
graphql-relay-0.4.5 lib/graphql/relay/array_connection.rb
graphql-relay-0.4.4 lib/graphql/relay/array_connection.rb
graphql-relay-0.4.3 lib/graphql/relay/array_connection.rb
graphql-relay-0.4.2 lib/graphql/relay/array_connection.rb
graphql-relay-0.4.1 lib/graphql/relay/array_connection.rb
graphql-relay-0.4.0 lib/graphql/relay/array_connection.rb
graphql-relay-0.3.6 lib/graphql/relay/array_connection.rb
graphql-relay-0.3.5 lib/graphql/relay/array_connection.rb
graphql-relay-0.3.4 lib/graphql/relay/array_connection.rb
graphql-relay-0.3.3 lib/graphql/relay/array_connection.rb
graphql-relay-0.3.2 lib/graphql/relay/array_connection.rb
graphql-relay-0.3.1 lib/graphql/relay/array_connection.rb
graphql-relay-0.3.0 lib/graphql/relay/array_connection.rb