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
@@ -6,11 +6,22 @@ module GraphQL
6
6
  return if node.value.is_a?(GraphQL::Language::Nodes::VariableIdentifier)
7
7
  arg_defn = defn.arguments[node.name]
8
8
  return unless arg_defn
9
- if !context.valid_literal?(node.value, arg_defn.type)
9
+
10
+ begin
11
+ valid = context.valid_literal?(node.value, arg_defn.type)
12
+ rescue GraphQL::CoercionError => err
13
+ error_message = err.message
14
+ end
15
+
16
+ return if valid
17
+
18
+ error_message ||= begin
10
19
  kind_of_node = node_type(parent)
11
20
  error_arg_name = parent_name(parent, defn)
12
- context.errors << message("Argument '#{node.name}' on #{kind_of_node} '#{error_arg_name}' has an invalid value. Expected type '#{arg_defn.type}'.", parent, context: context)
21
+ "Argument '#{node.name}' on #{kind_of_node} '#{error_arg_name}' has an invalid value. Expected type '#{arg_defn.type}'."
13
22
  end
23
+
24
+ context.errors << message(error_message, parent, context: context)
14
25
  end
15
26
  end
16
27
  end
@@ -22,7 +22,7 @@ module GraphQL
22
22
  # @param query [GraphQL::Query]
23
23
  # @return [Array<Hash>]
24
24
  def validate(query, validate: true)
25
- GraphQL::Tracing.trace("validate", { validate: validate, query: query }) do
25
+ query.trace("validate", { validate: validate, query: query }) do
26
26
  context = GraphQL::StaticValidation::ValidationContext.new(query)
27
27
  rewrite = GraphQL::InternalRepresentation::Rewrite.new
28
28
 
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "graphql/subscriptions/event"
3
3
  require "graphql/subscriptions/instrumentation"
4
+ require "graphql/subscriptions/serialize"
4
5
  if defined?(ActionCable)
5
6
  require "graphql/subscriptions/action_cable_subscriptions"
6
7
  end
@@ -24,7 +25,7 @@ module GraphQL
24
25
  # Fetch subscriptions matching this field + arguments pair
25
26
  # And pass them off to the queue.
26
27
  # @param event_name [String]
27
- # @param args [Hash]
28
+ # @param args [Hash<String, Symbol => Object]
28
29
  # @param object [Object]
29
30
  # @param scope [Symbol, String]
30
31
  # @return [void]
@@ -34,6 +35,13 @@ module GraphQL
34
35
  raise "No subscription matching trigger: #{event_name}"
35
36
  end
36
37
 
