graphql 1.9.8 → 1.9.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b6424d74c67296edb56f74eb9214313dd9556f1c1ba5e5797c58099afea8958
4
- data.tar.gz: ae10d626a73f8dc873f2b9b2678bfc3ffc1cd80301ddd15a255e4447c728d285
3
+ metadata.gz: 0d591b26a453b53597b0fdbd363cf87ff174835672d1922499ec24bf0a219a9a
4
+ data.tar.gz: aad2c15974f1f58cf03fbf620513b4f2de6e8ae26f615937523089e8a2a4b52d
5
5
  SHA512:
6
- metadata.gz: 51b253d7218b850a4189affeee6e298d1367e8781289ca2f828ab6bbd70d6a1de205f29531ff697d70807d8107f62c3b9cbfc6325f7847116836ab4f500206ce
7
- data.tar.gz: f9a81a828f9835ce1222021d0ae3f251c576eba5845df2034e8330456765d2920a28850fa24b7f58cbc7d3e1442bd405995cc3a4bf8d7e17277a73ba8fdb8ab6
6
+ metadata.gz: d9058ce614080bcaa58692aef2287c5b67d63f8ed6fb27462976343801dc9e573cbc9a0e7e54dc545698d442ac66b832aa8ddda1f79dd30703aaed66fddf7564
7
+ data.tar.gz: b42bfa78dd4c0e71a02efbfdc1ee26e8fe00e2db43849728a2775ff1db2e062bd4fb17d95808c692a82b3c73982a368610e163abb3b7dc938913ff622d79fc30
@@ -73,7 +73,11 @@ module GraphQL
73
73
  end
74
74
 
75
75
  def to_query_string(printer: GraphQL::Language::Printer.new)
76
- printer.print(self)
76
+ if printer.is_a?(GraphQL::Language::Printer)
77
+ @query_string ||= printer.print(self)
78
+ else
79
+ printer.print(self)
80
+ end
77
81
  end
78
82
 
79
83
  # This creates a copy of `self`, with `new_options` applied.
@@ -83,6 +87,9 @@ module GraphQL
83
87
  copied_self = dup
84
88
  new_options.each do |key, value|
85
89
  copied_self.instance_variable_set(:"@#{key}", value)
90
+ if copied_self.instance_variable_defined?(:@query_string)
91
+ copied_self.instance_variable_set(:@query_string, nil)
92
+ end
86
93
  end
87
94
  copied_self
88
95
  end
@@ -85,7 +85,6 @@ module GraphQL
85
85
  extend GraphQL::Schema::FindInheritedValue
86
86
 
87
87
  accepts_definitions \
88
- :query, :mutation, :subscription,
89
88
  :query_execution_strategy, :mutation_execution_strategy, :subscription_execution_strategy,
90
89
  :max_depth, :max_complexity, :default_max_page_size,
91
90
  :orphan_types, :resolve_type, :type_error, :parse_error,
@@ -94,6 +93,10 @@ module GraphQL
94
93
  :object_from_id, :id_from_object,
95
94
  :default_mask,
96
95
  :cursor_encoder,
96
+ # If these are given as classes, normalize them. Accept `nil` when building from string.
97
+ query: ->(schema, t) { schema.query = t.respond_to?(:graphql_definition) ? t.graphql_definition : t },
98
+ mutation: ->(schema, t) { schema.mutation = t.respond_to?(:graphql_definition) ? t.graphql_definition : t },
99
+ subscription: ->(schema, t) { schema.subscription = t.respond_to?(:graphql_definition) ? t.graphql_definition : t },
97
100
  disable_introspection_entry_points: ->(schema) { schema.disable_introspection_entry_points = true },
98
101
  directives: ->(schema, directives) { schema.directives = directives.reduce({}) { |m, d| m[d.name] = d; m } },
99
102
  directive: ->(schema, directive) { schema.directives[directive.graphql_name] = directive },
@@ -21,6 +21,7 @@ module GraphQL
21
21
  def trace(key, data)
22
22
  case key
23
23
  when "lex", "parse", "validate", "analyze_query", "analyze_multiplex", "execute_query", "execute_query_lazy", "execute_multiplex"
24
+ data.fetch(:query).context.namespace(self.class)[:platform_key_cache] = {} if key == "execute_query"
24
25
  platform_key = @platform_keys.fetch(key)
25
26
  platform_trace(platform_key, key, data) do
26
27
  yield
@@ -32,9 +33,11 @@ module GraphQL
32
33
  trace_field = true # implemented with instrumenter
33
34
  else
34
35
  field = data[:field]
35
- owner = data[:owner]
36
- # Lots of duplicated work here, can this be done ahead of time?
37
- platform_key = platform_field_key(owner, field)
36
+ platform_key_cache = data.fetch(:query).context.namespace(self.class).fetch(:platform_key_cache)
37
+ platform_key = platform_key_cache.fetch(field) do
38
+ platform_key_cache[field] = platform_field_key(data[:owner], field)
39
+ end
40
+
38
41
  return_type = field.type.unwrap
39
42
  # Handle LateBoundTypes, which don't have `#kind`
40
43
  trace_field = if return_type.respond_to?(:kind) && (return_type.kind.scalar? || return_type.kind.enum?)
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "1.9.8"
3
+ VERSION = "1.9.9"
4
4
  end
@@ -4,13 +4,13 @@ require "spec_helper"
4
4
  describe GraphQL::Schema do
5
5
  describe "inheritance" do
6
6
  class DummyFeature1 < GraphQL::Schema::Directive::Feature
7
-
7
+
8
8
  end
9
9
 
10
10
  class DummyFeature2 < GraphQL::Schema::Directive::Feature
11
11
 
12
12
  end
13
-
13
+
14
14
  let(:base_schema) do
15
15
  Class.new(GraphQL::Schema) do
16
16
  query GraphQL::Schema::Object
@@ -132,4 +132,38 @@ describe GraphQL::Schema do
132
132
  assert_equal 3, schema.middleware.steps.size
133
133
  end
134
134
  end
135
+
136
+ describe "when mixing define and class-based" do
137
+ module MixedSchema
138
+ class Query < GraphQL::Schema::Object
139
+ field :int, Int, null: false
140
+ end
141
+
142
+ class Mutation < GraphQL::Schema::Object
143
+ field :int, Int, null: false
144
+ end
145
+
146
+ class Subscription < GraphQL::Schema::Object
147
+ field :int, Int, null: false
148
+ end
149
+
150
+ Schema = GraphQL::Schema.define do
151
+ query(Query)
152
+ mutation(Mutation)
153
+ subscription(Subscription)
154
+ end
155
+ end
156
+
157
+ it "includes root types properly" do
158
+ res = MixedSchema::Schema.as_json
159
+ assert_equal "Query", res["data"]["__schema"]["queryType"]["name"]
160
+ assert_includes res["data"]["__schema"]["types"].map { |t| t["name"] }, "Query"
161
+
162
+ assert_equal "Mutation", res["data"]["__schema"]["mutationType"]["name"]
163
+ assert_includes res["data"]["__schema"]["types"].map { |t| t["name"] }, "Mutation"
164
+
165
+ assert_equal "Subscription", res["data"]["__schema"]["subscriptionType"]["name"]
166
+ assert_includes res["data"]["__schema"]["types"].map { |t| t["name"] }, "Subscription"
167
+ end
168
+ end
135
169
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.8
4
+ version: 1.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-24 00:00:00.000000000 Z
11
+ date: 2019-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips