graphql 2.2.9 → 2.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a6fd973959b00f0c33ea17df3e1a5b8a11f51b426c987ea9f202e925c721e14
4
- data.tar.gz: 89191c20a40c0084375f2f711d12989e349982c5f27a27390889dc291f016e4e
3
+ metadata.gz: 1bae060f1dcf449082e9e53be024476505d848448a13d592f31e67c11024caa4
4
+ data.tar.gz: ebc753b89b657c18771641869a4dffea9e79fe324a3f7e46c1a84304a6cc3375
5
5
  SHA512:
6
- metadata.gz: 6e862a85cf5f43693401461886d4f984703a6b221dc56c175f42a82fa81f0d9c77b7793247edab69eb85a2aa9930b7ba45ec3412a6642e263dc0e03ea5f58fe7
7
- data.tar.gz: 81d6a4de1214ed84ac55cf37ce76825de67e62a0728a950f5c20dbf3faa8e61420099dcfcc1841ea09f69f94b8a1c36e60a90799a33df64e2dd676a13b4cd1dd
6
+ metadata.gz: 0bd27d12cd1efd1c4166c20062e401fa524bcda469de51cbfe89fd21542fd3433a2f23628c21330c9e3d700a9627c683a6a1691887a06ef06105ede4c2241b26
7
+ data.tar.gz: abc65a9217ae76239458695a3ee47d3e2bf3d072e16d62b9df16a65a380110e4a9a207af17473ca0f14fcce5d907a2552866597dd53785c890979a37aa2c500b
@@ -512,7 +512,7 @@ module GraphQL
512
512
  # An operation-level query variable
513
513
  class VariableDefinition < AbstractNode
514
514
  scalar_methods :name, :type, :default_value
515
- children_methods false
515
+ children_methods(directives: Directive)
516
516
  # @!attribute default_value
517
517
  # @return [String, Integer, Float, Boolean, Array, NullValue] A Ruby value to use if no other value is provided
518
518
 
@@ -121,7 +121,17 @@ module GraphQL
121
121
  value
122
122
  end
123
123
 
124
- defs << Nodes::VariableDefinition.new(pos: loc, name: var_name, type: var_type, default_value: default_value, filename: @filename, source_string: @graphql_str)
124
+ directives = parse_directives
125
+
126
+ defs << Nodes::VariableDefinition.new(
127
+ pos: loc,
128
+ name: var_name,
129
+ type: var_type,
130
+ default_value: default_value,
131
+ directives: directives,
132
+ filename: @filename,
133
+ source_string: @graphql_str
134
+ )
125
135
  end
126
136
  expect_token(:RPAREN)
127
137
  defs
@@ -208,6 +208,10 @@ module GraphQL
208
208
  print_string(" = ")
209
209
  print_node(variable_definition.default_value)
210
210
  end
211
+ variable_definition.directives.each do |dir|
212
+ print_string(" ")
213
+ print_directive(dir)
214
+ end
211
215
  end
212
216
 
213
217
  def print_variable_identifier(variable_identifier)
@@ -69,7 +69,11 @@ module GraphQL
69
69
  end
70
70
  elsif child_class < GraphQL::Schema::Object
71
71
  # This is being included into an object type, make sure it's using `implements(...)`
72
- backtrace_line = caller(0, 10).find { |line| line.include?("schema/member/has_interfaces.rb") && line.include?("in `implements'")}
72
+ backtrace_line = caller_locations(0, 10).find do |location|
73
+ location.base_label == "implements" &&
74
+ location.path.end_with?("schema/member/has_interfaces.rb")
75
+ end
76
+
73
77
  if !backtrace_line
74
78
  raise "Attach interfaces using `implements(#{self})`, not `include(#{self})`"
75
79
  end
@@ -167,13 +167,20 @@ module GraphQL
167
167
  backtrace_class.include(GraphQL::Backtrace::Trace)
168
168
  trace_mode(:default_backtrace, backtrace_class)
169
169
  end
170
- trace_class_for(:default)
170
+ trace_class_for(:default, build: true)
171
171
  end
172
172
 
173
173
  # @return [Class] Return the trace class to use for this mode, looking one up on the superclass if this Schema doesn't have one defined.