38
+ # Normalize symbol-keyed args to strings
39
+ if args.any?
40
+ stringified_args = {}
41
+ args.each { |k, v| stringified_args[k.to_s] = v }
42
+ args = stringified_args
43
+ end
44
+
37
45
  event = Subscriptions::Event.new(
38
46
  name: event_name,
39
47
  arguments: args,
@@ -75,7 +75,9 @@ module GraphQL
75
75
  # Subscribers will re-evaluate locally.
76
76
  # TODO: this method name is a smell
77
77
  def execute_all(event, object)
78
- ActionCable.server.broadcast(EVENT_PREFIX + event.topic, object)
78
+ stream = EVENT_PREFIX + event.topic
79
+ message = Serialize.dump(object)
80
+ ActionCable.server.broadcast(stream, message)
79
81
  end
80
82
 
81
83
  # This subscription was re-evaluated.
@@ -92,11 +94,12 @@ module GraphQL
92
94
  def write_subscription(query, events)
93
95
  channel = query.context[:channel]
94
96
  subscription_id = query.context[:subscription_id] ||= SecureRandom.uuid
95
- channel.stream_from(SUBSCRIPTION_PREFIX + subscription_id)
97
+ stream = query.context[:action_cable_stream] ||= SUBSCRIPTION_PREFIX + subscription_id
98
+ channel.stream_from(stream)
96
99
  @subscriptions[subscription_id] = query
97
100
  events.each do |event|
98
101
  channel.stream_from(EVENT_PREFIX + event.topic, coder: ActiveSupport::JSON) do |message|
99
- execute(subscription_id, event, message)
102
+ execute(subscription_id, event, Serialize.load(message))
100
103
  nil
101
104
  end
102
105
  end
@@ -46,7 +46,7 @@ module GraphQL
46
46
  end
47
47
 
48
48
  sorted_h = normalized_args.to_h.sort.to_h
49
- JSON.dump([scope, name, sorted_h])
49
+ Serialize.dump_recursive([scope, name, sorted_h])
50
50
  end
51
51
  end
52
52
  end
@@ -56,7 +56,7 @@ module GraphQL
56
56
  ctx.skip
57
57
  elsif ctx.irep_node.subscription_topic == ctx.query.subscription_topic
58
58
  # The root object is _already_ the subscription update:
59
- @inner_proc.call(obj, args, ctx)
59
+ obj
60
60
  else
61
61
  # This is a subscription update, but this event wasn't triggered.
62
62
  ctx.skip
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+ # test_via: ../subscriptions.rb
3
+ module GraphQL
4
+ class Subscriptions
5
+ # Serialization helpers for passing subscription data around.
6
+ # @api private
7
+ module Serialize
8
+ GLOBALID_KEY = "__gid__"
9
+ module_function
10
+
11
+ # @param str [String] A serialized object from {.dump}
12
+ # @return [Object] An object equivalent to the one passed to {.dump}
13
+ def load(str)
14
+ parsed_obj = JSON.parse(str)
15
+ if parsed_obj.is_a?(Hash) && parsed_obj.size == 1 && parsed_obj.key?(GLOBALID_KEY)
16
+ GlobalID::Locator.locate(parsed_obj[GLOBALID_KEY])
17
+ else
18
+ parsed_obj
19
+ end
20
+ end
21
+
22
+ # @param obj [Object] Some subscription-related data to dump
23
+ # @return [String] The stringified object
24
+ def dump(obj)
25
+ if obj.respond_to?(:to_gid_param)
26
+ JSON.dump(GLOBALID_KEY => obj.to_gid_param)
27
+ else
28
+ JSON.generate(obj, quirks_mode: true)
29
+ end
30
+ end
31
+
32
+ # This is for turning objects into subscription scopes.
33
+ # It's a one-way transformation, can't reload this :'(
34
+ # @param obj [Object]
35
+ # @return [String]
36
+ def dump_recursive(obj)
37
+ case
38
+ when obj.is_a?(Array)
39
+ obj.map { |i| dump_recursive(i) }.join(':')
40
+ when obj.is_a?(Hash)
41
+ obj.map { |k, v| "#{dump_recursive(k)}:#{dump_recursive(v)}" }.join(":")
42
+ when obj.respond_to?(:to_gid_param)
43
+ obj.to_gid_param
44
+ when obj.respond_to?(:to_param)
45
+ obj.to_param
46
+ else
47
+ obj.to_s
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,5 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
  require "graphql/tracing/active_support_notifications_tracing"
3
+ require "graphql/tracing/platform_tracing"
4
+ require "graphql/tracing/appsignal_tracing"
5
+ require "graphql/tracing/new_relic_tracing"
6
+ require "graphql/tracing/scout_tracing"
7
+ require "graphql/tracing/skylight_tracing"
8
+
3
9
  module GraphQL
4
10
  # Library entry point for performance metric reporting.
5
11
  #
@@ -15,6 +21,14 @@ module GraphQL
15
21
  # # do stuff ...
16
22
  # end
17
23
  #
24
+ # @example Adding a tracer to a schema
25
+ # MySchema = GraphQL::Schema.define do
26
+ # tracer MyTracer # <= responds to .trace(key, data, &block)
27
+ # end
28
+ #
29
+ # @example Adding a tracer to a query
30
+ # MySchema.execute(query_str, context: { backtrace: true })
31
+ #
18
32
  # Events:
19
33
  #
20
34
  # Key | Metadata
@@ -24,15 +38,17 @@ module GraphQL
24
38
  # validate | `{ query: GraphQL::Query, validate: Boolean }`
25
39
  # analyze_multiplex | `{ multiplex: GraphQL::Execution::Multiplex }`
26
40
  # analyze_query | `{ query: GraphQL::Query }`
27
- # execute_multiplex | `{ query: GraphQL::Execution::Multiplex }`
41
+ # execute_multiplex | `{ multiplex: GraphQL::Execution::Multiplex }`
28
42
  # execute_query | `{ query: GraphQL::Query }`
29
- # execute_query_lazy | `{ query: GraphQL::Query?, queries: Array<GraphQL::Query>? }`
43
+ # execute_query_lazy | `{ query: GraphQL::Query?, multiplex: GraphQL::Execution::Multiplex? }`
30
44
  # execute_field | `{ context: GraphQL::Query::Context::FieldResolutionContext }`
31
45
  # execute_field_lazy | `{ context: GraphQL::Query::Context::FieldResolutionContext }`
32
46
  #
33
47
  module Tracing
34
- class << self
35
- # Override this method to do stuff
48
+ # Objects may include traceable to gain a `.trace(...)` method.
49
+ # The object must have a `@tracers` ivar of type `Array<<#trace(k, d, &b)>>`.
50
+ # @api private
51
+ module Traceable
36
52
  # @param key [String] The name of the event in GraphQL internals
37
53
  # @param metadata [Hash] Event-related metadata (can be anything)
38
54
  # @return [Object] Must return the value of the block
@@ -40,23 +56,6 @@ module GraphQL
40
56
  call_tracers(0, key, metadata) { yield }
41
57
  end
42
58
 
43
- # Install a tracer to receive events.
44
- # @param tracer [<#trace(key, metadata)>]
45
- # @return [void]
46
- def install(tracer)
47
- if !tracers.include?(tracer)
48
- @tracers << tracer
49
- end
50
- end
51
-
52
- def uninstall(tracer)
53
- @tracers.delete(tracer)
54
- end
55
-
56
- def tracers
57
- @tracers ||= []
58
- end
59
-
60
59
  private
61
60
 
62
61
  # If there's a tracer at `idx`, call it and then increment `idx`.
@@ -74,7 +73,37 @@ module GraphQL
74
73
  end
75
74
  end
76
75
  end
76
+
77
+ class << self
78
+ # Install a tracer to receive events.
79
+ # @param tracer [<#trace(key, metadata)>]
80
+ # @return [void]
81
+ # @deprecated See {Schema#tracer} or use `context: { tracers: [...] }`
82
+ def install(tracer)
83
+ warn("GraphQL::Tracing.install is deprecated, add it to the schema with `tracer(my_tracer)` instead.")
84
+ if !tracers.include?(tracer)
85
+ @tracers << tracer
86
+ end
87
+ end
88
+
89
+ # @deprecated See {Schema#tracer} or use `context: { tracers: [...] }`
90
+ def uninstall(tracer)
91
+ @tracers.delete(tracer)
92
+ end
93
+
94
+ # @deprecated See {Schema#tracer} or use `context: { tracers: [...] }`
95
+ def tracers
96
+ @tracers ||= []
97
+ end
98
+ end
77
99
  # Initialize the array
78
100
  tracers
101
+
102
+ module NullTracer
103
+ module_function
104
+ def trace(k, v)
105
+ yield
106
+ end
107
+ end
79
108
  end
80
109
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphQL
4
+ module Tracing
5
+ class AppsignalTracing < PlatformTracing
6
+ self.platform_keys = {
7
+ "lex" => "lex.graphql",
8
+ "parse" => "parse.graphql",
9
+ "validate" => "validate.graphql",
10
+ "analyze_query" => "analyze.graphql",
11
+ "analyze_multiplex" => "analyze.graphql",
12
+ "execute_multiplex" => "execute.graphql",
13
+ "execute_query" => "execute.graphql",
14
+ "execute_query_lazy" => "execute.graphql",
15
+ }
16
+
17
+ def platform_trace(platform_key, key, data)
18
+ Appsignal.instrument(platform_key) do
19
+ yield
20
+ end
21
+ end
22
+
23
+ def platform_field_key(type, field)
24
+ "#{type.name}.#{field.name}.graphql"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphQL
4
+ module Tracing
5
+ class NewRelicTracing < PlatformTracing
6
+ self.platform_keys = {
7
+ "lex" => "GraphQL/lex",
8
+ "parse" => "GraphQL/parse",
9
+ "validate" => "GraphQL/validate",
10
+ "analyze_query" => "GraphQL/analyze",
11
+ "analyze_multiplex" => "GraphQL/analyze",
12
+ "execute_multiplex" => "GraphQL/execute",
13
+ "execute_query" => "GraphQL/execute",
14
+ "execute_query_lazy" => "GraphQL/execute",
15
+ }
16
+
17
+ def platform_trace(platform_key, key, data)
18
+ NewRelic::Agent::MethodTracerHelpers.trace_execution_scoped(platform_key) do
19
+ yield
20
+ end
21
+ end
22
+
23
+ def platform_field_key(type, field)
24
+ "GraphQL/#{type.name}/#{field.name}"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphQL
4
+ module Tracing
5
+ # Each platform provides:
6
+ # - `.platform_keys`
7
+ # - `#platform_trace`
8
+ # - `#platform_field_key(type, field)`
9
+ # @api private
10
+ class PlatformTracing
11
+ class << self
12
+ attr_accessor :platform_keys
13
+ end
14
+
15
+ def initialize
16
+ @platform_keys = self.class.platform_keys
17
+ end
18
+
19
+ def trace(key, data)
20
+ case key
21
+ when "lex", "parse", "validate", "analyze_query", "analyze_multiplex", "execute_query", "execute_query_lazy", "execute_multiplex"
22
+ platform_key = @platform_keys.fetch(key)
23
+ platform_trace(platform_key, key, data) do
24
+ yield
25
+ end
26
+ when "execute_field", "execute_field_lazy"
27
+ if (platform_key = data[:context].field.metadata[:platform_key])
28
+ platform_trace(platform_key, key, data) do
29
+ yield
30
+ end
31
+ else
32
+ yield
33
+ end
34
+ else
35
+ # it's a custom key
36
+ yield
37
+ end
38
+ end
39
+
40
+ def instrument(type, field)
41
+ return_type = field.type.unwrap
42
+ case return_type
43
+ when GraphQL::ScalarType, GraphQL::EnumType
44
+ field
45
+ else
46
+ new_f = field.redefine
47
+ new_f.metadata[:platform_key] = platform_field_key(type, field)
48
+ new_f
49
+ end
50
+ end
51
+
52
+ def self.use(schema_defn)
53
+ tracer = self.new
54
+ schema_defn.instrument(:field, tracer)
55
+ schema_defn.tracer(tracer)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphQL
4
+ module Tracing
5
+ class ScoutTracing < PlatformTracing
6
+ if defined?(ScoutApm)
7
+ include ScoutApm::Tracer
8
+ end
9
+ INSTRUMENT_OPTS = { scope: true }
10
+
11
+ self.platform_keys = {
12
+ "lex" => "lex.graphql",
13
+ "parse" => "parse.graphql",
14
+ "validate" => "validate.graphql",
15
+ "analyze_query" => "analyze.graphql",
16
+ "analyze_multiplex" => "analyze.graphql",
17
+ "execute_multiplex" => "execute.graphql",
18
+ "execute_query" => "execute.graphql",
19
+ "execute_query_lazy" => "execute.graphql",
20
+ }
21
+
22
+ def platform_trace(platform_key, key, data)
23
+ self.class.instrument("GraphQL", platform_key, INSTRUMENT_OPTS) do
24
+ yield
25
+ end
26
+ end
27
+
28
+ def platform_field_key(type, field)
29
+ "#{type.name}.#{field.name}"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphQL
4
+ module Tracing
5
+ class SkylightTracing < PlatformTracing
6
+ self.platform_keys = {
7
+ "lex" => "graphql.language",
8
+ "parse" => "graphql.language",
9
+ "validate" => "graphql.prepare",
10
+ "analyze_query" => "graphql.prepare",
11
+ "analyze_multiplex" => "graphql.prepare",
12
+ "execute_multiplex" => "graphql.execute",
13
+ "execute_query" => "graphql.execute",
14
+ "execute_query_lazy" => "graphql.execute",
15
+ }
16
+
17
+ def platform_trace(platform_key, key, data)
18
+ if (query = data[:query])
19
+ title = query.selected_operation_name || "<anonymous>"
20
+ category = platform_key
21
+ elsif key.start_with?("execute_field")
22
+ title = platform_key
23
+ category = key
24
+ else
25
+ title = key
26
+ category = platform_key
27
+ end
28
+
29
+ Skylight.instrument(category: category, title: title) do
30
+ yield
31
+ end
32
+ end
33
+
34
+ def platform_field_key(type, field)
35
+ "graphql.#{type.name}.#{field.name}"
36
+ end
37
+ end
38
+ end
39
+ end