graphql 1.4.5 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
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