graphql 1.7.3 → 1.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (348) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql.rb +6 -5
  3. data/lib/graphql/analysis/analyze_query.rb +2 -2
  4. data/lib/graphql/backtrace.rb +5 -0
  5. data/lib/graphql/coercion_error.rb +5 -0
  6. data/lib/graphql/define/type_definer.rb +2 -2
  7. data/lib/graphql/execution/execute.rb +7 -6
  8. data/lib/graphql/execution/lazy/resolve.rb +1 -1
  9. data/lib/graphql/execution/multiplex.rb +13 -4
  10. data/lib/graphql/execution_error.rb +8 -1
  11. data/lib/graphql/language/parser.rb +6 -5
  12. data/lib/graphql/language/parser.y +6 -5
  13. data/lib/graphql/query.rb +10 -1
  14. data/lib/graphql/query/context.rb +2 -0
  15. data/lib/graphql/relay/relation_connection.rb +1 -1
  16. data/lib/graphql/scalar_type.rb +24 -0
  17. data/lib/graphql/schema.rb +18 -3
  18. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +13 -2
  19. data/lib/graphql/static_validation/validator.rb +1 -1
  20. data/lib/graphql/subscriptions.rb +9 -1
  21. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +6 -3
  22. data/lib/graphql/subscriptions/event.rb +1 -1
  23. data/lib/graphql/subscriptions/instrumentation.rb +1 -1
  24. data/lib/graphql/subscriptions/serialize.rb +52 -0
  25. data/lib/graphql/tracing.rb +50 -21
  26. data/lib/graphql/tracing/appsignal_tracing.rb +28 -0
  27. data/lib/graphql/tracing/new_relic_tracing.rb +28 -0
  28. data/lib/graphql/tracing/platform_tracing.rb +59 -0
  29. data/lib/graphql/tracing/scout_tracing.rb +33 -0
  30. data/lib/graphql/tracing/skylight_tracing.rb +39 -0
  31. data/lib/graphql/version.rb +1 -1
  32. data/spec/dummy/Gemfile +10 -0
  33. data/spec/dummy/Gemfile.lock +149 -0
  34. data/spec/dummy/README.md +24 -0
  35. data/spec/dummy/Rakefile +7 -0
  36. data/spec/dummy/app/assets/config/manifest.js +1 -0
  37. data/spec/dummy/app/assets/javascripts/application.js +66 -0
  38. data/spec/dummy/app/channels/application_cable/channel.rb +5 -0
  39. data/spec/dummy/app/channels/application_cable/connection.rb +5 -0
  40. data/spec/dummy/app/channels/graphql_channel.rb +84 -0
  41. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  42. data/spec/dummy/app/controllers/pages_controller.rb +5 -0
  43. data/spec/dummy/app/helpers/application_helper.rb +3 -0
  44. data/spec/dummy/app/jobs/application_job.rb +3 -0
  45. data/spec/dummy/app/views/layouts/application.html.erb +12 -0
  46. data/spec/dummy/app/views/pages/show.html +16 -0
  47. data/spec/dummy/bin/bundle +4 -0
  48. data/spec/dummy/bin/rails +5 -0
  49. data/spec/dummy/bin/rake +5 -0
  50. data/spec/dummy/bin/setup +31 -0
  51. data/spec/dummy/bin/update +27 -0
  52. data/spec/dummy/bin/yarn +12 -0
  53. data/spec/dummy/config.ru +6 -0
  54. data/spec/dummy/config/application.rb +31 -0
  55. data/spec/dummy/config/boot.rb +4 -0
  56. data/spec/dummy/config/cable.yml +10 -0
  57. data/spec/dummy/config/environment.rb +6 -0
  58. data/spec/dummy/config/environments/development.rb +40 -0
  59. data/spec/dummy/config/environments/production.rb +76 -0
  60. data/spec/dummy/config/environments/test.rb +37 -0
  61. data/spec/dummy/config/initializers/application_controller_renderer.rb +9 -0
  62. data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
  63. data/spec/dummy/config/initializers/cookies_serializer.rb +6 -0
  64. data/spec/dummy/config/initializers/filter_parameter_logging.rb +5 -0
  65. data/spec/dummy/config/initializers/inflections.rb +17 -0
  66. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  67. data/spec/dummy/config/initializers/wrap_parameters.rb +10 -0
  68. data/spec/dummy/config/locales/en.yml +33 -0
  69. data/spec/dummy/config/puma.rb +57 -0
  70. data/spec/dummy/config/routes.rb +4 -0
  71. data/spec/dummy/config/secrets.yml +32 -0
  72. data/spec/dummy/log/development.log +360 -0
  73. data/spec/dummy/log/test.log +789 -0
  74. data/spec/dummy/package.json +5 -0
  75. data/spec/dummy/public/404.html +67 -0
  76. data/spec/dummy/public/422.html +67 -0
  77. data/spec/dummy/public/500.html +66 -0
  78. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  79. data/spec/dummy/public/apple-touch-icon.png +0 -0
  80. data/spec/dummy/public/favicon.ico +0 -0
  81. data/spec/dummy/public/robots.txt +1 -0
  82. data/spec/dummy/test/application_system_test_case.rb +6 -0
  83. data/spec/dummy/test/system/action_cable_subscription_test.rb +41 -0
  84. data/spec/dummy/test/test_helper.rb +3 -0
  85. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-5/-5OWGoO21F6_WNuECrXgkwH7NcKlWSSe2GjVanwsmUk.cache +0 -0
  86. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-T/-TNJ0-j8HjZCYUE7EDQlhfGu64B8guOUPkXYO6HFhus.cache +0 -0
  87. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/09/09tM9-9HC9J7np7PawoxLz0YZYB_jmwdMFL4N4WBJdM.cache +1 -0
  88. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0H/0HR_baZ3Owzw1Gx5epPCDhsl0UXWGh73zDkQu08IHuc.cache +1 -0
  89. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1I/1IbYhe7oTUZvWCe0pIMBMp5bLq5pCuxuxlgnQV1TAno.cache +2 -0
  90. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1I/1i4n3ptJre3b2zbA9AvgzE-ThTU_1mqSX3AlMtS_Qxk.cache +1 -0
  91. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1L/1LQJg_vkfK3o2UCvJGQKuGjXydCfw7GerrpJCGiKw5k.cache +1 -0
  92. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1U/1U5446rsEAdkd13irJZX_XQoEKv9Ay8wSrKES_-gD8k.cache +0 -0
  93. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2c/2cKLFtRkYbS9lni4MJ8unG2jW0YmNgK6tdelamzjM30.cache +0 -0
  94. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2m/2mGtEm87jDbeppJBYdnCWjRDV5cQaosG-bKVwVN7_kE.cache +1 -0
  95. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2p/2pt2peFCVR6OoIrgufIQbrDGMcFLYwrJtHsLENF31jQ.cache +0 -0
  96. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2u/2uWP73mE8FRywvUKKT08RhFuNUlVUEopIKdt0Jtt8y8.cache +1 -0
  97. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3-/3-C6wEhMG8qKt4rLfzJzMlRBgxb5aDJIB2m5WS0WbAI.cache +0 -0
  98. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/33/33_yR0KysvUnUWvR5TzwELDqGApTbi2ex2o3vY-ybfU.cache +1 -0
  99. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3N/3NTAQ9mVEZbccGibE39JpeqlDw2L6zcUtlRsbPCT918.cache +2 -0
  100. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3V/3V8ZntS_gc1fums5LuLZK0a_nwPIjLXSD0JNF_3ScEk.cache +0 -0
  101. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4U/4UAd9Le8LhEYS8mCovy_yQC_ofpTBWt1Q997x0hg6xY.cache +0 -0
  102. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4V/4VaOsvficwh2EmmuR-pEJTISpR9mbr8Cf7jYYyptEwY.cache +2 -0
  103. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/53/53WajXFPOCZVqMrL7nxYAYl90fSweya9XM4vrDJhU6c.cache +1 -0
  104. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/53/53oHiwCXSKokJPEWS6w53bGXkeZm-YAcDuXcBhNscEY.cache +0 -0
  105. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5Q/5QrnrmEh-kADCXW4bexyNOrjfDmlq_YHgPcEYcHtz28.cache +0 -0
  106. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5T/5ThW8FwEh4SPqrxD1RKHSc3o-vA_2ff5zKoly--6uuM.cache +0 -0
  107. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5d/5dGYuqW7Lp3oCc1lq8B9Uoa0lfgE4iOEiGvgwRf1JHA.cache +0 -0
  108. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5f/5fUAiOa1Zm-ove4HOeSLN1OQmEMHu0OYjHrYIK3-SGE.cache +2 -0
  109. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5f/5flfgUDFCRhrUbGifk2RfSEGWOBMubAcaWg4ZadI5PY.cache +1 -0
  110. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5i/5iW33HH6azj0ds2lqDaOB1666CY_uOHhVAQavgh7tYw.cache +1 -0
  111. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5m/5m0G50I6WuIDftOEFtJHjC0KmN1mnhe51wBZ2dq9la0.cache +0 -0
  112. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5m/5mzbQNNLQ1vmll1Azo5cAZpDY2Zc7C_CLYJH2zKtzYY.cache +0 -0
  113. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6K/6KeDYkyM_nd3JJSp2B4HtcpdeA3uHgJLSlRaEVpH328.cache +1 -0
  114. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6V/6Vgv7g9Uc08fiIpuLxlhqPTfx6tGo1yLedmmUvEL41A.cache +2 -0
  115. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6n/6nd7P_DUqcusZX7UkA5TILZyMrcu-AYfxnc2Kz_J0qQ.cache +1 -0
  116. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6x/6x8om3H3i1stGMEt1wnZ3OsVPGj-sxwE-eyd7A6hSi8.cache +0 -0
  117. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/70/7037jorQaO3wUpzYOJoDOd8cgJMeC2uTysojXmeaYzs.cache +0 -0
  118. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7p/7pN8wYS-6xc_x5BzT4gRgFAiVGhhcW9NHg_e6Ng5CDw.cache +0 -0
  119. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7r/7rgR5Gy_i08FxXwdCvtqSCXSghB7e5EXB2Vox4MQVUg.cache +2 -0
  120. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8Q/8Qz_ptqTPNDlaE2aAVgaFiIBByiF2fhNHKQJFggzJYA.cache +0 -0
  121. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8e/8ezXMOIySx7oyopI2nH1EXfCzPCFHTJiS3q2tvyEZjY.cache +1 -0
  122. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/99/99m8UCKl4j8IpsVOK8ltLHyNh8Ae0nHw3GBkC34V_co.cache +0 -0
  123. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9a/9abVi8XfoB8pGShaL5_-jzZGJIxKmedpFY0HQ5h24oE.cache +1 -0
  124. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9g/9gsAnrIrurboVInpkI-XlUZdUGmshgVKXpdRCtXUt6U.cache +2 -0
  125. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9l/9lUXwCLUk9jTC-3kZdXDSRo-klgJVL54qVOIQmKxlyo.cache +1 -0
  126. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9z/9zFndwRgSOtYlsafWZK_zfCvnqMF4Vv9IqkVxn0gUbM.cache +1 -0
  127. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/A2/A2LHSq1LhqpUvGzPhj15d7c1Sj2RkYyajxf8ipO1x0A.cache +1 -0
  128. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AO/AOgGJjES3shgkGKKaEb6GMfcfUm18alfRVbYsMJKFyc.cache +0 -0
  129. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ag/AgIFaB92zNMX4-Gy1uYelrx1pnszMI9CxP0aO62ismQ.cache +1 -0
  130. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ag/agBYa9WG7ZT869eaOCVQ4mfpe9AWU8oNjU0g9foJZxk.cache +1 -0
  131. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/B4/B43LeT9Wba4fLvXw-C_kKq-x9HwYZxnBBiltbIufzzQ.cache +0 -0
  132. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/B4/b4w856SSmGPJvZoawjQ63nUN1himU_z41nfZQNGvdag.cache +0 -0
  133. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bg/BgLjB8mXnvRh9DrKcGI_KblFPuA84hjh4nJC50FDsWc.cache +2 -0
  134. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bw/Bwb0DDjQm45Eqy64G2YHrm2eOj1PkqG51Hh3MWG0V40.cache +1 -0
  135. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/C4/C4hGtajZFD6B_bt3ow2qxPGLb1ycjE_7G8Ssi2q5HuA.cache +1 -0
  136. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/CA/CAI82me2PN_gR-kiw8xQDx9FQBiLj_cyO4HVfZfiqf8.cache +0 -0
  137. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/CR/CR85EGUmeGMQQR96qjUurW5HSk4vr5JgWDLQEFxhnAY.cache +1 -0
  138. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cn/CniRwlPjVCW9FLyHc9oNHIvE-TdlvyAP-lAOrkSBsQg.cache +1 -0
  139. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D1/D1ZVypz4A_qF0cewMs2YiW5uWi7MKEdPOoOXeBQKeL0.cache +1 -0
  140. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D4/D4osajB0M3Tk4bo3qAkcpkXlGHReFCOJxlo20Deiqk4.cache +0 -0
  141. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D9/D9cZjx3n4E4qKXoR9rROjaYWpm1nnip45O0Ubyqyho8.cache +0 -0
  142. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DP/DPvPPYoq_7HYVvKapcWxWL0bSIyINU7Oc93He65SrAk.cache +1 -0
  143. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Df/Dfl0fgtV2z9SkiRUCnFBU6pD3TPmL0rI_lUqOVSglz8.cache +0 -0
  144. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Df/dfOhvqqzI4Yxr6VUUn6T5DARFk5SNeEasmpVaiBivxQ.cache +1 -0
  145. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dl/DlaCy1X82C9F58mF2UUes54AZzBUIGyuFiZEc9PUW0U.cache +1 -0
  146. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dy/DyHdMGh9NYCQ6KM4Cs6ySrmxIGQLcs3urJo2ni_GHeI.cache +0 -0
  147. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/E8/E84Qt1hM8br74RgXrkdGt8CGM8KnVROweUTPah6hpao.cache +0 -0
  148. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ea/Ea7ca7cxAj6u9A8UKN2ZVtAFE3GXgmTZtHiorPaUnTg.cache +1 -0
  149. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache +0 -0
  150. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FN/FNAoxlHjPOpzywpYUXo13-PLULLhE4lZ8jRmsdCpQ8s.cache +2 -0
  151. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FS/FS-IBIwKNJB6ey4YiEJy3WQxdihlzqhn27zuXCPW3I4.cache +0 -0
  152. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FS/fsx-7r5CnuEuuruO05WoCqUE7I7yHdsHFyufpAo9L_w.cache +2 -0
  153. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FU/FU7chcPDGpikN_If4SNgCUiwKbAtWa-dV0x644C-R8A.cache +0 -0
  154. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FZ/FZS5A8sTziH2yLSQsehYe2Lov6tTh7qddnYpUCOrSg8.cache +0 -0
  155. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F_/F_wHSssqVgbtl2xnKiCAx8T1yXJcm6G6FFYyEQOM1vk.cache +1 -0
  156. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gx/GxO9oxH-DZ8Vk1eqP17OKFSocWisT4gGJtcGM1t5Fio.cache +2 -0
  157. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/H6/H6QLQGIr0MZMFEBwWkJpjKCoSmnCM1d1b7Z2bT1pchI.cache +0 -0
  158. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HC/HCDOUd7-S45aJ_PjVAC_Vmjyud3i1aQv4cE3t9_Z3Dw.cache +2 -0
  159. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HN/HNBghWjxKPnFYO5L6fJf8R4AeZ0rdAOL6sUFWovnBwU.cache +1 -0
  160. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hb/HbX5bR5UYD1vbffHD_0rvCrL9QARJ6bCpD00MQdR1g4.cache +1 -0
  161. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hm/HmOkSBI1TuhJ1te9t-y9GHxMWn2FVl-RnFS8oWi7V_w.cache +1 -0
  162. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IN/INJypnigTMfqqPOcC-b9F0Iye_HbwItx-5XDHLUtWDc.cache +1 -0
  163. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ig/IgW_xNyC9axLdFbnQLpkLYqhAzSgmdACo0mT8ai455Y.cache +1 -0
  164. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JY/JYy-al-c4ButCglqQfY9a5PZV6XFNBjtHD9sWas7NbE.cache +1 -0
  165. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ja/Jah1OygWPoT6OkBv-5VE19u3b0vGJTHsGse68OBZmtQ.cache +2 -0
  166. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/K0/K0-nXg3QbjeMtvvRvPXZiL0kCh0YtyApX9XrJrj95Po.cache +0 -0
  167. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache +0 -0
  168. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KI/KIVgv3yfi4fSugBTELntGMTgpB8JKD1c5_CxdEvkfaw.cache +1 -0
  169. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KO/KOgbmY0o5uemlVX1FmoTnTDK6QDnydWoRF2Ht9TtN2U.cache +1 -0
  170. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LI/LIHDRdjIBdKfW4tnKTESwsWFz4OeCV-sJZtEKUYaLiU.cache +1 -0
  171. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/La/LavB01ePIpCqyhy1AJu1V9piCEAYuTyS5bjdSEVqEoY.cache +1 -0
  172. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Lx/Lx6tpPxpS0hrFKiVXiv37Q4bFJjhDJJak7WUoOemLC8.cache +0 -0
  173. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Lx/LxRPPEO9CB_ckDd1jRPcKJjsm_Gc0CGMSmrdUXXpzjs.cache +2 -0
  174. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/M6/M6hnb_EIRICxNcrNSkV7ekfCpVo0O9U2XSSaLxDqONI.cache +1 -0
  175. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Mq/MqwfYiRcCBhwwS_cH5IyKUMsvSreSqmpD_WV3AHeZcw.cache +0 -0
  176. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N-/N-bT7IhQ1pVoh_gTwxXqeK3dVlmJkxatBZyFP43Si3I.cache +2 -0
  177. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N1/N1EMMEzwuRyuF1gWtXmBNA8MMh4jYud3NP4IQ4_6APY.cache +1 -0
  178. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NV/NVd17BdcRmpEVFGZDHcRFIgNC2usd2N50atmE6dfOiI.cache +1 -0
  179. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NV/NvHlFPeFw2ONsOqGrVoMfZKZNz-6Hio21cxECqHgZd4.cache +0 -0
  180. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ON/ONTTDNMWFhjcmhKbOP3KqbRtGvxLORP9OH6wMiCk_Ys.cache +2 -0
  181. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ol/Olkqarn5mhfEd6uRArgjaOA-B1ZXvvcXpuIFVyoDAXc.cache +0 -0
  182. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/P-/P-STcrlrr_UHY2DAzJOcMU2FOt1STMToqoJ3hYaAEEE.cache +1 -0
  183. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PA/PAJgjBwkjHBCPPw8wWUsKsUR7TvgP4RK7PV8-Jdqluw.cache +2 -0
  184. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PA/paWxJFaOGYb5g3bPUex7k8lTzXqbJ4F0Uw_zBZI8XxU.cache +1 -0
  185. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PP/PPmjUfdcsG-U5YdKOGrvFGoDVweIuWHjIggt6U2rRIo.cache +0 -0
  186. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Pm/PmTiqVQJ4334Q0J-QCdlEdApesHyk8Lwuunb-_RivmU.cache +1 -0
  187. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QY/QYJsCmNADCk6tDZF57r1lz6gqD88LSPkQXtY3Vm-uUI.cache +1 -0
  188. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Q_/Q_J_xCMNzLrUyke5pUNpWmyoVj_lW8yCigUKNE9FyXs.cache +1 -0
  189. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RB/RBv3Nnh3mIqYx7YWNYxr9uuJlQKt0sISacYDiDkOJ3w.cache +1 -0
  190. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RE/REff4oUdSjRZwuhZkynEkMbvKkAnflI5V3ti3ZCXtO0.cache +2 -0
  191. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/S2/S2ulcWK2u8bC-jxhkG5P2oDyoR91wKtZkw6I5RfTz24.cache +0 -0
  192. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SD/SDQnsrLw-b0RFX481lQQF9x0HiZaefzuBAuOj3cwo9I.cache +1 -0
  193. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SD/sDGKBkb0LsWWFOmHNgz4ahOe6iLlCfJ8Zy8iInv4teI.cache +0 -0
  194. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SM/SMCVX47Gg93AptU_3a66VblIT3KLHqKrkHHuMhfPIxk.cache +1 -0
  195. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SQ/SQPrFInSYpfPUMfXYJXnph6q8eAFQsL_plvmqSwAVEM.cache +2 -0
  196. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SR/SRppQZkF9KwCpA8Ud3swxGKHJUSM5M75OTHlmfiTeAY.cache +1 -0
  197. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TE/TEEzQHAX6KOPY3AIg2OPhwQPpIrKlcqGJnqKnvz9YDE.cache +1 -0
  198. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tr/Tr5ExKD0jPytz0PJn0sVycLrI6t9y-4wGKO4MTwzi2U.cache +2 -0
  199. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tr/TrY4Ml48luBYhVfMdvwlyB7zO-QQQaWIW7ORlLUnYRg.cache +1 -0
  200. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tt/Tt0V7r8e-tdXVEGXDjN31D88EHb3z-Jo47tXWmAPCwA.cache +0 -0
  201. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tx/TxxBMsRYAeLcndv5YuF1FkCV30qi1yhYI8AzTki0Zmo.cache +2 -0
  202. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/U9/U9dnnrqeoOE-mYHdH4XmicZAjMQbjhjXdiA8VlMGsHA.cache +0 -0
  203. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UA/UA89Y066oW41G1gWoHWdEXcPU2JZ66j8dnXKwoc3yJc.cache +2 -0
  204. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UK/UKklu-xV4ZGx7P5-zWqENrlHQUaedqEuUNTgezjc3g0.cache +2 -0
  205. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/US/USYEqEC54xCRgdxfID_BklmAl2jIXZAKJ9BhapbMqNg.cache +1 -0
  206. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V5/V5dKKdHyA7y6N44igdqPBARmoV0tYdUsUrmf2lJkF6M.cache +1 -0
  207. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VJ/VJ9Lp37PnSDzVOvhSVhKc2eG-KOuv3bRFxar6M8LLnA.cache +1 -0
  208. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VP/VPf8mKPeiYU53d-M_P60d-YL6wdTka1rTVRa4F5dB_k.cache +0 -0
  209. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VY/VYJV9KoRx38NfAvSvXouEYF_0k-Su_KdFuSSXPOoSOg.cache +1 -0
  210. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/W2/W2nmNoF054n5uT-S7jhvUpaJqxHYWiJnHNP8fbjwjj0.cache +1 -0
  211. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WA/WA0OKbW1ShDLWAbN4voLShkG6JaNjvWeSNF3ZpLcUqY.cache +0 -0
  212. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wr/WriMHycrWjgHpmRpAo9N4nvDB5T0lBL5EOTTUQUHwn4.cache +1 -0
  213. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ws/WsHB1qkchRYVF4JV0Yqtr-QiyZ26DiLFtKTrCRVc5kI.cache +0 -0
  214. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XD/XDRDiP6A_Qz7pCCfZHYO6Xfob7trS4JQQoX_ByuWnRI.cache +2 -0
  215. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xr/XrGClLu5lOe_6gWU_Nm-tCAC6tUCFpoTPwyKLHmrnNw.cache +0 -0
  216. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xu/XupuIipXyzmZQIRfy2SfGTCS21Y-sBxWWjFWmnxYllM.cache +1 -0
  217. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xx/XxkX9e-7J9By7nLHpwyUoOdUJ78twXYUefvXKie2WkA.cache +1 -0
  218. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yf/YfGn3oqi1Sm1_rHBqpmph8QpfhWTITbEUWS9waD_HKg.cache +0 -0
  219. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yf/yfhQwhH-ul-osfCM7_EXtSEeujd0TqsbqPoVgj7ehi0.cache +0 -0
  220. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yl/YlIiT75oC_1vUeD7NoTHufIKf1Tdnjg82aJbfI79WGQ.cache +2 -0
  221. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Z-/Z--HP-BzybXzcZ6TPTFHonJqTM1B3B2g-5uUSi_EuSc.cache +0 -0
  222. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZT/ZTVpqYlcQg-w8iygSuUB7UBreT5bxLOPDNlKjzg5kMY.cache +0 -0
  223. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZT/ztYH9puOw0lwdIjwlH18IT68aY0KvTPEiAQTrxn4doQ.cache +2 -0
  224. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Za/ZaT_Lz8qe4rCd9sYS8dWxhl6MB_pWFUu7sqohGkRsAo.cache +0 -0
  225. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Zz/Zzsh2ASGqBSWLSWIU4fAyxS3iVuJDxdTCw8jOOsUNzA.cache +1 -0
  226. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_-/_-Y1fY6ejeTyiaDheuPSN_aPVwcvRdIlowBkfFxEY0c.cache +0 -0
  227. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_6/_61xcFfBTsk2JixNV1J-NP9FtW67n0Haapr-7H5toEU.cache +2 -0
  228. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_R/_RQaUmRUEEXsJ7wurDZfjh63xJqRWfkCTDSiA0pvOIg.cache +2 -0
  229. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_m/_mRvClvA9ew3lpKq5JBpjPY232J6bAj9K_XP3N2HFD8.cache +0 -0
  230. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_z/_zNZb_3SH_fXs-tDFm3LtWun9BlLzBVn3aDO9l6K-NQ.cache +1 -0
  231. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/a7/a7lacDViLUEaXFwV6UuZfTUood23K0X7_s2YYxP7dQw.cache +1 -0
  232. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aV/aVdjJbgLyd5MLwvnXSaX_83wDD0zG8DQnKs4hlOXOJ0.cache +1 -0
  233. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/al/alJwyXpJHF8RaBpaslorYD4Et6PO_-7Jr1qQmR_Wtys.cache +0 -0
  234. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bC/bCSJnsDI4K9-Hwd7p_GC9M36gA2QbYgtfl-Guk1Ev80.cache +1 -0
  235. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bM/bMopwpsFeLUsi20J9L9mPnoi6ZMJMVHIzxbTHbWrBho.cache +2 -0
  236. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bd/bdikSDf26RlvOPFhOT9G-XHnMj8ptHrTYB3QUuABCUQ.cache +0 -0
  237. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bi/biczy7hoa1_tzXKc6t2QU3WdkhkfdBfwwq66GVVz914.cache +1 -0
  238. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bq/bqRZ6xUe_GzjdFbiyk0iMQoNHY4xk1gccuw3l8KUJz8.cache +2 -0
  239. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bv/bvfgzCTJxyiwgFWSXthcO14iFDl_K1NuT0vWVXcI-WU.cache +0 -0
  240. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cZ/cZw-zK9k1to5xz_hZ8FQB5wpR9Ks1-bhn7kJJVu9Ki0.cache +1 -0
  241. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ci/cipvvZ93wZHrDs_W1liu4PQTEJsKuPhbk6JG1DsMfxM.cache +1 -0
  242. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ck/ckLh5gBuqdrZ9fuxYz87cU_3hhZMI_7tcqNJ2EjtgpI.cache +0 -0
  243. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dG/dGyq85wVf9waxk23R1VlUQQMflMpPSsiMOTM9TtZ1f0.cache +0 -0
  244. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/d_/d_Ckuu1Nlhrqje-LDVqGwCu8pLiyAX31uSdo7QCELeI.cache +2 -0
  245. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/db/db0UgKlp2vcgigF3FfR0UlilfVgDEJuew9qxLsuR374.cache +0 -0
  246. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/db/dbXmPOhlH1AKN08KRg0ow8KOe-_XKeBNOg0HJvnqQCs.cache +0 -0
  247. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dr/drw7hbVGSDH0ujUo0r9Fmfbjvw8_eoOc6fCktj5IKak.cache +2 -0
  248. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/e7/e7SEwN9e5ctMuXdXSRM6IB2fFMiIP2UAmvXjDKktd5w.cache +1 -0
  249. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eW/eWG0d21oPZQGuYiCLej8OsRayN0--zxnvn7KHFqrQus.cache +1 -0
  250. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fA/fADdr9ULIrFxI-36hG3S8yfvCp2VHyR6WzSZNIPM3C0.cache +1 -0
  251. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fE/fEt1GN3H2qJiB0PwX6Cd43UrRkzLxTRIeUyyrydPe_A.cache +2 -0
  252. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ff/ffguBp3lFlcLuH9rWtl1JJxs9dDTIfm-FCMONYpUdww.cache +1 -0
  253. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/he/hepQXqLZteSsVIUXJaeKnrpVYKb53gbWe1xr6tuFN3Y.cache +1 -0
  254. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hy/hyMfoAGcpyTZYoedJT2E2u3X96FEwATK-lIPMFlN_bw.cache +0 -0
  255. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/i9/I9UL3IEpQ14Bi9EpF3TLd0P5Rabp6ulJbgz2f1o-neA.cache +1 -0
  256. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/i9/i9lFglNaFPcJgnmxvuMjrY_R8pXY0CN9SiUKFgVFPSM.cache +0 -0
  257. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iE/iEzDISmI13GuIeJehYePCIVyUe7XZ-_q9pvIv0UzneM.cache +1 -0
  258. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/i_/i_hzz-9VlGYj7yvx9yYWRKRw2UwxqFHQrRZw6vzXsWc.cache +0 -0
  259. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ij/ijLUBXXLleeHIaUQp-SQmpq0HpH94rYlbW5OJbKpnsg.cache +1 -0
  260. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iq/iqPK1x8VfJwa8KcViAxJc6WCCa1dqE_7ubcbyoyjecg.cache +1 -0
  261. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iw/iw-6QMCNXnMzL5koGPyFgnCllIbeX88-V7N5GRRqxLA.cache +0 -0
  262. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/j2/j2NpPyjDjX23FPlgIi_Hf4oc4HH6a74elyfPP9wF0jU.cache +2 -0
  263. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jK/jKof1JYBdCVS3OYs9Itw8Fbr1nIPR8DLSEB8WKSDLyw.cache +2 -0
  264. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jS/jSnpKdnMVeeGtUODVf-9I1I3xvGWQr4uOtIB8Oul4Zw.cache +1 -0
  265. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jn/jnwTDvpqs0w9VZpZ5GUZ60o6cpUhzgo69c_ooHHmNvM.cache +0 -0
  266. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kU/kUok4qdkoYsQOP59lJgy9rPyE-T3sh8l0dVDE6KzfeI.cache +1 -0
  267. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kv/KVJz4npl0nKN-Dp49qjcOml4Tpxq_AZ8RNO1Bi387Is.cache +2 -0
  268. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kv/kvTGOzOr1lqLnY61yqldR_vtHpoCKFYDFpl7_fnCtcE.cache +1 -0
  269. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kz/kz7lpLb0SoWDdaStz39DkoaQykVp0h3Jl4agZcEh6L4.cache +1 -0
  270. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/l8/l8UyUr0lncdtUUTZFwO0ulkW8Bl3z83viCwii7OewZk.cache +1 -0
  271. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lH/lHDGd3_dxi_xz9n5_wYFy7hKMxp78Q39u_XQKZWub_Y.cache +0 -0
  272. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lU/lUmP4mi3T8xmwS_odQgw8llzs35KCOMZCTv0DANy9dM.cache +1 -0
  273. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lY/lYdwx9C-FXcmiLA5bsEfQIBwpcg3twu1lz6rFXROyCI.cache +0 -0
  274. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lj/ljpGLuZae0hOTv1h7MGCiJ30O0qhPCuvEKLhD5zpV8Q.cache +0 -0
  275. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m1/M1yW7a2h3VzoyhwmJIKGEXjCQN8GsQcnvcKaklurytE.cache +1 -0
  276. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m1/m1jB-0OsQz_CCr-Q_KIlpfF7BsJBF8GXMfk9pZdJsdg.cache +0 -0
  277. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m3/m3WJ72qtNo4wVe78N9YRArVH33D15hEwdVd67wJbvOQ.cache +0 -0
  278. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m4/m4EE0-xa87oylMzux18a-d2pR0zDtF2GCbYzwdSvQH4.cache +0 -0
  279. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mS/mSWxg1xZbGaeYGDXMe8nsYZC_LfhiNdjSTL2J2ELE0s.cache +0 -0
  280. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mb/mb6HAyivnzHzDrkN35ifr4kL7MuksZYWamdJBUjhoHQ.cache +0 -0
  281. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/me/melFFxMi_bgtkEkztQhKusyFDqKEeVVzurk_1_TPt6A.cache +1 -0
  282. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mm/mms9rxcyPm09RjefBI321LIRPUAobgQ1X4A8Uu4w9Fc.cache +0 -0
  283. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nA/nA0Bu-48plSRK0cxt2gE2-TXvwcDsTjvHLFR7KshbPY.cache +0 -0
  284. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nA/nAGwhUtXjENu4Jl3uTJFFRnDhJAOlMAmuju7JcllSRM.cache +1 -0
  285. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nN/nN4lOF8mi-IWkm3zsqohaHbvJS4uG-_tiFsB6h1PsFc.cache +0 -0
  286. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ne/neLH-4_-lhKrkmcWjkrdYAoT5xDuc9EzJ5-81ZXeeXc.cache +2 -0
  287. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nj/njVJUsm_4wugUz9SwMbITIhSGErMWqSZ16AEUFn2RHo.cache +0 -0
  288. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nq/nqz2Ja53LHhXhFb6ChNpDKnBMWNdp17ZtNhrn-9wdR0.cache +0 -0
  289. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oY/oYHos9r6mwOX5jDyDTWjnpRR_SvWe4EX9gAl20Gqj8I.cache +1 -0
  290. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oj/ojlR_0dl68-YErHzTDzB8lO8nKxQzG6x_Axc5oWIeBg.cache +2 -0
  291. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pG/pGc_RfrP3RwCp5SBabj-nGnfyeSnUp1Ed1ajCG5Yx-A.cache +1 -0
  292. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pQ/PQZm6DUZqIXs_3Wo9ISeQRb0vYyB0XG7iGSHr9_TWlc.cache +0 -0
  293. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pQ/pQXlqH4DBItuAHNMXGnwQmnzYkwJ2m7kUgKQbdbZM1E.cache +0 -0
  294. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pj/pJtdFKizdxA_xBjuuXQWYnEvCcImUQtT5Rh-tGG6v48.cache +2 -0
  295. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pj/pjg7FTDRmEzqh8W3ijd1Y3GbffQuQwwSKEZ6ftoPnJE.cache +2 -0
  296. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ps/ps7w7RIcMoa1jxZu4r5mWxnZzl8qM4Bs9AietV5a9nU.cache +0 -0
  297. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qU/qUif8_vci3i4xpLoHjkoVXT-baN2Z_qabhqo2Wl1KU4.cache +2 -0
  298. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qf/qfMsgo__LLXJ_4thqBkUaDYPnaucsAJhMl6uN74w1GM.cache +1 -0
  299. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qj/qjbZ2Uz7G_0aKEQT3Nmuu0k2FkDTmVTemeoG3gw3oSw.cache +1 -0
  300. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qx/qxng7xwKb01YKazp0ij03cuEDbzSNSakHHwLx7XNEck.cache +1 -0
  301. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r5/r5EpktDep6rAU9paabInRkyyMPudlyFSWlHRFmSKXcI.cache +1 -0
  302. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rX/rX6desISJ78BGVzR2gPZKb2BiWY-N596DjfIgaTTkew.cache +1 -0
  303. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r_/r_57OZEW0SEEUS9tJZwHYMvqjkbw3-3qfgomLAKJzoE.cache +0 -0
  304. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rh/rhT44pxmkWo5fhkEb829kceOiGof5L5L55DT5Uv9LKQ.cache +0 -0
  305. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/s4/s4BZ5EXO5EOticOtqwWaw3qjnMod3t0AfgXahBpqSZA.cache +0 -0
  306. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tF/tFofktc3WRxmXDS1NTWdUstzycUbsShJBMHatxLvxqQ.cache +2 -0
  307. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tL/tLQy_cVJ8R8R35MKxmAuxHklAoaJTyXFO-eL8dXcMKY.cache +1 -0
  308. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vH/vHyq2njTP0fsOdOun0eFn07YnFCTmJJkD89-pJ9tKYA.cache +0 -0
  309. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vK/vKDpBE4UJEuJjeJqLtVQSQ7wHxJ1ywxrRt8Y1XQBxtk.cache +0 -0
  310. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vK/vk4eyljHSm11GcRNbA0QEqn13Y4bEfxOcBwiesL-XvQ.cache +1 -0
  311. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/w6/w6JBeSUs8dNJNtbRF-HVG3csGda2FlttAEBSpSHoqcE.cache +0 -0
  312. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wc/wcSdAX-yztEvzKx_xYHtqxT47ZyaLoLal_vKwPxEP08.cache +2 -0
  313. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wh/whuY0tTNf66sTcgILzLfelCAHIBpDZZIiOIuI12HNQw.cache +2 -0
  314. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/wiKqSHxw-MJpM466KPFAcPyzBHxbpGGYW578TqFEJeg.cache +1 -0
  315. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/wixK89IvA4Xk2MyJxkyLg-2xRs2vRPzY_OIs37bi8XA.cache +1 -0
  316. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wz/wzY0ol5RRJK1j-hK9nckKoTMWK5TJDii5QSZMGTu5hk.cache +0 -0
  317. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/x3/x3jUhlqTEK-rA6zTC8_MWGyKD8tZRhz2nPu0nCBgEGI.cache +1 -0
  318. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xL/xLZtF0WWBePfiVBWxxi6brXCLsEfcrj435b9xJupeeU.cache +0 -0
  319. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xL/xLktzniI5dkWKAifTMHzZvRHyRHOexsqV-ZRsdLXx0g.cache +2 -0
  320. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xv/xvoydM1zth53tauNTatJNfb-o44mAGDD9-85yRkpeqY.cache +0 -0
  321. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yH/yHfd9J_SJGssjygyWK8-uLlvE6IlN6DIda7947QWVsI.cache +1 -0
  322. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yQ/yQP_20gvJZ1MfkfWE7nU-EFpqbMzANYy8OWuQuaDyLM.cache +2 -0
  323. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yv/yvOcRnWhg9dCjr1_rScAH4M8-rUQVY9oHFqBGVoMniI.cache +0 -0
  324. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/z2/z2ro57FqSGT_X2jnC68fS-HrFmCh7Wbrnrm45BceZoM.cache +0 -0
  325. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zJ/zJfViroVCTZxyBh0pLP8_QiOxemqmKRkiU7BHAf5HxA.cache +0 -0
  326. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zP/zPBLf0GnkvCm86BY_8PtGJRyawPWy-JxWZp25_yNRfk.cache +2 -0
  327. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zm/zmEmiHcLam0fJ2odLUV8n4hg9GN2gBDrJo7JCkkg8f4.cache +1 -0
  328. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zy/zywotY5ANjNyE78CLDqC1eYRFwL1ZFzkT9J5LzNlI4M.cache +1 -0
  329. data/spec/dummy/tmp/restart.txt +0 -0
  330. data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
  331. data/spec/graphql/analysis/analyze_query_spec.rb +2 -1
  332. data/spec/graphql/backtrace_spec.rb +12 -16
  333. data/spec/graphql/execution/execute_spec.rb +1 -1
  334. data/spec/graphql/execution_error_spec.rb +19 -0
  335. data/spec/graphql/introspection/schema_type_spec.rb +1 -0
  336. data/spec/graphql/language/parser_spec.rb +3 -3
  337. data/spec/graphql/query/variables_spec.rb +1 -1
  338. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +50 -0
  339. data/spec/graphql/static_validation/validator_spec.rb +1 -0
  340. data/spec/graphql/subscriptions_spec.rb +57 -1
  341. data/spec/graphql/tracing/active_support_notifications_tracing_spec.rb +6 -8
  342. data/spec/graphql/tracing/platform_tracing_spec.rb +56 -0
  343. data/spec/graphql/tracing_spec.rb +13 -8
  344. data/spec/spec_helper.rb +8 -12
  345. data/spec/support/dummy/data.rb +1 -1
  346. data/spec/support/dummy/schema.rb +7 -0
  347. data/spec/support/star_wars/schema.rb +1 -1
  348. metadata +610 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '08e688c4046aa3130fe9f427f810356abc25abfc'
