graphql 1.4.5 → 1.5.3

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.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/enum_generator.rb +33 -0
  3. data/lib/generators/graphql/function_generator.rb +15 -0
  4. data/lib/generators/graphql/install_generator.rb +118 -0
  5. data/lib/generators/graphql/interface_generator.rb +27 -0
  6. data/lib/generators/graphql/loader_generator.rb +17 -0
  7. data/lib/generators/graphql/mutation_generator.rb +19 -0
  8. data/lib/generators/graphql/object_generator.rb +34 -0
  9. data/lib/generators/graphql/templates/enum.erb +4 -0
  10. data/lib/generators/graphql/templates/function.erb +17 -0
  11. data/lib/generators/graphql/templates/graphql_controller.erb +32 -0
  12. data/lib/generators/graphql/templates/interface.erb +4 -0
  13. data/lib/generators/graphql/templates/loader.erb +15 -0
  14. data/lib/generators/graphql/templates/mutation.erb +12 -0
  15. data/lib/generators/graphql/templates/object.erb +5 -0
  16. data/lib/generators/graphql/templates/query_type.erb +15 -0
  17. data/lib/generators/graphql/templates/schema.erb +34 -0
  18. data/lib/generators/graphql/templates/union.erb +4 -0
  19. data/lib/generators/graphql/type_generator.rb +78 -0
  20. data/lib/generators/graphql/union_generator.rb +33 -0
  21. data/lib/graphql.rb +10 -0
  22. data/lib/graphql/analysis/analyze_query.rb +1 -1
  23. data/lib/graphql/analysis/query_complexity.rb +6 -50
  24. data/lib/graphql/analysis/query_depth.rb +1 -1
  25. data/lib/graphql/argument.rb +21 -0
  26. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +3 -3
  27. data/lib/graphql/define.rb +1 -0
  28. data/lib/graphql/define/assign_argument.rb +3 -19
  29. data/lib/graphql/define/assign_mutation_function.rb +34 -0
  30. data/lib/graphql/define/assign_object_field.rb +26 -14
  31. data/lib/graphql/define/defined_object_proxy.rb +21 -0
  32. data/lib/graphql/define/instance_definable.rb +61 -11
  33. data/lib/graphql/directive.rb +6 -1
  34. data/lib/graphql/execution/directive_checks.rb +1 -0
  35. data/lib/graphql/execution/execute.rb +14 -9
  36. data/lib/graphql/execution/field_result.rb +1 -0
  37. data/lib/graphql/execution/lazy.rb +8 -17
  38. data/lib/graphql/execution/lazy/lazy_method_map.rb +2 -0
  39. data/lib/graphql/execution/lazy/resolve.rb +1 -0
  40. data/lib/graphql/execution/selection_result.rb +1 -0
  41. data/lib/graphql/execution/typecast.rb +39 -26
  42. data/lib/graphql/field.rb +15 -3
  43. data/lib/graphql/field/resolve.rb +3 -3
  44. data/lib/graphql/function.rb +134 -0
  45. data/lib/graphql/id_type.rb +1 -1
  46. data/lib/graphql/input_object_type.rb +1 -1
  47. data/lib/graphql/internal_representation.rb +1 -1
  48. data/lib/graphql/internal_representation/node.rb +35 -107
  49. data/lib/graphql/internal_representation/rewrite.rb +189 -183
  50. data/lib/graphql/internal_representation/visit.rb +38 -0
  51. data/lib/graphql/introspection/input_value_type.rb +10 -1
  52. data/lib/graphql/introspection/schema_type.rb +1 -1
  53. data/lib/graphql/language/lexer.rb +6 -3
  54. data/lib/graphql/language/lexer.rl +6 -3
  55. data/lib/graphql/object_type.rb +53 -13
  56. data/lib/graphql/query.rb +30 -14
  57. data/lib/graphql/query/arguments.rb +2 -0
  58. data/lib/graphql/query/context.rb +2 -2
  59. data/lib/graphql/query/literal_input.rb +9 -0
  60. data/lib/graphql/query/serial_execution/field_resolution.rb +2 -2
  61. data/lib/graphql/query/serial_execution/selection_resolution.rb +1 -1
  62. data/lib/graphql/relay.rb +1 -0
  63. data/lib/graphql/relay/array_connection.rb +1 -1
  64. data/lib/graphql/relay/base_connection.rb +34 -15
  65. data/lib/graphql/relay/connection_resolve.rb +7 -2
  66. data/lib/graphql/relay/mutation.rb +45 -4
  67. data/lib/graphql/relay/node.rb +18 -6
  68. data/lib/graphql/relay/range_add.rb +45 -0
  69. data/lib/graphql/relay/relation_connection.rb +17 -2
  70. data/lib/graphql/runtime_type_error.rb +1 -0
  71. data/lib/graphql/schema.rb +40 -5
  72. data/lib/graphql/schema/base_64_encoder.rb +1 -0
  73. data/lib/graphql/schema/build_from_definition.rb +56 -21
  74. data/lib/graphql/schema/default_parse_error.rb +10 -0
  75. data/lib/graphql/schema/loader.rb +8 -1
  76. data/lib/graphql/schema/null_mask.rb +1 -0
  77. data/lib/graphql/schema/validation.rb +35 -0
  78. data/lib/graphql/static_validation.rb +1 -0
  79. data/lib/graphql/static_validation/all_rules.rb +1 -0
  80. data/lib/graphql/static_validation/arguments_validator.rb +7 -4
  81. data/lib/graphql/static_validation/definition_dependencies.rb +183 -0
  82. data/lib/graphql/static_validation/rules/fields_will_merge.rb +28 -96
  83. data/lib/graphql/static_validation/rules/fragment_names_are_unique.rb +23 -0
  84. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +8 -5
  85. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +6 -31
  86. data/lib/graphql/static_validation/rules/fragments_are_used.rb +11 -41
  87. data/lib/graphql/static_validation/rules/operation_names_are_valid.rb +2 -2
  88. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +19 -7
  89. data/lib/graphql/static_validation/validation_context.rb +22 -1
  90. data/lib/graphql/static_validation/validator.rb +4 -1
  91. data/lib/graphql/string_type.rb +5 -1
  92. data/lib/graphql/version.rb +1 -1
  93. data/readme.md +12 -3
  94. data/spec/generators/graphql/enum_generator_spec.rb +29 -0
  95. data/spec/generators/graphql/function_generator_spec.rb +33 -0
  96. data/spec/generators/graphql/install_generator_spec.rb +185 -0
  97. data/spec/generators/graphql/interface_generator_spec.rb +32 -0
  98. data/spec/generators/graphql/loader_generator_spec.rb +31 -0
  99. data/spec/generators/graphql/mutation_generator_spec.rb +28 -0
  100. data/spec/generators/graphql/object_generator_spec.rb +42 -0
  101. data/spec/generators/graphql/union_generator_spec.rb +50 -0
  102. data/spec/graphql/analysis/query_complexity_spec.rb +2 -1
  103. data/spec/graphql/define/instance_definable_spec.rb +38 -0
  104. data/spec/graphql/directive/skip_directive_spec.rb +1 -0
  105. data/spec/graphql/directive_spec.rb +18 -0
  106. data/spec/graphql/execution/typecast_spec.rb +41 -46
  107. data/spec/graphql/field_spec.rb +1 -1
  108. data/spec/graphql/function_spec.rb +128 -0
  109. data/spec/graphql/internal_representation/rewrite_spec.rb +166 -129
  110. data/spec/graphql/introspection/type_type_spec.rb +1 -1
  111. data/spec/graphql/language/lexer_spec.rb +6 -0
  112. data/spec/graphql/object_type_spec.rb +73 -2
  113. data/spec/graphql/query/arguments_spec.rb +28 -0
  114. data/spec/graphql/query/variables_spec.rb +7 -1
  115. data/spec/graphql/query_spec.rb +30 -0
  116. data/spec/graphql/relay/base_connection_spec.rb +26 -8
  117. data/spec/graphql/relay/connection_resolve_spec.rb +45 -0
  118. data/spec/graphql/relay/connection_type_spec.rb +21 -0
  119. data/spec/graphql/relay/node_spec.rb +30 -2
  120. data/spec/graphql/relay/range_add_spec.rb +113 -0
  121. data/spec/graphql/schema/build_from_definition_spec.rb +114 -0
  122. data/spec/graphql/schema/loader_spec.rb +1 -0
  123. data/spec/graphql/schema/printer_spec.rb +2 -2
  124. data/spec/graphql/schema/validation_spec.rb +80 -11
  125. data/spec/graphql/schema/warden_spec.rb +10 -10
  126. data/spec/graphql/schema_spec.rb +18 -1
  127. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +16 -0
  128. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +50 -3
  129. data/spec/graphql/static_validation/rules/fragment_names_are_unique_spec.rb +27 -0
  130. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +57 -0
  131. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +1 -1
  132. data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +14 -0
  133. data/spec/graphql/string_type_spec.rb +7 -0
  134. data/spec/spec_helper.rb +3 -3
  135. data/spec/support/base_generator_test.rb +7 -0
  136. data/spec/support/dummy/schema.rb +32 -30
  137. data/spec/support/star_wars/schema.rb +81 -23
  138. metadata +98 -20
  139. data/lib/graphql/internal_representation/selection.rb +0 -85
