Method: GraphQL::Schema::InputObject#initialize
- Defined in:
- lib/graphql/schema/input_object.rb
#initialize(arguments = nil, ruby_kwargs: nil, context:, defaults_used:) ⇒ InputObject
Returns a new instance of InputObject.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/graphql/schema/input_object.rb', line 22 def initialize(arguments = nil, ruby_kwargs: nil, context:, defaults_used:) @context = context if ruby_kwargs @ruby_style_hash = ruby_kwargs @arguments = arguments else @arguments = self.class.arguments_class.new(arguments, context: context, defaults_used: defaults_used) # Symbolized, underscored hash: @ruby_style_hash = @arguments.to_kwargs end # Apply prepares, not great to have it duplicated here. maybe_lazies = [] self.class.arguments(context).each_value do |arg_defn| ruby_kwargs_key = arg_defn.keyword if @ruby_style_hash.key?(ruby_kwargs_key) loads = arg_defn.loads # Resolvers do this loading themselves; # With the interpreter, it's done during `coerce_arguments` if loads && !arg_defn.from_resolver? && !context.interpreter? value = @ruby_style_hash[ruby_kwargs_key] loaded_value = arg_defn.(self, value, context) maybe_lazies << context.schema.after_lazy(loaded_value) do |loaded_value| overwrite_argument(ruby_kwargs_key, loaded_value) end end # Weirdly, procs are applied during coercion, but not methods. # Probably because these methods require a `self`. if arg_defn.prepare.is_a?(Symbol) || context.nil? || !context.interpreter? prepared_value = arg_defn.prepare_value(self, @ruby_style_hash[ruby_kwargs_key]) overwrite_argument(ruby_kwargs_key, prepared_value) end end end @maybe_lazies = maybe_lazies end |