174
- def trace_class_for(mode, build: true)
175
- own_trace_modes[mode] ||
176
- (superclass.respond_to?(:trace_class_for) ? superclass.trace_class_for(mode, build: build) : (build ? (own_trace_modes[mode] = build_trace_mode(mode)) : nil))
174
+ def trace_class_for(mode, build: false)
175
+ if (trace_class = own_trace_modes[mode])
176
+ trace_class
177
+ elsif superclass.respond_to?(:trace_class_for) && (trace_class = superclass.trace_class_for(mode, build: false))
178
+ trace_class
179
+ elsif build
180
+ own_trace_modes[mode] = build_trace_mode(mode)
181
+ else
182
+ nil
183
+ end
177
184
  end
178
185
 
179
186
  # Configure `trace_class` to be used whenever `context: { trace_mode: mode_name }` is requested.
@@ -211,20 +218,24 @@ module GraphQL
211
218
  include DefaultTraceClass
212
219
  end
213
220
  when :default_backtrace
214
- schema_base_class = trace_class_for(:default)
221
+ schema_base_class = trace_class_for(:default, build: true)
215
222
  Class.new(schema_base_class) do
216
223
  include(GraphQL::Backtrace::Trace)
217
224
  end
218
225
  else
219
226
  # First, see if the superclass has a custom-defined class for this.
220
227
  # Then, if it doesn't, use this class's default trace
221
- base_class = (superclass.respond_to?(:trace_class_for) && superclass.trace_class_for(mode, build: false)) || trace_class_for(:default)
228
+ base_class = (superclass.respond_to?(:trace_class_for) && superclass.trace_class_for(mode)) || trace_class_for(:default, build: true)
222
229
  # Prepare the default trace class if it hasn't been initialized yet
223
230
  base_class ||= (own_trace_modes[:default] = build_trace_mode(:default))
224
231
  mods = trace_modules_for(mode)
225
232
  if base_class < DefaultTraceClass
226
233
  mods = trace_modules_for(:default) + mods
227
234
  end
235
+ # Copy the existing default options into this mode's options
236
+ default_options = trace_options_for(:default)
237
+ add_trace_options_for(mode, default_options)
238
+
228
239
  Class.new(base_class) do
229
240
  mods.any? && include(*mods)
230
241
  end
@@ -1107,7 +1118,7 @@ module GraphQL
1107
1118
  end
1108
1119
 
1109
1120
  def tracer(new_tracer)
1110
- default_trace = trace_class_for(:default)
1121
+ default_trace = trace_class_for(:default, build: true)
1111
1122
  if default_trace.nil? || !(default_trace < GraphQL::Tracing::CallLegacyTracers)
1112
1123
  trace_with(GraphQL::Tracing::CallLegacyTracers)
1113
1124
  end
@@ -1133,20 +1144,23 @@ module GraphQL
1133
1144
  tc = own_trace_modes[mode] ||= build_trace_mode(mode)
1134
1145
  tc.include(trace_mod)
1135
1146
  own_trace_modules[mode] << trace_mod
1136
-
1147
+ add_trace_options_for(mode, options)
1137
1148
  if mode == :default
1138
1149
  # This module is being added as a default tracer. If any other mode classes
1139
1150
  # have already been created, but get their default behavior from a superclass,
1140
1151
  # Then mix this into this schema's subclass.
1141
1152
  # (But don't mix it into mode classes that aren't default-based.)
1142
1153
  own_trace_modes.each do |other_mode_name, other_mode_class|
1143
- if other_mode_class < DefaultTraceClass && !(other_mode_class < trace_mod)
1144
- other_mode_class.include(trace_mod)
1154
+ if other_mode_class < DefaultTraceClass
1155
+ # Don't add it back to the inheritance tree if it's already there
1156
+ if !(other_mode_class < trace_mod)
1157
+ other_mode_class.include(trace_mod)
1158
+ end
1159
+ # Add any options so they'll be available
1160
+ add_trace_options_for(other_mode_name, options)
1145
1161
  end
1146
1162
  end
1147
1163
  end
1148
- t_opts = trace_options_for(mode)
1149
- t_opts.merge!(options)
1150
1164
  end
1151
1165
  nil
1152
1166
  end
@@ -1156,10 +1170,14 @@ module GraphQL
1156
1170
  def trace_options_for(mode)
1157
1171
  @trace_options_for_mode ||= {}
1158
1172
  @trace_options_for_mode[mode] ||= begin
1173
+ # It may be time to create an options hash for a mode that wasn't registered yet.
1174
+ # Mix in the default options in that case.
1175
+ default_options = mode == :default ? EMPTY_HASH : trace_options_for(:default)
1176
+ # Make sure this returns a new object so that other hashes aren't modified later
1159
1177
  if superclass.respond_to?(:trace_options_for)
