Sha256: 97b3af55972c3ac98dfcd27fdaf089402fe14623885753085acba516bdaced6e

Contents?: true

Size: 1.63 KB

Versions: 3

Compression:

Stored size: 1.63 KB

Contents

module GraphQL
  module DefinitionHelpers
    module DefinedByConfig
      class DefinitionConfig
        # Wraps a field definition with a ConnectionField
        # - applies default fields
        # - wraps the resolve proc to make a connection
        #
        def connection(name, type = nil, desc = nil, property: nil, &block)
          # Wrap the given block to define the default args
          definition_block = -> (config) {
            argument :first, types.Int
            argument :after, types.String
            argument :last, types.Int
            argument :before, types.String
            argument :order, types.String
            self.instance_eval(&block)
          }
          connection_field = field(name, type, desc, property: property, &definition_block)
          # Wrap the defined resolve proc
          # TODO: make a public API on GraphQL::Field to expose this proc
          original_resolve = connection_field.instance_variable_get(:@resolve_proc)
          connection_resolve = -> (obj, args, ctx) {
            items = original_resolve.call(obj, args, ctx)
            connection_class = GraphQL::Relay::BaseConnection.connection_for_items(items)
            connection_class.new(items, args)
          }
          connection_field.resolve = connection_resolve
          fields[name.to_s] = connection_field
        end

        alias :return_field :field
        alias :return_fields :fields

        def global_id_field(field_name)
          name || raise("You must define the type's name before creating a GlobalIdField")
          field(name, field: GraphQL::Relay::GlobalIdField.new(name))
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
graphql-relay-0.3.2 lib/graphql/definition_helpers/defined_by_config/definition_config.rb
graphql-relay-0.3.1 lib/graphql/definition_helpers/defined_by_config/definition_config.rb
graphql-relay-0.3.0 lib/graphql/definition_helpers/defined_by_config/definition_config.rb