4
- data.tar.gz: d2896b9042f2bab1dffd256551082168aa52288d
3
+ metadata.gz: aaf04d88628e6882277fdb587a521473684283ad
4
+ data.tar.gz: ca64d47b1f78982847287ece1bc2b387daa08f4e
5
5
  SHA512:
6
- metadata.gz: 624eb16565591d5df45dc69df9dc5cc7fa6b97ca9ff4d3745427df47e979a15e889458689f1e52d9f8a553b0974f738cb2cff703d1fc98dcc25cfbffee36f408
7
- data.tar.gz: 0421334ac91f05b8a0adf48199b811eb81efbcfd4a0c543bf3ff58248e9db3c4c1ba036d5cbeffca69fcb12e10d07e88fa0cf9896cbfd081b884da5d62f5aa8c
6
+ metadata.gz: f860526de9a1c6c6e9ab4cca863231c64308a7d84f349a4b7adc7da9ac3c2ec29ca2e7d8c484fa04f46b1ae34c9560b15553a9e1c6844a0c19756028b0615f59
7
+ data.tar.gz: 306aad45f5e563c920e4ce3d18a5ffc940d72a1522ef11e7427fc6f7634e21f6025c2335e917a9c076463ba7532fa91fcf291f77c87fc0e57ab6221fdefe8b70
@@ -35,8 +35,8 @@ module GraphQL
35
35
  # Turn a query string or schema definition into an AST
