graphql 1.7.3 → 1.7.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/graphql.rb +6 -5
- data/lib/graphql/analysis/analyze_query.rb +2 -2
- data/lib/graphql/backtrace.rb +5 -0
- data/lib/graphql/coercion_error.rb +5 -0
- data/lib/graphql/define/type_definer.rb +2 -2
- data/lib/graphql/execution/execute.rb +7 -6
- data/lib/graphql/execution/lazy/resolve.rb +1 -1
- data/lib/graphql/execution/multiplex.rb +13 -4
- data/lib/graphql/execution_error.rb +8 -1
- data/lib/graphql/language/parser.rb +6 -5
- data/lib/graphql/language/parser.y +6 -5
- data/lib/graphql/query.rb +10 -1
- data/lib/graphql/query/context.rb +2 -0
- data/lib/graphql/relay/relation_connection.rb +1 -1
- data/lib/graphql/scalar_type.rb +24 -0
- data/lib/graphql/schema.rb +18 -3
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +13 -2
- data/lib/graphql/static_validation/validator.rb +1 -1
- data/lib/graphql/subscriptions.rb +9 -1
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +6 -3
- data/lib/graphql/subscriptions/event.rb +1 -1
- data/lib/graphql/subscriptions/instrumentation.rb +1 -1
- data/lib/graphql/subscriptions/serialize.rb +52 -0
- data/lib/graphql/tracing.rb +50 -21
- data/lib/graphql/tracing/appsignal_tracing.rb +28 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +28 -0
- data/lib/graphql/tracing/platform_tracing.rb +59 -0
- data/lib/graphql/tracing/scout_tracing.rb +33 -0
- data/lib/graphql/tracing/skylight_tracing.rb +39 -0
- data/lib/graphql/version.rb +1 -1
- data/spec/dummy/Gemfile +10 -0
- data/spec/dummy/Gemfile.lock +149 -0
- data/spec/dummy/README.md +24 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/config/manifest.js +1 -0
- data/spec/dummy/app/assets/javascripts/application.js +66 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +5 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +5 -0
- data/spec/dummy/app/channels/graphql_channel.rb +84 -0
- data/spec/dummy/app/controllers/application_controller.rb +4 -0
- data/spec/dummy/app/controllers/pages_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +3 -0
- data/spec/dummy/app/jobs/application_job.rb +3 -0
- data/spec/dummy/app/views/layouts/application.html.erb +12 -0
- data/spec/dummy/app/views/pages/show.html +16 -0
- data/spec/dummy/bin/bundle +4 -0
- data/spec/dummy/bin/rails +5 -0
- data/spec/dummy/bin/rake +5 -0
- data/spec/dummy/bin/setup +31 -0
- data/spec/dummy/bin/update +27 -0
- data/spec/dummy/bin/yarn +12 -0
- data/spec/dummy/config.ru +6 -0
- data/spec/dummy/config/application.rb +31 -0
- data/spec/dummy/config/boot.rb +4 -0
- data/spec/dummy/config/cable.yml +10 -0
- data/spec/dummy/config/environment.rb +6 -0
- data/spec/dummy/config/environments/development.rb +40 -0
- data/spec/dummy/config/environments/production.rb +76 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +9 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +6 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +5 -0
- data/spec/dummy/config/initializers/inflections.rb +17 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +10 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/puma.rb +57 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config/secrets.yml +32 -0
- data/spec/dummy/log/development.log +360 -0
- data/spec/dummy/log/test.log +789 -0
- data/spec/dummy/package.json +5 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/spec/dummy/public/apple-touch-icon.png +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/robots.txt +1 -0
- data/spec/dummy/test/application_system_test_case.rb +6 -0
- data/spec/dummy/test/system/action_cable_subscription_test.rb +41 -0
- data/spec/dummy/test/test_helper.rb +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-5/-5OWGoO21F6_WNuECrXgkwH7NcKlWSSe2GjVanwsmUk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-T/-TNJ0-j8HjZCYUE7EDQlhfGu64B8guOUPkXYO6HFhus.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/09/09tM9-9HC9J7np7PawoxLz0YZYB_jmwdMFL4N4WBJdM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0H/0HR_baZ3Owzw1Gx5epPCDhsl0UXWGh73zDkQu08IHuc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1I/1IbYhe7oTUZvWCe0pIMBMp5bLq5pCuxuxlgnQV1TAno.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1I/1i4n3ptJre3b2zbA9AvgzE-ThTU_1mqSX3AlMtS_Qxk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1L/1LQJg_vkfK3o2UCvJGQKuGjXydCfw7GerrpJCGiKw5k.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1U/1U5446rsEAdkd13irJZX_XQoEKv9Ay8wSrKES_-gD8k.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2c/2cKLFtRkYbS9lni4MJ8unG2jW0YmNgK6tdelamzjM30.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2m/2mGtEm87jDbeppJBYdnCWjRDV5cQaosG-bKVwVN7_kE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2p/2pt2peFCVR6OoIrgufIQbrDGMcFLYwrJtHsLENF31jQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2u/2uWP73mE8FRywvUKKT08RhFuNUlVUEopIKdt0Jtt8y8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3-/3-C6wEhMG8qKt4rLfzJzMlRBgxb5aDJIB2m5WS0WbAI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/33/33_yR0KysvUnUWvR5TzwELDqGApTbi2ex2o3vY-ybfU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3N/3NTAQ9mVEZbccGibE39JpeqlDw2L6zcUtlRsbPCT918.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3V/3V8ZntS_gc1fums5LuLZK0a_nwPIjLXSD0JNF_3ScEk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4U/4UAd9Le8LhEYS8mCovy_yQC_ofpTBWt1Q997x0hg6xY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4V/4VaOsvficwh2EmmuR-pEJTISpR9mbr8Cf7jYYyptEwY.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/53/53WajXFPOCZVqMrL7nxYAYl90fSweya9XM4vrDJhU6c.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/53/53oHiwCXSKokJPEWS6w53bGXkeZm-YAcDuXcBhNscEY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5Q/5QrnrmEh-kADCXW4bexyNOrjfDmlq_YHgPcEYcHtz28.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5T/5ThW8FwEh4SPqrxD1RKHSc3o-vA_2ff5zKoly--6uuM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5d/5dGYuqW7Lp3oCc1lq8B9Uoa0lfgE4iOEiGvgwRf1JHA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5f/5fUAiOa1Zm-ove4HOeSLN1OQmEMHu0OYjHrYIK3-SGE.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5f/5flfgUDFCRhrUbGifk2RfSEGWOBMubAcaWg4ZadI5PY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5i/5iW33HH6azj0ds2lqDaOB1666CY_uOHhVAQavgh7tYw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5m/5m0G50I6WuIDftOEFtJHjC0KmN1mnhe51wBZ2dq9la0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5m/5mzbQNNLQ1vmll1Azo5cAZpDY2Zc7C_CLYJH2zKtzYY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6K/6KeDYkyM_nd3JJSp2B4HtcpdeA3uHgJLSlRaEVpH328.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6V/6Vgv7g9Uc08fiIpuLxlhqPTfx6tGo1yLedmmUvEL41A.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6n/6nd7P_DUqcusZX7UkA5TILZyMrcu-AYfxnc2Kz_J0qQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6x/6x8om3H3i1stGMEt1wnZ3OsVPGj-sxwE-eyd7A6hSi8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/70/7037jorQaO3wUpzYOJoDOd8cgJMeC2uTysojXmeaYzs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7p/7pN8wYS-6xc_x5BzT4gRgFAiVGhhcW9NHg_e6Ng5CDw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7r/7rgR5Gy_i08FxXwdCvtqSCXSghB7e5EXB2Vox4MQVUg.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8Q/8Qz_ptqTPNDlaE2aAVgaFiIBByiF2fhNHKQJFggzJYA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8e/8ezXMOIySx7oyopI2nH1EXfCzPCFHTJiS3q2tvyEZjY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/99/99m8UCKl4j8IpsVOK8ltLHyNh8Ae0nHw3GBkC34V_co.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9a/9abVi8XfoB8pGShaL5_-jzZGJIxKmedpFY0HQ5h24oE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9g/9gsAnrIrurboVInpkI-XlUZdUGmshgVKXpdRCtXUt6U.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9l/9lUXwCLUk9jTC-3kZdXDSRo-klgJVL54qVOIQmKxlyo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9z/9zFndwRgSOtYlsafWZK_zfCvnqMF4Vv9IqkVxn0gUbM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/A2/A2LHSq1LhqpUvGzPhj15d7c1Sj2RkYyajxf8ipO1x0A.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AO/AOgGJjES3shgkGKKaEb6GMfcfUm18alfRVbYsMJKFyc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ag/AgIFaB92zNMX4-Gy1uYelrx1pnszMI9CxP0aO62ismQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ag/agBYa9WG7ZT869eaOCVQ4mfpe9AWU8oNjU0g9foJZxk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/B4/B43LeT9Wba4fLvXw-C_kKq-x9HwYZxnBBiltbIufzzQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/B4/b4w856SSmGPJvZoawjQ63nUN1himU_z41nfZQNGvdag.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bg/BgLjB8mXnvRh9DrKcGI_KblFPuA84hjh4nJC50FDsWc.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bw/Bwb0DDjQm45Eqy64G2YHrm2eOj1PkqG51Hh3MWG0V40.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/C4/C4hGtajZFD6B_bt3ow2qxPGLb1ycjE_7G8Ssi2q5HuA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/CA/CAI82me2PN_gR-kiw8xQDx9FQBiLj_cyO4HVfZfiqf8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/CR/CR85EGUmeGMQQR96qjUurW5HSk4vr5JgWDLQEFxhnAY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cn/CniRwlPjVCW9FLyHc9oNHIvE-TdlvyAP-lAOrkSBsQg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D1/D1ZVypz4A_qF0cewMs2YiW5uWi7MKEdPOoOXeBQKeL0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D4/D4osajB0M3Tk4bo3qAkcpkXlGHReFCOJxlo20Deiqk4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D9/D9cZjx3n4E4qKXoR9rROjaYWpm1nnip45O0Ubyqyho8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DP/DPvPPYoq_7HYVvKapcWxWL0bSIyINU7Oc93He65SrAk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Df/Dfl0fgtV2z9SkiRUCnFBU6pD3TPmL0rI_lUqOVSglz8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Df/dfOhvqqzI4Yxr6VUUn6T5DARFk5SNeEasmpVaiBivxQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dl/DlaCy1X82C9F58mF2UUes54AZzBUIGyuFiZEc9PUW0U.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dy/DyHdMGh9NYCQ6KM4Cs6ySrmxIGQLcs3urJo2ni_GHeI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/E8/E84Qt1hM8br74RgXrkdGt8CGM8KnVROweUTPah6hpao.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ea/Ea7ca7cxAj6u9A8UKN2ZVtAFE3GXgmTZtHiorPaUnTg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FN/FNAoxlHjPOpzywpYUXo13-PLULLhE4lZ8jRmsdCpQ8s.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FS/FS-IBIwKNJB6ey4YiEJy3WQxdihlzqhn27zuXCPW3I4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FS/fsx-7r5CnuEuuruO05WoCqUE7I7yHdsHFyufpAo9L_w.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FU/FU7chcPDGpikN_If4SNgCUiwKbAtWa-dV0x644C-R8A.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FZ/FZS5A8sTziH2yLSQsehYe2Lov6tTh7qddnYpUCOrSg8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F_/F_wHSssqVgbtl2xnKiCAx8T1yXJcm6G6FFYyEQOM1vk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gx/GxO9oxH-DZ8Vk1eqP17OKFSocWisT4gGJtcGM1t5Fio.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/H6/H6QLQGIr0MZMFEBwWkJpjKCoSmnCM1d1b7Z2bT1pchI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HC/HCDOUd7-S45aJ_PjVAC_Vmjyud3i1aQv4cE3t9_Z3Dw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HN/HNBghWjxKPnFYO5L6fJf8R4AeZ0rdAOL6sUFWovnBwU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hb/HbX5bR5UYD1vbffHD_0rvCrL9QARJ6bCpD00MQdR1g4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hm/HmOkSBI1TuhJ1te9t-y9GHxMWn2FVl-RnFS8oWi7V_w.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IN/INJypnigTMfqqPOcC-b9F0Iye_HbwItx-5XDHLUtWDc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ig/IgW_xNyC9axLdFbnQLpkLYqhAzSgmdACo0mT8ai455Y.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JY/JYy-al-c4ButCglqQfY9a5PZV6XFNBjtHD9sWas7NbE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ja/Jah1OygWPoT6OkBv-5VE19u3b0vGJTHsGse68OBZmtQ.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/K0/K0-nXg3QbjeMtvvRvPXZiL0kCh0YtyApX9XrJrj95Po.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KI/KIVgv3yfi4fSugBTELntGMTgpB8JKD1c5_CxdEvkfaw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KO/KOgbmY0o5uemlVX1FmoTnTDK6QDnydWoRF2Ht9TtN2U.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LI/LIHDRdjIBdKfW4tnKTESwsWFz4OeCV-sJZtEKUYaLiU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/La/LavB01ePIpCqyhy1AJu1V9piCEAYuTyS5bjdSEVqEoY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Lx/Lx6tpPxpS0hrFKiVXiv37Q4bFJjhDJJak7WUoOemLC8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Lx/LxRPPEO9CB_ckDd1jRPcKJjsm_Gc0CGMSmrdUXXpzjs.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/M6/M6hnb_EIRICxNcrNSkV7ekfCpVo0O9U2XSSaLxDqONI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Mq/MqwfYiRcCBhwwS_cH5IyKUMsvSreSqmpD_WV3AHeZcw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N-/N-bT7IhQ1pVoh_gTwxXqeK3dVlmJkxatBZyFP43Si3I.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N1/N1EMMEzwuRyuF1gWtXmBNA8MMh4jYud3NP4IQ4_6APY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NV/NVd17BdcRmpEVFGZDHcRFIgNC2usd2N50atmE6dfOiI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NV/NvHlFPeFw2ONsOqGrVoMfZKZNz-6Hio21cxECqHgZd4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ON/ONTTDNMWFhjcmhKbOP3KqbRtGvxLORP9OH6wMiCk_Ys.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ol/Olkqarn5mhfEd6uRArgjaOA-B1ZXvvcXpuIFVyoDAXc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/P-/P-STcrlrr_UHY2DAzJOcMU2FOt1STMToqoJ3hYaAEEE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PA/PAJgjBwkjHBCPPw8wWUsKsUR7TvgP4RK7PV8-Jdqluw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PA/paWxJFaOGYb5g3bPUex7k8lTzXqbJ4F0Uw_zBZI8XxU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PP/PPmjUfdcsG-U5YdKOGrvFGoDVweIuWHjIggt6U2rRIo.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Pm/PmTiqVQJ4334Q0J-QCdlEdApesHyk8Lwuunb-_RivmU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QY/QYJsCmNADCk6tDZF57r1lz6gqD88LSPkQXtY3Vm-uUI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Q_/Q_J_xCMNzLrUyke5pUNpWmyoVj_lW8yCigUKNE9FyXs.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RB/RBv3Nnh3mIqYx7YWNYxr9uuJlQKt0sISacYDiDkOJ3w.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RE/REff4oUdSjRZwuhZkynEkMbvKkAnflI5V3ti3ZCXtO0.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/S2/S2ulcWK2u8bC-jxhkG5P2oDyoR91wKtZkw6I5RfTz24.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SD/SDQnsrLw-b0RFX481lQQF9x0HiZaefzuBAuOj3cwo9I.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SD/sDGKBkb0LsWWFOmHNgz4ahOe6iLlCfJ8Zy8iInv4teI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SM/SMCVX47Gg93AptU_3a66VblIT3KLHqKrkHHuMhfPIxk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SQ/SQPrFInSYpfPUMfXYJXnph6q8eAFQsL_plvmqSwAVEM.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SR/SRppQZkF9KwCpA8Ud3swxGKHJUSM5M75OTHlmfiTeAY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TE/TEEzQHAX6KOPY3AIg2OPhwQPpIrKlcqGJnqKnvz9YDE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tr/Tr5ExKD0jPytz0PJn0sVycLrI6t9y-4wGKO4MTwzi2U.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tr/TrY4Ml48luBYhVfMdvwlyB7zO-QQQaWIW7ORlLUnYRg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tt/Tt0V7r8e-tdXVEGXDjN31D88EHb3z-Jo47tXWmAPCwA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tx/TxxBMsRYAeLcndv5YuF1FkCV30qi1yhYI8AzTki0Zmo.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/U9/U9dnnrqeoOE-mYHdH4XmicZAjMQbjhjXdiA8VlMGsHA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UA/UA89Y066oW41G1gWoHWdEXcPU2JZ66j8dnXKwoc3yJc.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UK/UKklu-xV4ZGx7P5-zWqENrlHQUaedqEuUNTgezjc3g0.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/US/USYEqEC54xCRgdxfID_BklmAl2jIXZAKJ9BhapbMqNg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V5/V5dKKdHyA7y6N44igdqPBARmoV0tYdUsUrmf2lJkF6M.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VJ/VJ9Lp37PnSDzVOvhSVhKc2eG-KOuv3bRFxar6M8LLnA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VP/VPf8mKPeiYU53d-M_P60d-YL6wdTka1rTVRa4F5dB_k.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VY/VYJV9KoRx38NfAvSvXouEYF_0k-Su_KdFuSSXPOoSOg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/W2/W2nmNoF054n5uT-S7jhvUpaJqxHYWiJnHNP8fbjwjj0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WA/WA0OKbW1ShDLWAbN4voLShkG6JaNjvWeSNF3ZpLcUqY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wr/WriMHycrWjgHpmRpAo9N4nvDB5T0lBL5EOTTUQUHwn4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ws/WsHB1qkchRYVF4JV0Yqtr-QiyZ26DiLFtKTrCRVc5kI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XD/XDRDiP6A_Qz7pCCfZHYO6Xfob7trS4JQQoX_ByuWnRI.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xr/XrGClLu5lOe_6gWU_Nm-tCAC6tUCFpoTPwyKLHmrnNw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xu/XupuIipXyzmZQIRfy2SfGTCS21Y-sBxWWjFWmnxYllM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xx/XxkX9e-7J9By7nLHpwyUoOdUJ78twXYUefvXKie2WkA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yf/YfGn3oqi1Sm1_rHBqpmph8QpfhWTITbEUWS9waD_HKg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yf/yfhQwhH-ul-osfCM7_EXtSEeujd0TqsbqPoVgj7ehi0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yl/YlIiT75oC_1vUeD7NoTHufIKf1Tdnjg82aJbfI79WGQ.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Z-/Z--HP-BzybXzcZ6TPTFHonJqTM1B3B2g-5uUSi_EuSc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZT/ZTVpqYlcQg-w8iygSuUB7UBreT5bxLOPDNlKjzg5kMY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZT/ztYH9puOw0lwdIjwlH18IT68aY0KvTPEiAQTrxn4doQ.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Za/ZaT_Lz8qe4rCd9sYS8dWxhl6MB_pWFUu7sqohGkRsAo.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Zz/Zzsh2ASGqBSWLSWIU4fAyxS3iVuJDxdTCw8jOOsUNzA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_-/_-Y1fY6ejeTyiaDheuPSN_aPVwcvRdIlowBkfFxEY0c.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_6/_61xcFfBTsk2JixNV1J-NP9FtW67n0Haapr-7H5toEU.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_R/_RQaUmRUEEXsJ7wurDZfjh63xJqRWfkCTDSiA0pvOIg.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_m/_mRvClvA9ew3lpKq5JBpjPY232J6bAj9K_XP3N2HFD8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_z/_zNZb_3SH_fXs-tDFm3LtWun9BlLzBVn3aDO9l6K-NQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/a7/a7lacDViLUEaXFwV6UuZfTUood23K0X7_s2YYxP7dQw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aV/aVdjJbgLyd5MLwvnXSaX_83wDD0zG8DQnKs4hlOXOJ0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/al/alJwyXpJHF8RaBpaslorYD4Et6PO_-7Jr1qQmR_Wtys.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bC/bCSJnsDI4K9-Hwd7p_GC9M36gA2QbYgtfl-Guk1Ev80.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bM/bMopwpsFeLUsi20J9L9mPnoi6ZMJMVHIzxbTHbWrBho.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bd/bdikSDf26RlvOPFhOT9G-XHnMj8ptHrTYB3QUuABCUQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bi/biczy7hoa1_tzXKc6t2QU3WdkhkfdBfwwq66GVVz914.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bq/bqRZ6xUe_GzjdFbiyk0iMQoNHY4xk1gccuw3l8KUJz8.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bv/bvfgzCTJxyiwgFWSXthcO14iFDl_K1NuT0vWVXcI-WU.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cZ/cZw-zK9k1to5xz_hZ8FQB5wpR9Ks1-bhn7kJJVu9Ki0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ci/cipvvZ93wZHrDs_W1liu4PQTEJsKuPhbk6JG1DsMfxM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ck/ckLh5gBuqdrZ9fuxYz87cU_3hhZMI_7tcqNJ2EjtgpI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dG/dGyq85wVf9waxk23R1VlUQQMflMpPSsiMOTM9TtZ1f0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/d_/d_Ckuu1Nlhrqje-LDVqGwCu8pLiyAX31uSdo7QCELeI.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/db/db0UgKlp2vcgigF3FfR0UlilfVgDEJuew9qxLsuR374.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/db/dbXmPOhlH1AKN08KRg0ow8KOe-_XKeBNOg0HJvnqQCs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dr/drw7hbVGSDH0ujUo0r9Fmfbjvw8_eoOc6fCktj5IKak.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/e7/e7SEwN9e5ctMuXdXSRM6IB2fFMiIP2UAmvXjDKktd5w.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eW/eWG0d21oPZQGuYiCLej8OsRayN0--zxnvn7KHFqrQus.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fA/fADdr9ULIrFxI-36hG3S8yfvCp2VHyR6WzSZNIPM3C0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fE/fEt1GN3H2qJiB0PwX6Cd43UrRkzLxTRIeUyyrydPe_A.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ff/ffguBp3lFlcLuH9rWtl1JJxs9dDTIfm-FCMONYpUdww.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/he/hepQXqLZteSsVIUXJaeKnrpVYKb53gbWe1xr6tuFN3Y.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hy/hyMfoAGcpyTZYoedJT2E2u3X96FEwATK-lIPMFlN_bw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/i9/I9UL3IEpQ14Bi9EpF3TLd0P5Rabp6ulJbgz2f1o-neA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/i9/i9lFglNaFPcJgnmxvuMjrY_R8pXY0CN9SiUKFgVFPSM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iE/iEzDISmI13GuIeJehYePCIVyUe7XZ-_q9pvIv0UzneM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/i_/i_hzz-9VlGYj7yvx9yYWRKRw2UwxqFHQrRZw6vzXsWc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ij/ijLUBXXLleeHIaUQp-SQmpq0HpH94rYlbW5OJbKpnsg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iq/iqPK1x8VfJwa8KcViAxJc6WCCa1dqE_7ubcbyoyjecg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iw/iw-6QMCNXnMzL5koGPyFgnCllIbeX88-V7N5GRRqxLA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/j2/j2NpPyjDjX23FPlgIi_Hf4oc4HH6a74elyfPP9wF0jU.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jK/jKof1JYBdCVS3OYs9Itw8Fbr1nIPR8DLSEB8WKSDLyw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jS/jSnpKdnMVeeGtUODVf-9I1I3xvGWQr4uOtIB8Oul4Zw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jn/jnwTDvpqs0w9VZpZ5GUZ60o6cpUhzgo69c_ooHHmNvM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kU/kUok4qdkoYsQOP59lJgy9rPyE-T3sh8l0dVDE6KzfeI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kv/KVJz4npl0nKN-Dp49qjcOml4Tpxq_AZ8RNO1Bi387Is.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kv/kvTGOzOr1lqLnY61yqldR_vtHpoCKFYDFpl7_fnCtcE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kz/kz7lpLb0SoWDdaStz39DkoaQykVp0h3Jl4agZcEh6L4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/l8/l8UyUr0lncdtUUTZFwO0ulkW8Bl3z83viCwii7OewZk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lH/lHDGd3_dxi_xz9n5_wYFy7hKMxp78Q39u_XQKZWub_Y.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lU/lUmP4mi3T8xmwS_odQgw8llzs35KCOMZCTv0DANy9dM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lY/lYdwx9C-FXcmiLA5bsEfQIBwpcg3twu1lz6rFXROyCI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lj/ljpGLuZae0hOTv1h7MGCiJ30O0qhPCuvEKLhD5zpV8Q.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m1/M1yW7a2h3VzoyhwmJIKGEXjCQN8GsQcnvcKaklurytE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m1/m1jB-0OsQz_CCr-Q_KIlpfF7BsJBF8GXMfk9pZdJsdg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m3/m3WJ72qtNo4wVe78N9YRArVH33D15hEwdVd67wJbvOQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m4/m4EE0-xa87oylMzux18a-d2pR0zDtF2GCbYzwdSvQH4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mS/mSWxg1xZbGaeYGDXMe8nsYZC_LfhiNdjSTL2J2ELE0s.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mb/mb6HAyivnzHzDrkN35ifr4kL7MuksZYWamdJBUjhoHQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/me/melFFxMi_bgtkEkztQhKusyFDqKEeVVzurk_1_TPt6A.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mm/mms9rxcyPm09RjefBI321LIRPUAobgQ1X4A8Uu4w9Fc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nA/nA0Bu-48plSRK0cxt2gE2-TXvwcDsTjvHLFR7KshbPY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nA/nAGwhUtXjENu4Jl3uTJFFRnDhJAOlMAmuju7JcllSRM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nN/nN4lOF8mi-IWkm3zsqohaHbvJS4uG-_tiFsB6h1PsFc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ne/neLH-4_-lhKrkmcWjkrdYAoT5xDuc9EzJ5-81ZXeeXc.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nj/njVJUsm_4wugUz9SwMbITIhSGErMWqSZ16AEUFn2RHo.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nq/nqz2Ja53LHhXhFb6ChNpDKnBMWNdp17ZtNhrn-9wdR0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oY/oYHos9r6mwOX5jDyDTWjnpRR_SvWe4EX9gAl20Gqj8I.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oj/ojlR_0dl68-YErHzTDzB8lO8nKxQzG6x_Axc5oWIeBg.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pG/pGc_RfrP3RwCp5SBabj-nGnfyeSnUp1Ed1ajCG5Yx-A.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pQ/PQZm6DUZqIXs_3Wo9ISeQRb0vYyB0XG7iGSHr9_TWlc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pQ/pQXlqH4DBItuAHNMXGnwQmnzYkwJ2m7kUgKQbdbZM1E.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pj/pJtdFKizdxA_xBjuuXQWYnEvCcImUQtT5Rh-tGG6v48.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pj/pjg7FTDRmEzqh8W3ijd1Y3GbffQuQwwSKEZ6ftoPnJE.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ps/ps7w7RIcMoa1jxZu4r5mWxnZzl8qM4Bs9AietV5a9nU.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qU/qUif8_vci3i4xpLoHjkoVXT-baN2Z_qabhqo2Wl1KU4.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qf/qfMsgo__LLXJ_4thqBkUaDYPnaucsAJhMl6uN74w1GM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qj/qjbZ2Uz7G_0aKEQT3Nmuu0k2FkDTmVTemeoG3gw3oSw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qx/qxng7xwKb01YKazp0ij03cuEDbzSNSakHHwLx7XNEck.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r5/r5EpktDep6rAU9paabInRkyyMPudlyFSWlHRFmSKXcI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rX/rX6desISJ78BGVzR2gPZKb2BiWY-N596DjfIgaTTkew.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r_/r_57OZEW0SEEUS9tJZwHYMvqjkbw3-3qfgomLAKJzoE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rh/rhT44pxmkWo5fhkEb829kceOiGof5L5L55DT5Uv9LKQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/s4/s4BZ5EXO5EOticOtqwWaw3qjnMod3t0AfgXahBpqSZA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tF/tFofktc3WRxmXDS1NTWdUstzycUbsShJBMHatxLvxqQ.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tL/tLQy_cVJ8R8R35MKxmAuxHklAoaJTyXFO-eL8dXcMKY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vH/vHyq2njTP0fsOdOun0eFn07YnFCTmJJkD89-pJ9tKYA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vK/vKDpBE4UJEuJjeJqLtVQSQ7wHxJ1ywxrRt8Y1XQBxtk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vK/vk4eyljHSm11GcRNbA0QEqn13Y4bEfxOcBwiesL-XvQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/w6/w6JBeSUs8dNJNtbRF-HVG3csGda2FlttAEBSpSHoqcE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wc/wcSdAX-yztEvzKx_xYHtqxT47ZyaLoLal_vKwPxEP08.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wh/whuY0tTNf66sTcgILzLfelCAHIBpDZZIiOIuI12HNQw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/wiKqSHxw-MJpM466KPFAcPyzBHxbpGGYW578TqFEJeg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/wixK89IvA4Xk2MyJxkyLg-2xRs2vRPzY_OIs37bi8XA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wz/wzY0ol5RRJK1j-hK9nckKoTMWK5TJDii5QSZMGTu5hk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/x3/x3jUhlqTEK-rA6zTC8_MWGyKD8tZRhz2nPu0nCBgEGI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xL/xLZtF0WWBePfiVBWxxi6brXCLsEfcrj435b9xJupeeU.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xL/xLktzniI5dkWKAifTMHzZvRHyRHOexsqV-ZRsdLXx0g.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xv/xvoydM1zth53tauNTatJNfb-o44mAGDD9-85yRkpeqY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yH/yHfd9J_SJGssjygyWK8-uLlvE6IlN6DIda7947QWVsI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yQ/yQP_20gvJZ1MfkfWE7nU-EFpqbMzANYy8OWuQuaDyLM.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yv/yvOcRnWhg9dCjr1_rScAH4M8-rUQVY9oHFqBGVoMniI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/z2/z2ro57FqSGT_X2jnC68fS-HrFmCh7Wbrnrm45BceZoM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zJ/zJfViroVCTZxyBh0pLP8_QiOxemqmKRkiU7BHAf5HxA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zP/zPBLf0GnkvCm86BY_8PtGJRyawPWy-JxWZp25_yNRfk.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zm/zmEmiHcLam0fJ2odLUV8n4hg9GN2gBDrJo7JCkkg8f4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zy/zywotY5ANjNyE78CLDqC1eYRFwL1ZFzkT9J5LzNlI4M.cache +1 -0
- data/spec/dummy/tmp/restart.txt +0 -0
- data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
- data/spec/graphql/analysis/analyze_query_spec.rb +2 -1
- data/spec/graphql/backtrace_spec.rb +12 -16
- data/spec/graphql/execution/execute_spec.rb +1 -1
- data/spec/graphql/execution_error_spec.rb +19 -0
- data/spec/graphql/introspection/schema_type_spec.rb +1 -0
- data/spec/graphql/language/parser_spec.rb +3 -3
- data/spec/graphql/query/variables_spec.rb +1 -1
- data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +50 -0
- data/spec/graphql/static_validation/validator_spec.rb +1 -0
- data/spec/graphql/subscriptions_spec.rb +57 -1
- data/spec/graphql/tracing/active_support_notifications_tracing_spec.rb +6 -8
- data/spec/graphql/tracing/platform_tracing_spec.rb +56 -0
- data/spec/graphql/tracing_spec.rb +13 -8
- data/spec/spec_helper.rb +8 -12
- data/spec/support/dummy/data.rb +1 -1
- data/spec/support/dummy/schema.rb +7 -0
- data/spec/support/star_wars/schema.rb +1 -1
- metadata +610 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aaf04d88628e6882277fdb587a521473684283ad
|
4
|
+
data.tar.gz: ca64d47b1f78982847287ece1bc2b387daa08f4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f860526de9a1c6c6e9ab4cca863231c64308a7d84f349a4b7adc7da9ac3c2ec29ca2e7d8c484fa04f46b1ae34c9560b15553a9e1c6844a0c19756028b0615f59
|
7
|
+
data.tar.gz: 306aad45f5e563c920e4ce3d18a5ffc940d72a1522ef11e7427fc6f7634e21f6025c2335e917a9c076463ba7532fa91fcf291f77c87fc0e57ab6221fdefe8b70
|
data/lib/graphql.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/graphql/backtrace.rb
CHANGED
@@ -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
|
@@ -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
|
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
|
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
|
-
|
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,
|
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
|
-
|
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 =
|
71
|
+
field_result = field_ctx.trace("execute_field", { context: field_ctx }) do
|
71
72
|
resolve_field(
|
72
73
|
object,
|
73
74
|
field_ctx
|
@@ -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
|
-
|
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(
|
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(
|
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, {
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/graphql/query.rb
CHANGED
@@ -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)
|
134
|
+
@sliced_nodes = @sliced_nodes.offset(offset)
|
135
135
|
end
|
136
136
|
|
137
137
|
if before && after
|
data/lib/graphql/scalar_type.rb
CHANGED
@@ -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
|
data/lib/graphql/schema.rb
CHANGED
@@ -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
|
|