@@ -17,7 +17,7 @@ describe GraphQL::StaticValidation::FragmentsAreUsed do
17
17
  assert_includes(errors, {
18
18
  "message"=>"Fragment unusedFields was defined, but not used",
19
19
  "locations"=>[{"line"=>8, "column"=>5}],
20
- "fields"=>[],
20
+ "fields"=>["fragment unusedFields"],
21
21
  })
22
22
  end
23
23
 
@@ -43,4 +43,18 @@ describe GraphQL::StaticValidation::VariablesAreInputTypes do
43
43
  "fields"=>["query getCheese"],
44
44
  })
45
45
  end
46
+
47
+ describe "typos" do
48
+ it "returns a client error" do
49
+ res = schema.execute <<-GRAPHQL
50
+ query GetCheese($id: IDX) {
51
+ cheese(id: $id) { flavor }
52
+ }
53
+ GRAPHQL
54
+
55
+ assert_equal false, res.key?("data")
56
+ assert_equal 1, res["errors"].length
57
+ assert_equal "IDX isn't a defined input type (on $id)", res["errors"][0]["message"]
58
+ end
59
+ end
46
60
  end
@@ -8,6 +8,13 @@ describe GraphQL::STRING_TYPE do
8
8
  assert_equal(true, string_type.default_scalar?)