36
36
  # @param graphql_string [String] a GraphQL query string or schema definition
37
37
  # @return [GraphQL::Language::Nodes::Document]
38
- def self.parse(graphql_string)
39
- parse_with_racc(graphql_string)
38
+ def self.parse(graphql_string, tracer: GraphQL::Tracing::NullTracer)
39
+ parse_with_racc(graphql_string, tracer: tracer)
40
40
  end
41
41
 
42
42
  # Read the contents of `filename` and parse them as GraphQL
@@ -47,8 +47,8 @@ module GraphQL
47
47
  parse_with_racc(content, filename: filename)
48
48
  end
49
49
 
50
- def self.parse_with_racc(string, filename: nil)
51
- GraphQL::Language::Parser.parse(string, filename: filename)
50
+ def self.parse_with_racc(string, filename: nil, tracer: GraphQL::Tracing::NullTracer)
51
+ GraphQL::Language::Parser.parse(string, filename: filename, tracer: tracer)
52
52
  end
53
53
 
54
54
  # @return [Array<GraphQL::Language::Token>]
@@ -92,6 +92,7 @@ require "graphql/name_validator"
92
92
  require "graphql/introspection"
93
93
  require "graphql/language"
94
94
  require "graphql/analysis"
95
+ require "graphql/tracing"
95
96
  require "graphql/execution"
