graphql 0.16.0 → 2.0.15

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.

Potentially problematic release.


This version of graphql might be problematic. Click here for more details.

Files changed (490) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +5 -0
  3. data/lib/generators/graphql/core.rb +69 -0
  4. data/lib/generators/graphql/enum_generator.rb +27 -0
  5. data/lib/generators/graphql/field_extractor.rb +31 -0
  6. data/lib/generators/graphql/input_generator.rb +50 -0
  7. data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
  8. data/lib/generators/graphql/install/templates/base_mutation.erb +10 -0
  9. data/lib/generators/graphql/install/templates/mutation_type.erb +12 -0
  10. data/lib/generators/graphql/install_generator.rb +197 -0
  11. data/lib/generators/graphql/interface_generator.rb +27 -0
  12. data/lib/generators/graphql/loader_generator.rb +21 -0
  13. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  14. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  15. data/lib/generators/graphql/mutation_generator.rb +30 -0
  16. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  17. data/lib/generators/graphql/object_generator.rb +50 -0
  18. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  19. data/lib/generators/graphql/relay.rb +49 -0
  20. data/lib/generators/graphql/relay_generator.rb +21 -0
  21. data/lib/generators/graphql/scalar_generator.rb +22 -0
  22. data/lib/generators/graphql/templates/base_argument.erb +6 -0
  23. data/lib/generators/graphql/templates/base_connection.erb +8 -0
  24. data/lib/generators/graphql/templates/base_edge.erb +8 -0
  25. data/lib/generators/graphql/templates/base_enum.erb +6 -0
  26. data/lib/generators/graphql/templates/base_field.erb +7 -0
  27. data/lib/generators/graphql/templates/base_input_object.erb +7 -0
  28. data/lib/generators/graphql/templates/base_interface.erb +9 -0
  29. data/lib/generators/graphql/templates/base_object.erb +7 -0
  30. data/lib/generators/graphql/templates/base_scalar.erb +6 -0
  31. data/lib/generators/graphql/templates/base_union.erb +6 -0
  32. data/lib/generators/graphql/templates/enum.erb +11 -0
  33. data/lib/generators/graphql/templates/graphql_controller.erb +52 -0
  34. data/lib/generators/graphql/templates/input.erb +9 -0
  35. data/lib/generators/graphql/templates/interface.erb +10 -0
  36. data/lib/generators/graphql/templates/loader.erb +19 -0
  37. data/lib/generators/graphql/templates/mutation.erb +16 -0
  38. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  39. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  40. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  41. data/lib/generators/graphql/templates/node_type.erb +9 -0
  42. data/lib/generators/graphql/templates/object.erb +10 -0
  43. data/lib/generators/graphql/templates/query_type.erb +15 -0
  44. data/lib/generators/graphql/templates/scalar.erb +17 -0
  45. data/lib/generators/graphql/templates/schema.erb +30 -0
  46. data/lib/generators/graphql/templates/union.erb +9 -0
  47. data/lib/generators/graphql/type_generator.rb +135 -0
  48. data/lib/generators/graphql/union_generator.rb +33 -0
  49. data/lib/graphql/analysis/ast/analyzer.rb +84 -0
  50. data/lib/graphql/analysis/ast/field_usage.rb +57 -0
  51. data/lib/graphql/analysis/ast/max_query_complexity.rb +22 -0
  52. data/lib/graphql/analysis/ast/max_query_depth.rb +22 -0
  53. data/lib/graphql/analysis/ast/query_complexity.rb +230 -0
  54. data/lib/graphql/analysis/ast/query_depth.rb +55 -0
  55. data/lib/graphql/analysis/ast/visitor.rb +269 -0
  56. data/lib/graphql/analysis/ast.rb +81 -0
  57. data/lib/graphql/analysis.rb +2 -5
  58. data/lib/graphql/analysis_error.rb +1 -0
  59. data/lib/graphql/backtrace/inspect_result.rb +50 -0
  60. data/lib/graphql/backtrace/table.rb +141 -0
  61. data/lib/graphql/backtrace/traced_error.rb +54 -0
  62. data/lib/graphql/backtrace/tracer.rb +80 -0
  63. data/lib/graphql/backtrace.rb +58 -0
  64. data/lib/graphql/coercion_error.rb +13 -0
  65. data/lib/graphql/dataloader/null_dataloader.rb +24 -0
  66. data/lib/graphql/dataloader/request.rb +19 -0
  67. data/lib/graphql/dataloader/request_all.rb +19 -0
  68. data/lib/graphql/dataloader/source.rb +164 -0
  69. data/lib/graphql/dataloader.rb +311 -0
  70. data/lib/graphql/date_encoding_error.rb +16 -0
  71. data/lib/graphql/deprecation.rb +9 -0
  72. data/lib/graphql/dig.rb +19 -0
  73. data/lib/graphql/execution/directive_checks.rb +37 -0
  74. data/lib/graphql/execution/errors.rb +93 -0
  75. data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
  76. data/lib/graphql/execution/interpreter/arguments.rb +88 -0
  77. data/lib/graphql/execution/interpreter/arguments_cache.rb +105 -0
  78. data/lib/graphql/execution/interpreter/execution_errors.rb +29 -0
  79. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  80. data/lib/graphql/execution/interpreter/resolve.rb +77 -0
  81. data/lib/graphql/execution/interpreter/runtime.rb +994 -0
  82. data/lib/graphql/execution/interpreter.rb +226 -0
  83. data/lib/graphql/execution/lazy/lazy_method_map.rb +98 -0
  84. data/lib/graphql/execution/lazy.rb +75 -0
  85. data/lib/graphql/execution/lookahead.rb +311 -0
  86. data/lib/graphql/execution/multiplex.rb +45 -0
  87. data/lib/graphql/execution.rb +18 -0
  88. data/lib/graphql/execution_error.rb +34 -1
  89. data/lib/graphql/filter.rb +53 -0
  90. data/lib/graphql/integer_decoding_error.rb +17 -0
  91. data/lib/graphql/integer_encoding_error.rb +36 -0
  92. data/lib/graphql/introspection/base_object.rb +13 -0
  93. data/lib/graphql/introspection/directive_location_enum.rb +12 -5
  94. data/lib/graphql/introspection/directive_type.rb +30 -10
  95. data/lib/graphql/introspection/dynamic_fields.rb +12 -0
  96. data/lib/graphql/introspection/entry_points.rb +22 -0
  97. data/lib/graphql/introspection/enum_value_type.rb +21 -8
  98. data/lib/graphql/introspection/field_type.rb +26 -10
  99. data/lib/graphql/introspection/input_value_type.rb +64 -14
  100. data/lib/graphql/introspection/introspection_query.rb +7 -76
  101. data/lib/graphql/introspection/schema_type.rb +42 -17
  102. data/lib/graphql/introspection/type_kind_enum.rb +11 -5
  103. data/lib/graphql/introspection/type_type.rb +104 -16
  104. data/lib/graphql/introspection.rb +104 -13
  105. data/lib/graphql/invalid_name_error.rb +11 -0
  106. data/lib/graphql/invalid_null_error.rb +36 -8
  107. data/lib/graphql/language/block_string.rb +99 -0
  108. data/lib/graphql/language/cache.rb +37 -0
  109. data/lib/graphql/language/definition_slice.rb +41 -0
  110. data/lib/graphql/language/document_from_schema_definition.rb +335 -0
  111. data/lib/graphql/language/generation.rb +16 -86
  112. data/lib/graphql/language/lexer.rb +1436 -705
  113. data/lib/graphql/language/lexer.rl +172 -64
  114. data/lib/graphql/language/nodes.rb +617 -105
  115. data/lib/graphql/language/parser.rb +1524 -430
  116. data/lib/graphql/language/parser.y +348 -73
  117. data/lib/graphql/language/printer.rb +386 -0
  118. data/lib/graphql/language/sanitized_printer.rb +222 -0
  119. data/lib/graphql/language/token.rb +16 -3
  120. data/lib/graphql/language/visitor.rb +169 -25
  121. data/lib/graphql/language.rb +30 -0
  122. data/lib/graphql/load_application_object_failed_error.rb +22 -0
  123. data/lib/graphql/name_validator.rb +11 -0
  124. data/lib/graphql/pagination/active_record_relation_connection.rb +85 -0
  125. data/lib/graphql/pagination/array_connection.rb +79 -0
  126. data/lib/graphql/pagination/connection.rb +253 -0
  127. data/lib/graphql/pagination/connections.rb +135 -0
  128. data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
  129. data/lib/graphql/pagination/relation_connection.rb +228 -0
  130. data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
  131. data/lib/graphql/pagination.rb +6 -0
  132. data/lib/graphql/parse_error.rb +24 -0
  133. data/lib/graphql/query/context.rb +266 -12
  134. data/lib/graphql/query/fingerprint.rb +26 -0
  135. data/lib/graphql/query/input_validation_result.rb +34 -7
  136. data/lib/graphql/query/null_context.rb +52 -0
  137. data/lib/graphql/query/result.rb +63 -0
  138. data/lib/graphql/query/validation_pipeline.rb +114 -0
  139. data/lib/graphql/query/variable_validation_error.rb +27 -3
  140. data/lib/graphql/query/variables.rb +75 -24
  141. data/lib/graphql/query.rb +359 -92
  142. data/lib/graphql/railtie.rb +13 -0
  143. data/lib/graphql/rake_task/validate.rb +63 -0
  144. data/lib/graphql/rake_task.rb +146 -0
  145. data/lib/graphql/relay/range_add.rb +52 -0
  146. data/lib/graphql/relay.rb +3 -0
  147. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  148. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  149. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  150. data/lib/graphql/rubocop.rb +4 -0
  151. data/lib/graphql/runtime_type_error.rb +5 -0
  152. data/lib/graphql/schema/addition.rb +245 -0
  153. data/lib/graphql/schema/argument.rb +395 -0
  154. data/lib/graphql/schema/base_64_bp.rb +26 -0
  155. data/lib/graphql/schema/base_64_encoder.rb +21 -0
  156. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +47 -0
  157. data/lib/graphql/schema/build_from_definition/resolve_map.rb +78 -0
  158. data/lib/graphql/schema/build_from_definition.rb +492 -0
  159. data/lib/graphql/schema/built_in_types.rb +12 -0
  160. data/lib/graphql/schema/directive/deprecated.rb +18 -0
  161. data/lib/graphql/schema/directive/feature.rb +66 -0
  162. data/lib/graphql/schema/directive/flagged.rb +57 -0
  163. data/lib/graphql/schema/directive/include.rb +25 -0
  164. data/lib/graphql/schema/directive/one_of.rb +12 -0
  165. data/lib/graphql/schema/directive/skip.rb +25 -0
  166. data/lib/graphql/schema/directive/transform.rb +60 -0
  167. data/lib/graphql/schema/directive.rb +212 -0
  168. data/lib/graphql/schema/enum.rb +176 -0
  169. data/lib/graphql/schema/enum_value.rb +77 -0
  170. data/lib/graphql/schema/field/connection_extension.rb +80 -0
  171. data/lib/graphql/schema/field/scope_extension.rb +22 -0
  172. data/lib/graphql/schema/field.rb +862 -0
  173. data/lib/graphql/schema/field_extension.rb +156 -0
  174. data/lib/graphql/schema/find_inherited_value.rb +36 -0
  175. data/lib/graphql/schema/finder.rb +155 -0
  176. data/lib/graphql/schema/input_object.rb +258 -0
  177. data/lib/graphql/schema/interface.rb +113 -0
  178. data/lib/graphql/schema/introspection_system.rb +164 -0
  179. data/lib/graphql/schema/invalid_type_error.rb +1 -0
  180. data/lib/graphql/schema/late_bound_type.rb +37 -0
  181. data/lib/graphql/schema/list.rb +86 -0
  182. data/lib/graphql/schema/loader.rb +228 -0
  183. data/lib/graphql/schema/member/base_dsl_methods.rb +124 -0
  184. data/lib/graphql/schema/member/build_type.rb +178 -0
  185. data/lib/graphql/schema/member/graphql_type_names.rb +21 -0
  186. data/lib/graphql/schema/member/has_arguments.rb +376 -0
  187. data/lib/graphql/schema/member/has_ast_node.rb +20 -0
  188. data/lib/graphql/schema/member/has_deprecation_reason.rb +25 -0
  189. data/lib/graphql/schema/member/has_directives.rb +113 -0
  190. data/lib/graphql/schema/member/has_fields.rb +163 -0
  191. data/lib/graphql/schema/member/has_interfaces.rb +88 -0
  192. data/lib/graphql/schema/member/has_path.rb +25 -0
  193. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  194. data/lib/graphql/schema/member/has_validators.rb +31 -0
  195. data/lib/graphql/schema/member/relay_shortcuts.rb +73 -0
  196. data/lib/graphql/schema/member/scoped.rb +21 -0
  197. data/lib/graphql/schema/member/type_system_helpers.rb +38 -0
  198. data/lib/graphql/schema/member/validates_input.rb +33 -0
  199. data/lib/graphql/schema/member.rb +39 -0
  200. data/lib/graphql/schema/mutation.rb +85 -0
  201. data/lib/graphql/schema/non_null.rb +67 -0
  202. data/lib/graphql/schema/null_mask.rb +11 -0
  203. data/lib/graphql/schema/object.rb +117 -0
  204. data/lib/graphql/schema/printer.rb +72 -128
  205. data/lib/graphql/schema/relay_classic_mutation.rb +179 -0
  206. data/lib/graphql/schema/resolver/has_payload_type.rb +106 -0
  207. data/lib/graphql/schema/resolver.rb +402 -0
  208. data/lib/graphql/schema/scalar.rb +68 -0
  209. data/lib/graphql/schema/subscription.rb +148 -0
  210. data/lib/graphql/schema/timeout.rb +123 -0
  211. data/lib/graphql/schema/type_expression.rb +29 -5
  212. data/lib/graphql/schema/type_membership.rb +51 -0
  213. data/lib/graphql/schema/union.rb +81 -0
  214. data/lib/graphql/schema/unique_within_type.rb +34 -0
  215. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  216. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  217. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  218. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  219. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  220. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  221. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  222. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  223. data/lib/graphql/schema/validator.rb +171 -0
  224. data/lib/graphql/schema/warden.rb +413 -0
  225. data/lib/graphql/schema/wrapper.rb +24 -0
  226. data/lib/graphql/schema.rb +1179 -104
  227. data/lib/graphql/static_validation/all_rules.rb +14 -0
  228. data/lib/graphql/static_validation/base_visitor.rb +200 -0
  229. data/lib/graphql/static_validation/definition_dependencies.rb +198 -0
  230. data/lib/graphql/static_validation/error.rb +46 -0
  231. data/lib/graphql/static_validation/interpreter_visitor.rb +14 -0
  232. data/lib/graphql/static_validation/literal_validator.rb +113 -22
  233. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +59 -11
  234. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +48 -0
  235. data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +31 -0
  236. data/lib/graphql/static_validation/rules/argument_names_are_unique_error.rb +30 -0
  237. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +62 -8
  238. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +37 -0
  239. data/lib/graphql/static_validation/rules/directives_are_defined.rb +20 -13
  240. data/lib/graphql/static_validation/rules/directives_are_defined_error.rb +29 -0
  241. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +32 -26
  242. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations_error.rb +31 -0
  243. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +21 -23
  244. data/lib/graphql/static_validation/rules/fields_are_defined_on_type_error.rb +32 -0
  245. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +55 -18
  246. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections_error.rb +31 -0
  247. data/lib/graphql/static_validation/rules/fields_will_merge.rb +390 -70
  248. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +53 -0
  249. data/lib/graphql/static_validation/rules/fragment_names_are_unique.rb +30 -0
  250. data/lib/graphql/static_validation/rules/fragment_names_are_unique_error.rb +29 -0
  251. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +54 -37
  252. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible_error.rb +35 -0
  253. data/lib/graphql/static_validation/rules/fragment_types_exist.rb +26 -16
  254. data/lib/graphql/static_validation/rules/fragment_types_exist_error.rb +29 -0
  255. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +13 -19
  256. data/lib/graphql/static_validation/rules/fragments_are_finite_error.rb +29 -0
  257. data/lib/graphql/static_validation/rules/fragments_are_named.rb +16 -0
  258. data/lib/graphql/static_validation/rules/fragments_are_named_error.rb +26 -0
  259. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +25 -20
  260. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types_error.rb +30 -0
  261. data/lib/graphql/static_validation/rules/fragments_are_used.rb +22 -33
  262. data/lib/graphql/static_validation/rules/fragments_are_used_error.rb +29 -0
  263. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  264. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  265. data/lib/graphql/static_validation/rules/mutation_root_exists.rb +17 -0
  266. data/lib/graphql/static_validation/rules/mutation_root_exists_error.rb +26 -0
  267. data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +41 -0
  268. data/lib/graphql/static_validation/rules/no_definitions_are_present_error.rb +25 -0
  269. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  270. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  271. data/lib/graphql/static_validation/rules/operation_names_are_valid.rb +36 -0
  272. data/lib/graphql/static_validation/rules/operation_names_are_valid_error.rb +28 -0
  273. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  274. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  275. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +22 -21
  276. data/lib/graphql/static_validation/rules/required_arguments_are_present_error.rb +35 -0
  277. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +59 -0
  278. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present_error.rb +35 -0
  279. data/lib/graphql/static_validation/rules/subscription_root_exists.rb +17 -0
  280. data/lib/graphql/static_validation/rules/subscription_root_exists_error.rb +26 -0
  281. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +56 -0
  282. data/lib/graphql/static_validation/rules/unique_directives_per_location_error.rb +29 -0
  283. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +36 -18
  284. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed_error.rb +39 -0
  285. data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +24 -0
  286. data/lib/graphql/static_validation/rules/variable_names_are_unique_error.rb +29 -0
  287. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +103 -39
  288. data/lib/graphql/static_validation/rules/variable_usages_are_allowed_error.rb +38 -0
  289. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +22 -14
  290. data/lib/graphql/static_validation/rules/variables_are_input_types_error.rb +32 -0
  291. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +92 -70
  292. data/lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb +37 -0
  293. data/lib/graphql/static_validation/type_stack.rb +85 -24
  294. data/lib/graphql/static_validation/validation_context.rb +25 -46
  295. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  296. data/lib/graphql/static_validation/validator.rb +46 -15
  297. data/lib/graphql/static_validation.rb +6 -3
  298. data/lib/graphql/string_encoding_error.rb +20 -0
  299. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +247 -0
  300. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  301. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  302. data/lib/graphql/subscriptions/event.rb +144 -0
  303. data/lib/graphql/subscriptions/instrumentation.rb +28 -0
  304. data/lib/graphql/subscriptions/serialize.rb +158 -0
  305. data/lib/graphql/subscriptions.rb +306 -0
  306. data/lib/graphql/tracing/active_support_notifications_tracing.rb +21 -0
  307. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  308. data/lib/graphql/tracing/appsignal_tracing.rb +51 -0
  309. data/lib/graphql/tracing/data_dog_tracing.rb +100 -0
  310. data/lib/graphql/tracing/instrumentation_tracing.rb +83 -0
  311. data/lib/graphql/tracing/new_relic_tracing.rb +51 -0
  312. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  313. data/lib/graphql/tracing/platform_tracing.rb +122 -0
  314. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +32 -0
  315. data/lib/graphql/tracing/prometheus_tracing.rb +67 -0
  316. data/lib/graphql/tracing/scout_tracing.rb +54 -0
  317. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  318. data/lib/graphql/tracing.rb +94 -0
  319. data/lib/graphql/type_kinds.rb +50 -22
  320. data/lib/graphql/types/big_int.rb +23 -0
  321. data/lib/graphql/types/boolean.rb +18 -0
  322. data/lib/graphql/types/float.rb +19 -0
  323. data/lib/graphql/types/id.rb +24 -0
  324. data/lib/graphql/types/int.rb +36 -0
  325. data/lib/graphql/types/iso_8601_date.rb +45 -0
  326. data/lib/graphql/types/iso_8601_date_time.rb +76 -0
  327. data/lib/graphql/types/json.rb +25 -0
  328. data/lib/graphql/types/relay/base_connection.rb +49 -0
  329. data/lib/graphql/types/relay/base_edge.rb +29 -0
  330. data/lib/graphql/types/relay/connection_behaviors.rb +154 -0
  331. data/lib/graphql/types/relay/default_relay.rb +21 -0
  332. data/lib/graphql/types/relay/edge_behaviors.rb +64 -0
  333. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  334. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  335. data/lib/graphql/types/relay/node.rb +15 -0
  336. data/lib/graphql/types/relay/node_behaviors.rb +19 -0
  337. data/lib/graphql/types/relay/page_info.rb +11 -0
  338. data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
  339. data/lib/graphql/types/relay.rb +39 -0
  340. data/lib/graphql/types/string.rb +29 -0
  341. data/lib/graphql/types.rb +11 -0
  342. data/lib/graphql/unauthorized_error.rb +29 -0
  343. data/lib/graphql/unauthorized_field_error.rb +23 -0
  344. data/lib/graphql/unresolved_type_error.rb +35 -0
  345. data/lib/graphql/version.rb +2 -1
  346. data/lib/graphql.rb +86 -41
  347. data/readme.md +15 -101
  348. metadata +394 -279
  349. data/lib/graphql/analysis/analyze_query.rb +0 -73
  350. data/lib/graphql/analysis/max_query_complexity.rb +0 -25
  351. data/lib/graphql/analysis/max_query_depth.rb +0 -25
  352. data/lib/graphql/analysis/query_complexity.rb +0 -122
  353. data/lib/graphql/analysis/query_depth.rb +0 -54
  354. data/lib/graphql/argument.rb +0 -25
  355. data/lib/graphql/base_type.rb +0 -115
  356. data/lib/graphql/boolean_type.rb +0 -9
  357. data/lib/graphql/define/assign_argument.rb +0 -20
  358. data/lib/graphql/define/assign_enum_value.rb +0 -16
  359. data/lib/graphql/define/assign_object_field.rb +0 -21
  360. data/lib/graphql/define/assignment_dictionary.rb +0 -26
  361. data/lib/graphql/define/defined_object_proxy.rb +0 -32
  362. data/lib/graphql/define/instance_definable.rb +0 -79
  363. data/lib/graphql/define/non_null_with_bang.rb +0 -15
  364. data/lib/graphql/define/type_definer.rb +0 -30
  365. data/lib/graphql/define.rb +0 -8
  366. data/lib/graphql/directive/include_directive.rb +0 -10
  367. data/lib/graphql/directive/skip_directive.rb +0 -11
  368. data/lib/graphql/directive.rb +0 -49
  369. data/lib/graphql/enum_type.rb +0 -95
  370. data/lib/graphql/field.rb +0 -131
  371. data/lib/graphql/float_type.rb +0 -5
  372. data/lib/graphql/id_type.rb +0 -12
  373. data/lib/graphql/input_object_type.rb +0 -71
  374. data/lib/graphql/int_type.rb +0 -5
  375. data/lib/graphql/interface_type.rb +0 -38
  376. data/lib/graphql/internal_representation/node.rb +0 -81
  377. data/lib/graphql/internal_representation/rewrite.rb +0 -177
  378. data/lib/graphql/internal_representation.rb +0 -2
  379. data/lib/graphql/introspection/arguments_field.rb +0 -5
  380. data/lib/graphql/introspection/enum_values_field.rb +0 -13
  381. data/lib/graphql/introspection/fields_field.rb +0 -13
  382. data/lib/graphql/introspection/input_fields_field.rb +0 -12
  383. data/lib/graphql/introspection/interfaces_field.rb +0 -5
  384. data/lib/graphql/introspection/of_type_field.rb +0 -6
  385. data/lib/graphql/introspection/possible_types_field.rb +0 -11
  386. data/lib/graphql/introspection/schema_field.rb +0 -15
  387. data/lib/graphql/introspection/type_by_name_field.rb +0 -16
  388. data/lib/graphql/introspection/typename_field.rb +0 -15
  389. data/lib/graphql/list_type.rb +0 -46
  390. data/lib/graphql/non_null_type.rb +0 -43
  391. data/lib/graphql/object_type.rb +0 -93
  392. data/lib/graphql/query/arguments.rb +0 -76
  393. data/lib/graphql/query/directive_resolution.rb +0 -16
  394. data/lib/graphql/query/executor.rb +0 -45
  395. data/lib/graphql/query/literal_input.rb +0 -90
  396. data/lib/graphql/query/serial_execution/execution_context.rb +0 -31
  397. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -82
  398. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -27
  399. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -42
  400. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -107
  401. data/lib/graphql/query/serial_execution.rb +0 -41
  402. data/lib/graphql/query/type_resolver.rb +0 -25
  403. data/lib/graphql/scalar_type.rb +0 -53
  404. data/lib/graphql/schema/catchall_middleware.rb +0 -34
  405. data/lib/graphql/schema/middleware_chain.rb +0 -28
  406. data/lib/graphql/schema/possible_types.rb +0 -34
  407. data/lib/graphql/schema/reduce_types.rb +0 -68
  408. data/lib/graphql/schema/rescue_middleware.rb +0 -53
  409. data/lib/graphql/schema/timeout_middleware.rb +0 -67
  410. data/lib/graphql/schema/type_map.rb +0 -30
  411. data/lib/graphql/schema/validation.rb +0 -164
  412. data/lib/graphql/static_validation/arguments_validator.rb +0 -48
  413. data/lib/graphql/static_validation/message.rb +0 -36
  414. data/lib/graphql/string_type.rb +0 -5
  415. data/lib/graphql/union_type.rb +0 -38
  416. data/spec/graphql/analysis/analyze_query_spec.rb +0 -50
  417. data/spec/graphql/analysis/max_query_complexity_spec.rb +0 -62
  418. data/spec/graphql/analysis/max_query_depth_spec.rb +0 -100
  419. data/spec/graphql/analysis/query_complexity_spec.rb +0 -235
  420. data/spec/graphql/analysis/query_depth_spec.rb +0 -80
  421. data/spec/graphql/argument_spec.rb +0 -20
  422. data/spec/graphql/base_type_spec.rb +0 -24
  423. data/spec/graphql/boolean_type_spec.rb +0 -20
  424. data/spec/graphql/define/instance_definable_spec.rb +0 -55
  425. data/spec/graphql/directive_spec.rb +0 -77
  426. data/spec/graphql/enum_type_spec.rb +0 -31
  427. data/spec/graphql/execution_error_spec.rb +0 -61
  428. data/spec/graphql/field_spec.rb +0 -92
  429. data/spec/graphql/float_type_spec.rb +0 -15
  430. data/spec/graphql/id_type_spec.rb +0 -32
  431. data/spec/graphql/input_object_type_spec.rb +0 -162
  432. data/spec/graphql/int_type_spec.rb +0 -15
  433. data/spec/graphql/interface_type_spec.rb +0 -56
  434. data/spec/graphql/internal_representation/rewrite_spec.rb +0 -120
  435. data/spec/graphql/introspection/directive_type_spec.rb +0 -50
  436. data/spec/graphql/introspection/input_value_type_spec.rb +0 -42
  437. data/spec/graphql/introspection/introspection_query_spec.rb +0 -10
  438. data/spec/graphql/introspection/schema_type_spec.rb +0 -45
  439. data/spec/graphql/introspection/type_type_spec.rb +0 -122
  440. data/spec/graphql/language/generation_spec.rb +0 -42
  441. data/spec/graphql/language/parser_spec.rb +0 -442
  442. data/spec/graphql/language/visitor_spec.rb +0 -49
  443. data/spec/graphql/list_type_spec.rb +0 -32
  444. data/spec/graphql/non_null_type_spec.rb +0 -31
  445. data/spec/graphql/object_type_spec.rb +0 -42
  446. data/spec/graphql/query/arguments_spec.rb +0 -25
  447. data/spec/graphql/query/context_spec.rb +0 -83
  448. data/spec/graphql/query/executor_spec.rb +0 -273
  449. data/spec/graphql/query/serial_execution/execution_context_spec.rb +0 -53
  450. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +0 -66
  451. data/spec/graphql/query/type_resolver_spec.rb +0 -8
  452. data/spec/graphql/query/variables_spec.rb +0 -28
  453. data/spec/graphql/query_spec.rb +0 -363
  454. data/spec/graphql/scalar_type_spec.rb +0 -61
  455. data/spec/graphql/schema/catchall_middleware_spec.rb +0 -32
  456. data/spec/graphql/schema/middleware_chain_spec.rb +0 -42
  457. data/spec/graphql/schema/printer_spec.rb +0 -190
  458. data/spec/graphql/schema/reduce_types_spec.rb +0 -102
  459. data/spec/graphql/schema/rescue_middleware_spec.rb +0 -33
  460. data/spec/graphql/schema/timeout_middleware_spec.rb +0 -180
  461. data/spec/graphql/schema/type_expression_spec.rb +0 -38
  462. data/spec/graphql/schema/validation_spec.rb +0 -219
  463. data/spec/graphql/schema_spec.rb +0 -23
  464. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +0 -63
  465. data/spec/graphql/static_validation/rules/arguments_are_defined_spec.rb +0 -48
  466. data/spec/graphql/static_validation/rules/directives_are_defined_spec.rb +0 -34
  467. data/spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb +0 -39
  468. data/spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb +0 -60
  469. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +0 -31
  470. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +0 -48
  471. data/spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb +0 -47
  472. data/spec/graphql/static_validation/rules/fragment_types_exist_spec.rb +0 -39
  473. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +0 -44
  474. data/spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb +0 -49
  475. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +0 -25
  476. data/spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb +0 -42
  477. data/spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb +0 -44
  478. data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +0 -63
  479. data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +0 -37
  480. data/spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb +0 -53
  481. data/spec/graphql/static_validation/type_stack_spec.rb +0 -37
  482. data/spec/graphql/static_validation/validator_spec.rb +0 -69
  483. data/spec/graphql/string_type_spec.rb +0 -15
  484. data/spec/graphql/union_type_spec.rb +0 -31
  485. data/spec/spec_helper.rb +0 -18
  486. data/spec/support/dairy_app.rb +0 -309
  487. data/spec/support/dairy_data.rb +0 -23
  488. data/spec/support/minimum_input_object.rb +0 -16
  489. data/spec/support/star_wars_data.rb +0 -71
  490. data/spec/support/star_wars_schema.rb +0 -76