9
9
  end
10
10
 
11
+ describe "coerce_result" do
12
+ it "requires string to be encoded as UTF-8" do
13
+ binary_str = "\0\0\0foo\255\255\255".dup.force_encoding("BINARY")
14
+ assert_equal nil, string_type.coerce_result(binary_str)
15
+ end
16
+ end
17
+
11
18
  describe "coerce_input" do
12
19
  it "accepts strings" do
13
20
  assert_equal "str", string_type.coerce_input("str")
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
  require "codeclimate-test-reporter"
3
3
  CodeClimate::TestReporter.start
4
+ require "rails/all"
5
+ require "rails/generators"
4
6
  require "sqlite3"
5
- require "active_record"
6
- require "action_controller"
7
7
  require "sequel"
8
8
  require "graphql"
9
9
  require "benchmark"
@@ -20,7 +20,7 @@ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
20
20
 
21
21
 
22
22
  # This is for convenient access to metadata in test definitions
23
- assign_metadata_key = -> (target, key, value) { target.metadata[key] = value }
23
+ assign_metadata_key = ->(target, key, value) { target.metadata[key] = value }
24
24
  GraphQL::BaseType.accepts_definitions(metadata: assign_metadata_key)
25
25
  GraphQL::Field.accepts_definitions(metadata: assign_metadata_key)
26
26
  GraphQL::Argument.accepts_definitions(metadata: assign_metadata_key)
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ class BaseGeneratorTest < Rails::Generators::TestCase
5
+ destination File.expand_path("../../tmp", File.dirname(__FILE__))
6
+ setup :prepare_destination
7
+ end
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
+ require "graphql"
3
+ require_relative "./data"
2
4
  module Dummy
3
5
  class NoSuchDairyError < StandardError; end
4
6
 
@@ -22,7 +24,7 @@ module Dummy
22
24
  AnimalProductInterface = GraphQL::InterfaceType.define do
23
25
  name "AnimalProduct"
24
26
  description "Comes from an animal, no joke"
25
- field :source, !types.String, "Animal which produced this product"
27
+ field :source, !DairyAnimalEnum, "Animal which produced this product"
26
28
  end
27
29
 
28
30
  BeverageUnion = GraphQL::UnionType.define do
@@ -96,7 +98,7 @@ module Dummy
96
98
  description "Dairy beverage"
97
99
  interfaces [EdibleInterface, AnimalProductInterface, LocalProductInterface]
98
100
  field :id, !types.ID
99
- field :source, DairyAnimalEnum, "Animal which produced this milk", hash_key: :source
101
+ field :source, !DairyAnimalEnum, "Animal which produced this milk", hash_key: :source
100
102
  field :origin, !types.String, "Place the milk comes from"
101
103
  field :flavors, types[types.String], "Chocolate, Strawberry, etc" do
102
104
  argument :limit, types.Int
@@ -200,34 +202,34 @@ module Dummy
200
202
  end
201
203
  end
202
204
 
203
- class FetchField
204
- def self.create(type:, data:, id_type: !GraphQL::INT_TYPE)
205
- desc = "Find a #{type.name} by id"
206
- return_type = type
207
- GraphQL::Field.define do
208
- type(return_type)
209
- description(desc)
210
- argument :id, id_type
211
-
212
- resolve ->(t, a, c) {
213
- id_string = a["id"].to_s # Cheese has Int type, Milk has ID type :(
214
- id, item = data.find { |id, item| id.to_s == id_string }
215
- item
216
- }
217
- end
205
+ class FetchItem < GraphQL::Function
206
+ attr_reader :type, :description, :arguments
207
+
208
+ def initialize(type:, data:, id_type: !GraphQL::INT_TYPE)
209
+ @type = type
210
+ @data = data
211
+ @description = "Find a #{type.name} by id"
212
+ @arguments = self.class.arguments.merge({"id" => GraphQL::Argument.define(name: "id", type: id_type)})
213
+ end
214
+
215
+ def call(obj, args, ctx)
216
+ id_string = args["id"].to_s # Cheese has Int type, Milk has ID type :(
217
+ id, item = @data.find { |id, item| id.to_s == id_string }
218
+ item
218
219
  end
