Sha256: 9b1b13d3c4bc6bc7cd0de3cef0bf2487daff150424c9d21ad69d8d43552fcbad
Contents?: true
Size: 1.97 KB
Versions: 3
Compression:
Stored size: 1.97 KB
Contents
# frozen_string_literal: true module GraphQL class Schema class InputObject < GraphQL::Schema::Member extend GraphQL::Delegate def initialize(values, context:, defaults_used:) @arguments = self.class.arguments_class.new(values, context: context, defaults_used: defaults_used) @context = context end # A lot of methods work just like GraphQL::Arguments def_delegators :@arguments, :[], :key?, :to_h def_delegators :to_h, :keys, :values, :each, :any? class << self # @return [Class<GraphQL::Arguments>] attr_accessor :arguments_class def argument(*args) argument = GraphQL::Schema::Argument.new(*args) arg_name = argument.graphql_definition.name own_arguments[arg_name] = argument # Add a method access define_method(Member::BuildType.underscore(arg_name)) do @arguments.public_send(arg_name) end end # @return [Hash<String => GraphQL::Schema::Argument] Input fields on this input object, keyed by name. def arguments inherited_arguments = (superclass <= GraphQL::Schema::InputObject ? superclass.arguments : {}) # Local definitions override inherited ones inherited_arguments.merge(own_arguments) end def own_arguments @own_arguments ||= {} end def to_graphql type_defn = GraphQL::InputObjectType.new type_defn.name = graphql_name type_defn.description = description arguments.each do |name, arg| type_defn.arguments[arg.graphql_definition.name] = arg.graphql_definition end # Make a reference to a classic-style Arguments class self.arguments_class = GraphQL::Query::Arguments.construct_arguments_class(type_defn) # But use this InputObject class at runtime type_defn.arguments_class = self type_defn end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
graphql-1.8.0.pre6 | lib/graphql/schema/input_object.rb |
graphql-1.8.0.pre5 | lib/graphql/schema/input_object.rb |
graphql-1.8.0.pre4 | lib/graphql/schema/input_object.rb |