Class: GraphQL::Argument

Inherits:
Object
  • Object
show all
Includes:
Define::InstanceDefinable
Defined in:
lib/graphql/argument.rb

Defined Under Namespace

Modules: DefaultPrepare

Constant Summary collapse

NO_DEFAULT_VALUE =
Object.new

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Define::InstanceDefinable

#define, #deprecated_define, #metadata, #redefine

Constructor Details

#initializeArgument

Returns a new instance of Argument.



20
21
22
# File 'lib/graphql/argument.rb', line 20

def initialize
  @prepare_proc = DefaultPrepare
end

Instance Attribute Details

#asObject



8
9
10
# File 'lib/graphql/argument.rb', line 8

def as
  @as
end

#ast_nodeObject



9
10
11
# File 'lib/graphql/argument.rb', line 9

def ast_node
  @ast_node
end

#default_valueObject



7
8
9
# File 'lib/graphql/argument.rb', line 7

def default_value
  @default_value
end

#deprecation_reasonObject



8
9
10
# File 'lib/graphql/argument.rb', line 8

def deprecation_reason
  @deprecation_reason
end

#descriptionObject



8
9
10
# File 'lib/graphql/argument.rb', line 8

def description
  @description
end

#method_accessObject



10
11
12
# File 'lib/graphql/argument.rb', line 10

def method_access
  @method_access
end

#nameString Also known as: graphql_name

Returns The name of this argument on its Field or InputObjectType.

Returns:



47
48
49
# File 'lib/graphql/argument.rb', line 47

def name
  @name
end

Class Method Details

.deep_stringify(val) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/graphql/argument.rb', line 116

def self.deep_stringify(val)
  case val
  when Array
    val.map { |v| deep_stringify(v) }
  when Hash
    new_val = {}
    val.each do |k, v|
      new_val[k.to_s] = deep_stringify(v)
    end
    new_val
  else
    val
  end
end

.from_dsl(name, type_or_argument = nil, description = nil, default_value: NO_DEFAULT_VALUE, as: nil, prepare: DefaultPrepare, **kwargs, &block) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/graphql/argument.rb', line 90

def self.from_dsl(name, type_or_argument = nil, description = nil, default_value: NO_DEFAULT_VALUE, as: nil, prepare: DefaultPrepare, **kwargs, &block)
  name_s = name.to_s

  # Move some positional args into keywords if they're present
  description && kwargs[:description] ||= description
  kwargs[:name] ||= name_s
  kwargs[:default_value] ||= default_value
  kwargs[:as] ||= as

  unless prepare == DefaultPrepare
    kwargs[:prepare] ||= prepare
  end

  if !type_or_argument.nil? && !type_or_argument.is_a?(GraphQL::Argument)
    # Maybe a string, proc or BaseType
    kwargs[:type] = type_or_argument
  end

  if type_or_argument.is_a?(GraphQL::Argument)
    type_or_argument.redefine(**kwargs, &block)
  else
    GraphQL::Argument.define(**kwargs, &block)
  end
end

Instance Method Details

#default_value?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/graphql/argument.rb', line 28

def default_value?
  !!@has_default_value
end

#expose_asString

Returns The name of this argument inside resolve functions.

Returns:

  • (String)

    The name of this argument inside resolve functions



62
63
64
# File 'lib/graphql/argument.rb', line 62

def expose_as
  @expose_as ||= (@as || @name).to_s
end

#initialize_copy(other) ⇒ Object



24
25
26
# File 'lib/graphql/argument.rb', line 24

def initialize_copy(other)
  @expose_as = nil
end

#keywordObject

Backport this to support legacy-style directives



67
68
69
# File 'lib/graphql/argument.rb', line 67

def keyword
  @keyword ||= GraphQL::Schema::Member::BuildType.underscore(expose_as).to_sym
end

#method_access?Boolean

Returns:

  • (Boolean)


32
33
34
35
# File 'lib/graphql/argument.rb', line 32

def method_access?
  # Treat unset as true -- only `false` should override
  @method_access != false
end

#prepare(value, ctx) ⇒ Object

Returns The prepared value for this argument or value itself if no prepare function exists.

Parameters:

Returns:

  • (Object)

    The prepared value for this argument or value itself if no prepare function exists.



74
75
76
# File 'lib/graphql/argument.rb', line 74

def prepare(value, ctx)
  @prepare_proc.call(value, ctx)
end

#prepare=(prepare_proc) ⇒ Object

Assign a prepare function to prepare this argument's value before resolve functions are called.

Parameters:

  • prepare_proc (#<call(value, ctx))

    ]



80
81
82
# File 'lib/graphql/argument.rb', line 80

def prepare=(prepare_proc)
  @prepare_proc = BackwardsCompatibility.wrap_arity(prepare_proc, from: 1, to: 2, name: "Argument#prepare(value, ctx)")
end

#typeGraphQL::BaseType

Returns the input type for this argument.

Returns:



57
58
59
# File 'lib/graphql/argument.rb', line 57

def type
  @clean_type ||= GraphQL::BaseType.resolve_related_type(@dirty_type)
end

#type=(new_input_type) ⇒ Object

Parameters:

  • new_input_type (GraphQL::BaseType, Proc)

    Assign a new input type for this argument (if it's a proc, it will be called after schema initialization)



51
52
53
54
# File 'lib/graphql/argument.rb', line 51

def type=(new_input_type)
  @clean_type = nil
  @dirty_type = new_input_type
end

#type_classObject



84
85
86
# File 'lib/graphql/argument.rb', line 84

def type_class
  [:type_class]
end