96
97
  require "graphql/relay"
97
98
  require "graphql/schema"
@@ -99,6 +100,7 @@ require "graphql/schema/loader"
99
100
  require "graphql/schema/printer"
100
101
 
101
102
  require "graphql/analysis_error"
103
+ require "graphql/coercion_error"
102
104
  require "graphql/runtime_type_error"
103
105
  require "graphql/invalid_null_error"
104
106
  require "graphql/invalid_name_error"
@@ -113,5 +115,4 @@ require "graphql/function"
113
115
  require "graphql/filter"
114
116
  require "graphql/subscriptions"
115
117
  require "graphql/parse_error"
116
- require "graphql/tracing"
117
118
  require "graphql/backtrace"
@@ -5,7 +5,7 @@ module GraphQL
5
5
 
6
6
  # @return [void]
7
7
  def analyze_multiplex(multiplex, analyzers)
8
- GraphQL::Tracing.trace("analyze_multiplex", { multiplex: multiplex }) do
8
+ multiplex.trace("analyze_multiplex", { multiplex: multiplex }) do
9
9
  reducer_states = analyzers.map { |r| ReducerState.new(r, multiplex) }
10
10
  query_results = multiplex.queries.map do |query|
11
11
  if query.valid?
@@ -37,7 +37,7 @@ module GraphQL
37
37
  # @param analyzers [Array<#call>] Objects that respond to `#call(memo, visit_type, irep_node)`
