mutton 0.0.10
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +302 -0
- data/Rakefile +37 -0
- data/lib/mutton/config.rb +69 -0
- data/lib/mutton/engine.rb +37 -0
- data/lib/mutton/handlebars_compiler.rb +25 -0
- data/lib/mutton/handlebars_template_converter.rb +61 -0
- data/lib/mutton/handlebars_template_handler.rb +55 -0
- data/lib/mutton/notification_subscriber.rb +18 -0
- data/lib/mutton/version.rb +3 -0
- data/lib/mutton.rb +19 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +20 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +20 -0
- data/test/dummy/app/controllers/codeless_controller.rb +2 -0
- data/test/dummy/app/controllers/examples_controller.rb +7 -0
- data/test/dummy/app/controllers/libraries_controller.rb +7 -0
- data/test/dummy/app/controllers/samples_controller.rb +19 -0
- data/test/dummy/app/custom_template_directory/codeless_samples/custom.hbs +6 -0
- data/test/dummy/app/handlebars/templates/codeless/plain.hbs +1 -0
- data/test/dummy/app/handlebars/templates/codeless/with_html.hbs +6 -0
- data/test/dummy/app/handlebars/templates/examples/_the_play.hbs +1 -0
- data/test/dummy/app/handlebars/templates/examples/codeless_panel.hbs +1 -0
- data/test/dummy/app/handlebars/templates/examples/no_partials.hbs +6 -0
- data/test/dummy/app/handlebars/templates/examples/partials_included.hbs +7 -0
- data/test/dummy/app/handlebars/templates/examples/partials_within_directory.hbs +4 -0
- data/test/dummy/app/handlebars/templates/examples/partials_without_underscore.hbs +3 -0
- data/test/dummy/app/handlebars/templates/examples/the_speech.hbs +1 -0
- data/test/dummy/app/handlebars/templates/examples/underscore_partials.hbs +4 -0
- data/test/dummy/app/handlebars/templates/examples/uses_helpers.hbs +2 -0
- data/test/dummy/app/handlebars/templates/helpers/another_helper.js +3 -0
- data/test/dummy/app/handlebars/templates/helpers/sample_helpers.js +7 -0
- data/test/dummy/app/handlebars/templates/index.js +1 -0
- data/test/dummy/app/handlebars/templates/libraries/complex_helper.hbs +1 -0
- data/test/dummy/app/handlebars/templates/libraries/many_helpers.hbs +2 -0
- data/test/dummy/app/handlebars/templates/libraries/simple_helper.hbs +1 -0
- data/test/dummy/app/handlebars/templates/samples/_partial_1.hbs +1 -0
- data/test/dummy/app/handlebars/templates/samples/depth_1.hbs +2 -0
- data/test/dummy/app/handlebars/templates/samples/depth_1_name_anything.hbs +2 -0
- data/test/dummy/app/handlebars/templates/samples/depth_1_shared.hbs +2 -0
- data/test/dummy/app/handlebars/templates/samples/depth_2.hbs +3 -0
- data/test/dummy/app/handlebars/templates/samples/name_me_anything.hbs +1 -0
- data/test/dummy/app/handlebars/templates/samples/plain.hbs +1 -0
- data/test/dummy/app/handlebars/templates/samples/with_attributes.hbs +7 -0
- data/test/dummy/app/handlebars/templates/samples/with_html.hbs +7 -0
- data/test/dummy/app/handlebars/templates/shared/_coriolanus.hbs +1 -0
- data/test/dummy/app/handlebars/templates/shared/_partial_2.hbs +1 -0
- data/test/dummy/app/handlebars/templates/shared/_partial_3.hbs +2 -0
- data/test/dummy/app/handlebars/templates/shared/_partial_4.hbs +1 -0
- data/test/dummy/app/handlebars/templates/shared/menu_list.hbs +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/examples/index.html.erb +15 -0
- data/test/dummy/app/views/examples/no_partials.js.erb +5 -0
- data/test/dummy/app/views/examples/partials_included.js.erb +5 -0
- data/test/dummy/app/views/examples/partials_within_directory.js.erb +5 -0
- data/test/dummy/app/views/examples/partials_without_underscore.js.erb +5 -0
- data/test/dummy/app/views/examples/underscore_partials.js.erb +5 -0
- data/test/dummy/app/views/examples/uses_helpers.js.erb +5 -0
- data/test/dummy/app/views/examples/without_code.js.erb +5 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config/application.rb +34 -0
- data/test/dummy/config/boot.rb +7 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +44 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/mutton.rb +3 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +6 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/log/development.log +10233 -0
- data/test/dummy/log/test.log +63954 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/assets/application-28dd61ca42cca674724affd9fac099baee64d4502feef14fc20f98e844a75bd6.js +12259 -0
- data/test/dummy/public/assets/application-e80e8f2318043e8af94dddc2adad5a4f09739a8ebb323b3ab31cd71d45fd9113.css +16 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-4Gb4l2J8UZRMjLSYQZXraqYGajNvJoSownetLrgGoE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-6aXXSMJ2d3ZUJ_SNIbIJLSYipo6v6ChkFFxdWAP5EY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-6itKhG5FCrsei5Q7g_3TPDqQY5oefNWXVU6H_-VfYY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-A9EXgCMqnQUQjg0YZkaGyHdwVJqxxMTv0CCDZItDyw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-W0uU28NaoEsyUKHmrfp8ysGx4JKlakIKqeHHW0qEUw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-hyuA_pfaXlNxR0DfK8GkTfLQWGMgYF5rC4h8t16Ra4.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-nns5q2a5E0gp6dHAuP62ekponV7KBnPXU_MGdG-CNw.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-yrKqNcW_szQr-BZMoJIsWoXG_ODKMfaWqcvBMZHYZc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0YJHMYm__BEglcitfyVHtp0g1z02mtQshsIo1G_Yvvo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0ogCXYi5cPKxZUTepylQ3l_8rPYbAcC-TruhfJzsrjw.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0xlD6YEaid-B3Hoykpx_1E6h3eXCmkbESbvOggl7k78.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1-AlbZNUDxGsd4wPSVZIkpysbM3d6c94p32oqNTKeGU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/13YgWrqqbLlZyc4QUED9w_OUl6qOH_3Q9ZdwfDRgUWU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/13mU6IIs2CannHaUkGbH586k0noLA0wzPf4eF6WEXKI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/181EJNB7T-CKEf5Gtn_VnoX57TJGvB6oo7QDVEZx9UU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1MP6vb-o_jUZzuLRPSVp2uUvwdQHUFvc9LHv1EntuSw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1N4WOk9UkleGu6qwrzmqbPqt6ylcFSSG1hl7UlsY_QU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1Rqg1EwHMyxtUGWGY2XzjbvmKbIDvXTOq7dr03McTjk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1Sht7Imx2FKNgc0-E5F9cYT_vcIazxP-dZWYqqUxtxw.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1ZX4OwkixtKdayerG6HBvi1zobKjvE409O0RuM05Y7A.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1c5oqdfb1nVUVOkqSujOs7JTlooBcNr5Q_v-HYKkxfk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1gqHKm09rQhabOFU65VhLYCs_KDye7SXA-h7I0qK5ks.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1vblHJeMvwpFJRSNiODnexjBT1FyachvfdxQg0Y8i7U.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1vuwpFG2moiWfMdfAWN8tKv5oIhW2RCEhdzJLffRHIo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1xnJFwu36Px9oJBWLAkq3Xi1INKix_R71nCrRt7IxJU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1z9y3dSF82kWi5OWm_ZmsJ35j5QaPxsEIc_lRzUEZNU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/218b0V4AtStu-Lj-WMkxNPXJ4VGhVfeQCetuoTQDTR4.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/23MGMCpHvx40EVOoT3unFeGanMbt41xUVBIaT0vkVus.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2R8ByHnGrgcDQ_jJ2o7It590FM9iPgir3doBeMPe0ZM.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2mIzArRC3T-YnV0PqfYVs9oUE8h_dLcmI7PSPU2pHms.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2wd33EhySdCwjnra04OLy-493_IGshlF1ssCesYsyNM.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3GKfF4Hr3MZ6RvdJziGnQLYRI3waee6Y7nVFc3vEbfo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3GTIZ_VIdhFFIHuYBVSNsNzznQmhoW7TQE9tHqRT9jM.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3JEPv0gBTPC_MZy8Abk7toD34RT8Td2u-gcYWYvlGww.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3YT2-TU0geZ498HhtSwtlt0DCcK3GeNzbexlXvsO_AY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3pp87M7NDhlmCKWw8LV8CAD9dgMIZvfZO_5khvtfF1s.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3qvZcEv5p3qVFlabcVSKyjoeaFtsTAUz7zoOVJ99Pdc.cache +2 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3zAo6R9b7wnMmArktz4hB2x5QeNxSJrfPQwt-yV98Qg.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4-Qi-cKueYTGyZs2aAvNhnLI8nm1HFHS25BNsjULzP4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/41-fCgwScQAqOaemxQtbWdjzNuNrZGQcEPDMLRWunrc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4dHXPo39XdcXkBDCWLHbfc7slHEkLqQlozHDiYtmlJs.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4mD6cC9GGPVHX20DsfOBo8KCPW7s_ZqsVRlLMFVxAbs.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4nT3Jw8S2_YbvZxstI_jiHig_OJvtr8VZs5K5Pq9ak0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5B5mqaaROFuwiuiqV_Pvv6z6cnEst3OC7p9JrgFbJ5s.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5NnQSLBtw5ZmZel_ordS3M2v-SlZBmQqIkB2K1zcUhI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5XVpQWnl-oGSVi6qjE7puJRGrtUtf_AAYvPOu_oMs0A.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5aximAA8S0cnxP9o_XGIzOceRcVERCgJHUX-AtIKgQg.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/65zYAmSEXVnVL1vZA3hdOK91ZXSL-FMf7xw8FdBzMOc.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/683WGp7_9zGVtpHL7xt_u4qZUeDWsWDs54RuPwwEA6s.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6Qk9R54e31lB4bV84C4ZMSBGsnHcUvbg6vAh5h9KWAU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6Z8cxoPptFmKDOUpHILb5exxojOm2kwp61wt7L7gWV0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6Znxp4Z0OWpuHwWtTVpYzdf-bn12nPZ04y3TDzgjgkA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6n2yOXTI1uYynV13Hvj8Ity6Q6whYylImlfD_7F8T_0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/7-65qC6jyF3Bqi9oV4I3BnTRaQpzZDqHwJiHvpnmUZo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/79DoKzjo8qapdt1g-eUKvTudaaIwVFv0koqWlfwK9l0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/7Z753zAmDPmvxHXolaJMfUOV7xWrobqtagYLt5qBQiU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/7h3h1uQ_7Y3f-0Ox-yeE6Nhor4-Qr0qyzXYu-Jmu53U.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/7kSpUk3Wnh4fdTQcIoaG_OVKloIXrGL4DwLXQvcbJS0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/7st8Q_YS7njXp27ABYRu6Lot4mw2ZatF6BS8MHwUZc0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/8IGyLsUqQUL7L4JCjewjPiyo0KiSUiyGol9SynMu2jA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/8TrU-gy1sQETBlGA2B_u_yRI2NAolPtuJIkz0P__E7Y.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/8XVJZpVn32SWNynhVeU4exopygLfhVIiaqQNTbldrL4.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/8ffJ59ux2A0pzkskGpazSciq5Qx_OL2suIu5vMo31r8.cache +2 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/8k9v0086PmB-VM32qRcHLKbVRKEXYUQpFjtY5Dh8qOs.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/8o5zz9-GvXfBHjmMBmAYbUDo8ayD5Lf3To1_w667c6Y.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/8xWiRbefmMdWv5qDIWAL_GdYn-WG5sNXHqDPzZx1hpQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9I7FX5TmRAeenIZwLX83FNftt9cT1_G2HaPoHSB4leo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9_yWVv6dsi75zzhwn_6artTint2ppsMytcRGoYQR0CQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9dVAAsM8OxsLX0ORZDEdyIKFydgp-6-UBYnv5iH-Xc8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9lxyAh5rZLGNa22VBUm3AHFhvbHAseKGJRJiF3iSJBg.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9zJ9uyGYdtLRBxsmMlnvSSdWr-2GTEM9H_74g4S4wdA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/AFmsXSzkZSedTegzlToA8bJkLx-orIUKpZOGDo3Mgb8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/AOgdARLDBoERf00QlIJEc1a5MbRec05_DDrLUTmKCmA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ATwjpu5Ede_zEC2Sby806EaeBoBRvY_y-rngWHzhhIE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/AUlW-UnhZrU7G8ojUGFJb9kJF-6TkpoF_EpEPk_ANU8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/AWbdreCOtkZkTG5nb7KwFMCmkjI60Wx2SepNBxhePmE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/AbfdyxyFnPD1p0usbyisvdwcRiLo0dzrqrAC2ZLIkOQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/AeArAvPiItoJ6LNmqixbiTMClh4XceRMv0Z1Nn-s9_k.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Ajws5M54AFV7OP-naSmNHUDlshRGQoqBXNvQ62x7Y54.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/AwJm2tHvxlSBPGdLbyVlxQc4IKF2dateMNo_cg2fNI4.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/AwjcxJwtlKFRA7OKqMYuKLYH_qXqv4--8gqAeQpnbNA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/B38XJe1Ck69c6H3phXKyTpElU38bWzNrN0pDUhi8mqA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BL_fxM57MilxWu_-DjQvNl72FQQcrwCDq-SQ3a-DZno.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BMXuoEaIExVaDagD7nI23wZzO1KKDil_hSUvivRZxtg.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BRShljvJtVc_xxBS9qj8lmV3WlC6OLUefBIPaGooYV4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Bb9vGJacK0add-xdPmeALyVMMpKCkVQJSDjSphQ5YOE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/C84u7NGlQzzMyz-7t1LNAhMmRH-uqYvSqigXMvR6yL0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/CIGeQ2IuK49eFppefeHP9WhwtBPbldOFh4hhFfQjfLY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/CJ0ko4mby2hTQ4zCTGWdKrqvpujS91l7vdMnQzGrL18.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/CcsvWQWArbyWEbvKMkJlAt3o_BFnWS2Ut_jJ5hWyQB8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/CfSzQntm6166_Zt9eGQutnbjnoN2jHBeoGKBMHpzNBw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/CmLIOS1vlDMkSsjwtFFievjKf9i1fTnDRazyUp-fT1M.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/CmwzJvfPUI2JQlMSE29Ht1uqssBzEu0i6l_lX3kjxyI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/CnpkW4EcQAb-FGWKU9PvRWSP7PKMRAxBd0yiYgFZ1jk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/D7VJKfuY1c6CVJtmLiDFTMtZJRXFxDpI2BUo3W_q15A.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/DITm2eSnYh9Or59v0kVBLalf2W5N1zyQcBgW8qIxvT4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/DPkBBLhZUlmSe3yL5mSCeY8hn7WGKc3b8FZzz9jzYr8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Df2eMdV6Hx7ZghHSlAIamuE2od6paf0hyJQU9PhVD7Q.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/DisBlN43aJ5Y1A5KPJZzDecUZ3yYA34T8lqL3XuQflk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/DqoRFg3pzAG9kLWLzHT7q3rUxzm_R0pYU7Kww2Cusls.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Drti9_d3tYp1OWnzT4JhID3i-V3oVUj55_Xezqm9vTU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/E0Me9t2TOKP5hPAX_Q1HMy-OXsdiazgL9wbmR55hTEo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/E3plakT2DZVjogL3eJPV4zz9_PeAEtgBqeMLv0_D3zk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ERmCCgVeRo-dVZybFqNaMeraSbU67OXGuIwPuwDaJEo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/E_BuSvmKruLxkkxrpDY9tkZPk4rnQ78KV-wVorjyAJk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Eaw067ia3okh4rFstIoxdGoZL6aXrze2Sslq8QdQTLk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/EkAoAkMTH5d_jpArWAWhY2bao9_rgYll9qm0E80UmMw.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Ev8d_ZpHHJYaeXO-Dp4ROpOaNBdoHj35XcynBOmtq6o.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/F5-BsQc116ssrFnA4npnEJq9dP23fIPOMxUpsQxF82w.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FA8PHPkoJaOhyVO1wC-pbzEInAajxTgvAFTZR4fmwOI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FIJhn3JCNk7p1oacJ873h14WTbJ3au7J3z8sMJuFsj0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FLVdfuY0UPwZMOxX0iuZJjpwImJ0SsnlPtvkUkxdwZ0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FQX00kjS8yrxuj8FynjMOTUCmaKOJNKhQH0YPymtdQk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FTuZUOrgkqI-u0jBmwPhGD65gCVpxsIee6ZPt_1YwUM.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FdNbUtkSLBUM0Jr3D7Ozv8ISJRFiDnDf5wlBRxC5z_o.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FgO6zr0d_xzCfpPgMA7GiMiVvwcQbvHT4jM6bTymCIA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FkTSQ-sgNdRs4lR8fWhaNTqXX3t7XVfoR65PanxEqOI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FmlmnACSrxVjqVo_dE3wDkvRtDhY0OVvItmTf4mnNWk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Fr3rHktafbbou3FspfnJCf5Xh9CGb5unIaht-iRun14.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Fv5LNyIOWA9-gp1MIqWpQjPFdBEIk-FKxgKv_pSxvcs.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/G1H_JNtcCP_ySZVwqb997dxkJGrFskfEVZKyCT86Yn8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/G4CtVx5WwUvQZ7kgNdT6mhhae9A7Vh5dPuwv9ggF53o.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/G4bYtIkaHmLl_yr2AWa0rbdFavl004ITLYgUv3cVFaI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GCVMppZNYuGd7QdaSfsMBX9Fpd34lg38zljpUnvcz-4.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GaGok1Ld_aWr9j_-KURAXodef-zi_HwDNk2aRj6fRyo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GnnfhBGXLc0b9LmsMF2h0VTaXaEJMT0lfLsoMpcnd58.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H0yX0U_EHjVl9b-xjof0yN0SCFA5al7a-QdwmNpgnMc.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H4bhWRvjFwP2ywC-Y2ibB-z3XI6bv6yrM5KoTOOM2uQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/HGrhh1J0eb8iLVBztnzGlJntGYuvrhaVEteY9-w-URY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/HPRAOQ-vKD5nraSnnXZGNwYEpchxDpzhIsmtSAV2G90.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/HbuaqjwMCZqJ6H5KvkC_qAiIwOvpYPzbcwLxJNb0uuo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/I6yVCeakVKqUsaliyUltWbPDyBSBMhUv9zkFp2yw2qo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IJMmbI7acGvH89sGSYCk8MG64DgxAlPkMnVzO3qcsPU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Ie0bbRfNoWn3z0I3n_jaET3GWnM4ORD0qVWhAY6UT6g.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/If3QnMZ14zGPmgoAv1CC8407MM8HCX_Mbt8JgNy5kIk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IgGUqhkzHXI8396jm5e6AA3jgUFM-jWSlHh4Yq4UGFc.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IsFTN5irVSJ7UmtclvH4t2XK62KJTGN1i-GiyBNapOE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IvZK1wes113P-P_nDqvnp0fpJSThqTPHxpgfGxDw-sY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Iz8BsJFlTbw_Px6lMiKFvr1E_q4ASTGRftJVuzKry7Q.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IzIhvn_1HGm9SoenHi_zLuLj1XLnotRpskuNplEJuTE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/J2T1uARvu7zW5vVwM9vZ9SbJqYgbJV4sKtv4Ce4DONA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/J2nV3Vaj3MBkmgwflEu6aFIB_LKttn6Nqe2utezEwrs.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/J6rBhZcPqpEIELW_V9jAbv1W0_zqvsHFP8y7WXhsAeo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/J9t1-yLGUWA529Z0c17i5znsjGa5sXnojAVAd7T75Io.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JAULOq_7sZHQEA1IxE2vTelKzRwC2iV9Rhu0j4lEoCk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JCGrD-rrOKeIyZ7WdyZa7Zqhe31p7sfWIUkrM-rWbZs.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JP_qx1WEU__d_86Xkpv5c7z255PS1c1inZLxjtpqNtk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JqrrNN5hqysG0E5olRwFhRpeupyENG4BUBQbwlBeyr0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JxopijdsjsbME-AZRoKtOzrlR0Bq-yAvX3zrNJZkmm0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JzQFshXooGdAP0tJWlWnatwCCjUawQ3S9-YiR3G9a1k.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KamPqOdPn8aeGtBR2scJvAwAGS3-SPJGrQPejRxy2Q0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KkIu5rhtm00Di-mr9TMNrvHi-Sgdkq3X8jbIQHN_BqY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KkfiUl0bBuH-atgS0il_IBTO0ZdV2JIctizTVUib6gw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KnPLQsNfgqmhY-x5E1WTbG2H3kgoykRnl4tFK1tA_D8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KtEDnJ6n5IpnIw5Inc7TkvSGCkUc1LndvgTLSTFV5H8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/L7XRHPkC0b7xddmUMhB9nbrdZn_Z9EhmNKeDUxXeNnw.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/LTg2UHcfCN7RTyzae-nugHswjbkxl3mqjnKtZfBQLLQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Letplsx6YyGvKSnrW4a5HggOew1INSDhv5VIkLAf1SE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/LnnMQfnoT33AD6NJZbwGOXkyOWhGMerXlWEKhSHUl94.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Lx28Zim1bUFhgjYQdvUmwk1xlJP0p7eYPJWCzAtzljc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/M3lqnO0iMhKkY_7Bk9jvdDSpnMj9vK8XsZlzSixBQt8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/M6l9EmEY15pm_zhbbIeSw7o3sc5hHOCWrkUISy1cRQ0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/M8ktiuDJHN5YmZ0EmF-b4QOAOk65LABTH1WwJUaFDoE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/M9XKT7wwd2LtD_c-O_--yjXDhj3J1R9-0q8GgfsyNQs.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Mc_u2iCoWysUQHn8qRbQ9ffICia9IFYqmH-oqUSoQOY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/N-zFhFsd1r65a9wqHryhqH2yrHD2_iPyCvVHxurV_-Q.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/NDUMfHJqQEsG0CEQj4hW4g_lL0i8ccRcT4BYJWKalgE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/NNVC0K2OM9-FOswvPDef7MaJUN2JC1Z-KRe42RDztvk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/NWE_UTz7LDPa_ckVWBBP0wEmkV4w77fQL5q90KE-vH8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/NZgzQPXhGuB1-BFt8234AtYqbTfZuLLPijsMt6GMzic.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Naec_LN4F5v0MmTqqGk5wPzLWcETTlEvSN105nKoDew.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Nm06Mdpq5aE0r0XvR-MJYuBqkiiVZ4vOYNTGSGm0omU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/P14UP7cHmWs1cFO-wmPqxPpO_pbO4c8xJA93IbkY1uU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/P3IxY2O4_T1Kl2cT-cswpgcuuugNmt484ZEkXZ3xbGc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/P4iMZ97jNlfawygFBaZKKV1bEA94VgQbrArW7L__ubA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/P5nr4bDF66A4zyatPIodbDQoKFcC8gfPEDwUweByi1c.cache +2 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PIWoIj7F4nXWhGmvC6vbJte0DnsBluBDxsL9AbSC178.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PO0TJVSk-MFo9HvpoJiRbXilRtj8nIw3KAnwe3KGdfA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PuYjncKZXA8Ds7_M7NaoWgEXlCpAFtx9hro_tDb2_0k.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Q49GYFaqR4B2yFqfnKq6FtQbIuhqG9TPQ3nIqomYI2s.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QN1xEuydi3CpGkoytb1EGOOXdBhXopyI1nPU7M36M2Q.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QeMAnfwyezaH6_IsO3kWPzt99vxX1y2yUIIFk2t3800.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QgPZInLB0MR8MM6UdhqaN2gI2FDUyUcJ3DZ3JONPqqY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Qurk_ODzzktpg84c1KntPeyIiDilm1JyCwAUVSsoAcI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Qx0RpPHbUEnlxWtvSm4qMWTai-n5mBPDWwFJ-BUjh7A.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/RHaAjEvLEMxjTc6LGfnmZq4P21_KGMRZle83wPbU3IU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/RPrgjRZCMFgwcUDgUSb64KcW77QTKI5au4wnkf-EjCc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Rlemvy5p_heJ9l3Dp85EkTQzJsCGcW_gW39BXWZvx3k.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/SA2DfzHONBhD3lcOasR06tAjIePuLmB27vb2Luo1gbU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/SJeqsYJ1Aqeqbdx9SoVsektTNADcKZN_XAnCtjYFuo8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/SRT0R0j7ddeCWAxWgJqiXEIYyKHIiypNfxmT-ly4rH8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/SSLbLpSc-vrKOrYwWuEZj29nFBAnHlLj4nzCvZSwv3E.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/SeEr4lXePub6eQIA2eNn_G7y4AKO4oLWedp0LkY-D9U.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/SpGj5jI7ftSjmbAe67eGjGfqm-hcNLQhYT1gTq5x6fQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/SrmfuFUn0Ng1qtXh13LiTJV8ao2LXJ7PJdw3_6sKL1s.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/T6rWVJwMzjfS7KjdYHVmYxVyU6DS8kMfifVZqk5KS0w.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/T7R81HyIET6aqs_B0mPm4sXWW2Umbu248ZU8dTd-_C4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/TEg-OSioKZ5T4NxW3gL7gkpI9uImx79qxdtmBmFaUJI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/TU9Ty-XhYjPLpUO6I20JAesFytC1umab0MncYUpywyI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/TZ_fGoUEaNeMoBTfu1C8QZc-VgDg42xuSAJcnAdnmHA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/TeXCtcy8EyJ9oQJc5BBRqjG3pZh9XNPLD9xc_d-flss.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Tnq3WMZF0BVb46JWMEULh_LYzmlai1gaL57blrw3eQ8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/TqftZ18h5DEkSSyNa6_9_w6kGeG-8Imr3kSrayzx8mc.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Tr1qgvCbfUyy9bi4M_F3e-0sAoTBIV-M34LBv2AlV3A.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Tt3oar9uNIJxG6uCwXQctpu0Mx9xG9zw9AA_o4O3ACU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/U1rQvgJvBLYFxWc0eXYgEuvog5JDThlxr3Gaai7Qq8s.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UJdj0dAd9eda9Hq9UtYyCgMgyGe8buf751hIC2htcqI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ULw8TLZq65Kpt3V2WVniSI2pY8G7RY1eyua_LZMqq0s.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UgNGrWjRv_EVaTjdaVTlis6kmVjkKTW3WdbtnQYE640.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UoSUDTWBfji5XjTjJDGjkRlufP4AwoLN2ciRfcdjzgg.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Up9C35nldnYC451YZtr_gHZ9TJ6GFHNXyiD3j-yPEKU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/V36DIHkv-fyOwIs2KB1YtD3gVTNzxJSpZQIkBi-9Urs.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/V8BD9-EbIOrBxzRlvlxrdwxZic-Hx5n-jEHutNk3M8A.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VG44l6e3C2Q7_m6L61Cx3rfSwPUqje0KVqq6uYPUoBI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Vajh76UdEoSs_jqvP4ofYtd5hFFcLlgVtRiSXd4Txsc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VffmRiIMbi0vwJYKLmWVfmkK9mvKfhKmx3uN7O3ZWHY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VklEevgVpoOquNDTtyUODaArN6ExXZ7geiK20BTyGOA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VzG-nvu5kDwO6-am8wiZeEBe-CXevXonepvHpsAQikg.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/W4TLr0zxru3fdu74vUPA7Q0NSo9rBQzpXsJDhhmgrOc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/W4g-AlVlisk-KmOfWK9YTK61IPZ41ieiH_PtbyKWVO8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/W9p6-ZAYQrn59pq45JzwYlrTgVFbMxDqCzUzdj7p0dE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WSZh6DkFiX8cE-wkcukg-owPR07a3PeCZKp5zwK5Wnk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WTkGyh8Pa1WKVOF1pZN2kn_g2O-yJJ1oUw1HUaotrCo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WYsi149ev-3lj8z7T_PRaMJZHP5jphtKnDhYXTYtrr8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WZaEr7Dx5qS8wxdTKpnQtFdbijo4w6fRxIfMIWkvp5E.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Wi9t7422bhXpxzveNsqNrKw-Q8hF9mfetiGOEcUi128.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WrvyHvyxskoUu2hESm8t70HuPwvKB9ckadVbGojCT6A.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WsSOcOD7a6u9aiI_0WqNH9meDsTY-Y_REWWeUCJgUq0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WwGjbo0ZR0fGGxrltve-vCviFOqWaq-_iq_ZNQOcOmo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WysAUFlZwC0wPpISStBvBQWfxQbwLfExNndDnCkcMdM.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/X14i7V-QpVmIIjiktvOsBrwmbifDWnVBBmsUVnNDbZ0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XJL_JEBHf4f2ALKEoNIkMFgihf8Nvs2BuNfQxL7kKpg.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XJdQDZQmF8cdBbg9y52nN45yXZ3IRkpJNNWYKW0DquI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XLY1ghKs1JM9KeV3HX9SermeaHwJVESPfCnWCzZCySY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Xv9kezPubWLhClO7oq2q93nfkyM0ht9qMiDQeqM4s64.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Xx4aHoa-QbX_gCk2RGZjmRZllakB87NXJcGbd1wyhzo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Xzhlz_YcG4J3lG6-bSCJBFq9cPNT7Ea0VrpUgWw8Cnk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Y6Pgf8o3Ig7IvIK0iFAVKUVzw0aFrl3aiYkKJYWwnTU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YInrFHztUTJfpY2m3LxZ41qxWjJ3g1d_9XgQCZ5PCBg.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YW2vvXT9klQPlJvu8rimJjsEOyXk4wJObsKzd1xa9RY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YbbSNTj_g-METnCM_QI9UPQN6lZUdqOzmwgqcIqanyU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YdOLkLmiKsc0BH8SxI9eHQF9u2O_vjh4hSQNvIxnJZs.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YmBbddZcTBLnT4lBjsjnKr47t1m1nKoMyhwiFvFUzWM.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YpZ3OslLHFLCfazpN-QORaVYbsrpYTYDmZKve8QnRek.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YuEdQWHaskrp8uBOS_AwSiWgcymqviUhuDP8TIxIiKw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YvnRG6_KIX5lxPDwTwM31eTKCaLy1KJ16evHCZkxSc4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Z0DHGSJwBcginuZMZGfuOwPCzsGOi2mDSLnDaINzsR4.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Z91bGT-321OSXhf0Y6v6yzpebdh3ym988JglNem0MoI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZLyEvhQU8ymrGj6y1LqSgolOLO9mKo0ku0flcYjUmpQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZM-OWmxAhX6yI83BVZhIF9P1bTjl-6FJixUE0Jt_c2U.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZVNKqfQyyLCwaHvkmHDUjD3xKpNej13bguc0Vj6aYwE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZVVC8z-DgcZUshlZpch_GTHzkWzZ5_hrdLD9l2S2zJY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Za_2noNWA_ikRmci8vV9ir_Jvpq8kylMoMSMb76K5Vo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZhZdxDhpJtajFEDhudyoLs2Qviq00vWXVikB8mnBL7A.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZjkGTFT5BCIqRWPnGgq7r_gOUDZkwhWjT46yu7YdqqY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZmKVytqbFysgZ2xCL8xaVtOMdtI2f_TkzFq572h_ibU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Zw31ykcc2Ae_kssoetkmA-BB_MulqnvYyohpy7Vhirc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_2BL6VE7Zw6LX0O2eKK4V2tPDQnPJt3gcwIP3CtPU7c.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_ANBV6gkDJs2vDziW5z--SMwDQ7R-giJ23s0QIt-ISo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_OCrpqQCNxOlEY5zQMgmUHoxK3pHF-8xnsJa1YeJvEA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_x23cpb4jri77FyAaU-y5jab0ahkugGLlfmh50bmr2s.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_xLvpguDHqNI4oiYuWAyTb_tiH9E0l130P3EpkYyeA8.cache +2 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/a-s2o0a3P1KP0oIW6jMOn9sWmp0YKePabq-oh3yQJ5s.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/a0tC2X6jOQ6ME04dI-JWhlvDd6R3ysneUFXvuctbXB8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/a5rjNn48R1bw9WB9DVSPBZe4C_DFqdU3kTu-PzwtTM8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/aLihd3CscHu2Ii_imrqZseqmUyxJOtrKWCOo1Yjtr2U.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/aPBQAgt54gqOghoaTwR1OokWkeO3YLLv6PtTrX3SQvI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/aVxgWmr5f8KCMuTkgUCk44kczk8TWrCT0Qy4LN9MlaA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/aadH2BwLiIFddcvfPIyi8w9nGMj_7rOpvLCbDXj4bVo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/agL6ZEj9DyOTQmSJd07cOJw4MbunmaHnjswpk64WOcs.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/atLNe5fs7yApcWY_pxPNdBrMwg_Q3FRRyfyyjBprmdg.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/audDR_30hbJcfcwBhcUY4TCJgABvD02D03-wMx9Cfg4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/axEHC-hZ7g1l2OY85I2XMqLdCkhhMVtP07re0hcUhHY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/b1yeGPaA4uZ8P8PwETPeBW0EvZek99TgDmCkYifdWDE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/bN7MQYpu6niVmMu4p3DJPgHg9ahEiqWIFaD86qNbsoA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/bjBt0XAoToV1RsklC9ioNsrSIlR1hW4iXtmcqELRHNU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/cLAZOyTk7WaaY0_2Ose25urSN5JP51LbSUGDVgMKI-Q.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/cSb79BbaCqfrJvZ7nf0_aQ9eelK70PM50uj2eICdRqQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ch8nkxjjrI1bJnHnvL0cO03vL8UfHAp4RNaONJJ9c2k.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/clsYfSiVajd8WlrHTjNH6SCugVo5TV-U1OqonG1F42o.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dEXXyY4oiV4HqZ9an_jwKPbSuyXfxkekCF87XOzfjQk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dOhuI9QyNJA3W1WcU02FN7dontSKT0BNvTmlaL6PQ4w.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dRSZZPLWkQ7BVbSM7q3rNDwOKFb-XOseqyPvg1e_R7U.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dWqvO-o0dt4rlCQJiA-Wz5H-F1GICBur_YJBM7mg4sY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dahKXhnnCtxcCVTu2s13jri4eKmMcaEiUkCbEWpaLdk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dbzvbXhxEa3xVCGh4RG4E8ai3SDpE4DGOaO0uS7Vzs8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/de2Rl0N5EzNgAhuqdn-po9Skjr5lzPUFUrrnuxl6aBk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dmypiOK6R35Jfy2dWmP5dyPXfRF3XRiIuBJdJUh2KCE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/e2F3vonpACMjwW3WHjl7bOVlG3d3ElmuKME70mIfiq4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/e4__-K6pPimomOl3RGP4r8EI7F3-8sCcv373Wm3tn4c.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/e4lonkqigfeSpt1G9fuUY5ogLJDgWUHn-8HeeAVBGBw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/eAlrESFSQueMwcnHfF2XGjV3DHYf9EID7E9Pk0zWWdU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/eLZiI9rOpo7_WmssTx6ofeMjrgyv-xy0ERGf73oqsoc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/eR2k5Cn5etQoukDJUW9ftXAEnxM5iXVdHTyHyrQH6LQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/eWBcgjn2RtkijDmR65uPeK0IBEMyp0fVdyFtJ-TL9QQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ejs5WdXAdNQ-sK9SsORZ_Q139bfAMjuRENBjd4I3Cv0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/enKN_H4TnOIV1a9F1Hsa62z1jjFtYqCQoKuLNi5aJ0o.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/f0OZYGUshiuvvTTKwxjQbknkewP4O1o0KYgB3GJAb5c.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/fIFeQLA52qqOymnJ0Zl0lRvNcSUStQEjDaUenqnPL_E.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/fJnzI-rA9M1HhzbF5hjlqoTqXM30cA9MwwkaR420PdU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/faf19GvNEP4Zw5Wna5DN3vzZ-HfcM8l4dv6jMCsLulQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/fhYco00UnLuFQdOjrMtOeXm0jfd0S65PUwqwFfCVmg0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/fmmuPOxN6w_ryl-N4dSbFWclt7IH2xEoHF6xYNwDmmA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/gC8Y4AUzHM9wlTKbJSFe9E0wN88iU8uKlQ2SvKCDP7Y.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/gamOOEv2ISPNbGZvMGBNvFOFfvOgyx4vuXNF5AGQXgI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ge_P-4hVS4V3BsDEzLb2uh-QhIuIF9QX2RGxeygKzSo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/gjy68vSQgBSTCms9JftlGrYTBdvZCH4YWCMsccVUp5U.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/gtl0RlnoRm90Bng-_kQvEfmAvdGGQNeNnH2Tw1pJuqc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/gz0Dbs5uFHR1Z7X24pHwiaiWshOvzM-UQ0Fu2MmP9R8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/h5jvfuwSGl_5VUSv-VgCDyZCxnQul4kI1WkNELE7gn0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/h8uXTvJgPAYyOLZVDi6Ghv2SsLh_5VB572_FpcyHvyc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hEsbcB6w__LVX87bqUy0cLTgpRkBx4T92MVIYFR6WlQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hIs7vWkOuMusQsAf8Ok9cBWpZmDRiZwUd6iLQk2CMRI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hRGp8hmrP4NcYjEVpUcxnoMY0yyoYpMbukrIOlKbLHA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hSCj1WB3hGdUBOjpJbiqAMvbsTn-ee94M7iKbge0DIY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hXlUMLS-da2iaEZk75Mr9-Z-cl_jFZgJPFb5uNygbnc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hiW6ql2otP6BZaNtLKf28uhlYQFJzeIgZxMZtgyRBLs.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hnLAVz7k4YRxXCZmrRiR7Qy6N4vIGhqKREXAMtATY58.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hyYS0R9YJ_Vs3bCM6FQgtKe9qgyeoOltMpdLFV-oBo8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/i0KDer3cGMdifcDRJOoOmWeOshqa1XJAcaAf8tE-8JQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iFxuUvbs8w4p7JNioTQYrlPzahCKwlREKmp705fCdwk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iKq-Xe5rBeE-3WsSl2s2gYd3fdIV4Zi1BfwXx-KJrrU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iSSVqJx39deUANM39f6xZ0o0yvfbHkZ73lJzm5IM60M.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iYOj8s9vM3dDQa7TmslKWvdyg1_QDwVgbBG7OPGdpg0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/j1h4FA8Qbnb3LuWHOE2Jec915bhR-XM1rpfFnMKBE7c.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/jA0aZB4phypMAhCBo_UR45NkNC3uSeIJxD7h47y9zOk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/jFWNfpgXMAK4p5K3wYuxgeri1f4bMoC_K-VplUI87ls.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/jGuhR3385VR01ycAPEUAxx0FB2Ds8hWvSUPUpLLJavc.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/jVAwxpszg7VyxgCeIg5kQkXbkYLCE606nw6vSKvo9LU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/jZEkGtAvrFpmBrgfphjLILKag_-RNXbFs3RKeAuxbDs.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/k8ca1eC1faS68JN5KKzOJXSMuocgmu71h3TZ0k-ZtlM.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kFxOgPbI-zPaDyWH9k7Y-dN-y8pVEsiHKIerZCw25cE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kSlBp5V7ZlksqH5lCISm_EJ9EFMr3e2PHJp-nUYWMVo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kYbvszLEu6TLze21hrS4RGjf8WMravIorPtKfKSwFTM.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/khSK2MS1QD06316njeJBgjKIccudqQv_KUpWu85ZMS4.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/l4BWDnC_aJylkQfCPRZPIkXMr666sMR9ZVJntpppuyo.cache +2 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/lLentkgp9WxVVwhS7gK1EhRjqXryhVY96d4YVUFq-eU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/lWILzdvgIWRo9TJ8HxpCHzdAwfsuImWwdsWFHixM-Mo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/liZeujxoDIaJZdCt6QGE7a8pY4Mg8GKK2Eejnk5TClc.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/m5zrpsTPAV-63C40vaDVVjXPoP4pS5BVf0fM7vCt8ss.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mL8sSPkMXVOm4fhgDNtzC_IdCcmju3gBeCNqmHV3p10.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mNueLBGN9CuHOOh6M9UzU96t-lhFBO9gTjzx30dYREY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mZ1DriD_rCKVIvBecfK8yS0zYWrU9ZQBH4GDvFxBzE0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/meLsPaTAMJTii5pnXcFHQVlquxkfiDAp_vQQBzua0tw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mgQPFgn-uxTeuwuPZROo1Ei0UTYTkUx5hc7GyEz34Uo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mnuCO7w3vKJlSUQl3yiskqeUslPaR8cNjTpm7B9hReM.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mrQ0fhxMpjfQNvmhEcfzZI33KeH9AHkwEtHkzgc5Gts.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mxd8kaBPkUqKtkqgiOzcaTESdwdD0ZhRSAsPP2BUb70.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/n3ukWEyFUIQnrPO3bWJneDzPJJwTLPfZ28HK7ovyLkU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/n7Qsju2biP9PnOoU2rgpElwNN5_gg92va06ZoSRfjck.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/n8RKnjbY6W9X-qMLwV_o55qWV-S1LJEzPVXoimtd7dQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/n90LK6FFM2BLCMZJkc4BtRtFZFB8SQXvBaZfn88RAsU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/n9y-X50q_N4z1tBDQ08M62HPro9WiZ35qSDwAPu7NwE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nJHTEwyBPfJGNb6cVAYN3ShYf7NRSPVY5W04GMb5BPw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nL0ab_SgKbdSy5SQje2OF31RkI4PKVUb3QhNSDRfL6Y.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nPy3FBLfjEqdT1FPa2s2GunIH7BIxyC3bEt245Wdn3I.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ncTmY7A0AlA7fLEruyrOnnVV4WGBY9-FtBhKSAc6agE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ni70OzAoGZhZW6IdTUoTP9oqfCdmACmK7RfJurgZx7s.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nlPczNPbq6-fwW9pKKGtS48BZGinuPvOnWlin3N4f8Y.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nurG6a-I6RSL7cDOxb8HqudOwqVDG3IG4iIZReHfEbI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nzHZiFM6F0kipwSBcpn7IsdMI0-40Ge6IyHZnYTn5ew.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nzZHtIKL9r3BQ_KNsi56Ny1-vJy0ft-JPzrxjm5Y6og.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oIRVOhroEdEiBR7Iqrzh3mgkHKC5VGSMQ9eV5nW7JpI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oZjHwGndavYHDs8OcpFulUtkzC6BwWZHYahZ6M9p4io.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oZvGZ6sUmzLmDwlB-n7g_ELNojZM5Cw0MHPbwJsWLnE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ob4QIVBdspB18sK03P9oThce9bZJQ2o59GKDL4vCwEE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pHINkYNImIK6_QRvCh-Fpc7fzPTLnn2V54IvlB95GBw.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pLMpRnL2FZM05NAcpzAtdKb0yKme1ix-cO85U-dXYzw.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pfjjdYmxS8Bq7V6m6yPHqfZlLsgjgAbzbpVGIddNqI4.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pt7dn7Wu2f4mgOrJUUH8N_fGbB3IVRxiskZjEWDX7Tk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/q9Fc-_f0kqgFncm894GVkiHPbKfCQ98TDWbhtO6zRRs.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qJ2_a8XoFKnMskSS9ZK1X2KMau5shjRbC3ZzfwQjPwk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qW0YNqXCjmBKIt9b6d7r81p-EEOLC3ol1u9Zg68I9Vk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qnOnHfaPgYuOLGntSldAFGY-NvQBP2k9sVLy1jloNqY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qtjJIPeBvQfnh-uvRUYF3vKDscyxjeII7WG4GsIdmso.cache +2 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qxuaSrnLew_R3Ftrssy_ZxnVIXcAp5LoIN4vZoCi1-k.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/rDBqjdw9zCorfrYUU8pfFeX2IW-UCExcdkUaeoJcYfY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/rPAm60Cavvhc-L39UpVhwl5Mu14y6NoVS2FKXUtPrVs.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/rZc_AH3DtSOiS0rVexhnFERG4PS1grPrqSY-kv7ibZg.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/rkw5svHJc8EWu4_utAV-lKU5GRB6b9tHeMklj7DqEbI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/s2feIkX_5kK2K_St4luFV2APWLA6f7d8bWXYkb2Boe8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/sDPTFDmrB_-QQRgUjM_0JI49JAyym-FShkBOVtKtA_0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/sPNaDlNdq6sFwNVjdaG5UAEAm1OvqgfUxJ2nRlKlr0Q.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/sRvWhgtVmEIdBdTjf-X9rpZyFAsFyPDDlHM3toMI0Ac.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/snlJupB9x7Ss81XX8UDTYETQ_kGJ3L1L3C6GVkMZ5dk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/svogeOtO9ck88ovH154hiEFuQDsLaSy6Sxn9K8RX7Dk.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/t5RRDhSOMQOZ-1T8kv22gIoAoH0fqH543oKPxICGd94.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/t6mAPQbV9gqXKz8UQrFK3rRwdlCxtWCdDBt8czHr-QI.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/t9T25E3aNK9lZGIxM8qQaSUMfvHVfZph1qF5Ueto3PI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tEus3Bxry_kLMlVpGfxdIRtyDCZaQa96SA-ci4R4o6E.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/taQwk1QGKaT-Jnj-Hqe59mgbigWBZqMVlDtKvnJ0R8A.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/trBwIE_LrmGNqvA48z13GV5ytMukuDVtbGp93a_XrM4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/u0W81KcCtqrn-rac6_8XEjLQgMYerVeDOWtGfjm-2HI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uGcJNV5-i5MaQcCW1kti17zLkzh2xQ2mV3pM8ZRmDss.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uLqFWRpD7E0cYMOIKG2k3yTYwOJUVgOMWAKEp-uTBYE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uNdFZA26aEjuKidKFAvfTwvStkC4NYLvEoG4ChvYSvM.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ueKYZ12Pq-upeXLltFwrkWYwufEAxQDEzFjJF6QlNXw.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ugZumAx7waiVwuL8sOE97aCYMvW7sq6ai1mAClnlumM.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vA8LqBQnWOqY5cOqR68WYNsmYBSyaB37CKJtmo8ESFY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vJJekCvvQ-CUHPnSKBhAh1JFwRJ4Bw_NNJB-hqzsdN4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vLWfHpUyU5_Y6TycsfO6TVRH3TghrRx1m8DZsZVtCe8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vcSVYW75SWkPIyUIwd7nqhG6f70XCFsNDeY2w2A66i0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vhlnAIAIJWoFkHMVm7FDm7aUeUJRT3Suei82zV7qeZY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vo8IeqG7P0QswDGvgQ6zc-4mo3sAZjxEnZd_pO7gXIQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/w-svUv3ErPwdHdZdyPvKHmpNQK22_lnzLeVsOLSyJiY.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/w5nUk2hB55tB93COnpJBxWgXJKtzcK-v82jHOnvMHrQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/wc2TVsJGaeJUvfZnVTdsIZ1y6vRUt9cYftLY4fPbbdM.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/wf5SyjdCEWJbiEyfS3ASNrOvDIu9RPDrnkAOUwYmNAw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/wu0DiUcorpfefrbzrkv5Gycln02Vr1bmMmy5sbRTE2M.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x-QSaO5thCqq6BdeThyfcl7VBhEfy6W6fLV70gHB454.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x5ECuzE1jiJp4LihQdDgdEBdZpWVsjU56tWVAK0fIHs.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x70LLKfQWUBsw0TJcHBCI4J-15QnwrBDL07zWbEh20w.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/xNJoBHsfBHPMN1sHc0wmcxABdPiTJZWWIBcpiLhKh-U.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/xVZbS3o2IZCL8sCd8CVkNEa3dvoyLcpoJ6X_Z2C-bD0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/xgVOFvnEAbAB60iPh7swXCr-BX-Hg1HZJFKrDrziN78.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/xkHALKAFi3gJvj-wYFn7cVXcTODcYBtTwQoT3zCq-4c.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/xqa2LvqkWQCIFee6n8Henri_DrVhHaWLZbKsvPcMN54.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/y1w6x3_LXyjCJpHgmvpCPeuzu_KyEsNBBrG2k69Vt8U.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/y62vfBmmbxrxTyH1FAasapBPVuLg_4XUFSJtTkgrIHM.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/y6OKhqAc2EqNSlEoQTfQ1SGAe0lDWog3hKecimLuJB0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yCdoXtEDrXpr0Jxs9O3McFRIPv6fZPIa--2KjFnHOS0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yDI_vOGLMtlVyz0YW9CyIy81yb7hEo6uZBok0_EARyQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yE4wvt8U93RkeT_N9jmlNpecViLBKXYzK9_G58ANAlQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yKSSkV5UNYnaQKN3FTjWYfG0Rzhp2aqMHDccPfuUAuo.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yTpOFZnNfZdYx3QdyGkcSwWOym5qezyheM9A2FGziJU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/y_wwMOO91_I78FUv5c4svWkuWLNTEjcsvWYi8xA__Gw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ytGhFKCKV99DuzApuggfqcfHQNEubBCQk2hAbyOHI7w.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yywaz02pegQC1_jqbl85dRLFnLKzHzlzJnj-FP8bX9c.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/z0mpQR1_gWSHw5Qr0l9Q-ga7-fxKeyxnjhoXv_5v1rw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/z3DpznW0ht9FWkGVOew037-ySk2hJ_vC9e99ynvMo1U.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zAxm0Ib1Puy34tK0O9DynYtZidntTL_rvv9B_LXiW44.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zha0Z97ShQRyb9Wml2bB28Rbtizf4LmB5Esbm2YrXlA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zzeIScn75jDzWLQ6GVHcM7OR1zmjA7UsRQdIrCh692M.cache +1 -0
- data/test/integration/handlebars_converter_test.rb +66 -0
- data/test/integration/sprockets_handlebars_converter_test.rb +47 -0
- data/test/integration/template_handler_test.rb +107 -0
- data/test/mutton/handlebars_template_handler_test.rb +46 -0
- data/test/support/wait_for_ajax.rb +12 -0
- data/test/test_helper.rb +30 -0
- metadata +1182 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 01382ce7a19a6f72ff3e289d1586b0421d1ba093
|
|
4
|
+
data.tar.gz: 90fbca2f9f886b9cda9cb9a16db89cd32bd6f315
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 80d4697164df2592f8b18f6b49d3664f3c2672c7925c9d6d88e0323c8d6b4c523ba44f72b134af7093805d29b56bdb22de6da22acea7eff4aec1d5606a298347
|
|
7
|
+
data.tar.gz: b86c4fe6c3a5ba8aa9612b35102366bb9b15b8ebfa53229383db2582c41543fee60e0c45babfd483f4d18e9176a3eda768f2e1c10c4a7a87f4133d425c00f2dd
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright 2015 SbbSoftware
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
#Share Handlebar Templates Between Server and Client With Mutton
|
|
2
|
+
|
|
3
|
+
Externalize your handlebar templates and render them from your server as a replacement to ERB,
|
|
4
|
+
and use them unchanged through Javascript on the client. Supports the entire handlebars specification.
|
|
5
|
+
Stop writing script tags and duplicating your work in ERB, every .hbs file can be served up
|
|
6
|
+
directly from a controller, or through Javascript on the client.
|
|
7
|
+
|
|
8
|
+
##What is Handlebars
|
|
9
|
+
Cut down on view pollution by using logic-less templates. Handlebars is a beautiful progression from Mustache.
|
|
10
|
+
The template engine adds in logical processing, helpers and context changing, while maintaining the beauty of
|
|
11
|
+
front end templating.
|
|
12
|
+
|
|
13
|
+
[Check out handlebars.js.com](http://handlebarsjs.com) for all the details
|
|
14
|
+
|
|
15
|
+
##Why is Handlebars great?
|
|
16
|
+
Handlebars turns the View back to a design and layout tier.
|
|
17
|
+
By eliminating <% %> you are forced to code your application cleanly, with beautiful templating.
|
|
18
|
+
|
|
19
|
+
#Quick Start
|
|
20
|
+
Create a new Rails application.
|
|
21
|
+
|
|
22
|
+
####Add the following to your gemfile
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
gem 'mutton'
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
####Create a directory to store your templates.
|
|
29
|
+
|
|
30
|
+
The default is `app/assets/javascript/templates`, but you can store them anywhere,
|
|
31
|
+
including your views directory.
|
|
32
|
+
Be warned, sprockets needs to append a path 1 directory up from your template folder. DISCUSS
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
####Create your controllers and templates
|
|
36
|
+
|
|
37
|
+
* create a SamplesController and add the following
|
|
38
|
+
```
|
|
39
|
+
app/controllers/samples_controller.rb
|
|
40
|
+
class SamplesController < ApplicationController
|
|
41
|
+
before_action :create_sample_data
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def create_sample_data
|
|
46
|
+
@greetings = [{ timing: 'morning', phrase: 'Good morning'},
|
|
47
|
+
{ timing: 'afternoon', phrase: 'Good afternoon'},
|
|
48
|
+
{ timing: 'evening', phrase: 'Good evening'}]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
* add the following to routes.rb
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
config/routes.rb
|
|
57
|
+
root 'samples#index'
|
|
58
|
+
resources :samples
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
* create a file named index.hbs in app/assets/javascripts/templates/samples
|
|
62
|
+
|
|
63
|
+
Inside the file, code the following
|
|
64
|
+
```
|
|
65
|
+
app/assets/javascripts/templates/samples/index.hbs
|
|
66
|
+
<h3>Greeting List</h3>
|
|
67
|
+
<div id="greetingPanel">
|
|
68
|
+
{{#greetings}}
|
|
69
|
+
When it's {{timing}} I will say {{phrase}}<br/>
|
|
70
|
+
{{/greetings}}
|
|
71
|
+
</div>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
* open your browser and navigate to http://localhost:3000/samples
|
|
75
|
+
|
|
76
|
+
That's it!
|
|
77
|
+
|
|
78
|
+
####But how did that work?
|
|
79
|
+
If you had created index.html.erb in app/views/samples, Rails would have found
|
|
80
|
+
that file instead. Mutton adds a new path to the LookupContext for Handlebars templates and registers a handler
|
|
81
|
+
for files with .hbs and .handlebars extensions. The template handler loads up all known handlebar
|
|
82
|
+
files registered in sprockets, adds in javascript files stored in your helper directory and sends
|
|
83
|
+
it all off to ExecJS to run as javascript. That's it.
|
|
84
|
+
|
|
85
|
+
####Now try and render the template client side
|
|
86
|
+
|
|
87
|
+
* create app/views/samples/index.js.erb and copy the code below
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
app/views/samples/index.js.erb
|
|
91
|
+
var context = <%= assigns.to_json.html_safe %>;
|
|
92
|
+
$('#greetingPanel').html(JHT['samples/update'](context));
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
* create app/assets/javascripts/templates/update.hbs and copy below
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
app/assets/javascripts/templates/samples/update.hbs
|
|
99
|
+
<p> I am the latest information on this topic
|
|
100
|
+
{{#greetings}}
|
|
101
|
+
{{>samples/_greeting}}
|
|
102
|
+
{{/greetings}}
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
* create app/assets/javascripts/templates/_greeting.hbs and copy below
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
app/assets/javascripts/templates/samples/_greeting.hbs
|
|
110
|
+
When it's {{timing}} I will say {{phrase}}<br/>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
* almost there, edit app/assets/javascripts/templates/samples/index.hbs and change it to below
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
app/assets/javascripts/templates/samples/index.hbs
|
|
117
|
+
<h3>Greeting List</h3>
|
|
118
|
+
<a data-remote="true" href="/samples">Update greetings</a>
|
|
119
|
+
<div id="greetingPanel">
|
|
120
|
+
{{#greetings}}
|
|
121
|
+
When it's {{timing}} I will say {{phrase}}<br/>
|
|
122
|
+
{{/greetings}}
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
* finally, add an entry in app/assets/javascripts/application.js
|
|
128
|
+
Add handlebars before require_tree so it looks like below
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
app/assets/javascripts/application.js
|
|
132
|
+
//= require jquery
|
|
133
|
+
//= require jquery_ujs
|
|
134
|
+
//= require mutton/handlebars.runtime
|
|
135
|
+
//= require templates
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Thats it. You should now see an update link, click on it and watch the code render on your browser.
|
|
139
|
+
|
|
140
|
+
That was also a stealth introduction of a partial. When you use the helper {{>}} you're going to pass
|
|
141
|
+
the current context to a partial and see it render. There are a great many ways to change context, or pass
|
|
142
|
+
data on the fly to a partial, check out the [Handlebars documents](http://handlebarsjs.com/partials.html) for more
|
|
143
|
+
information.
|
|
144
|
+
|
|
145
|
+
While you're at it, check your rails log. You should see a 5x improvement in rendering
|
|
146
|
+
time between index.hbs and index.js.erb. This is why everyone wants those single page applications!
|
|
147
|
+
With Mutton, you can write on the server or the client with the same template and hear unicorns sing.
|
|
148
|
+
|
|
149
|
+
####Ok, well how did that work?
|
|
150
|
+
Registering a template engine with sprockets allows you to process files as part of the sprockets pipeline.
|
|
151
|
+
We hook into all .hbs and .handlebar files and convert them to javascript, calling the Handlebars pre-compiler
|
|
152
|
+
so that we can cut down on client processing. Once they are processed, sprockets caches them and adds them to the
|
|
153
|
+
chain of javascript output from ```javascript_include_tag``` in your application layout.
|
|
154
|
+
|
|
155
|
+
####So its all the same then?
|
|
156
|
+
Hopefully. Node/your local javascript runtime and browsers are very different. However, Handlebars is elegantly
|
|
157
|
+
namespaced and should not be affected by any other packages on the browser. On the server side, I have
|
|
158
|
+
restricted files under compilation to the templates, helpers you put in a helper directory and handlebars.
|
|
159
|
+
This should restrict different outcomes, but it's always possible there may be some.
|
|
160
|
+
|
|
161
|
+
##Partials
|
|
162
|
+
I had to make 1 compromise on partials, you have to namespace them, even if
|
|
163
|
+
they are in the same directory.
|
|
164
|
+
For example
|
|
165
|
+
```
|
|
166
|
+
<h3>Greeting List</h3>
|
|
167
|
+
{{#greetings}}
|
|
168
|
+
{{>samples/greeter}}
|
|
169
|
+
{{/greetings}}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
As every template is namespaced with a directory and file name, partials are accessible
|
|
173
|
+
only when namespaced. In addition, everything is a partial. Partials don't need any special naming,
|
|
174
|
+
and you may include any template as a partial providing you access it through
|
|
175
|
+
the correct namespace. Technically, instead of calling the
|
|
176
|
+
register partial function, I copy the entire namespace over to the partial
|
|
177
|
+
space so that everything is available.
|
|
178
|
+
|
|
179
|
+
##Javascript Helpers and Partials
|
|
180
|
+
If you prefer to write helpers and partials in javascript, you can do this too.
|
|
181
|
+
Whatever you write, put it in your template/helpers directory and it will be included when rendering.
|
|
182
|
+
|
|
183
|
+
##Local assigns are transferred automatically
|
|
184
|
+
|
|
185
|
+
All local assigns are automatically added to the handlebar context. Be careful, every instance
|
|
186
|
+
variable you create in a controller context will be sent to the browser as data if you're using
|
|
187
|
+
the client side.
|
|
188
|
+
|
|
189
|
+
##Custom Configuration
|
|
190
|
+
In order to customize settings, create an initializer eg config/initializers/mutton.rb
|
|
191
|
+
|
|
192
|
+
Entries with notes and default values below
|
|
193
|
+
```
|
|
194
|
+
Mutton.configure do |config|
|
|
195
|
+
# path to templates directory
|
|
196
|
+
config.template_path = Rails.root.join('app', 'assets', 'javascripts', 'templates')
|
|
197
|
+
|
|
198
|
+
# path to javascript helpers
|
|
199
|
+
# every javascript file in this directory will be concatenated with
|
|
200
|
+
# handlebars during compilation
|
|
201
|
+
config.helper_path = File.join(Mutton.template_path, 'helpers')
|
|
202
|
+
|
|
203
|
+
# javascript namespace for compiled templates
|
|
204
|
+
# templates will be accessed by this value
|
|
205
|
+
# JHT['directory/file_without_extension']
|
|
206
|
+
config.template_namespace = 'JHT'
|
|
207
|
+
|
|
208
|
+
# handlebars file for compilation
|
|
209
|
+
# change this if you want to use a beta or other version
|
|
210
|
+
# you dont need to wait for a gem update if handlebars
|
|
211
|
+
# releases a new version
|
|
212
|
+
config.handlebars_file = File.expand_path('../../../vendor/assets/javascripts/mutton/handlebars.js', __FILE__)
|
|
213
|
+
|
|
214
|
+
# when true, instrumentation will be logged at debug level
|
|
215
|
+
config.subscribe_notifications = true
|
|
216
|
+
end
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
##Logging
|
|
220
|
+
By default, template rendering on the server and hbs conversion triggered by sprockets will log to the Rails log with log level debug.
|
|
221
|
+
You can turn this off in your configuration file
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
##Dependencies
|
|
225
|
+
Sprockets. Yes, you need sprockets. If you've moved to another pipeline solution you're going
|
|
226
|
+
to be unhappy.
|
|
227
|
+
|
|
228
|
+
ExecJs. You can leave it pick the best javascript environment or set the environment in your boot.rb file
|
|
229
|
+
|
|
230
|
+
```ENV['EXECJS_RUNTIME'] = 'Node'```
|
|
231
|
+
|
|
232
|
+
I recommend Node because, well, Node.
|
|
233
|
+
|
|
234
|
+
##So what sucks?
|
|
235
|
+
All right everyone, step forward if you use form helpers. Not so fast Handlebars! In order
|
|
236
|
+
to move into a world without cluttered views the tradeoff is; **you have to give up Rails form helpers**. I extracted this from a project which was almost exclusively using
|
|
237
|
+
javascript on the front end, so it wasn't really a hardship, but during testing I have been converting
|
|
238
|
+
a more traditional application and my goodness, is it 2004 already?
|
|
239
|
+
I've been thinking of how to overcome this, either adding compilation of ember and and using those helpers,
|
|
240
|
+
or working on wiring Rails helpers into the mechanism. Neither solution yet appeals but probably sometime before end of year.
|
|
241
|
+
|
|
242
|
+
**The template path**. This caused more problems than the rest of the gem combined. The issue: Rails provides
|
|
243
|
+
a number of hooks for an Engine or Railtie to configure settings, all but one happen after your Controllers
|
|
244
|
+
have been initialized with a LookupContext. That one which is available happens before initialization files
|
|
245
|
+
are processed, so there is no safe way to allow custom configured paths to be added to LookupContext. I add the
|
|
246
|
+
default during pre-initialization, and if there is a custom one I use ```ApplicationController.send(:append_view_path, path)```
|
|
247
|
+
to alter Controller behavior. This is great until you dynamically reload a Controller by editing during development,
|
|
248
|
+
if you're doing this you will have to restart your development server. I recommend using the default setting for now.
|
|
249
|
+
|
|
250
|
+
##What are the alternatives?
|
|
251
|
+
You could go completely Mustache with https://github.com/agoragames/stache . I found the gem to be excellent, but
|
|
252
|
+
didn't love the template engine enough to go with it.
|
|
253
|
+
|
|
254
|
+
If you don't need server side Handlebars, the very great https://github.com/leshill/handlebars_assets has a
|
|
255
|
+
similar sprockets based pipeline translation system.
|
|
256
|
+
|
|
257
|
+
If you don't need client side templating and want an elegant Ruby based solution with the ability to use helpers, you might
|
|
258
|
+
want to check out https://github.com/zendesk/curly . I love the template engine, but not the
|
|
259
|
+
View Presenter mechanism, not enough re-use for what I need, but it is an impressive design and beautifully
|
|
260
|
+
coded.
|
|
261
|
+
|
|
262
|
+
##What's Next?
|
|
263
|
+
Sprockets is great, except when it isn't. I'm not thrilled with some of the design decisions I had to make
|
|
264
|
+
but the payoff in simplicity and having the gem work on any new Rails app won me over. Sprockets is used consistently
|
|
265
|
+
on both server and client side rendering. I think Gulp makes, or will make sprockets redundant, sort of, maybe. The problem is that there are so many different ways of using Gulp
|
|
266
|
+
that designing a workable gem becomes exponentially more complex. I hope to make some headway here and see if a new Gulp-based
|
|
267
|
+
version of Mutton is feasible.
|
|
268
|
+
|
|
269
|
+
Possibly adding support for Ember, but there is such a trend toward Angular that it may not be adding any value.
|
|
270
|
+
|
|
271
|
+
##Credits
|
|
272
|
+
There are some really remarkable engineers whose work influenced this gem. From learning how to use ExecJS
|
|
273
|
+
to finding the best way to annotate view paths during configuration. There are a few projects which demonstrated
|
|
274
|
+
the concepts and techniques I have put to use here, and I would like to thank their authors:
|
|
275
|
+
|
|
276
|
+
* Les Hill (@leshill) and the contributors to handlebar_assets
|
|
277
|
+
* All the folks at @railsware, their shared handlebar assets gem was the best introduction to creating a template handler
|
|
278
|
+
* @sstephensen for Sprockets, ExecJS on which this gem relies
|
|
279
|
+
|
|
280
|
+
Finally, huge thanks to @wycats and the Handlebars team for the work of art that is Handlebars.
|
|
281
|
+
|
|
282
|
+
###Other tricks
|
|
283
|
+
Works great with https://github.com/gazay/gon, you can ditch your .js.erb files for the client and just do everything in a javascript file.
|
|
284
|
+
With Gon, Handlebars and an onLoad event you should be able to get rid server side template processing altogether,
|
|
285
|
+
provided you're down with your data being readable in the browser.
|
|
286
|
+
|
|
287
|
+
I use a view presenter (to be released soon and pimped here as much as humanely possible) which works for erb,
|
|
288
|
+
handlebars or plain old json. You can use Decorator, maybe even Cells, or just a PORO presenter. Models sent into
|
|
289
|
+
Views and accessed with Ruby are the plastic shopping bags of Rails apps, you will be shocked at how much
|
|
290
|
+
cleaner your application becomes when you can't branch 17 times or do lambda calculus in your views. Give it a try
|
|
291
|
+
even if you don't use Handlebars, find another way to sever logic and code from your view template.
|
|
292
|
+
|
|
293
|
+
Just remember, whatever you send in as assigns end up being used in the server parser and client, namespaced
|
|
294
|
+
by variable name.
|
|
295
|
+
|
|
296
|
+
###Contributing
|
|
297
|
+
Yes please!
|
|
298
|
+
|
|
299
|
+
1. Fork It
|
|
300
|
+
2. Create a topic branch
|
|
301
|
+
3. Push
|
|
302
|
+
4. Submit a pull request
|
data/Rakefile
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
begin
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
rescue LoadError
|
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
require 'rdoc/task'
|
|
8
|
+
|
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
11
|
+
rdoc.title = 'Mutton'
|
|
12
|
+
rdoc.options << '--line-numbers'
|
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
|
18
|
+
load 'rails/tasks/engine.rake'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
load 'rails/tasks/statistics.rake'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
Bundler::GemHelper.install_tasks
|
|
26
|
+
|
|
27
|
+
require 'rake/testtask'
|
|
28
|
+
|
|
29
|
+
Rake::TestTask.new(:test) do |t|
|
|
30
|
+
t.libs << 'lib'
|
|
31
|
+
t.libs << 'test'
|
|
32
|
+
t.pattern = 'test/**/*_test.rb'
|
|
33
|
+
t.verbose = false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
task default: :test
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
module Mutton
|
|
2
|
+
module Config
|
|
3
|
+
attr_writer :template_path, :template_namespace,
|
|
4
|
+
:javascript_asset_path, :handlebars_file
|
|
5
|
+
|
|
6
|
+
# provide a custom logger if you are magically using this from outside
|
|
7
|
+
# rails. logger is set during engine configuration ti Rails.logger
|
|
8
|
+
attr_accessor :logger
|
|
9
|
+
|
|
10
|
+
def configure
|
|
11
|
+
yield self
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# path to templates directory
|
|
15
|
+
def template_path
|
|
16
|
+
@template_path ||= Rails.root.join('app', 'assets', 'javascripts', 'templates')
|
|
17
|
+
# @template_path ||= Rails.root.join('app', 'handlebars', 'templates')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# path to javascript helpers
|
|
21
|
+
# every javascript file in this directory will be concatenated with
|
|
22
|
+
# handlebars during compilation
|
|
23
|
+
def helper_path
|
|
24
|
+
@helper_path ||= File.join(Mutton.template_path, 'helpers')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# javascript namespace for compiled templates
|
|
28
|
+
# templates will be accessed by this value
|
|
29
|
+
# JHT['directory/file_without_extension']
|
|
30
|
+
def template_namespace
|
|
31
|
+
@template_namespace ||= 'JHT'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# handlebars file for compilation
|
|
35
|
+
# change this if you want to use a beta or other version
|
|
36
|
+
# you dont need to wait for a gem update if handlebars
|
|
37
|
+
# releases a new version
|
|
38
|
+
def handlebars_file
|
|
39
|
+
# don't want to force the user to serve my handlebars.js from sprockets so...
|
|
40
|
+
@handlebars_file ||= File.expand_path('../../../vendor/assets/javascripts/mutton/handlebars.js', __FILE__)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# when true, instrumentation will be logged at debug level
|
|
44
|
+
def subscribe_notifications
|
|
45
|
+
@subscribe_notifications ||= true
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
alias_method :subscribe_notifications?, :subscribe_notifications
|
|
49
|
+
|
|
50
|
+
# read only properties
|
|
51
|
+
|
|
52
|
+
# sprockets needs to know where hbs files are stored
|
|
53
|
+
# its 1 up from the template path in sprockets-speak
|
|
54
|
+
def sprockets_path
|
|
55
|
+
File.expand_path('../', Mutton.template_path)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# shipped default path
|
|
59
|
+
def default_template_path
|
|
60
|
+
# Rails.root.join('app', 'handlebars', 'templates')
|
|
61
|
+
Rails.root.join('app', 'assets', 'javascripts', 'templates')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# shipped version of handlebars
|
|
65
|
+
def vendor_version
|
|
66
|
+
'v3.0.3'
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Mutton
|
|
2
|
+
# TODO: are we really using an engine?
|
|
3
|
+
# class Engine < ::Rails::Railtie
|
|
4
|
+
class Engine < ::Rails::Engine
|
|
5
|
+
|
|
6
|
+
isolate_namespace Mutton
|
|
7
|
+
|
|
8
|
+
config.before_configuration do |app|
|
|
9
|
+
# add the default template to rails view paths
|
|
10
|
+
# rails ignores any changes after this event, bastard.
|
|
11
|
+
app.paths['app/views'] << Mutton.default_template_path.to_s
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
config.after_initialize do
|
|
15
|
+
# FIXME: maximum suckage
|
|
16
|
+
# rails will ignore paths set during this event so we need to
|
|
17
|
+
# carry out this workaround
|
|
18
|
+
# if a controller is reloaded dynamically, it will lose this setting and really suck
|
|
19
|
+
ApplicationController.send(:append_view_path, Mutton.template_path.to_s) unless Mutton.template_path == Mutton.default_template_path
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
initializer 'mutton.initialize', group: :all do |app|
|
|
23
|
+
# must have sprockets or you're in trouble
|
|
24
|
+
fail('Sprockets Not Found. This version does not work without sprockets') unless app.assets
|
|
25
|
+
# set logger to rails logger
|
|
26
|
+
Mutton.logger = Rails.logger
|
|
27
|
+
# register with sprockets for hbs and handlebar files
|
|
28
|
+
app.assets.register_engine('.hbs', HandlebarsTemplateConverter, mime_type: 'application/javascript')
|
|
29
|
+
app.assets.register_engine('.handlebars', HandlebarsTemplateConverter, mime_type: 'application/javascript')
|
|
30
|
+
# register template handler with Rails
|
|
31
|
+
ActionView::Template.register_template_handler(:hbs, :handlebars, Mutton::HandlebarsTemplateHandler)
|
|
32
|
+
# TODO: dont register a diretory if it is already part of the sprockets path?
|
|
33
|
+
# add assets to sprockets path
|
|
34
|
+
app.config.assets.paths << Mutton.sprockets_path
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Mutton
|
|
2
|
+
module HandlebarsCompiler
|
|
3
|
+
module_function
|
|
4
|
+
|
|
5
|
+
def pre_compile(source)
|
|
6
|
+
source = source.read if source.respond_to?(:read)
|
|
7
|
+
handlebar_context = ExecJS.compile(handlebars_source)
|
|
8
|
+
handlebar_context.call('Handlebars.precompile', source)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def compile_handlebars(template_content, template_namespace, mutton_namespace, javascript_helpers = nil)
|
|
12
|
+
ExecJS.compile("#{handlebars_source}; #{javascript_helpers}; #{template_content}; var template = this.#{mutton_namespace}['#{template_namespace}'];")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def process_handlebars(template_content, template_namespace, mutton_namespace, assigns, javascript_helpers = nil)
|
|
16
|
+
compiled = compile_handlebars(template_content, template_namespace, mutton_namespace, javascript_helpers)
|
|
17
|
+
compiled.call('template', assigns.as_json)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# TODO: get from asset pipeline
|
|
21
|
+
def handlebars_source
|
|
22
|
+
Pathname(Mutton.handlebars_file).read
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require_relative 'handlebars_compiler'
|
|
2
|
+
|
|
3
|
+
module Mutton
|
|
4
|
+
# convert hbs files into javascript for the asset pipeline
|
|
5
|
+
class HandlebarsTemplateConverter < Tilt::Template
|
|
6
|
+
|
|
7
|
+
def self.default_mime_type
|
|
8
|
+
'application/javascript'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# no changes implemented
|
|
12
|
+
def initialize_engine
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# no changes implemented
|
|
16
|
+
def prepare
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# called by sprockets when compiling
|
|
20
|
+
def evaluate(scope, _locals, &_block)
|
|
21
|
+
timing = {}
|
|
22
|
+
ActiveSupport::Notifications.instrument 'evaluate_asset.Mutton', timing do
|
|
23
|
+
start_time = Time.zone.now
|
|
24
|
+
# clients require precompiled templates for optimization
|
|
25
|
+
precompiled_template = HandlebarsCompiler.pre_compile(data)
|
|
26
|
+
end_precompile_time = Time.zone.now
|
|
27
|
+
start_write_source = Time.zone.now
|
|
28
|
+
source = write_source(precompiled_template, scope.logical_path, Mutton.template_namespace)
|
|
29
|
+
end_time = Time.zone.now
|
|
30
|
+
precompile_time = ((end_precompile_time - start_time) * 1000).round(0)
|
|
31
|
+
source_time = ((end_time - start_write_source) * 1000).round(0)
|
|
32
|
+
timing[:precompile_time] = precompile_time
|
|
33
|
+
timing[:source_time] = source_time
|
|
34
|
+
source
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def write_source(code, path, namespace)
|
|
39
|
+
# drop the first bit of path to get rid of root directory
|
|
40
|
+
paths = path.split('/')
|
|
41
|
+
paths.delete_at(0)
|
|
42
|
+
virtual_path = paths.join('/')
|
|
43
|
+
write_template(namespace, virtual_path, code)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def write_template(namespace, virtual_path, source)
|
|
47
|
+
javascript_code = <<CODE
|
|
48
|
+
(function() {
|
|
49
|
+
var template = Handlebars.template,
|
|
50
|
+
templates = this.#{namespace} = this.#{namespace} || {};
|
|
51
|
+
templates['#{virtual_path}'] = template(
|
|
52
|
+
#{source}
|
|
53
|
+
);
|
|
54
|
+
Handlebars.partials = this.#{namespace};
|
|
55
|
+
})(this);
|
|
56
|
+
//best with a large serving of mutton
|
|
57
|
+
CODE
|
|
58
|
+
javascript_code
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require_relative 'handlebars_compiler'
|
|
2
|
+
module Mutton
|
|
3
|
+
class HandlebarsTemplateHandler
|
|
4
|
+
|
|
5
|
+
# template handler contract this is called from rendering stack
|
|
6
|
+
def self.call(template)
|
|
7
|
+
"Mutton::HandlebarsTemplateHandler.new(self).render_handlebars(#{template.virtual_path.inspect}, Rails.application.assets, assigns)"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def initialize(view)
|
|
11
|
+
# not used in this version
|
|
12
|
+
@view = view
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def render_handlebars(virtual_path, asset_environment, assigns = {})
|
|
16
|
+
timing = {}
|
|
17
|
+
ActiveSupport::Notifications.instrument 'render_template.Mutton', timing do
|
|
18
|
+
start_time = Time.zone.now
|
|
19
|
+
# get every hbs file name and pull from sprockets
|
|
20
|
+
handlebar_content = template_content(asset_environment)
|
|
21
|
+
end_content_time= Time.zone.now
|
|
22
|
+
# get custom javascript from the helper directory
|
|
23
|
+
javascript_helpers = custom_javascript(Rails.application.assets, Mutton.helper_path)
|
|
24
|
+
start_compile_time = Time.zone.now
|
|
25
|
+
# compile it
|
|
26
|
+
result = HandlebarsCompiler.process_handlebars(handlebar_content, virtual_path, Mutton.template_namespace, assigns.as_json, javascript_helpers)
|
|
27
|
+
end_compile_time = Time.zone.now
|
|
28
|
+
content_retrieval_time = ((end_content_time - start_time) * 1000).round(0)
|
|
29
|
+
compile_time = ((end_compile_time - start_compile_time) * 1000).round(0)
|
|
30
|
+
timing[:compile_time] = compile_time
|
|
31
|
+
timing[:content_retrieval_time] = content_retrieval_time
|
|
32
|
+
result.html_safe
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def template_content(asset_environment)
|
|
37
|
+
handlebar_content = ''
|
|
38
|
+
asset_environment.each_file.select { |x| x.ends_with?('.hbs') || x.ends_with?('.handlebars') }.each do |asset|
|
|
39
|
+
content = Rails.application.assets[asset]
|
|
40
|
+
handlebar_content << content.source
|
|
41
|
+
end
|
|
42
|
+
handlebar_content
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def custom_javascript(asset_environment, helper_path, _options = {})
|
|
46
|
+
# get everything from the helper directory
|
|
47
|
+
javascript_content = ''
|
|
48
|
+
javascript_helpers = asset_environment.each_file.select { |x| x.starts_with?(helper_path) }
|
|
49
|
+
javascript_helpers.each do |helper|
|
|
50
|
+
javascript_content << File.new(helper, 'r').read
|
|
51
|
+
end
|
|
52
|
+
javascript_content
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Mutton
|
|
2
|
+
class NotificationSubscriber
|
|
3
|
+
|
|
4
|
+
if Mutton.subscribe_notifications?
|
|
5
|
+
ActiveSupport::Notifications.subscribe 'render_template.Mutton' do |_name, started, finished, _unique_id, data|
|
|
6
|
+
total_time = ((finished - started) * 1000).round(0)
|
|
7
|
+
Mutton.logger.debug " Mutton::Handler::Render Total Time #{total_time} ms [ Content Retrieval: #{data[:content_retrieval_time]} ms Compile: #{data[:compile_time]} ms ]" if Mutton.logger
|
|
8
|
+
# puts data.inspect # {:this=>:data}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
ActiveSupport::Notifications.subscribe 'evaluate_asset.Mutton' do |_name, started, finished, _unique_id, data|
|
|
12
|
+
total_time = ((finished - started) * 1000).round(0)
|
|
13
|
+
Mutton.logger.info " Mutton::Evaluation(Asset Pipeline) Total Time #{total_time} ms [ Source Lookup: #{data[:source_time]} ms Pre-Compile: #{data[:precompile_time]} ms ]" if Mutton.logger
|
|
14
|
+
# puts data.inspect # {:this=>:data}
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/mutton.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'mutton/config'
|
|
2
|
+
module Mutton
|
|
3
|
+
extend Config
|
|
4
|
+
PARTIAL_CONVENTION = { everything: 'rudolph', hunt: 'dasher', underscore: 'prancer', dash: 'blitzen' }
|
|
5
|
+
end
|
|
6
|
+
require 'tilt'
|
|
7
|
+
require 'execjs'
|
|
8
|
+
require 'mutton/engine'
|
|
9
|
+
require 'mutton/notification_subscriber'
|
|
10
|
+
# for server pages
|
|
11
|
+
require 'mutton/handlebars_template_handler'
|
|
12
|
+
# asset pipeline engine
|
|
13
|
+
require 'mutton/handlebars_template_converter'
|
|
14
|
+
# partial handling in server pages
|
|
15
|
+
# require 'mutton/partial_finder'
|
|
16
|
+
# execjs compilation for JS
|
|
17
|
+
require 'mutton/handlebars_compiler'
|
|
18
|
+
require 'mutton/version'
|
|
19
|
+
|