graphql-client 0.0.17 → 0.0.18

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
  SHA1:
3
- metadata.gz: e9b2195df68c75f3e35df1743e261cda5bc934ef
4
- data.tar.gz: 6237bcd64f458d5e53ad51be00fabdc300c0c703
3
+ metadata.gz: ca22da5b31b85d955d2a209f48e5767c2b953848
4
+ data.tar.gz: 0150a203bb5fe856b6ea6c15bd941056f86002ff
5
5
  SHA512:
6
- metadata.gz: 94a2e1f990da224f3c5e7e6ead39e92311250b7b4253d13a47eb2c099419542164fad8d702beb665ab83da93d851ada9a5ea3b0daa58c902e713e34ff632cf6c
7
- data.tar.gz: 8c560ea11b8f3f46d97a3f4f3cacf53369baa969adc869e05c79cee2353d882ba14275e1b5e67a66a4d4abbc61fa9f5e609248ba70a2d5f3117b59d185226d4b
6
+ metadata.gz: c41fc037d158823686bf372addbc0b6592a87f2e9b470f0fb7302393cc89ad42f452bcb87bfdb142887437c42438e95d20bd236045088e11077cb48dba99ee38
7
+ data.tar.gz: 99f425fee8b8e70e876cc8d262befa594f2a2b182cad5b4b6b27a392139e1ecf84a5c6726f0719c96292afe17053ad16060be7ea73e8d414c931315cbddd0fab
@@ -38,8 +38,25 @@ module GraphQL
38
38
 
39
39
  attr_accessor :document_tracking_enabled
40
40
 
41
+ def self.load_schema(schema)
42
+ case schema
43
+ when GraphQL::Schema
44
+ schema
45
+ when Hash
46
+ GraphQL::Schema::Loader.load(schema)
47
+ when String
48
+ if schema.end_with?(".json")
49
+ load_schema(File.read(schema))
50
+ else
51
+ load_schema(JSON.parse(schema))
52
+ end
53
+ else
54
+ nil
55
+ end
56
+ end
57
+
41
58
  def initialize(schema: nil, fetch: nil)
42
- @schema = schema
59
+ @schema = self.class.load_schema(schema)
43
60
  @fetch = fetch
44
61
  @document = GraphQL::Language::Nodes::Document.new(definitions: [])
45
62
  @document_tracking_enabled = false
@@ -138,7 +155,7 @@ module GraphQL
138
155
  if @schema
139
156
  rules = GraphQL::StaticValidation::ALL_RULES - [GraphQL::StaticValidation::FragmentsAreUsed]
140
157
  validator = GraphQL::StaticValidation::Validator.new(schema: @schema, rules: rules)
141
- query = Query.new(@schema, document: document_dependencies)
158
+ query = GraphQL::Query.new(@schema, document: document_dependencies)
142
159
 
143
160
  errors = validator.validate(query)
144
161
  errors.fetch(:errors).each do |error|
@@ -222,19 +239,51 @@ module GraphQL
222
239
  end
223
240
  end
224
241
 
242
+ class Query
243
+ attr_reader :document, :operation_name, :variables, :context
244
+
245
+ def initialize(document, operation_name: nil, variables: {}, context: {})
246
+ @document = document
247
+ @operation_name = operation_name
248
+ @variables = variables
249
+ @context = context
250
+ end
251
+
252
+ def to_s
253
+ document.to_query_string
254
+ end
255
+
256
+ def operation
257
+ document.definitions.find { |node| node.name == operation_name }
258
+ end
259
+
260
+ def operation_type
261
+ operation.operation_type
262
+ end
263
+
264
+ def payload
265
+ {
266
+ document: document,
267
+ operation_name: operation_name,
268
+ operation_type: operation_type,
269
+ variables: variables
270
+ }
271
+ end
272
+ end
273
+
225
274
  def query(definition, variables: {}, context: {})
226
275
  unless fetch
227
276
  raise Error, "client network fetching not configured"
228
277
  end
229
278
 
230
- payload = {
231
- document: definition.document,
279
+ query = Query.new(definition.document,
232
280
  operation_name: definition.operation_name,
233
- operation_type: definition.definition_node.operation_type,
234
- variables: variables
235
- }
236
- result = ActiveSupport::Notifications.instrument("query.graphql", payload) do
237
- fetch.call(definition.document, definition.operation_name, variables, context)
281
+ variables: variables,
282
+ context: context
283
+ )
284
+
285
+ result = ActiveSupport::Notifications.instrument("query.graphql", query.payload) do
286
+ fetch.call(query)
238
287
  end
239
288
 
240
289
  data, errors, extensions = result.values_at("data", "errors", "extensions")
@@ -260,6 +309,13 @@ module GraphQL
260
309
  end
261
310
  end
262
311
 
312
+ IntrospectionDocument = GraphQL.parse(GraphQL::Introspection::INTROSPECTION_QUERY).deep_freeze
313
+ IntrospectionQuery = Query.new(IntrospectionDocument)
314
+
315
+ def fetch_schema
316
+ fetch.call(IntrospectionQuery)
317
+ end
318
+
263
319
  private
264
320
  module LazyName
265
321
  def name
@@ -0,0 +1,41 @@
1
+ require "json"
2
+ require "net/http"
3
+ require "uri"
4
+
5
+ module GraphQL
6
+ class Client
7
+ class HTTP
8
+ attr_reader :uri
9
+
10
+ # GraphQL::Client::HTTP.new("http://graphql-swapi.parseapp.com/")
11
+ def initialize(uri, &block)
12
+ @uri = ::URI.parse(uri)
13
+ class_eval(&block) if block_given?
14
+ end
15
+
16
+ def headers(query)
17
+ {}
18
+ end
19
+
20
+ def call(query)
21
+ http = Net::HTTP.new(uri.host, uri.port)
22
+ http.use_ssl = uri.scheme == "https"
23
+
24
+ request = Net::HTTP::Post.new(uri.request_uri)
25
+
26
+ request["Accept"] = "application/json"
27
+ request["Content-Type"] = "application/json"
28
+ headers(query).each { |name, value| request[name] = value }
29
+
30
+ body = {}
31
+ body["query"] = query.to_s
32
+ body["variables"] = JSON.generate(query.variables) if query.variables.any?
33
+ body["operationName"] = query.operation_name if query.operation_name
34
+ request.body = JSON.generate(body)
35
+
36
+ response = http.request(request)
37
+ JSON.parse(response.body)
38
+ end
39
+ end
40
+ end
41
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub
@@ -101,6 +101,7 @@ files:
101
101
  - LICENSE
102
102
  - lib/graphql/client.rb
103
103
  - lib/graphql/client/erubis.rb
104
+ - lib/graphql/client/http.rb
104
105
  - lib/graphql/client/log_subscriber.rb
105
106
  - lib/graphql/client/query_result.rb
106
107
  - lib/graphql/client/railtie.rb