219
220
  end
220
221
 
221
- class SingletonField
222
- def self.create(type:, data:)
223
- desc = "Find the only #{type.name}"
224
- return_type = type
225
- GraphQL::Field.define do
226
- type(return_type)
227
- description(desc)
222
+ class GetSingleton < GraphQL::Function
223
+ attr_reader :description, :type
224
+
225
+ def initialize(type:, data:)
226
+ @description = "Find the only #{type.name}"
227
+ @type = type
228
+ @data = data
229
+ end
228
230
 
229
- resolve ->(t, a, c) {data}
230
- end
231
+ def call(obj, args, ctx)
232
+ @data
231
233
  end
232
234
  end
233
235
 
@@ -253,12 +255,12 @@ module Dummy
253
255
  field :root, types.String do
254
256
  resolve ->(root_value, args, c) { root_value }
255
257
  end
256
- field :cheese, field: FetchField.create(type: CheeseType, data: CHEESES)
257
- field :milk, field: FetchField.create(type: MilkType, data: MILKS, id_type: !types.ID)
258
- field :dairy, field: SingletonField.create(type: DairyType, data: DAIRY)
258
+ field :cheese, function: FetchItem.new(type: CheeseType, data: CHEESES)
259
+ field :milk, function: FetchItem.new(type: MilkType, data: MILKS, id_type: !types.ID)
260
+ field :dairy, function: GetSingleton.new(type: DairyType, data: DAIRY)
259
261
  field :fromSource, &SourceFieldDefn
260
262
  field :favoriteEdible, FavoriteFieldDefn
261
- field :cow, field: SingletonField.create(type: CowType, data: COW)
263
+ field :cow, function: GetSingleton.new(type: CowType, data: COW)
262
264
  field :searchDairy do
263
265
  description "Find dairy products matching a description"
264
266
  type !DairyProductUnion
@@ -16,7 +16,17 @@ module StarWars
16
16
  name "Base"
17
17
  interfaces [GraphQL::Relay::Node.interface]
18
18
  global_id_field :id
19
- field :name, types.String
19
+ field :name, !types.String do
20
+ resolve ->(obj, args, ctx) {
21
+ LazyWrapper.new {
22
+ if obj.id.nil?
23
+ raise GraphQL::ExecutionError, "Boom!"
24
+ else
25
+ obj.name
26
+ end
27
+ }
28
+ }
29
+ end
20
30
  field :planet, types.String
21
31
  end
22
32
 
@@ -59,6 +69,20 @@ module StarWars
59
69
  field :fieldName, types.String, resolve: ->(obj, args, ctx) { obj.field.name }
60
70
  end
61
71
 
72
+ # Example of GraphQL::Function used with the connection helper:
73
+ class ShipsWithMaxPageSize < GraphQL::Function
74
+ argument :nameIncludes, GraphQL::STRING_TYPE
75
+ def call(obj, args, ctx)
76
+ all_ships = obj.ships.map { |ship_id| StarWars::DATA["Ship"][ship_id] }
77
+ if args[:nameIncludes]
78
+ all_ships = all_ships.select { |ship| ship.name.include?(args[:nameIncludes])}
79
+ end
80
+ all_ships
81
+ end
82
+
83
+ type Ship.connection_type
84
+ end
85
+
62
86
  Faction = GraphQL::ObjectType.define do
63
87
  name "Faction"
64
88
  interfaces [GraphQL::Relay::Node.interface]
@@ -69,18 +93,18 @@ module StarWars
69
93
  resolve ->(obj, args, ctx) {
70
94
  all_ships = obj.ships.map {|ship_id| StarWars::DATA["Ship"][ship_id] }
71
95
  if args[:nameIncludes]
72
- all_ships = all_ships.select { |ship| ship.name.include?(args[:nameIncludes])}
73
- end
74
- all_ships
75
- }
76
- # You can define arguments here and use them in the connection
77
- argument :nameIncludes, types.String
78
- end
79
- connection :shipsWithMaxPageSize, Ship.connection_type, max_page_size: 2 do
80
- resolve ->(obj, args, ctx) {
81
- all_ships = obj.ships.map {|ship_id| StarWars::DATA["Ship"][ship_id] }
82
- if args[:nameIncludes]
83
- all_ships = all_ships.select { |ship| ship.name.include?(args[:nameIncludes])}
96
+ case args[:nameIncludes]
97
+ when "error"
98
+ all_ships = GraphQL::ExecutionError.new("error from within connection")
99
+ when "raisedError"
100
+ raise GraphQL::ExecutionError.new("error raised from within connection")
101
+ when "lazyError"
102
+ all_ships = LazyWrapper.new { GraphQL::ExecutionError.new("lazy error from within connection") }
103
+ when "lazyRaisedError"
104
+ all_ships = LazyWrapper.new { raise GraphQL::ExecutionError.new("lazy raised error from within connection") }
105
+ else
106
+ all_ships = all_ships.select { |ship| ship.name.include?(args[:nameIncludes])}
107
+ end
84
108
  end
85
109
  all_ships
86
110
  }