@@ -1,30 +0,0 @@
1
- module GraphQL
2
- module Define
3
- # Some conveniences for definining return & argument types.
4
- #
5
- # Passed into initialization blocks, eg {ObjectType#initialize}, {Field#initialize}
6
- class TypeDefiner
7
- include Singleton
8
- # rubocop:disable Style/MethodName
9
- def Int; GraphQL::INT_TYPE; end
10
- def String; GraphQL::STRING_TYPE; end
11
- def Float; GraphQL::FLOAT_TYPE; end
12
- def Boolean; GraphQL::BOOLEAN_TYPE; end
13
- def ID; GraphQL::ID_TYPE; end
14
- # rubocop:enable Style/MethodName
15
-
16
- # Make a {ListType} which wraps the input type
17
- #
18
- # @example making a list type
19
- # list_of_strings = types[types.String]
20
- # list_of_strings.inspect
21
- # # => "[String]"
22
- #
23
- # @param type [Type] A type to be wrapped in a ListType
24
- # @return [GraphQL::ListType] A ListType wrapping `type`
25
- def [](type)
26
- type.to_list_type
27
- end
28
- end
29
- end
30
- end
@@ -1,8 +0,0 @@
1
- require "graphql/define/assign_argument"
2
- require "graphql/define/assign_enum_value"
3
- require "graphql/define/assign_object_field"
4
- require "graphql/define/assignment_dictionary"
5
- require "graphql/define/defined_object_proxy"
6
- require "graphql/define/instance_definable"
7
- require "graphql/define/non_null_with_bang"
8
- require "graphql/define/type_definer"
@@ -1,10 +0,0 @@
1
- GraphQL::Directive::IncludeDirective = GraphQL::Directive.define do
2
- name "include"
3
- description "Include this part of the query if `if` is true"
4
- locations([GraphQL::Directive::FIELD, GraphQL::Directive::FRAGMENT_SPREAD, GraphQL::Directive::INLINE_FRAGMENT])
5
- argument :if, !GraphQL::BOOLEAN_TYPE
6
-
7
- include_proc -> (arguments) {
8
- arguments["if"]
9
- }
10
- end
@@ -1,11 +0,0 @@
1
- GraphQL::Directive::SkipDirective = GraphQL::Directive.define do
2
- name "skip"
3
- description "Ignore this part of the query if `if` is true"
4
- locations([GraphQL::Directive::FIELD, GraphQL::Directive::FRAGMENT_SPREAD, GraphQL::Directive::INLINE_FRAGMENT])
5
-
6
- argument :if, !GraphQL::BOOLEAN_TYPE
7
-
8
- include_proc -> (arguments) {
9
- !arguments["if"]
10
- }
11
- end
@@ -1,49 +0,0 @@
1
- module GraphQL
2
- class Directive
3
- include GraphQL::Define::InstanceDefinable
4
- accepts_definitions :locations, :name, :description, :include_proc, argument: GraphQL::Define::AssignArgument
5
-
6
- attr_accessor :locations, :arguments, :name, :description
7
-
8
- LOCATIONS = [
9
- QUERY = :QUERY,
10
- MUTATION = :MUTATION,
11
- SUBSCRIPTION = :SUBSCRIPTION,
12
- FIELD = :FIELD,
13
- FRAGMENT_DEFINITION = :FRAGMENT_DEFINITION,
14
- FRAGMENT_SPREAD = :FRAGMENT_SPREAD,
15
- INLINE_FRAGMENT = :INLINE_FRAGMENT,
16
- ]
17
-
18
- def initialize
19
- @arguments = {}
20
- end
21
-
22
- def include?(arguments)
23
- @include_proc.call(arguments)
24
- end
25
-
26
- def include_proc=(include_proc)
27
- @include_proc = include_proc
28
- end
29
-
30
- def to_s
31
- "<GraphQL::Directive #{name}>"
32
- end
33
-
34
- def on_field?
35
- locations.include?(FIELD)
36
- end
37
-
38
- def on_fragment?
39
- locations.include?(FRAGMENT_SPREAD) && locations.include?(INLINE_FRAGMENT)
40
- end
41
-
42
- def on_operation?
43
- locations.include?(QUERY) && locations.include?(MUTATION) && locations.include?(SUBSCRIPTION)
44
- end
45
- end
46
- end
47
-
48
- require "graphql/directive/include_directive"
49
- require "graphql/directive/skip_directive"
@@ -1,95 +0,0 @@
1
- module GraphQL
2
- # A finite set of possible values, represented in query strings with
3
- # SCREAMING_CASE_NAMES
4
- #
5
- # @example An enum of programming languages
6
- #
7
- # LanguageEnum = GraphQL::EnumType.define do
8
- # name "Languages"
9
- # description "Programming languages for Web projects"
10
- # value("PYTHON", "A dynamic, function-oriented language")
11
- # value("RUBY", "A very dynamic language aimed at programmer happiness")
12
- # value("JAVASCRIPT", "Accidental lingua franca of the web")
13
- # end
14
- class EnumType < GraphQL::BaseType
15
- accepts_definitions value: GraphQL::Define::AssignEnumValue
16
-
17
- def initialize
18
- @values_by_name = {}
19
- @values_by_value = {}
20
- end
21
-
22
- def values=(values)
23
- @values_by_name = {}
24
- @values_by_value = {}
25
- values.each { |enum_value| add_value(enum_value) }
26
- end
27
-
28
- def add_value(enum_value)
29
- @values_by_name[enum_value.name] = enum_value
30
- @values_by_value[enum_value.value] = enum_value
31
- end
32
-
33
- def values
34
- @values_by_name
35
- end
36
-
37
- # Define a value within this enum
38
- # @deprecated use {.define} API instead
39
- # @param name [String] the string representation of this value
40
- # @param description [String]
41
- # @param deprecation_reason [String] if provided, `deprecated?` will be true
42
- # @param value [Object] the underlying value for this enum value
43
- def value(name, description=nil, deprecation_reason: nil, value: name)
44
- values[name] = EnumValue.new(name: name, description: description, deprecation_reason: deprecation_reason, value: value)
45
- end
46
-
47
- def kind
48
- GraphQL::TypeKinds::ENUM
49
- end
50
-
51
- def validate_non_null_input(value_name)
52
- result = GraphQL::Query::InputValidationResult.new
53
-
54
- if !@values_by_name.key?(value_name)
55
- result.add_problem("Expected #{JSON.dump(value_name)} to be one of: #{@values_by_name.keys.join(', ')}")
56
- end
57
-
58
- result
59
- end
60
-
61
- # Get the underlying value for this enum value
62
- #
63
- # @example get episode value from Enum
64
- # episode = EpisodeEnum.coerce("NEWHOPE")
65
- # episode # => 6
66
- #
67
- # @param value_name [String] the string representation of this enum value
68
- # @return [Object] the underlying value for this enum value
69
- def coerce_non_null_input(value_name)
70
- return nil unless @values_by_name.key?(value_name)
71
- @values_by_name.fetch(value_name).value
72
- end
73
-
74
- def coerce_result(value)
75
- @values_by_value.fetch(value).name
76
- end
77
-
78
- def to_s
79
- name
80
- end
81
-
82
- # A value within an {EnumType}
83
- #
84
- # Created with {EnumType#value}
85
- class EnumValue
86
- attr_accessor :name, :description, :deprecation_reason, :value
87
- def initialize(name:, description:, deprecation_reason:, value:)
88
- @name = name
89
- @description = description
90
- @deprecation_reason = deprecation_reason
91
- @value = value
92
- end
93
- end
94
- end
95
- end
data/lib/graphql/field.rb DELETED
@@ -1,131 +0,0 @@
1
- module GraphQL
2
- # {Field}s belong to {ObjectType}s and {InterfaceType}s.
3
- #
4
- # They're usually created with the `field` helper. If you create it by hand, make sure {#name} is a String.
5
- #
6
- # @example creating a field
7
- # GraphQL::ObjectType.define do
8
- # field :name, types.String, "The name of this thing "
9
- # end
10
- #
11
- # @example handling a circular reference
12
- # # If the field's type isn't defined yet, you have two options:
13
- #
14
- # GraphQL::ObjectType.define do
15
- # # If you pass a Proc, it will be evaluated at schema build-time
16
- # field :city, -> { CityType }
17
- # # If you pass a String, it will be looked up in the global namespace at schema build-time
18
- # field :country, "CountryType"
19
- # end
20
- #
21
- # @example creating a field that accesses a different property on the object
22
- # GraphQL::ObjectType.define do
23
- # # use the `property` option:
24
- # field :firstName, types.String, property: :first_name
25
- # end
26
- #
27
- # @example defining a field, then attaching it to a type
28
- # name_field = GraphQL::Field.define do
29
- # name("Name")
30
- # type(!types.String)
31
- # description("The name of this thing")
32
- # resolve -> (object, arguments, context) { object.name }
33
- # end
34
- #
35
- # NamedType = GraphQL::ObjectType.define do
36
- # # use the `field` option:
37
- # field :name, field: name_field
38
- # end
39
- #
40
- # @example Custom complexity values
41
- # # Complexity can be a number or a proc.
42
- #
43
- # # Complexity can be defined with a keyword:
44
- # field :expensive_calculation, !types.Int, complexity: 10
45
- #
46
- # # Or inside the block:
47
- # field :expensive_calculation_2, !types.Int do
48
- # complexity -> (ctx, args, child_complexity) { ctx[:current_user].staff? ? 0 : 10 }
49
- # end
50
- #
51
- # @example Calculating the complexity of a list field
52
- # field :items, types[ItemType] do
53
- # argument :limit, !types.Int
54
- # # Mulitply the child complexity by the possible items on the list
55
- # complexity -> (ctx, args, child_complexity) { child_complexity * args[:limit] }
56
- # end
57
- #
58
- class Field
59
- include GraphQL::Define::InstanceDefinable
60
- accepts_definitions :name, :description, :resolve, :type, :property, :deprecation_reason, :complexity, argument: GraphQL::Define::AssignArgument
61
-
62
- attr_accessor :deprecation_reason, :name, :description, :property
63
-
64
- attr_reader :resolve_proc
65
-
66
- # @return [String] The name of this field on its {GraphQL::ObjectType} (or {GraphQL::InterfaceType})
67
- attr_reader :name
68
-
69
- # @return [Hash<String => GraphQL::Argument>] Map String argument names to their {GraphQL::Argument} implementations
70
- attr_accessor :arguments
71
-
72
- # @return [Numeric, Proc] The complexity for this field (default: 1), as a constant or a proc like `-> (query_ctx, args, child_complexity) { } # Numeric`
73
- attr_accessor :complexity
74
-
75
- def initialize
76
- @complexity = 1
77
- @arguments = {}
78
- @resolve_proc = build_default_resolver
79
- end
80
-
81
- # Get a value for this field
82
- # @example resolving a field value
83
- # field.resolve(obj, args, ctx)
84
- #
85
- # @param object [Object] The object this field belongs to
86
- # @param arguments [Hash] Arguments declared in the query
87
- # @param context [GraphQL::Query::Context]
88
- def resolve(object, arguments, context)
89
- @resolve_proc.call(object, arguments, context)
90
- end
91
-
92
- def resolve=(resolve_proc)
93
- @resolve_proc = resolve_proc || build_default_resolver
94
- end
95
-
96
- def type=(new_return_type)
97
- @clean_type = nil
98
- @dirty_type = new_return_type
99
- end
100
-
101
- # Get the return type for this field.
102
- def type
103
- @clean_type ||= GraphQL::BaseType.resolve_related_type(@dirty_type)
104
- end
105
-
106
- # You can only set a field's name _once_ -- this to prevent
107
- # passing the same {Field} to multiple `.field` calls.
108
- #
109
- # This is important because {#name} may be used by {#resolve}.
110
- def name=(new_name)
111
- if @name.nil?
112
- @name = new_name
113
- else
114
- raise("Can't rename an already-named field. (Tried to rename \"#{@name}\" to \"#{new_name}\".) If you're passing a field with the `field:` argument, make sure it's an unused instance of GraphQL::Field.")
115
- end
116
- end
117
-
118
- def to_s
119
- "<Field: #{name || "not-named"}>"
120
- end
121
-
122
- private
123
-
124
- def build_default_resolver
125
- -> (obj, args, ctx) do
126
- resolve_method = self.property || self.name
127
- obj.public_send(resolve_method)
128
- end
129
- end
130
- end
131
- end
@@ -1,5 +0,0 @@
1
- GraphQL::FLOAT_TYPE = GraphQL::ScalarType.define do
2
- name "Float"
3
- coerce_input -> (value) { value.is_a?(Numeric) ? value.to_f : nil }
4
- coerce_result -> (value) { value.to_f }
5
- end
@@ -1,12 +0,0 @@
1
- GraphQL::ID_TYPE = GraphQL::ScalarType.define do
2
- name "ID"
3
- coerce_result -> (value) { value.to_s }
4
- coerce_input -> (value) {
5
- case value
6
- when String, Fixnum, Bignum
7
- value.to_s
8
- else
9
- nil
10
- end
11
- }
12
- end
@@ -1,71 +0,0 @@
1
- module GraphQL
2
- # A complex input type for a field argument.
3
- #
4
- # @example An input type with name and number
5
- # PlayerInput = GraphQL::InputObjectType.define do
6
- # name("Player")
7
- # input_field :name, !types.String
8
- # input_field :number, !types.Int
9
- # end
10
- #
11
- class InputObjectType < GraphQL::BaseType
12
- accepts_definitions(
13
- input_field: GraphQL::Define::AssignArgument,
14
- argument: GraphQL::Define::AssignArgument
15
- )
16
-
17
- # @return [Hash<String => GraphQL::Argument>] Map String argument names to their {GraphQL::Argument} implementations
18
- attr_accessor :arguments
19
-
20
- alias :input_fields :arguments
21
-
22
- def initialize
23
- @arguments = {}
24
- end
25
-
26
- def kind
27
- GraphQL::TypeKinds::INPUT_OBJECT
28
- end
29
-
30
- def validate_non_null_input(input)
31
- result = GraphQL::Query::InputValidationResult.new
32
-
33
- # Items in the input that are unexpected
34
- input.each do |name, value|
35
- if arguments[name].nil?
36
- result.add_problem("Field is not defined on #{self.name}", [name])
37
- end
38
- end
39
-
40
- # Items in the input that are expected, but have invalid values
41
- invalid_fields = arguments.map do |name, field|
42
- field_result = field.type.validate_input(input[name])
43
- if !field_result.valid?
44
- result.merge_result!(name, field_result)
45
- end
46
- end
47
-
48
- result
49
- end
50
-
51
- def coerce_non_null_input(value)
52
- input_values = {}
53
-
54
- arguments.each do |input_key, input_field_defn|
55
- field_value = value[input_key]
56
- field_value = input_field_defn.type.coerce_input(field_value)
57
-
58
- # Try getting the default value
59
- if field_value.nil?
60
- field_value = input_field_defn.default_value
61
- end
62
-
63
- if !field_value.nil?
64
- input_values[input_key] = field_value
65
- end
66
- end
67
-
68
- GraphQL::Query::Arguments.new(input_values)
69
- end
70
- end
71
- end
@@ -1,5 +0,0 @@
1
- GraphQL::INT_TYPE = GraphQL::ScalarType.define do
2
- name "Int"
3
- coerce_input -> (value) { value.is_a?(Numeric) ? value.to_i : nil }
4
- coerce_result -> (value) { value.to_i }
5
- end
@@ -1,38 +0,0 @@
1
- module GraphQL
2
- # A collection of types which implement the same fields
3
- #
4
- # @example An interface with three required fields
5
- # DeviceInterface = GraphQL::InterfaceType.define do
6
- # name("Device")
7
- # description("Hardware devices for computing")
8
- #
9
- # field :ram, types.String
10
- # field :processor, ProcessorType
11
- # field :release_year, types.Int
12
- # end
13
- #
14
- class InterfaceType < GraphQL::BaseType
15
- include GraphQL::BaseType::HasPossibleTypes
16
- accepts_definitions :resolve_type, field: GraphQL::Define::AssignObjectField
17
-
18
- attr_accessor :fields
19
-
20
- def initialize
21
- @fields = {}
22
- end
23
-
24
- def kind
25
- GraphQL::TypeKinds::INTERFACE
26
- end
27
-
28
- # @return [GraphQL::Field] The defined field for `field_name`
29
- def get_field(field_name)
30
- fields[field_name]
31
- end
32
-
33
- # @return [Array<GraphQL::Field>] All fields on this type
34
- def all_fields
35
- fields.values
36
- end
37
- end
38
- end
@@ -1,81 +0,0 @@
1
- require "set"
2
-
3
- module GraphQL
4
- module InternalRepresentation
5
- class Node
6
- def initialize(ast_node:, return_type: nil, on_types: Set.new, name: nil, definition: nil, children: {}, spreads: [], directives: Set.new)
7
- @ast_node = ast_node
8
- @return_type = return_type
9
- @on_types = on_types
10
- @name = name
11
- @definition = definition
12
- @children = children
13
- @spreads = spreads
14
- @directives = directives
15
- end
16
-
17
- # Note: by the time this gets out of the Rewrite phase, this will be empty -- it's emptied out when fragments are merged back in
18
- # @return [Array<GraphQL::Language::Nodes::FragmentSpreads>] Fragment names that were spread in this node
19
- attr_reader :spreads
20
-
21
- # These are the compiled directives from fragment spreads, inline fragments, and the field itself
22
- # @return [Set<GraphQL::Language::Nodes::Directive>]
23
- attr_reader :directives
24
-
25
- # @return [GraphQL::Field, GraphQL::Directive] The definition to use to execute this node
26
- attr_reader :definition
27
-
28
- # @return [String] the name to use for the result in the response hash
29
- attr_reader :name
30
-
31
- # @return [GraphQL::Language::Nodes::AbstractNode] The AST node (or one of the nodes) where this was derived from
32
- attr_reader :ast_node
33
-
34
- # This may come from the previous field's return value or an explicitly-typed fragment
35
- # @example On-type from previous return value
36
- # {
37
- # person(id: 1) {
38
- # firstName # => on_type is person
39
- # }
40
- # }
41
- # @example On-type from explicit type condition
42
- # {
43
- # node(id: $nodeId) {
44
- # ... on Nameable {
45
- # firstName # => on_type is Nameable
46
- # }
47
- # }
48
- # }
49
- # @return [Set<GraphQL::ObjectType, GraphQL::InterfaceType>] the types this field applies to
50
- attr_reader :on_types
51
-
52
- # @return [GraphQL::BaseType]
53
- attr_reader :return_type
54
-
55
- # @return [Array<GraphQL::Query::Node>]
56
- attr_reader :children
57
-
58
- def inspect(indent = 0)
59
- own_indent = " " * indent
60
- self_inspect = "#{own_indent}<Node #{name} (#{definition ? definition.name + ": " : ""}{#{on_types.to_a.join("|")}} -> #{return_type})>"
61
- if children.any?
62
- self_inspect << " {\n#{children.values.map { |n| n.inspect(indent + 2 )}.join("\n")}\n#{own_indent}}"
63
- end
64
- self_inspect
65
- end
66
-
67
- def dup
68
- self.class.new({
69
- ast_node: ast_node,
70
- return_type: return_type,
71
- on_types: on_types,
72
- name: name,
73
- definition: definition,
74
- children: children,
75
- spreads: spreads,
76
- directives: directives,
77
- })
78
- end
79
- end
80
- end
81
- end