38
38
  # @return [Array<Any>] Results from those analyzers
39
39
  def analyze_query(query, analyzers, multiplex_states: [])
40
- GraphQL::Tracing.trace("analyze_query", { query: query }) do
40
+ query.trace("analyze_query", { query: query }) do
41
41
  reducer_states = analyzers.map { |r| ReducerState.new(r, query) } + multiplex_states
42
42
 
43
43
  irep = query.internal_representation
@@ -24,6 +24,7 @@ module GraphQL
24
24
  def_delegators :to_a, :each, :[]
25
25
 
26
26
  def self.enable
27
+ warn("GraphQL::Backtrace.enable is deprecated, add `use GraphQL::Backtrace` to your schema definition instead.")
27
28
  GraphQL::Tracing.install(Backtrace::Tracer)
28
29
  nil
29
30
  end
@@ -33,6 +34,10 @@ module GraphQL
33
34
  nil
34
35
  end
35
36
 
37
+ def self.use(schema_defn)
38
+ schema_defn.tracer(self::Tracer)
39
+ end
40
+
36
41
  def initialize(context, value: nil)
37
42
  @table = Table.new(context, value: value)
38
43
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module GraphQL
3
+ class CoercionError < GraphQL::Error
4
+ end
5
+ end
@@ -6,13 +6,13 @@ module GraphQL
6
6
  # Passed into initialization blocks, eg {ObjectType#initialize}, {Field#initialize}
