graphql 1.7.3 → 1.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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