@@ -88,6 +112,8 @@ module StarWars
88
112
  argument :nameIncludes, types.String
89
113
  end
90
114
 
115
+ connection :shipsWithMaxPageSize, max_page_size: 2, function: ShipsWithMaxPageSize.new
116
+
91
117
  connection :bases, BaseConnectionWithTotalCountType do
92
118
  # Resolve field should return an Array, the Connection
93
119
  # will do the rest!
@@ -160,30 +186,52 @@ module StarWars
160
186
 
161
187
  # Here's the mutation operation:
162
188
  resolve ->(root_obj, inputs, ctx) {
163
- faction_id = inputs["factionId"]
164
- if inputs["shipName"] == 'Millennium Falcon'
189
+ IntroduceShipFunction.new.call(root_obj, inputs, ctx)
190
+ }
191
+ end
192
+
193
+ class IntroduceShipFunction < GraphQL::Function
194
+ description "Add a ship to this faction"
195
+
196
+ argument :shipName, GraphQL::STRING_TYPE
197
+ argument :factionId, !GraphQL::ID_TYPE
198
+
199
+ type(GraphQL::ObjectType.define do
200
+ name "IntroduceShipFunctionPayload"
201
+ field :shipEdge, Ship.edge_type, hash_key: :shipEdge
202
+ field :faction, Faction, hash_key: :shipEdge
203
+ end)
204
+
205
+ def call(obj, args, ctx)
206
+ faction_id = args["factionId"]
207
+ if args["shipName"] == 'Millennium Falcon'
165
208
  GraphQL::ExecutionError.new("Sorry, Millennium Falcon ship is reserved")
166
- elsif inputs["shipName"] == "Ebon Hawk"
209
+ elsif args["shipName"] == "Ebon Hawk"
167
210
  LazyWrapper.new { raise GraphQL::ExecutionError.new("💥")}
168
211
  else
169
- ship = DATA.create_ship(inputs["shipName"], faction_id)
212
+ ship = DATA.create_ship(args["shipName"], faction_id)
170
213
  faction = DATA["Faction"][faction_id]
171
214
  connection_class = GraphQL::Relay::BaseConnection.connection_for_nodes(faction.ships)
172
- ships_connection = connection_class.new(faction.ships, inputs)
215
+ ships_connection = connection_class.new(faction.ships, args)
173
216
  ship_edge = GraphQL::Relay::Edge.new(ship, ships_connection)
174
217
  result = {
175
218
  shipEdge: ship_edge,
176
219
  faction: faction
177
220
  }
178
- if inputs["shipName"] == "Slave II"
221
+ if args["shipName"] == "Slave II"
179
222
  LazyWrapper.new(result)
180
223
  else
181
224
  result
182
225
  end
183
226
  end
184
- }
227
+ end
185
228
  end
186
229
 
230
+ IntroduceShipFunctionMutation = GraphQL::Relay::Mutation.define do
231
+ # Used as the root for derived types:
232
+ name "IntroduceShipFunction"
233
+ function IntroduceShipFunction.new
234
+ end
187
235
 
188
236
  class LazyWrapper
189
237
  def initialize(value = nil, &block)
@@ -219,10 +267,19 @@ module StarWars
219
267
  }
220
268
  end
221
269
 
270
+ connection :basesWithNullName, BaseType.connection_type do
271
+ resolve ->(obj, args, ctx) {
272
+ [OpenStruct.new(id: nil)]
273
+ }
274
+ end
275
+
222
276
  field :node, GraphQL::Relay::Node.field
223
- field :nodeWithCustomResolver, GraphQL::Relay::Node.field(
224
- resolve: ->(_, _, _) { StarWars::DATA["Faction"]["1"] }
225
- )
277
+
278
+ custom_node_field = GraphQL::Relay::Node.field do
279
+ resolve ->(_, _, _) { StarWars::DATA["Faction"]["1"] }
280
+ end
281
+ field :nodeWithCustomResolver, custom_node_field
282
+
226
283
  field :nodes, GraphQL::Relay::Node.plural_field