1160
- superclass.trace_options_for(mode).dup
1178
+ superclass.trace_options_for(mode).merge(default_options)
1161
1179
  else
1162
- {}
1180
+ default_options.dup
1163
1181
  end
1164
1182
  end
1165
1183
  end
@@ -1182,15 +1200,17 @@ module GraphQL
1182
1200
  raise ArgumentError, "Can't use `context[:backtrace]` with a custom default trace mode (`#{dm.inspect}`)"
1183
1201
  else
1184
1202
  own_trace_modes[:default_backtrace] ||= build_trace_mode(:default_backtrace)
1203
+ options_trace_mode = :default
1185
1204
  :default_backtrace
1186
1205
  end
1187
1206
  else
1188
1207
  default_trace_mode
1189
1208
  end
1190
1209
 
1191
- base_trace_options = trace_options_for(trace_mode)
1210
+ options_trace_mode ||= trace_mode
1211
+ base_trace_options = trace_options_for(options_trace_mode)
1192
1212
  trace_options = base_trace_options.merge(options)
1193
- trace_class_for_mode = trace_class_for(trace_mode) || raise(ArgumentError, "#{self} has no trace class for mode: #{trace_mode.inspect}")
1213
+ trace_class_for_mode = trace_class_for(trace_mode, build: true)
1194
1214
  trace_class_for_mode.new(**trace_options)
1195
1215
  end
1196
1216
 
@@ -1344,6 +1364,12 @@ module GraphQL
1344
1364
 
1345
1365
  private
1346
1366
 
1367
+ def add_trace_options_for(mode, new_options)
1368
+ t_opts = trace_options_for(mode)
1369
+ t_opts.merge!(new_options)
1370
+ nil
1371
+ end
1372
+
1347
1373
  # @param t [Module, Array<Module>]
1348
1374
  # @return [void]
1349
1375
  def add_type_and_traverse(t, root:)
@@ -5,6 +5,24 @@ module GraphQL
5
5
  module SentryTrace
6
6
  include PlatformTrace
7
7
 
8
+ # @param set_transaction_name [Boolean] If true, the GraphQL operation name will be used as the transaction name.
9
+ # This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing.
10
+ # It can also be specified per-query with `context[:set_sentry_transaction_name]`.
11
+ def initialize(set_transaction_name: false, **_rest)
12
+ @set_transaction_name = set_transaction_name
13
+ super
14
+ end
15
+
16
+ def execute_query(**data)
17
+ set_this_txn_name = data[:query].context[:set_sentry_transaction_name]
18
+ if set_this_txn_name == true || (set_this_txn_name.nil? && @set_transaction_name)
19
+ Sentry.configure_scope do |scope|
20
+ scope.set_transaction_name(transaction_name(data[:query]))
21
+ end
22
+ end
23
+ instrument_execution("graphql.execute", "execute_query", data) { super }
24
+ end
25
+
8
26
  {
9
27
  "lex" => "graphql.lex",
10
28
  "parse" => "graphql.parse",
@@ -12,7 +30,6 @@ module GraphQL
12
30
  "analyze_query" => "graphql.analyze",
13
31
  "analyze_multiplex" => "graphql.analyze_multiplex",
14
32
  "execute_multiplex" => "graphql.execute_multiplex",
15
- "execute_query" => "graphql.execute",
16
33
  "execute_query_lazy" => "graphql.execute"
17
34
  }.each do |trace_method, platform_key|
18
35
  module_eval <<-RUBY, __FILE__, __LINE__
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "2.2.9"
3
+ VERSION = "2.2.11"
4
4
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.9
4
+ version: 2.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-15 00:00:00.000000000 Z
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base64
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: benchmark-ips
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,44 +70,44 @@ dependencies:
56
70
  name: minitest
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: 5.9.0
75
+ version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
- version: 5.9.0
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: minitest-focus
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - "~>"
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
- version: '1.1'
89
+ version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - "~>"
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
- version: '1.1'
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: minitest-reporters
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - "~>"
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
- version: '1.0'
103
+ version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - "~>"
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
- version: '1.0'
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rake
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -617,7 +631,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
617
631
  - !ruby/object:Gem::Version
618
632
  version: '0'
619
633
  requirements: []
620
- rubygems_version: 3.5.5
634
+ rubygems_version: 3.5.3
621
635
  signing_key:
622
636
  specification_version: 4
623
637
  summary: A GraphQL language and runtime for Ruby