7
7
  class TypeDefiner
8
8
  include Singleton
9
- # rubocop:disable Style/MethodName
9
+ # rubocop:disable Naming/MethodName
10
10
  def Int; GraphQL::INT_TYPE; end
11
11
  def String; GraphQL::STRING_TYPE; end
12
12
  def Float; GraphQL::FLOAT_TYPE; end
13
13
  def Boolean; GraphQL::BOOLEAN_TYPE; end
14
14
  def ID; GraphQL::ID_TYPE; end
15
- # rubocop:enable Style/MethodName
15
+ # rubocop:enable Naming/MethodName
16
16
 
17
17
  # Make a {ListType} which wraps the input type
18
18
  #
@@ -29,7 +29,7 @@ module GraphQL
29
29
  module_function
30
30
 
31
31
  def resolve_root_selection(query)
32
- GraphQL::Tracing.trace("execute_query", query: query) do
32
+ query.trace("execute_query", query: query) do
33
33
  operation = query.selected_operation
34
34
  op_type = operation.operation_type
35
35
  root_type = query.root_type_for_operation(op_type)
@@ -42,12 +42,13 @@ module GraphQL
42
42
  end
43
43
  end
44
44
 
45
- def lazy_resolve_root_selection(result, query: nil, queries: nil)
46
- if query.nil? && queries.length == 1
47
- query = queries[0]
45
+ def lazy_resolve_root_selection(result, query: nil, multiplex: nil)
46
+ if query.nil? && multiplex.queries.length == 1
47
+ query = multiplex.queries[0]
48
48
  end