227
284
  field :nodesWithCustomResolver, GraphQL::Relay::Node.plural_field(
228
285
  resolve: ->(_, _, _) { [StarWars::DATA["Faction"]["1"], StarWars::DATA["Faction"]["2"]] }
@@ -233,6 +290,7 @@ module StarWars
233
290
  name "Mutation"
234
291
  # The mutation object exposes a field:
235
292
  field :introduceShip, field: IntroduceShipMutation.field
293
+ field :introduceShipFunction, IntroduceShipFunctionMutation.field
236
294
  end
237
295
 
238
296
  Schema = GraphQL::Schema.define do
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: 1.4.5
4
+ version: 1.5.3
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-03-06 00:00:00.000000000 Z
11
+ date: 2017-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: benchmark-ips
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
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: codeclimate-test-reporter
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +94,20 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: listen
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -151,49 +179,49 @@ dependencies:
151
179
  - !ruby/object:Gem::Version
152
180
  version: '1.4'
153
181
  - !ruby/object:Gem::Dependency
154
- name: rake
182
+ name: rails
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
- - - "~>"
185
+ - - ">="
158
186
  - !ruby/object:Gem::Version
159
- version: '11.0'
187
+ version: '0'
160
188
  type: :development
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
- - - "~>"
192
+ - - ">="
165
193
  - !ruby/object:Gem::Version
166
- version: '11.0'
194
+ version: '0'
167
195
  - !ruby/object:Gem::Dependency
168
- name: rubocop
196
+ name: rake
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
199
  - - "~>"
172
200
  - !ruby/object:Gem::Version
173
- version: '0.44'
201
+ version: '11'
174
202
  type: :development
175
203
  prerelease: false
176
204
  version_requirements: !ruby/object:Gem::Requirement
177
205
  requirements:
178
206
  - - "~>"
179
207
  - !ruby/object:Gem::Version
180
- version: '0.44'
208
+ version: '11'
181
209
  - !ruby/object:Gem::Dependency
182
- name: activerecord
210
+ name: rubocop
183
211
  requirement: !ruby/object:Gem::Requirement
184
212
  requirements:
185
- - - ">="
213
+ - - "~>"
186
214
  - !ruby/object:Gem::Version
187
- version: '0'
215
+ version: '0.45'
188
216
  type: :development
189
217
  prerelease: false
190
218
  version_requirements: !ruby/object:Gem::Requirement
191
219
  requirements:
192
- - - ">="
220
+ - - "~>"
193
221
  - !ruby/object:Gem::Version
194
- version: '0'
222
+ version: '0.45'
195
223
  - !ruby/object:Gem::Dependency
196
- name: actionpack
224
+ name: ruby-prof
197
225
  requirement: !ruby/object:Gem::Requirement
198
226
  requirements:
199
227
  - - ">="
@@ -262,8 +290,7 @@ dependencies:
262
290
  - - ">="
263
291
  - !ruby/object:Gem::Version
264
292
  version: '0'
265
- description: A GraphQL server implementation for Ruby. Includes schema definition,
266
- query parsing, static validation, type definition, and query execution.
293
+ description: A plain-Ruby implementation of GraphQL.
267
294
  email:
268
295
  - rdmosolgo@gmail.com
269
296
  executables: []
@@ -272,6 +299,25 @@ extra_rdoc_files: []
272
299
  files:
273
300
  - ".yardopts"
274
301
  - MIT-LICENSE
302
+ - lib/generators/graphql/enum_generator.rb
303
+ - lib/generators/graphql/function_generator.rb
304
+ - lib/generators/graphql/install_generator.rb
305
+ - lib/generators/graphql/interface_generator.rb
306
+ - lib/generators/graphql/loader_generator.rb
307
+ - lib/generators/graphql/mutation_generator.rb
308
+ - lib/generators/graphql/object_generator.rb
309
+ - lib/generators/graphql/templates/enum.erb
310
+ - lib/generators/graphql/templates/function.erb
311
+ - lib/generators/graphql/templates/graphql_controller.erb
312
+ - lib/generators/graphql/templates/interface.erb
313
+ - lib/generators/graphql/templates/loader.erb
314
+ - lib/generators/graphql/templates/mutation.erb
315
+ - lib/generators/graphql/templates/object.erb
316
+ - lib/generators/graphql/templates/query_type.erb
317
+ - lib/generators/graphql/templates/schema.erb
318
+ - lib/generators/graphql/templates/union.erb
319
+ - lib/generators/graphql/type_generator.rb
320
+ - lib/generators/graphql/union_generator.rb
275
321
  - lib/graphql.rb
276
322
  - lib/graphql/analysis.rb
277
323
  - lib/graphql/analysis/analyze_query.rb
@@ -300,6 +346,7 @@ files:
300
346
  - lib/graphql/define/assign_connection.rb
301
347
  - lib/graphql/define/assign_enum_value.rb
302
348
  - lib/graphql/define/assign_global_id_field.rb
349
+ - lib/graphql/define/assign_mutation_function.rb
303
350
  - lib/graphql/define/assign_object_field.rb
304
351
  - lib/graphql/define/defined_object_proxy.rb
305
352
  - lib/graphql/define/instance_definable.rb
@@ -323,6 +370,7 @@ files:
323
370
  - lib/graphql/field.rb
324
371
  - lib/graphql/field/resolve.rb
325
372
  - lib/graphql/float_type.rb
373
+ - lib/graphql/function.rb
326
374
  - lib/graphql/id_type.rb
327
375
  - lib/graphql/input_object_type.rb
328
376
  - lib/graphql/int_type.rb
@@ -330,7 +378,7 @@ files:
330
378
  - lib/graphql/internal_representation.rb
331
379
  - lib/graphql/internal_representation/node.rb
332
380
  - lib/graphql/internal_representation/rewrite.rb
333
- - lib/graphql/internal_representation/selection.rb
381
+ - lib/graphql/internal_representation/visit.rb
334
382
  - lib/graphql/introspection.rb
335
383
  - lib/graphql/introspection/arguments_field.rb
336
384
  - lib/graphql/introspection/directive_location_enum.rb
@@ -391,6 +439,7 @@ files:
391
439
  - lib/graphql/relay/mutation.rb
392
440
  - lib/graphql/relay/node.rb
393
441
  - lib/graphql/relay/page_info.rb
442
+ - lib/graphql/relay/range_add.rb
394
443
  - lib/graphql/relay/relation_connection.rb
395
444
  - lib/graphql/runtime_type_error.rb
396
445
  - lib/graphql/scalar_type.rb
@@ -398,6 +447,7 @@ files:
398
447
  - lib/graphql/schema/base_64_encoder.rb
399
448
  - lib/graphql/schema/build_from_definition.rb
400
449
  - lib/graphql/schema/catchall_middleware.rb
450
+ - lib/graphql/schema/default_parse_error.rb
401
451
  - lib/graphql/schema/default_type_error.rb
402
452
  - lib/graphql/schema/instrumented_field_map.rb
403
453
  - lib/graphql/schema/invalid_type_error.rb
@@ -417,6 +467,7 @@ files:
417
467
  - lib/graphql/static_validation.rb
418
468
  - lib/graphql/static_validation/all_rules.rb
419
469
  - lib/graphql/static_validation/arguments_validator.rb
470
+ - lib/graphql/static_validation/definition_dependencies.rb
420
471
  - lib/graphql/static_validation/literal_validator.rb
421
472
  - lib/graphql/static_validation/message.rb
422
473
  - lib/graphql/static_validation/rules/argument_literals_are_compatible.rb
@@ -426,6 +477,7 @@ files:
426
477
  - lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
427
478
  - lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb
428
479
  - lib/graphql/static_validation/rules/fields_will_merge.rb
480
+ - lib/graphql/static_validation/rules/fragment_names_are_unique.rb
429
481
  - lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb
430
482
  - lib/graphql/static_validation/rules/fragment_types_exist.rb
431
483
  - lib/graphql/static_validation/rules/fragments_are_finite.rb
@@ -450,6 +502,14 @@ files:
450
502
  - lib/graphql/unresolved_type_error.rb
451
503
  - lib/graphql/version.rb
452
504
  - readme.md
505
+ - spec/generators/graphql/enum_generator_spec.rb
506
+ - spec/generators/graphql/function_generator_spec.rb
507
+ - spec/generators/graphql/install_generator_spec.rb
508
+ - spec/generators/graphql/interface_generator_spec.rb
509
+ - spec/generators/graphql/loader_generator_spec.rb
510
+ - spec/generators/graphql/mutation_generator_spec.rb
511
+ - spec/generators/graphql/object_generator_spec.rb
512
+ - spec/generators/graphql/union_generator_spec.rb
453
513
  - spec/graphql/analysis/analyze_query_spec.rb
454
514
  - spec/graphql/analysis/field_usage_spec.rb
455
515
  - spec/graphql/analysis/max_query_complexity_spec.rb
@@ -474,6 +534,7 @@ files:
474
534
  - spec/graphql/execution_error_spec.rb
475
535
  - spec/graphql/field_spec.rb
476
536
  - spec/graphql/float_type_spec.rb
537
+ - spec/graphql/function_spec.rb
477
538
  - spec/graphql/id_type_spec.rb
478
539
  - spec/graphql/input_object_type_spec.rb
479
540
  - spec/graphql/int_type_spec.rb
@@ -503,10 +564,12 @@ files:
503
564
  - spec/graphql/relay/array_connection_spec.rb
504
565
  - spec/graphql/relay/base_connection_spec.rb
505
566
  - spec/graphql/relay/connection_field_spec.rb
567
+ - spec/graphql/relay/connection_resolve_spec.rb
506
568
  - spec/graphql/relay/connection_type_spec.rb
507
569
  - spec/graphql/relay/mutation_spec.rb
508
570
  - spec/graphql/relay/node_spec.rb
509
571
  - spec/graphql/relay/page_info_spec.rb
572
+ - spec/graphql/relay/range_add_spec.rb
510
573
  - spec/graphql/relay/relation_connection_spec.rb
511
574
  - spec/graphql/scalar_type_spec.rb
512
575
  - spec/graphql/schema/build_from_definition_spec.rb
@@ -529,6 +592,7 @@ files:
529
592
  - spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb
530
593
  - spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb
531
594
  - spec/graphql/static_validation/rules/fields_will_merge_spec.rb
595
+ - spec/graphql/static_validation/rules/fragment_names_are_unique_spec.rb
532
596
  - spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb
533
597
  - spec/graphql/static_validation/rules/fragment_types_exist_spec.rb
534
598
  - spec/graphql/static_validation/rules/fragments_are_finite_spec.rb
@@ -549,6 +613,7 @@ files:
549
613
  - spec/graphql/string_type_spec.rb
550
614
  - spec/graphql/union_type_spec.rb
551
615
  - spec/spec_helper.rb
616
+ - spec/support/base_generator_test.rb
552
617
  - spec/support/dummy/data.rb
553
618
  - spec/support/dummy/schema.rb
554
619
  - spec/support/minimum_input_object.rb
@@ -578,8 +643,16 @@ rubyforge_project:
578
643
  rubygems_version: 2.6.10
579
644
  signing_key:
580
645
  specification_version: 4
581
- summary: A GraphQL server implementation for Ruby
646
+ summary: A GraphQL language and runtime for Ruby
582
647
  test_files:
648
+ - spec/generators/graphql/enum_generator_spec.rb
649
+ - spec/generators/graphql/function_generator_spec.rb
650
+ - spec/generators/graphql/install_generator_spec.rb
651
+ - spec/generators/graphql/interface_generator_spec.rb
652
+ - spec/generators/graphql/loader_generator_spec.rb
653
+ - spec/generators/graphql/mutation_generator_spec.rb
654
+ - spec/generators/graphql/object_generator_spec.rb
655
+ - spec/generators/graphql/union_generator_spec.rb
583
656
  - spec/graphql/analysis/analyze_query_spec.rb
584
657
  - spec/graphql/analysis/field_usage_spec.rb
585
658
  - spec/graphql/analysis/max_query_complexity_spec.rb
@@ -604,6 +677,7 @@ test_files:
604
677
  - spec/graphql/execution_error_spec.rb
605
678
  - spec/graphql/field_spec.rb
606
679
  - spec/graphql/float_type_spec.rb
680
+ - spec/graphql/function_spec.rb
607
681
  - spec/graphql/id_type_spec.rb
608
682
  - spec/graphql/input_object_type_spec.rb
609
683
  - spec/graphql/int_type_spec.rb
@@ -633,10 +707,12 @@ test_files:
633
707
  - spec/graphql/relay/array_connection_spec.rb
634
708
  - spec/graphql/relay/base_connection_spec.rb
635
709
  - spec/graphql/relay/connection_field_spec.rb
710
+ - spec/graphql/relay/connection_resolve_spec.rb
636
711
  - spec/graphql/relay/connection_type_spec.rb
637
712
  - spec/graphql/relay/mutation_spec.rb
638
713
  - spec/graphql/relay/node_spec.rb
639
714
  - spec/graphql/relay/page_info_spec.rb
715
+ - spec/graphql/relay/range_add_spec.rb
640
716
  - spec/graphql/relay/relation_connection_spec.rb
641
717
  - spec/graphql/scalar_type_spec.rb
642
718
  - spec/graphql/schema/build_from_definition_spec.rb
@@ -659,6 +735,7 @@ test_files:
659
735
  - spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb
660
736
  - spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb
661
737
  - spec/graphql/static_validation/rules/fields_will_merge_spec.rb
738
+ - spec/graphql/static_validation/rules/fragment_names_are_unique_spec.rb
662
739
  - spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb
663
740
  - spec/graphql/static_validation/rules/fragment_types_exist_spec.rb
664
741
  - spec/graphql/static_validation/rules/fragments_are_finite_spec.rb
@@ -679,6 +756,7 @@ test_files:
679
756
  - spec/graphql/string_type_spec.rb
680
757
  - spec/graphql/union_type_spec.rb
681
758
  - spec/spec_helper.rb
759
+ - spec/support/base_generator_test.rb
682
760
  - spec/support/dummy/data.rb
683
761
  - spec/support/dummy/schema.rb
684
762
  - spec/support/minimum_input_object.rb