graphql 1.8.5 → 1.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/generators/graphql/mutation_generator.rb +2 -2
- data/lib/graphql/analysis/analyze_query.rb +11 -2
- data/lib/graphql/internal_representation/visit.rb +1 -0
- data/lib/graphql/language/parser.rb +635 -685
- data/lib/graphql/language/parser.y +27 -18
- data/lib/graphql/query/context.rb +1 -1
- data/lib/graphql/query/validation_pipeline.rb +7 -15
- data/lib/graphql/schema/argument.rb +8 -1
- data/lib/graphql/schema/enum_value.rb +3 -0
- data/lib/graphql/schema/field.rb +8 -1
- data/lib/graphql/schema/input_object.rb +1 -1
- data/lib/graphql/schema/interface.rb +8 -14
- data/lib/graphql/schema/mutation.rb +0 -10
- data/lib/graphql/schema/object.rb +4 -0
- data/lib/graphql/static_validation/validator.rb +2 -1
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +1 -1
- data/lib/graphql/tracing.rb +5 -0
- data/lib/graphql/tracing/prometheus_tracing.rb +59 -0
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +29 -0
- data/lib/graphql/tracing/skylight_tracing.rb +23 -1
- data/lib/graphql/types/relay/base_connection.rb +11 -5
- data/lib/graphql/version.rb +1 -1
- data/spec/generators/graphql/mutation_generator_spec.rb +18 -0
- data/spec/graphql/analysis/analyze_query_spec.rb +38 -0
- data/spec/graphql/argument_spec.rb +8 -0
- data/spec/graphql/language/parser_spec.rb +85 -0
- data/spec/graphql/relay/connection_type_spec.rb +26 -1
- data/spec/graphql/schema/argument_spec.rb +8 -2
- data/spec/graphql/schema/enum_value_spec.rb +13 -0
- data/spec/graphql/schema/field_spec.rb +27 -0
- data/spec/graphql/schema/interface_spec.rb +14 -4
- data/spec/graphql/schema/object_spec.rb +24 -18
- data/spec/graphql/tracing/prometheus_tracing_spec.rb +39 -0
- data/spec/graphql/tracing/skylight_tracing_spec.rb +47 -0
- data/spec/support/skylight.rb +36 -0
- data/spec/support/star_wars/schema.rb +6 -1
- metadata +214 -764
- data/spec/dummy/Gemfile.lock +0 -149
- data/spec/dummy/log/development.log +0 -599
- data/spec/dummy/log/test.log +0 -1220
- 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/-x/-xYZjAnuuzgR79fcznLTQtSdh6AARxu8FcQ_J6p7L3U.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/09/09tM9-9HC9J7np7PawoxLz0YZYB_jmwdMFL4N4WBJdM.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0H/0HR_baZ3Owzw1Gx5epPCDhsl0UXWGh73zDkQu08IHuc.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/13/13HiV12xyoQvT-1L39ZzLwMZxjyaGMiENmfw7f-QTIc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1I/1IbYhe7oTUZvWCe0pIMBMp5bLq5pCuxuxlgnQV1TAno.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1I/1i4n3ptJre3b2zbA9AvgzE-ThTU_1mqSX3AlMtS_Qxk.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1L/1LQJg_vkfK3o2UCvJGQKuGjXydCfw7GerrpJCGiKw5k.cache +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3N/3NTAQ9mVEZbccGibE39JpeqlDw2L6zcUtlRsbPCT918.cache +0 -2
- 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/3W/3Wtf5pCWdqq0AB-iB0Y9uUNrTkruRxIEf1XFn_BETU0.cache +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/53/53WajXFPOCZVqMrL7nxYAYl90fSweya9XM4vrDJhU6c.cache +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5f/5flfgUDFCRhrUbGifk2RfSEGWOBMubAcaWg4ZadI5PY.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5i/5iW33HH6azj0ds2lqDaOB1666CY_uOHhVAQavgh7tYw.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5i/5iguGafb4hOn8262Kn8Q37ogNN9MxxQKGKNzHAzUcvI.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6V/6Vgv7g9Uc08fiIpuLxlhqPTfx6tGo1yLedmmUvEL41A.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6n/6nd7P_DUqcusZX7UkA5TILZyMrcu-AYfxnc2Kz_J0qQ.cache +0 -1
- 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 +0 -2
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8m/8mj2T6yy847Mc2Z7k3Xzh8O91hhVJt3NrPe8ASNDlIA.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8w/8wY_SKagj8wHuwGNAAf6JnQ8joMbC6cEYpHrTAI8Urc.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9g/9gsAnrIrurboVInpkI-XlUZdUGmshgVKXpdRCtXUt6U.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9l/9lUXwCLUk9jTC-3kZdXDSRo-klgJVL54qVOIQmKxlyo.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9z/9zFndwRgSOtYlsafWZK_zfCvnqMF4Vv9IqkVxn0gUbM.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/A2/A2LHSq1LhqpUvGzPhj15d7c1Sj2RkYyajxf8ipO1x0A.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ag/agBYa9WG7ZT869eaOCVQ4mfpe9AWU8oNjU0g9foJZxk.cache +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bw/Bwb0DDjQm45Eqy64G2YHrm2eOj1PkqG51Hh3MWG0V40.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/C4/C4hGtajZFD6B_bt3ow2qxPGLb1ycjE_7G8Ssi2q5HuA.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cn/CniRwlPjVCW9FLyHc9oNHIvE-TdlvyAP-lAOrkSBsQg.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D1/D1ZVypz4A_qF0cewMs2YiW5uWi7MKEdPOoOXeBQKeL0.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DT/DTQyMpr4ABZYQetsdRJ5A7S4jf1r3ie4FGOR7GZBNSs.cache +0 -3
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dl/DlaCy1X82C9F58mF2UUes54AZzBUIGyuFiZEc9PUW0U.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dq/DqJ5_yJPrP5iLlOQyTQsjAVI5FE5LCVDkED0f7GgsSo.cache +0 -3
- 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 +0 -1
- 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 +0 -2
- 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 +0 -2
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gx/GxO9oxH-DZ8Vk1eqP17OKFSocWisT4gGJtcGM1t5Fio.cache +0 -2
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HN/HNBghWjxKPnFYO5L6fJf8R4AeZ0rdAOL6sUFWovnBwU.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hb/HbX5bR5UYD1vbffHD_0rvCrL9QARJ6bCpD00MQdR1g4.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hm/HmOkSBI1TuhJ1te9t-y9GHxMWn2FVl-RnFS8oWi7V_w.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IN/INJypnigTMfqqPOcC-b9F0Iye_HbwItx-5XDHLUtWDc.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ig/IgW_xNyC9axLdFbnQLpkLYqhAzSgmdACo0mT8ai455Y.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JY/JYy-al-c4ButCglqQfY9a5PZV6XFNBjtHD9sWas7NbE.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ja/Jah1OygWPoT6OkBv-5VE19u3b0vGJTHsGse68OBZmtQ.cache +0 -2
- 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 -3
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KI/KIVgv3yfi4fSugBTELntGMTgpB8JKD1c5_CxdEvkfaw.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KO/KOgbmY0o5uemlVX1FmoTnTDK6QDnydWoRF2Ht9TtN2U.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LI/LIHDRdjIBdKfW4tnKTESwsWFz4OeCV-sJZtEKUYaLiU.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/La/LavB01ePIpCqyhy1AJu1V9piCEAYuTyS5bjdSEVqEoY.cache +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/M6/M6hnb_EIRICxNcrNSkV7ekfCpVo0O9U2XSSaLxDqONI.cache +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N1/N1EMMEzwuRyuF1gWtXmBNA8MMh4jYud3NP4IQ4_6APY.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NV/NVd17BdcRmpEVFGZDHcRFIgNC2usd2N50atmE6dfOiI.cache +0 -1
- 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 +0 -2
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PA/PAJgjBwkjHBCPPw8wWUsKsUR7TvgP4RK7PV8-Jdqluw.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PA/paWxJFaOGYb5g3bPUex7k8lTzXqbJ4F0Uw_zBZI8XxU.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QY/QYJsCmNADCk6tDZF57r1lz6gqD88LSPkQXtY3Vm-uUI.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Q_/Q_J_xCMNzLrUyke5pUNpWmyoVj_lW8yCigUKNE9FyXs.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RB/RBv3Nnh3mIqYx7YWNYxr9uuJlQKt0sISacYDiDkOJ3w.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RE/REff4oUdSjRZwuhZkynEkMbvKkAnflI5V3ti3ZCXtO0.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rw/RwDuCV-XpnCtjNkvhpJfBuxXMk0b5AD3L9eR6M-wcy0.cache +0 -3
- 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 +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SQ/SQPrFInSYpfPUMfXYJXnph6q8eAFQsL_plvmqSwAVEM.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SR/SRppQZkF9KwCpA8Ud3swxGKHJUSM5M75OTHlmfiTeAY.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TE/TEEzQHAX6KOPY3AIg2OPhwQPpIrKlcqGJnqKnvz9YDE.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tr/Tr5ExKD0jPytz0PJn0sVycLrI6t9y-4wGKO4MTwzi2U.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tr/TrY4Ml48luBYhVfMdvwlyB7zO-QQQaWIW7ORlLUnYRg.cache +0 -1
- 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 +0 -2
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UK/UKklu-xV4ZGx7P5-zWqENrlHQUaedqEuUNTgezjc3g0.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UL/ULdjhhb0bRuqmaG7XSZlFYzGYCXTDnqZuJBTWRlzqgw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/US/USYEqEC54xCRgdxfID_BklmAl2jIXZAKJ9BhapbMqNg.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Up/UpPNgh0yYoUsyMDh5zWqe_U6qJIyTC6-dxMMAs1vvlM.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V5/V5dKKdHyA7y6N44igdqPBARmoV0tYdUsUrmf2lJkF6M.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VJ/VJ9Lp37PnSDzVOvhSVhKc2eG-KOuv3bRFxar6M8LLnA.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/W2/W2nmNoF054n5uT-S7jhvUpaJqxHYWiJnHNP8fbjwjj0.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WA/WA0OKbW1ShDLWAbN4voLShkG6JaNjvWeSNF3ZpLcUqY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wg/Wguh-szFGTI1gaL6npYwPekMXflugRei7F_mOyRucXg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wr/WriMHycrWjgHpmRpAo9N4nvDB5T0lBL5EOTTUQUHwn4.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ws/WsHB1qkchRYVF4JV0Yqtr-QiyZ26DiLFtKTrCRVc5kI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/X-/X-khLYMA9mqFRPg3zAi86mREDxpKl4bdKYp3uF6WHos.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XD/XDRDiP6A_Qz7pCCfZHYO6Xfob7trS4JQQoX_ByuWnRI.cache +0 -2
- 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/XU4k1OXnfMils5SrirorPvDSyDSqiOWLZNtmAH1HH8k.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xu/XupuIipXyzmZQIRfy2SfGTCS21Y-sBxWWjFWmnxYllM.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xx/XxkX9e-7J9By7nLHpwyUoOdUJ78twXYUefvXKie2WkA.cache +0 -1
- 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 +0 -2
- 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 +0 -2
- 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 +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_R/_RQaUmRUEEXsJ7wurDZfjh63xJqRWfkCTDSiA0pvOIg.cache +0 -2
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/a7/a7lacDViLUEaXFwV6UuZfTUood23K0X7_s2YYxP7dQw.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aV/aVdjJbgLyd5MLwvnXSaX_83wDD0zG8DQnKs4hlOXOJ0.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bM/bMopwpsFeLUsi20J9L9mPnoi6ZMJMVHIzxbTHbWrBho.cache +0 -2
- 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/BIkdhfxsezxM4q-HZ4oCNTq97WEJTigcq0tpX2cDvbY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bi/biczy7hoa1_tzXKc6t2QU3WdkhkfdBfwwq66GVVz914.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bq/bqRZ6xUe_GzjdFbiyk0iMQoNHY4xk1gccuw3l8KUJz8.cache +0 -2
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ci/cipvvZ93wZHrDs_W1liu4PQTEJsKuPhbk6JG1DsMfxM.cache +0 -1
- 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 +0 -2
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/e7/e7SEwN9e5ctMuXdXSRM6IB2fFMiIP2UAmvXjDKktd5w.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eW/eWG0d21oPZQGuYiCLej8OsRayN0--zxnvn7KHFqrQus.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fA/fADdr9ULIrFxI-36hG3S8yfvCp2VHyR6WzSZNIPM3C0.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fE/fEt1GN3H2qJiB0PwX6Cd43UrRkzLxTRIeUyyrydPe_A.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ff/FfxmA4CMHQZT7exx0G7NS1Wpcnny0vzp-Jhc2H36bp8.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ff/ffguBp3lFlcLuH9rWtl1JJxs9dDTIfm-FCMONYpUdww.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gE/gEiiG4GZNy_djEjK2pHm_NgA-gyhLZhdQvo0Yt96GqE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gn/gnA9ZSqpjccNL2m8pe_jBvY6SinXlCzXDWyop83Od8s.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/he/hepQXqLZteSsVIUXJaeKnrpVYKb53gbWe1xr6tuFN3Y.cache +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iq/iqPK1x8VfJwa8KcViAxJc6WCCa1dqE_7ubcbyoyjecg.cache +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jK/jKof1JYBdCVS3OYs9Itw8Fbr1nIPR8DLSEB8WKSDLyw.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jS/jSnpKdnMVeeGtUODVf-9I1I3xvGWQr4uOtIB8Oul4Zw.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kv/KVJz4npl0nKN-Dp49qjcOml4Tpxq_AZ8RNO1Bi387Is.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kv/kvTGOzOr1lqLnY61yqldR_vtHpoCKFYDFpl7_fnCtcE.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kz/kz7lpLb0SoWDdaStz39DkoaQykVp0h3Jl4agZcEh6L4.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/l8/l8UyUr0lncdtUUTZFwO0ulkW8Bl3z83viCwii7OewZk.cache +0 -1
- 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/lO/lOAan3cMwCE_Hli6gsDML88xFNfn0nxPmvrSkW7eEOw.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lU/lUmP4mi3T8xmwS_odQgw8llzs35KCOMZCTv0DANy9dM.cache +0 -1
- 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/M1pv8MJEPLXGLvS8QxVh3DSO9cI4mRt5FHFWdrvUj6o.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m1/M1yW7a2h3VzoyhwmJIKGEXjCQN8GsQcnvcKaklurytE.cache +0 -1
- 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/m7/m77qH7ZqH0_0SmwJbiKGDd-aLau1Dav847DC6ge46zY.cache +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -2
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oj/ojlR_0dl68-YErHzTDzB8lO8nKxQzG6x_Axc5oWIeBg.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pE/pE7gO6pQ-z187Swb4hT554wmqsq-cNzgPWLrCz-LQQQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pG/pGc_RfrP3RwCp5SBabj-nGnfyeSnUp1Ed1ajCG5Yx-A.cache +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pj/pjg7FTDRmEzqh8W3ijd1Y3GbffQuQwwSKEZ6ftoPnJE.cache +0 -2
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qf/qfMsgo__LLXJ_4thqBkUaDYPnaucsAJhMl6uN74w1GM.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qj/qjbZ2Uz7G_0aKEQT3Nmuu0k2FkDTmVTemeoG3gw3oSw.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qx/qxng7xwKb01YKazp0ij03cuEDbzSNSakHHwLx7XNEck.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r5/r5EpktDep6rAU9paabInRkyyMPudlyFSWlHRFmSKXcI.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rX/rX6desISJ78BGVzR2gPZKb2BiWY-N596DjfIgaTTkew.cache +0 -1
- 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/sj/sjRjnjRB37lH2vrgtkdJ8Cz84__IJ978IuKTM7HcztI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tF/tFofktc3WRxmXDS1NTWdUstzycUbsShJBMHatxLvxqQ.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tL/tLQy_cVJ8R8R35MKxmAuxHklAoaJTyXFO-eL8dXcMKY.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/um/um1JrirR4hJhK-1rE-HywlyCi5ibgxHVrReiujZBWJM.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v4/v4fwVytD7ITcE0_GDbslZEYud8a5Okm85fV1o7SDl6g.cache +0 -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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v_/v_0PAQt0iipQjFP5zjgkkk9Stnpf4VzvnMv67d1Keuw.cache +0 -1
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wd/wdT9U4MKxe1PyqNjVuCKMpCl3dxGCIRJIlwUTfh2DQU.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wh/whuY0tTNf66sTcgILzLfelCAHIBpDZZIiOIuI12HNQw.cache +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/wiKqSHxw-MJpM466KPFAcPyzBHxbpGGYW578TqFEJeg.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/wixK89IvA4Xk2MyJxkyLg-2xRs2vRPzY_OIs37bi8XA.cache +0 -1
- 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 +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xI/xIaxut_fEIhKBDqljTNwYaADK9kj3gG0ESrfHs-5_og.cache +0 -3
- 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 +0 -2
- 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/y0/y0SJOqIx2fn1SKqOkAihsQow0trRJrSIyAswufVuoA8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yH/yHfd9J_SJGssjygyWK8-uLlvE6IlN6DIda7947QWVsI.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yQ/yQP_20gvJZ1MfkfWE7nU-EFpqbMzANYy8OWuQuaDyLM.cache +0 -2
- 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 +0 -2
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zg/zgpzeaX-KZErHyGJ1aBH3ZusweNXMneVZule88XsIJI.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zm/zmEmiHcLam0fJ2odLUV8n4hg9GN2gBDrJo7JCkkg8f4.cache +0 -1
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zy/zYFltDy-8VC-uKq2BVEiJJyYXNFvVzAKuMlR3ZIYZsk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zy/zywotY5ANjNyE78CLDqC1eYRFwL1ZFzkT9J5LzNlI4M.cache +0 -1
- data/spec/dummy/tmp/restart.txt +0 -0
- data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
|
@@ -157,7 +157,7 @@ rule
|
|
|
157
157
|
| schema_keyword
|
|
158
158
|
|
|
159
159
|
enum_value_definition:
|
|
160
|
-
enum_name directives_list_opt { return make_node(:EnumValueDefinition, name: val[
|
|
160
|
+
description_opt enum_name directives_list_opt { return make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), position_source: val[0] || val[1]) }
|
|
161
161
|
|
|
162
162
|
enum_value_definitions:
|
|
163
163
|
enum_value_definition { return [val[0]] }
|
|
@@ -338,11 +338,20 @@ rule
|
|
|
338
338
|
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY { return make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: val[5], position_source: val[0]) }
|
|
339
339
|
| EXTEND INPUT name directives_list { return make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
|
|
340
340
|
|
|
341
|
-
|
|
341
|
+
description: STRING
|
|
342
|
+
|
|
343
|
+
description_opt:
|
|
344
|
+
/* none */
|
|
345
|
+
| description
|
|
346
|
+
|
|
347
|
+
scalar_type_definition:
|
|
348
|
+
description_opt SCALAR name directives_list_opt {
|
|
349
|
+
return make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
350
|
+
}
|
|
342
351
|
|
|
343
352
|
object_type_definition:
|
|
344
|
-
TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
|
|
345
|
-
return make_node(:ObjectTypeDefinition, name: val[
|
|
353
|
+
description_opt TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
|
|
354
|
+
return make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
346
355
|
}
|
|
347
356
|
|
|
348
357
|
implements_opt:
|
|
@@ -363,8 +372,8 @@ rule
|
|
|
363
372
|
| legacy_interfaces_list name { val[0] << make_node(:TypeName, name: val[1], position_source: val[1]) }
|
|
364
373
|
|
|
365
374
|
input_value_definition:
|
|
366
|
-
name COLON type default_value_opt directives_list_opt {
|
|
367
|
-
return make_node(:InputValueDefinition, name: val[
|
|
375
|
+
description_opt name COLON type default_value_opt directives_list_opt {
|
|
376
|
+
return make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
368
377
|
}
|
|
369
378
|
|
|
370
379
|
input_value_definition_list:
|
|
@@ -376,8 +385,8 @@ rule
|
|
|
376
385
|
| LPAREN input_value_definition_list RPAREN { return val[1] }
|
|
377
386
|
|
|
378
387
|
field_definition:
|
|
379
|
-
name arguments_definitions_opt COLON type directives_list_opt {
|
|
380
|
-
return make_node(:FieldDefinition, name: val[
|
|
388
|
+
description_opt name arguments_definitions_opt COLON type directives_list_opt {
|
|
389
|
+
return make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
381
390
|
}
|
|
382
391
|
|
|
383
392
|
field_definition_list:
|
|
@@ -386,8 +395,8 @@ rule
|
|
|
386
395
|
| field_definition_list field_definition { val[0] << val[1] }
|
|
387
396
|
|
|
388
397
|
interface_type_definition:
|
|
389
|
-
INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY {
|
|
390
|
-
return make_node(:InterfaceTypeDefinition, name: val[
|
|
398
|
+
description_opt INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY {
|
|
399
|
+
return make_node(:InterfaceTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
391
400
|
}
|
|
392
401
|
|
|
393
402
|
union_members:
|
|
@@ -395,23 +404,23 @@ rule
|
|
|
395
404
|
| union_members PIPE name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
|
396
405
|
|
|
397
406
|
union_type_definition:
|
|
398
|
-
UNION name directives_list_opt EQUALS union_members {
|
|
399
|
-
return make_node(:UnionTypeDefinition, name: val[
|
|
407
|
+
description_opt UNION name directives_list_opt EQUALS union_members {
|
|
408
|
+
return make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
400
409
|
}
|
|
401
410
|
|
|
402
411
|
enum_type_definition:
|
|
403
|
-
ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
|
404
|
-
return make_node(:EnumTypeDefinition, name: val[
|
|
412
|
+
description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
|
413
|
+
return make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
405
414
|
}
|
|
406
415
|
|
|
407
416
|
input_object_type_definition:
|
|
408
|
-
INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
|
409
|
-
return make_node(:InputObjectTypeDefinition, name: val[
|
|
417
|
+
description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
|
418
|
+
return make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
410
419
|
}
|
|
411
420
|
|
|
412
421
|
directive_definition:
|
|
413
|
-
DIRECTIVE DIR_SIGN name arguments_definitions_opt ON directive_locations {
|
|
414
|
-
return make_node(:DirectiveDefinition, name: val[
|
|
422
|
+
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt ON directive_locations {
|
|
423
|
+
return make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[6], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
|
|
415
424
|
}
|
|
416
425
|
|
|
417
426
|
directive_locations:
|
|
@@ -221,7 +221,7 @@ module GraphQL
|
|
|
221
221
|
|
|
222
222
|
def_delegators :@context,
|
|
223
223
|
:[], :[]=, :key?, :fetch, :to_h, :namespace,
|
|
224
|
-
:spawn, :
|
|
224
|
+
:spawn, :warden, :errors,
|
|
225
225
|
:execution_strategy, :strategy
|
|
226
226
|
|
|
227
227
|
# @return [GraphQL::Language::Nodes::Field] The AST node for the currently-executing field
|
|
@@ -16,7 +16,6 @@ module GraphQL
|
|
|
16
16
|
class ValidationPipeline
|
|
17
17
|
def initialize(query:, validate:, parse_error:, operation_name_error:, max_depth:, max_complexity:)
|
|
18
18
|
@validation_errors = []
|
|
19
|
-
@analysis_errors = []
|
|
20
19
|
@internal_representation = nil
|
|
21
20
|
@validate = validate
|
|
22
21
|
@parse_error = parse_error
|
|
@@ -35,12 +34,6 @@ module GraphQL
|
|
|
35
34
|
@valid
|
|
36
35
|
end
|
|
37
36
|
|
|
38
|
-
# @return [Array<GraphQL::AnalysisError>] Errors for this particular query run (eg, exceeds max complexity)
|
|
39
|
-
def analysis_errors
|
|
40
|
-
ensure_has_validated
|
|
41
|
-
@analysis_errors
|
|
42
|
-
end
|
|
43
|
-
|
|
44
37
|
# @return [Array<GraphQL::StaticValidation::Message>] Static validation errors for the query string
|
|
45
38
|
def validation_errors
|
|
46
39
|
ensure_has_validated
|
|
@@ -86,17 +79,15 @@ module GraphQL
|
|
|
86
79
|
end
|
|
87
80
|
|
|
88
81
|
if @validation_errors.none?
|
|
89
|
-
@query_analyzers = build_analyzers(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
# .select { |r| r.is_a?(GraphQL::AnalysisError) }
|
|
95
|
-
# end
|
|
82
|
+
@query_analyzers = build_analyzers(
|
|
83
|
+
@schema,
|
|
84
|
+
@max_depth,
|
|
85
|
+
@max_complexity
|
|
86
|
+
)
|
|
96
87
|
end
|
|
97
88
|
end
|
|
98
89
|
|
|
99
|
-
@valid = @validation_errors.none?
|
|
90
|
+
@valid = @validation_errors.none?
|
|
100
91
|
end
|
|
101
92
|
|
|
102
93
|
# If there are max_* values, add them,
|
|
@@ -104,6 +95,7 @@ module GraphQL
|
|
|
104
95
|
def build_analyzers(schema, max_depth, max_complexity)
|
|
105
96
|
if max_depth || max_complexity
|
|
106
97
|
qa = schema.query_analyzers.dup
|
|
98
|
+
|
|
107
99
|
if max_depth
|
|
108
100
|
qa << GraphQL::Analysis::MaxQueryDepth.new(max_depth)
|
|
109
101
|
end
|
|
@@ -42,10 +42,17 @@ module GraphQL
|
|
|
42
42
|
@prepare = prepare
|
|
43
43
|
|
|
44
44
|
if definition_block
|
|
45
|
-
|
|
45
|
+
if definition_block.arity == 1
|
|
46
|
+
instance_exec(self, &definition_block)
|
|
47
|
+
else
|
|
48
|
+
instance_eval(&definition_block)
|
|
49
|
+
end
|
|
46
50
|
end
|
|
47
51
|
end
|
|
48
52
|
|
|
53
|
+
attr_writer :description
|
|
54
|
+
|
|
55
|
+
# @return [String] Documentation for this argument
|
|
49
56
|
def description(text = nil)
|
|
50
57
|
if text
|
|
51
58
|
@description = text
|
|
@@ -33,6 +33,9 @@ module GraphQL
|
|
|
33
33
|
# @return [Class] The enum type that owns this value
|
|
34
34
|
attr_reader :owner
|
|
35
35
|
|
|
36
|
+
# @return [String] Explains why this value was deprecated (if present, this will be marked deprecated in introspection)
|
|
37
|
+
attr_accessor :deprecation_reason
|
|
38
|
+
|
|
36
39
|
def initialize(graphql_name, desc = nil, owner:, description: nil, value: nil, deprecation_reason: nil, &block)
|
|
37
40
|
@graphql_name = graphql_name.to_s
|
|
38
41
|
@description = desc || description
|
data/lib/graphql/schema/field.rb
CHANGED
|
@@ -14,6 +14,9 @@ module GraphQL
|
|
|
14
14
|
# @return [String]
|
|
15
15
|
attr_accessor :description
|
|
16
16
|
|
|
17
|
+
# @return [String, nil] If present, the field is marked as deprecated with this documentation
|
|
18
|
+
attr_accessor :deprecation_reason
|
|
19
|
+
|
|
17
20
|
# @return [Symbol] Method or hash key to look up
|
|
18
21
|
attr_reader :method_sym
|
|
19
22
|
|
|
@@ -152,7 +155,11 @@ module GraphQL
|
|
|
152
155
|
@subscription_scope = subscription_scope
|
|
153
156
|
|
|
154
157
|
if definition_block
|
|
155
|
-
|
|
158
|
+
if definition_block.arity == 1
|
|
159
|
+
instance_exec(self, &definition_block)
|
|
160
|
+
else
|
|
161
|
+
instance_eval(&definition_block)
|
|
162
|
+
end
|
|
156
163
|
end
|
|
157
164
|
end
|
|
158
165
|
|
|
@@ -27,7 +27,7 @@ module GraphQL
|
|
|
27
27
|
attr_reader :arguments
|
|
28
28
|
|
|
29
29
|
# Ruby-like hash behaviors, read-only
|
|
30
|
-
def_delegators :@ruby_style_hash, :keys, :values, :each, :any?, :empty?
|
|
30
|
+
def_delegators :@ruby_style_hash, :keys, :values, :each, :map, :any?, :empty?
|
|
31
31
|
|
|
32
32
|
def to_h
|
|
33
33
|
@ruby_style_hash.inject({}) do |h, (key, value)|
|
|
@@ -43,6 +43,14 @@ module GraphQL
|
|
|
43
43
|
# In this case, it's been included into another interface.
|
|
44
44
|
# This is how interface inheritance is implemented
|
|
45
45
|
|
|
46
|
+
# We need this before we can call `own_interfaces`
|
|
47
|
+
child_class.extend(Schema::Interface::DefinitionMethods)
|
|
48
|
+
|
|
49
|
+
child_class.own_interfaces << self
|
|
50
|
+
child_class.interfaces.reverse_each do |interface_defn|
|
|
51
|
+
child_class.extend(interface_defn::DefinitionMethods)
|
|
52
|
+
end
|
|
53
|
+
|
|
46
54
|
# Use an instance variable to tell whether it's been included previously or not;
|
|
47
55
|
# You can't use constant detection because constants are brought into scope
|
|
48
56
|
# by `include`, which has already happened at this point.
|
|
@@ -52,21 +60,7 @@ module GraphQL
|
|
|
52
60
|
child_class.const_set(:DefinitionMethods, defn_methods_module)
|
|
53
61
|
child_class.extend(child_class::DefinitionMethods)
|
|
54
62
|
end
|
|
55
|
-
|
|
56
|
-
# We need this before we can call `own_interfaces`
|
|
57
|
-
child_class.extend(Schema::Interface::DefinitionMethods)
|
|
58
|
-
|
|
59
|
-
child_class.own_interfaces << self
|
|
60
|
-
child_class.interfaces.each do |interface_defn|
|
|
61
|
-
child_class.extend(interface_defn::DefinitionMethods)
|
|
62
|
-
end
|
|
63
63
|
elsif child_class < GraphQL::Schema::Object
|
|
64
|
-
# Add all definition methods of this interface and the interfaces it
|
|
65
|
-
# includes onto the child class.
|
|
66
|
-
(interfaces + [self] - [GraphQL::Schema::Interface]).each do |interface_defn|
|
|
67
|
-
child_class.extend(interface_defn::DefinitionMethods)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
64
|
# This is being included into an object type, make sure it's using `implements(...)`
|
|
71
65
|
backtrace_line = caller(0, 10).find { |line| line.include?("schema/object.rb") && line.include?("in `implements'")}
|
|
72
66
|
if !backtrace_line
|
|
@@ -86,16 +86,6 @@ module GraphQL
|
|
|
86
86
|
alias :type :payload_type
|
|
87
87
|
alias :type_expr :payload_type
|
|
88
88
|
|
|
89
|
-
# An object class to use for deriving payload types
|
|
90
|
-
# @param new_class [Class, nil] Defaults to {GraphQL::Schema::Object}
|
|
91
|
-
# @return [Class]
|
|
92
|
-
def object_class(new_class = nil)
|
|
93
|
-
if new_class
|
|
94
|
-
@object_class = new_class
|
|
95
|
-
end
|
|
96
|
-
@object_class || (superclass.respond_to?(:object_class) ? superclass.object_class : GraphQL::Schema::Object)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
89
|
def field_class(new_class = nil)
|
|
100
90
|
if new_class
|
|
101
91
|
@field_class = new_class
|
|
@@ -60,6 +60,10 @@ module GraphQL
|
|
|
60
60
|
def implements(*new_interfaces)
|
|
61
61
|
new_interfaces.each do |int|
|
|
62
62
|
if int.is_a?(Module)
|
|
63
|
+
unless int.include?(GraphQL::Schema::Interface)
|
|
64
|
+
raise "#{int} cannot be implemented since it's not a GraphQL Interface. Use `include` for plain Ruby modules."
|
|
65
|
+
end
|
|
66
|
+
|
|
63
67
|
# Include the methods here,
|
|
64
68
|
# `.fields` will use the inheritance chain
|
|
65
69
|
# to find inherited fields
|
|
@@ -37,8 +37,9 @@ module GraphQL
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
context.visitor.visit
|
|
40
|
-
# Post-validation: allow validators to register handlers on rewritten query nodes
|
|
41
40
|
rewrite_result = rewrite.document
|
|
41
|
+
|
|
42
|
+
# Post-validation: allow validators to register handlers on rewritten query nodes
|
|
42
43
|
GraphQL::InternalRepresentation::Visit.visit_each_node(rewrite_result.operation_definitions, context.each_irep_node_handlers)
|
|
43
44
|
|
|
44
45
|
{
|
|
@@ -92,7 +92,7 @@ module GraphQL
|
|
|
92
92
|
# It will receive notifications when events come in
|
|
93
93
|
# and re-evaluate the query locally.
|
|
94
94
|
def write_subscription(query, events)
|
|
95
|
-
channel = query.context
|
|
95
|
+
channel = query.context.fetch(:channel)
|
|
96
96
|
subscription_id = query.context[:subscription_id] ||= build_id
|
|
97
97
|
stream = query.context[:action_cable_stream] ||= SUBSCRIPTION_PREFIX + subscription_id
|
|
98
98
|
channel.stream_from(stream)
|
data/lib/graphql/tracing.rb
CHANGED
|
@@ -6,6 +6,11 @@ require "graphql/tracing/data_dog_tracing"
|
|
|
6
6
|
require "graphql/tracing/new_relic_tracing"
|
|
7
7
|
require "graphql/tracing/scout_tracing"
|
|
8
8
|
require "graphql/tracing/skylight_tracing"
|
|
9
|
+
require "graphql/tracing/prometheus_tracing"
|
|
10
|
+
|
|
11
|
+
if defined?(PrometheusExporter::Server)
|
|
12
|
+
require "graphql/tracing/prometheus_tracing/graphql_collector"
|
|
13
|
+
end
|
|
9
14
|
|
|
10
15
|
module GraphQL
|
|
11
16
|
# Library entry point for performance metric reporting.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module GraphQL
|
|
4
|
+
module Tracing
|
|
5
|
+
class PrometheusTracing < PlatformTracing
|
|
6
|
+
DEFAULT_WHITELIST = ['execute_field', 'execute_field_lazy'].freeze
|
|
7
|
+
DEFAULT_COLLECTOR_TYPE = 'graphql'.freeze
|
|
8
|
+
|
|
9
|
+
self.platform_keys = {
|
|
10
|
+
'lex' => "graphql.lex",
|
|
11
|
+
'parse' => "graphql.parse",
|
|
12
|
+
'validate' => "graphql.validate",
|
|
13
|
+
'analyze_query' => "graphql.analyze",
|
|
14
|
+
'analyze_multiplex' => "graphql.analyze",
|
|
15
|
+
'execute_multiplex' => "graphql.execute",
|
|
16
|
+
'execute_query' => "graphql.execute",
|
|
17
|
+
'execute_query_lazy' => "graphql.execute",
|
|
18
|
+
'execute_field' => "graphql.execute",
|
|
19
|
+
'execute_field_lazy' => "graphql.execute"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
def initialize(opts = {})
|
|
23
|
+
@client = opts[:client] || PrometheusExporter::Client.default
|
|
24
|
+
@keys_whitelist = opts[:keys_whitelist] || DEFAULT_WHITELIST
|
|
25
|
+
@collector_type = opts[:collector_type] || DEFAULT_COLLECTOR_TYPE
|
|
26
|
+
|
|
27
|
+
super opts
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def platform_trace(platform_key, key, data, &block)
|
|
31
|
+
return yield unless @keys_whitelist.include?(key)
|
|
32
|
+
instrument_execution(platform_key, key, data, &block)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def platform_field_key(type, field)
|
|
36
|
+
"#{type.name}.#{field.name}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def instrument_execution(platform_key, key, data, &block)
|
|
42
|
+
start = ::Process.clock_gettime ::Process::CLOCK_MONOTONIC
|
|
43
|
+
result = block.call
|
|
44
|
+
duration = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) - start
|
|
45
|
+
observe platform_key, key, duration
|
|
46
|
+
result
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def observe(platform_key, key, duration)
|
|
50
|
+
@client.send_json(
|
|
51
|
+
type: @collector_type,
|
|
52
|
+
duration: duration,
|
|
53
|
+
platform_key: platform_key,
|
|
54
|
+
key: key
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module GraphQL
|
|
4
|
+
module Tracing
|
|
5
|
+
class PrometheusTracing < PlatformTracing
|
|
6
|
+
class GraphQLCollector < ::PrometheusExporter::Server::TypeCollector
|
|
7
|
+
def initialize
|
|
8
|
+
@graphql_gauge = PrometheusExporter::Metric::Summary.new(
|
|
9
|
+
'graphql_duration_seconds',
|
|
10
|
+
'Time spent in GraphQL operations, in seconds'
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def type
|
|
15
|
+
'graphql'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def collect(object)
|
|
19
|
+
labels = { key: object['key'], platform_key: object['platform_key'] }
|
|
20
|
+
@graphql_gauge.observe object['duration'], labels
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def metrics
|
|
24
|
+
[@graphql_gauge]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -14,10 +14,32 @@ module GraphQL
|
|
|
14
14
|
"execute_query_lazy" => "graphql.execute",
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
# @param set_endpoint_name [Boolean] If true, the GraphQL operation name will be used as the endpoint name.
|
|
18
|
+
# This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing.
|
|
19
|
+
# It can also be specified per-query with `context[:set_skylight_endpoint_name]`.
|
|
20
|
+
def initialize(set_endpoint_name: false)
|
|
21
|
+
@set_endpoint_name = set_endpoint_name
|
|
22
|
+
super
|
|
23
|
+
end
|
|
24
|
+
|
|
17
25
|
def platform_trace(platform_key, key, data)
|
|
18
|
-
if
|
|
26
|
+
if key == "execute_query"
|
|
27
|
+
query = data[:query]
|
|
19
28
|
title = query.selected_operation_name || "<anonymous>"
|
|
20
29
|
category = platform_key
|
|
30
|
+
set_endpoint_name_override = query.context[:set_skylight_endpoint_name]
|
|
31
|
+
if set_endpoint_name_override == true || (set_endpoint_name_override.nil? && @set_endpoint_name)
|
|
32
|
+
# Assign the endpoint so that queries will be grouped
|
|
33
|
+
instrumenter = Skylight.instrumenter
|
|
34
|
+
if instrumenter
|
|
35
|
+
current_trace = instrumenter.current_trace
|
|
36
|
+
if current_trace
|
|
37
|
+
op_type = query.selected_operation ? query.selected_operation.operation_type : "query"
|
|
38
|
+
endpoint = "GraphQL/#{op_type}.#{title}"
|
|
39
|
+
current_trace.endpoint = endpoint
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
21
43
|
elsif key.start_with?("execute_field")
|
|
22
44
|
title = platform_key
|
|
23
45
|
category = key
|