49
49
 
50
- GraphQL::Tracing.trace("execute_query_lazy", {queries: queries, query: query}) do
50
+ tracer = (query || multiplex)
51
+ tracer.trace("execute_query_lazy", {multiplex: multiplex, query: query}) do
51
52
  GraphQL::Execution::Lazy.resolve(result)
52
53
  end
53
54
  end
@@ -67,7 +68,7 @@ module GraphQL
67
68
  irep_node: child_irep_node,
68
69
  )
69
70
 
70
- field_result = GraphQL::Tracing.trace("execute_field", { context: field_ctx }) do
71
+ field_result = field_ctx.trace("execute_field", { context: field_ctx }) do
71
72
  resolve_field(
72
73
  object,
73
74
  field_ctx
@@ -37,7 +37,7 @@ module GraphQL
37
37
  else
38
38
  Lazy.new {
39
39
  acc.each_with_index { |ctx, idx|
40
- acc[idx] = GraphQL::Tracing.trace("execute_field_lazy", { context: ctx }) do
40
+ acc[idx] = ctx.trace("execute_field_lazy", { context: ctx }) do
41
41
  ctx.value.value
42
42
  end
43
43
  }
@@ -27,11 +27,19 @@ module GraphQL
27
27
  # @api private
28
28
  NO_OPERATION = {}.freeze
29
29
 
30
+ include Tracing::Traceable
31
+
30
32
  attr_reader :context, :queries, :schema
31
33
  def initialize(schema:, queries:, context:)
32
34
  @schema = schema
33
35
  @queries = queries
34
36
  @context = context
37
+ # TODO remove support for global tracers
38
+ @tracers = schema.tracers + GraphQL::Tracing.tracers + (context[:tracers] || [])
39
+ # Support `context: {backtrace: true}`
40
+ if context[:backtrace] && !@tracers.include?(GraphQL::Backtrace::Tracer)
41
+ @tracers << GraphQL::Backtrace::Tracer
42
+ end
35
43
  end
36
44
 
37
45
  class << self
@@ -47,7 +55,7 @@ module GraphQL
47
55
  # @return [Array<Hash>] One result per query
48
56
  def run_queries(schema, queries, context: {}, max_complexity: schema.max_complexity)
49
57
  multiplex = self.new(schema: schema, queries: queries, context: context)
50
- GraphQL::Tracing.trace("execute_multiplex", { multiplex: multiplex }) do
58
+ multiplex.trace("execute_multiplex", { multiplex: multiplex }) do
51
59
  if has_custom_strategy?(schema)
52
60
  if queries.length != 1
53
61
  raise ArgumentError, "Multiplexing doesn't support custom execution strategies, run one query at a time instead"
@@ -58,7 +66,7 @@ module GraphQL
58
66
  end
59
67
  else
60
68
  with_instrumentation(multiplex, max_complexity: max_complexity) do
61
- run_as_multiplex(queries)
69
+ run_as_multiplex(multiplex)
62
70
  end
63
71
  end
64
72
  end
@@ -66,14 +74,15 @@ module GraphQL
66
74
 
67
75
  private
68
76
 
69
- def run_as_multiplex(queries)
77
+ def run_as_multiplex(multiplex)
78
+ queries = multiplex.queries
70
79
  # Do as much eager evaluation of the query as possible
71
80
  results = queries.map do |query|
72
81
  begin_query(query)
73
82
  end
74
83
 
75
84
  # Then, work through lazy results in a breadth-first way
76
- GraphQL::Execution::Execute::ExecutionFunctions.lazy_resolve_root_selection(results, { queries: queries })
85
+ GraphQL::Execution::Execute::ExecutionFunctions.lazy_resolve_root_selection(results, { multiplex: multiplex })
77
86
 
78
87
  # Then, find all errors and assign the result to the query object
79
88
  results.each_with_index.map do |data_result, idx|
@@ -11,8 +11,12 @@ module GraphQL
11
11
  # response which corresponds to this error.
12
12
  attr_accessor :path
13
13
 
14
- def initialize(message, ast_node: nil)
14
+ # @return [Hash] Optional data for error objects
15
+ attr_accessor :options
16
+
17
+ def initialize(message, ast_node: nil, options: nil)
15
18
  @ast_node = ast_node
19
+ @options = options
16
20
  super(message)
17
21
  end
18
22
 
@@ -32,6 +36,9 @@ module GraphQL
32
36
  if path
33
37
  hash["path"] = path
34
38
  end
39
+ if options
40
+ hash.merge!(options)
41
+ end
35
42
  hash
36
43
  end
37
44
  end
@@ -14,19 +14,20 @@ module GraphQL
14
14
 
15
15
  module_eval(<<'...end parser.y/module_eval...', 'parser.y', 356)
16
16
 
17
- def initialize(query_string, filename:)
17
+ def initialize(query_string, filename:, tracer: Tracing::NullTracer)
18
18
  @query_string = query_string
19
19
  @filename = filename
20
+ @tracer = tracer
20
21
  end
21
22
 
22
23
  def parse_document
23
24
  @document ||= begin
24
25
  # Break the string into tokens
25
- GraphQL::Tracing.trace("lex", {query_string: @query_string}) do
26
+ @tracer.trace("lex", {query_string: @query_string}) do
26
27
  @tokens ||= GraphQL.scan(@query_string)
27
28
  end
28
29
  # From the tokens, build an AST
29
- GraphQL::Tracing.trace("parse", {query_string: @query_string}) do
30
+ @tracer.trace("parse", {query_string: @query_string}) do
30
31
  if @tokens.none?
31
32
  make_node(:Document, definitions: [], filename: @filename)
32
33
  else
@@ -36,8 +37,8 @@ def parse_document
36
37
  end
37
38
  end
38
39
 
39
- def self.parse(query_string, filename: nil)
40
- self.new(query_string, filename: filename).parse_document
40
+ def self.parse(query_string, filename: nil, tracer: GraphQL::Tracing::NullTracer)
41
+ self.new(query_string, filename: filename, tracer: tracer).parse_document
41
42
  end
42
43
 
43
44
  private
@@ -354,19 +354,20 @@ end
354
354
 
355
355
  ---- inner ----
356
356
 
357
- def initialize(query_string, filename:)
357
+ def initialize(query_string, filename:, tracer: Tracing::NullTracer)
358
358
  @query_string = query_string
359
359
  @filename = filename
360
+ @tracer = tracer
360
361
  end
361
362
 
362
363
  def parse_document
363
364
  @document ||= begin
364
365
  # Break the string into tokens
365
- GraphQL::Tracing.trace("lex", {query_string: @query_string}) do
366
+ @tracer.trace("lex", {query_string: @query_string}) do
366
367
  @tokens ||= GraphQL.scan(@query_string)
367
368
  end
368
369
  # From the tokens, build an AST
369
- GraphQL::Tracing.trace("parse", {query_string: @query_string}) do
370
+ @tracer.trace("parse", {query_string: @query_string}) do
370
371
  if @tokens.none?
371
372
  make_node(:Document, definitions: [], filename: @filename)
372
373
  else
@@ -376,8 +377,8 @@ def parse_document
376
377
  end
377
378
  end
378
379
 
379
- def self.parse(query_string, filename: nil)
380
- self.new(query_string, filename: filename).parse_document
380
+ def self.parse(query_string, filename: nil, tracer: GraphQL::Tracing::NullTracer)
381
+ self.new(query_string, filename: filename, tracer: tracer).parse_document
381
382
  end
382
383
 
383
384
  private
@@ -15,6 +15,7 @@ require "graphql/query/validation_pipeline"
15
15
  module GraphQL
16
16
  # A combination of query string and {Schema} instance which can be reduced to a {#result}.
17
17
  class Query
18
+ include Tracing::Traceable
18
19
  extend GraphQL::Delegate
19
20
 
20
21
  class OperationNameMissingError < GraphQL::ExecutionError
@@ -55,6 +56,8 @@ module GraphQL
55
56
  # @return [String, nil]
56
57
  attr_reader :operation_name
57
58
 
59
+ attr_reader :tracers
60
+
58
61
  # Prepare query `query_string` on `schema`
59
62
  # @param schema [GraphQL::Schema]
60
63
  # @param query_string [String]
@@ -75,6 +78,12 @@ module GraphQL
75
78
  @fragments = nil
76
79
  @operations = nil
77
80
  @validate = validate
81
+ # TODO: remove support for global tracers
82
+ @tracers = schema.tracers + GraphQL::Tracing.tracers + (context ? context.fetch(:tracers, []) : [])
83
+ # Support `ctx[:backtrace] = true` for wrapping backtraces
84
+ if context && context[:backtrace] && !@tracers.include?(GraphQL::Backtrace::Tracer)
85
+ @tracers << GraphQL::Backtrace::Tracer
86
+ end
78
87
 
79
88
  @analysis_errors = []
80
89
  if variables.is_a?(String)
@@ -266,7 +275,7 @@ module GraphQL
266
275
  parse_error = nil
267
276
  @document ||= begin
268
277
  if query_string
269
- GraphQL.parse(query_string)
278
+ GraphQL.parse(query_string, tracer: self)
270
279
  end
271
280
  rescue GraphQL::ParseError => err
272
281
  parse_error = err
@@ -161,6 +161,7 @@ module GraphQL
161
161
 
162
162
  class FieldResolutionContext
163
163
  include SharedMethods
164
+ include Tracing::Traceable
164
165
  extend GraphQL::Delegate
165
166
 
166
167
  attr_reader :irep_node, :field, :parent_type, :query, :schema, :parent, :key, :type
@@ -178,6 +179,7 @@ module GraphQL
178
179
  # This is needed constantly, so set it ahead of time:
179
180
  @query = context.query
180
181
  @schema = context.schema
182
+ @tracers = @query.tracers
181
183
  end
182
184
 
183
185
  def path
@@ -131,7 +131,7 @@ module GraphQL
131
131
 
132
132
  if after
133
133
  offset = (relation_offset(@sliced_nodes) || 0) + offset_from_cursor(after)
134
- @sliced_nodes = @sliced_nodes.offset(offset) if after
134
+ @sliced_nodes = @sliced_nodes.offset(offset)
135
135
  end
136
136
 
137
137
  if before && after
@@ -34,6 +34,30 @@ module GraphQL
34
34
  # coerce_result ->(value, ctx) { value.to_f }
35
35
  # end
36
36
  #
37
+ #
38
+ # You can customize the error message for invalid input values by raising a `GraphQL::CoercionError` within `coerce_input`:
39
+ #
40
+ # @example raising a custom error message
41
+ # TimeType = GraphQL::ScalarType.define do
42
+ # name "Time"
43
+ # description "Time since epoch in seconds"
44
+ #
45
+ # coerce_input ->(value, ctx) do
46
+ # begin
47
+ # Time.at(Float(value))
48
+ # rescue ArgumentError
49
+ # raise GraphQL::CoercionError, "cannot coerce `#{value.inspect}` to Float"
50
+ # end
51
+ # end
52
+ #
53
+ # coerce_result ->(value, ctx) { value.to_f }
54
+ # end
55
+ #
56
+ # This will result in the message of the `GraphQL::CoercionError` being used in the error response:
57
+ #
58
+ # @example custom error response
59
+ # {"message"=>"cannot coerce `"2"` to Float", "locations"=>[{"line"=>3, "column"=>9}], "fields"=>["arg"]}
60
+ #
37
61
  class ScalarType < GraphQL::BaseType
38
62
  accepts_definitions :coerce, :coerce_input, :coerce_result
39
63
  ensure_defined :coerce_non_null_input, :coerce_result
@@ -70,7 +70,8 @@ module GraphQL
70
70
  multiplex_analyzer: ->(schema, analyzer) { schema.multiplex_analyzers << analyzer },
71
71
  middleware: ->(schema, middleware) { schema.middleware << middleware },
72
72
  lazy_resolve: ->(schema, lazy_class, lazy_value_method) { schema.lazy_methods.set(lazy_class, lazy_value_method) },
73
- rescue_from: ->(schema, err_class, &block) { schema.rescue_from(err_class, &block)}
73
+ rescue_from: ->(schema, err_class, &block) { schema.rescue_from(err_class, &block)},
74
+ tracer: ->(schema, tracer) { schema.tracers.push(tracer) }
74
75
 
75
76
  attr_accessor \
76
77
  :query, :mutation, :subscription,
@@ -100,6 +101,10 @@ module GraphQL
100
101
  GraphQL::Filter.new(except: default_mask)
101
102
  end
102
103
 
104
+ # @return [Array<#trace(key, data)>] Tracers applied to every query
105
+ # @see {Query#tracers} for query-specific tracers
106
+ attr_reader :tracers
107
+
103
108
  self.default_execution_strategy = GraphQL::Execution::Execute
104
109
 
105
110
  BUILT_IN_TYPES = Hash[[INT_TYPE, STRING_TYPE, FLOAT_TYPE, BOOLEAN_TYPE, ID_TYPE].map{ |type| [type.name, type] }]
@@ -109,6 +114,7 @@ module GraphQL
109
114
  attr_reader :static_validator, :object_from_id_proc, :id_from_object_proc, :resolve_type_proc
110
115
 
111
116
  def initialize
117
+ @tracers = []
112
118
  @definition_error = nil
113
119
  @orphan_types = []
114
120
  @directives = DIRECTIVES.reduce({}) { |m, d| m[d.name] = d; m }
@@ -141,7 +147,7 @@ module GraphQL
141
147
  @middleware = other.middleware.dup
142
148
  @query_analyzers = other.query_analyzers.dup
143
149
  @multiplex_analyzers = other.multiplex_analyzers.dup
144
-
150
+ @tracers = other.tracers.dup
145
151
  @possible_types = GraphQL::Schema::PossibleTypes.new(self)
146
152
 
147
153
  @lazy_methods = other.lazy_methods.dup
@@ -256,8 +262,17 @@ module GraphQL
256
262
  if query_str
257
263
  kwargs[:query] = query_str
258
264
  end
265
+ # Some of the query context _should_ be passed to the multiplex, too
266
+ multiplex_context = if (ctx = kwargs[:context])
267
+ {
268
+ backtrace: ctx[:backtrace],
269
+ tracers: ctx[:tracers],
270
+ }
271
+ else
272
+ {}
273
+ end
259
274
  # Since we're running one query, don't run a multiplex-level complexity analyzer
260
- all_results = multiplex([kwargs], max_complexity: nil)
275
+ all_results = multiplex([kwargs], max_complexity: nil, context: multiplex_context)
261
276
  all_results[0]
262
277
  end
263
278