graphql 1.5.12 → 1.5.13

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
  SHA1:
3
- metadata.gz: 3e204a82f5db905b17eeaa50f14e7b2af0ddff12
4
- data.tar.gz: 6c7029686c56fb6ad2ef90084381131f1f06a68c
3
+ metadata.gz: 68f3728c4d164599a943599551db20d7add67e5d
4
+ data.tar.gz: 86b930739f630566edbaeb9b024e6461f5a30627
5
5
  SHA512:
6
- metadata.gz: d4de6aa1e85f4e2b51ae00866c00fd3ef0b201059ccb6a28a74a97cfe1528b1739086585db4488911893a781b8a0857fd318175e95fd135e91e5cb091cfc55d6
7
- data.tar.gz: 59ef188909e4f03b6793cf00c935e05bc4fd45f91e1910b068529a4661e7261d778c7e3d78b5b55cd563cc5e23fe5be8cb1a989a56180dff4df48380c3aea286
6
+ metadata.gz: bdaf08df4286ec916b87839a354eb7d21bf822d49462a659a5e634210065baac1a5553a3dec3003b6c24bd5c8f4ab894f0796603883d4f87d7024ddffef87ece
7
+ data.tar.gz: b64f7d422547af515ee634f885dd6f5fc990478ef84c65e5bd244e8b889fb206ae7aa4843309723a8ab2a9baf47cf01a30226b4c6bb6c2b952d298b0cb120942
@@ -11,8 +11,8 @@ module GraphQL
11
11
  # giving users access to the original resolve function in earlier instrumentation.
12
12
  def self.instrument(type, field)
13
13
  if field.mutation
14
- new_resolve = Mutation::Resolve.new(field.mutation, field.resolve_proc)
15
- new_lazy_resolve = Mutation::Resolve.new(field.mutation, field.lazy_resolve_proc)
14
+ new_resolve = Mutation::Resolve.new(field.mutation, field.resolve_proc, eager: true)
15
+ new_lazy_resolve = Mutation::Resolve.new(field.mutation, field.lazy_resolve_proc, eager: false)
16
16
  field.redefine(resolve: new_resolve, lazy_resolve: new_lazy_resolve)
17
17
  else
18
18
  field
@@ -7,35 +7,40 @@ module GraphQL
7
7
  # Also, pass the `clientMutationId` to that result object.
8
8
  # @api private
9
9
  class Resolve
10
- def initialize(mutation, resolve)
10
+ def initialize(mutation, resolve, eager:)
11
11
  @mutation = mutation
12
12
  @resolve = resolve
13
13
  @wrap_result = mutation.has_generated_return_type?
14
+ @eager = eager
14
15
  end
15
16
 
16
17
  def call(obj, args, ctx)
18
+ error_raised = false
17
19
  begin
18
20
  mutation_result = @resolve.call(obj, args[:input], ctx)
19
21
  rescue GraphQL::ExecutionError => err
20
22
  mutation_result = err
23
+ error_raised = true
21
24
  end
22
25
 
23
26
  if ctx.schema.lazy?(mutation_result)
24
27
  mutation_result
25
28
  else
26
- build_result(mutation_result, args, ctx)
29
+ build_result(mutation_result, args, ctx, raised: error_raised)
27
30
  end
28
31
  end
29
32
 
30
33
  private
31
34
 
32
- def build_result(mutation_result, args, ctx)
35
+ def build_result(mutation_result, args, ctx, raised: false)
33
36
  if mutation_result.is_a?(GraphQL::ExecutionError)
34
37
  ctx.add_error(mutation_result)
35
38
  mutation_result = nil
36
39
  end
37
40
 
38
- if @wrap_result
41
+ if @eager && raised
42
+ nil
43
+ elsif @wrap_result
39
44
  if mutation_result && !mutation_result.is_a?(Hash)
40
45
  raise StandardError, "Expected `#{mutation_result}` to be a Hash."\
41
46
  " Return a hash when using `return_field` or specify a custom `return_type`."
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "1.5.12"
3
+ VERSION = "1.5.13"
4
4
  end
@@ -322,5 +322,24 @@ describe GraphQL::Relay::Mutation do
322
322
 
323
323
  assert_equal(expected, result)
324
324
  end
325
+
326
+ it "supports raising an error in the resolve function" do
327
+ result = star_wars_query(query_string, "clientMutationId" => "5678", "shipName" => "Leviathan")
328
+
329
+ expected = {
330
+ "data" => {
331
+ "introduceShip" => nil,
332
+ },
333
+ "errors" => [
334
+ {
335
+ "message" => "🔥",
336
+ "locations" => [ { "line" => 3 , "column" => 7}],
337
+ "path" => ["introduceShip"]
338
+ }
339
+ ]
340
+ }
341
+
342
+ assert_equal(expected, result)
343
+ end
325
344
  end
326
345
  end
@@ -209,6 +209,8 @@ module StarWars
209
209
  faction_id = args["factionId"]
210
210
  if args["shipName"] == 'Millennium Falcon'
211
211
  GraphQL::ExecutionError.new("Sorry, Millennium Falcon ship is reserved")
212
+ elsif args["shipName"] == 'Leviathan'
213
+ raise GraphQL::ExecutionError.new("🔥")
212
214
  elsif args["shipName"] == "Ebon Hawk"
213
215
  LazyWrapper.new { raise GraphQL::ExecutionError.new("💥")}
214
216
  else
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.5.12
4
+ version: 1.5.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-09 00:00:00.000000000 Z
11
+ date: 2017-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -642,7 +642,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
642
642
  version: '0'
643
643
  requirements: []
644
644
  rubyforge_project:
645
- rubygems_version: 2.6.10
645
+ rubygems_version: 2.6.11
646
646
  signing_key:
647
647
  specification_version: 4
648
648
  summary: A GraphQL language and runtime for Ruby