push_routes 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +37 -0
- data/app/helpers/push_routes/application_helper.rb +4 -0
- data/config/routes.rb +5 -0
- data/lib/push_routes/engine.rb +42 -0
- data/lib/push_routes/helpers.rb +13 -0
- data/lib/push_routes/push_route.rb +195 -0
- data/lib/push_routes/push_route_url.rb +76 -0
- data/lib/push_routes/version.rb +3 -0
- data/lib/push_routes.rb +84 -0
- data/lib/tasks/push_routes_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/clubs_controller.rb +16 -0
- data/test/dummy/app/controllers/people_controller.rb +40 -0
- data/test/dummy/app/controllers/push_routes/clubs_controller.rb +6 -0
- data/test/dummy/app/controllers/push_routes/nested_controller.rb +15 -0
- data/test/dummy/app/controllers/reload_test_models_controller.rb +7 -0
- data/test/dummy/app/controllers/sockets_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/club.rb +3 -0
- data/test/dummy/app/models/person.rb +3 -0
- data/test/dummy/app/models/reload_test_model.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/sockets/test.html.erb +31 -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 +25 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -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 +42 -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/push_routes.rb +2 -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 +12 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20160402002530_create_people.rb +9 -0
- data/test/dummy/db/migrate/20160504183412_create_reload_test_models.rb +7 -0
- data/test/dummy/db/migrate/20160513005720_create_clubs.rb +9 -0
- data/test/dummy/db/schema.rb +34 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +6773 -0
- data/test/dummy/log/test.log +33953 -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/favicon.ico +0 -0
- data/test/dummy/test/fixtures/clubs.yml +7 -0
- data/test/dummy/test/fixtures/people.yml +2 -0
- data/test/dummy/test/test_controller.rb +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/--ZWYz07A52YngRjvhUhrESg1-dCzYAOO58WQTRiPLQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-PW_EqGj-6lX6VVXnnE5vl9QhIeSCVbrcPbFstIFjdY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-U7PnTMK2SLCNYqxuWg83ro2I7B_WLYK8BbQDAA7d3k.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-Vz23VmKQjOtbCGZ1oVQW-JvNvNsYjWtl7rwUZQla40.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-bsno3PsL8EjVSn1AQXh0iRKgPzRAHYynHRlQf8fpOc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-iRudPteSy4NccIeaxRbxBwQ1GYN6MbWaw2DuAIDtyA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/07M7KmVf2WC0NpvUZN2DgZLrlDDe16hjbEuwnqkxyJc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/0FujpXjeO5gqyOq-kJtB0LMrMS4EEsRDnA6GQFtERiY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/0YhhkNvDq_z3r1_EOCluZuAb1-zO1JxE95NH_ySN5b0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/0az_zDE-1paVI4SYGjB4M1BGGg2xzPWQdo9l10G4rt0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/0p9AjB58Z9YDv8Fh9rDpKgKh_m7B-jAekL5Q3KvTt6g.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/0rRAgxvkPzHo6J3j_N73LDBL1ORtdbNhCHeO2dx1HLE.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/0xpTJ5N4wj8L2aM2hu0FnJQmoMq8r60hl-KN4ISnw28.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/14eCPaxGuS6nHQvETLa7AD1Ch8Ws9spMSm49BGjbrN4.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/1fFJ3Ou9Tu4CCsZJJVSskj3rmuLLkDoR9xEnMueTXpE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/2lHNuUCxU3QSUNG3NWrrQOgjBL2OyZMMDSQegUa0zfc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/2tuEeicQAIjwZdSpvTJYh34nL0VsEMe1fGbvXW8gqO0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/3cjRg6vyolRqymzH2UnHvlPQsimxcTL5A5fQr_s8pUE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/3dzv0FNMPjRltPZSdhWxVw5eHDDoDK29oC9ngpdKb3I.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/3oxe_NGdmT7fBu45V--tJdiTdoyN9Ph_yUInpt4PomQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/41zJ55HFFLiaPXiKVkZ-KMBNv2yuwbQH_pWZ72539qg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4IKDDNLPS790nV3I3Hq5q8k50ABf0QQwBkijBkE3oiU.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4KKrlcR1Z7kTO90TLwL2jRWDDJo8OKYAIwqftV8Jt0M.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4NIdchJry9NvpQJkON-iM4lzQHjCsNyi9py72GZew78.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4Q7swEro3qz_jUYFASedqSIgDFicVmAlj8t0UCuJWSk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4TesoSCa3bULRn4Zy7KWMO6Yy8HzQFBtjaXF8MQpFnA.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4svVzjQ4M9xi3FL_kz6UlKrme2kI4geGUnGylbDGXLk.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/506zrXZtgB8X-5bk2jQvh3AJzLiu3DZZdl_QLkdIzNo.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/52-UhtUloe-LW8iSQRhYPC2HAgxWZrYRpwCbCuq4Akw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/52XKV2Rk1MXEzB-iai8SaQalj2NK0x-WJoq95gDqPtQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/577XIuvm7oUu5x36pEk5A7mvjxZGXXhAgMpg7xKNHHs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5G4p5nqRJbmMaM5KsL4eup83d3Ka0xIMn7CbTXnWKtU.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5Quo30H-TKxHUO_JJo5d7Z-GONofPBF58j7RMMp0X54.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5XpwHz3QVwwDJrhtFRRzqXzNGfyZDVFzFfrCLp8aEY4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5bFNWxuTz6wfz9bVFs7duT3hWxtI9YpSV0SXcZkbh8g.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5jZwtDcHLebrPhfe_GOlIsTgSOJp7vGoWxfGF0fjcHM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5mAD_QSR36KS4Bp7K7wiOIfFlf4uB3NbZUE2KRBH1rY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6UwiJx-6TIHkGp-uYLRYiOtOel59i84NlGNK_YVr_XY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6VoPZk7pHd443fXs-VRDSt_KbrR8Oa_s_MjWS9QNWpw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6XOpj27Io1UG1teBwVF4QyY-3ERGNYaC_5TZQ9w0R6o.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6_48w_qAZdk-os97ML_y95nmzRPGyXg6I_57VppGKRI.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6ip1pA7fXhE5WJAsprdd3v6bcOAHhkkLESNTCcsCj4A.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6sFWU_3KLx_FGlcPDW8q0DqWe_dEHwmGJFAkXzvXgWw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6zbU4lZ6H4FuD4wV084axR_rPbCuqpfwSMT8eRYlz34.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/73UjEuejnBHHfDzBfAfeYMBAztEJxefCzT7iQv7SLhk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7Ac1pYV2wZ39EMiESma2NaEd3auk0soCL9ihw4zlhf4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7CoFOGEkLZ1V4rwsCR-6dNSz4YQtVwvNN20ZSry3z6Y.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7SdVkWFDjVRQWM9Njawuyo9vZR1MS4dcnpxUIyb1X_0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7c7wvSmluzKCDkRlWnPz3hnm3EVgCe-fM5E2prOJ70U.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7c_erSIkRUxcwHB8pkD69FTiEhizlfgS_rjO64KS6gk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7dYAWtsSTXxsq4neJ1ihVwIUAXmiaYloJOHdZ2Yyat4.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7edc0zpTQc4BzOkvz1sZ4i4x5a6de187vj2X9iX-4gk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8A2SojMYAZAN_MHEMsST_xFak3ogNzQGtCsFQMGcmKQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8EGmtWrEez70X7_wAqTavMFmIKkw_0ro55MloukhnPA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8ELs_Sdyox18x9CQjy_23Ut8izEnx0MX9T5VVyNHImA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8KEOOW8gdH6i3aWYBZJGyIpTcpXGN0TK1KOPi_I_A94.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8RggqbR-fEtxOf_FQIIoBIpdnpKID2qQPzgs1q2RXVs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8ks-DnUrChVlffxgxWrQ3_TEROzM-zIB2PwNhpnY0W8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8r9UYP_8UJP09ZlytUBA7xftK_PcZqiYOgzy5OfxJp4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/8tzswLgiRPAOlqeHXsJcZobJbp_EI2W4jkWS2ohZSOI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/97wSrrny0NGdtZl4jipg6Hkyhr-uq9NlufvOTIzF_qs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/9IVsLVNmrV1lh1TDLseo1PuBGOcts5EwLWGUasKYqQs.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/9Ml1mUdgY35d91_I4oi3yngXXXPBLbjSZJDUCntTfkg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/9TEluewRLiVECi1aeYQDIgIBRX4XV_W_qQyEHXlbF5U.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/9lqU_c_7Qf3rvAMdNhS9bzXDPqhzHO_FW2vaH3ZfZ6o.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/9mJTnS8N1NDJwqdpKMgitIuUHGaSGUnZvuVj42MEAfE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/9oFQAXshTvJKhbAWFol-TfEDc9ae3OP2FnxGuVz4ZNU.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/A2S-wqdDQV-amudd7EI_oSsG772CQxg26bKCAdioo1M.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/AL_TMFm39MgDIUXsJCOeiRTXveIEn_B1nx116G94o-A.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ARXymBBVkfJkFBX47yzHvJNnlgz948at_O6nbBpyWw0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/AizHvDjJDntPPkH3rF9hm4MgrUtq91IxihqY7WIQceA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/AssBLZ2aoqfXlm34jW7KrwCUfJeT1_BvLAP_INs3J7c.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/B3Ak2OB7ZIa_SulVPZIQNf2Vm17-0enh13FqdzhSByY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/BHl7X5Vz7nkk-qoD11IMsGJ-09nGKlBOzbnYlLXBEy4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/BX3Q5-5HxFoVPtM8b0ENDDvEIoX3Jhq0IqEEPysU2f0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/C8K36nd9JueZUEmmXas517PENmoHIAKYNSvo4JVDcaQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/CANt6goTEzW8ap3Y5sBnlOJns-0u1MtVVgaXlTJM2YY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/CVdzvqF1ZBWpR_0j0fI30CJunUbFr15jnLjteh8B2i0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/CWjE5Ll4t9IfLPwsRFJEi2ihXF3m4489GkIXEVuVn-0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Cai3JDNKg8aByr4hlwsGKajj1QNy7jLgTqz0p3rvH_Q.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/D0u2TvlxYMIVx0Myqy4Cy9JtqeFPk2gUKyC-f8iDqK0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/DBVoJ1s8c5PlUMxHnQa0Z_c9X0YNbqLFi38zZaBsOQE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/DLqCGj69FpyjHFOqDGL30zDVKWzk94adp6CCYV436zs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/DgGbu7yn8ARIK9j0ikUNx8_xAK24BpuTQw5i2rKa31k.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/DoZ9hT4-YToNutP919PD-eJ7l_aj-um7c2Z0eSlZN7U.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/E68zF5vWC2DuLypqUXTXDDWJbzC5Urrh2XxDN5KKKK8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/EEpAMNHegM-XMUw11x_bVJMdhOyt_dSZzUuuCbV5wtM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ef3rtIcLz5I-zbQ_X_jjAkK65b_oeMZI2r1QDX6rfOs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/F-UY7eW5Y4SJaBJJns8jzsraKI2Lubu2MIWlALoq-yM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/FJixoOa0GJkH6Uy_aoJYXHfehhd6dGOt7w8-S5_5mgw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/FMbt-uXEi0fymD2HUTIkNseCqzGKV1nC6wQny44jBLY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fo2mB9mY_hVwkoDkFihgod6FfmaL9G0RXKVOFspuw3c.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/G39Sv1kXdLXGAB4yP50CD5p2H7cZK-KmnQ13cj5msSw.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/HCOE7BAcXGEfz9GcIe_HdFh-eg5KcamD4wNGAAfkNlQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/HF_DwCX1ZCGR0s9-PshtfKuz4fbeXxUJgfy04ohZaMo.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/HPY5PWaCP9BApLSikFfHxjghy2PDhuXFjHLMXGVnovA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Hhlhr-5E59Oww-DpCvjlean41rtY8NZA69E5xBGAznI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Hpm5KNXSK1ndOSpQtPgnGDGEG3Af_4aC_EwUlID6Vw4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/I0595piIa2kZ7BF_8WxhX6g2zYA9pZvVT8y9J2dDrjA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/IDvz119bETcOMa_Q1V5jHL_XeYAf7kyns1AnSGPzNZM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/IQa0nKiiIrEjfXsQiukXO9t7gvRL4ACkbQGuqTShkB8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/IegRHVN6tmZNB7s5wkSXMLKlAD2owi1aKUI2L32H3Rs.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ImVVic5s-z0ug3skqE2PgJqVLTmHtap2awbwNqflt9g.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/IqCDZkm-PVH74ZN-ZkTeWGyhgHtpxFOSNWnUdZ8Wj2E.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/IwyxqQ-y9FD0P-NI0JrOJXxZNUc4F8dlED465TrmPDA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/JGV1yX8-fpVxlcohntl3KH6iFy5ej3qeDuzVUfyH09Q.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/JOt5b6DGOHhx7-hHBmcgBqy27hvlALcJn7s-396pSMg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/JhcMnw6CWgn0ZZqkgbVkROirX9sRWtCDsg24KTnvQzg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/KFMHjdL5qDZ7BlWxKKqMz9P7tE608MHLw2LZXqgGK0I.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/KOffGeLOfGp-qnlcNRHh6Sniwcmncq2NETO5PUzTOCY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Kr-P3SDtjKWPJU7muAZkSpL6pbP9tweOgjttgaSvxic.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/KvesZdZ2YE6x3kV3U3sR-iisKvdE5ixjyamUpUtZWHw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LBONmlvnByIcpB3Zp749VqaVGPvc6IdCdVenm-PXeN0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LBxSZZEjzr6A3TA2PB9Iemw2tn4dMY4Xg-QjilF95YI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LDOhCbPotRxcqwucEKwoTT-AErExQpl3jpMJ_lftJ6M.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LN6DDLN0s2d_QxzTr18gLvolmjsQPR9KWH7FnFpDg9o.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LNaHEasH_wnVXq_TvIH-KbcvihTxHBGfXp5jWmg3r74.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LV6pY-dywJL4rd8rR2enBxz-n__hGTptVkwn4Eb1MMI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LbRxf-RNJEqikA17bAaP9CUcAwNHL-fQmoiKSInSNrc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ls3pXM6_E6TZmp93aVVwJdV5uzjxhyNupImMszn8ndw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LzwGmzGVIVjFyr6j3K6OMiZTX6vsaHelHM0psko57xs.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/M6h8MHkXqPjt1U-S7O2nlzK4PBa94H3-nQZvqQXCdZw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/MOkWhVoIye5uA2WlnIO5vQmlQBN2AlIJiwD22fKrHGY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/MkWCoJ_Yc7FIcJIKHkaGKJooOC_jI9BWC9-CGpgG25Q.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Mp7PW-GvAe-P-FS5u6fMvcTpnoZDyPqJZhAyIoLdBqg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/MtA1Qi_sJiPPw3kjHTHKyRNRYWiSSX6Q6dskNUq2BLs.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/N03C1yOeDWUbJv6m--EgQ3HX6rvk5TB5IsZDoQol3Uk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/N31dlOdqVCmnfFs0CFYdY3GY-XBXH3aqnXxIJ6oUQOM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/N6qfafKwSyfCL3KUlBy05KcsNOvhyYcXqeWFYBsAmNk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/NJdsGWVa86jH3bIR-60AT_wOA4sS72v0BMVTKG2kKIg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/NKzp5tHdzyTdo4DLRshVSMTjkHub0YpYRGQDu1-aw60.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/NLspqKUPe4g6Q4WEvWHMjSTqkF8YS4m2vcBhHBuhVqc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/NQdxTyYwXoIegQzGMBx0aPr3yrC70eMbzmk4LE7S1cQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Nh-7NPWIhBfMDx0vPFCO9ikYfOON2hq2yFfONiOJYnU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/O77pb7jj-k_3zQC5fyMHRgREX6JPQr9rz4f33KJUFJk.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/OHKX8ru80M2SmEsQLykXN2Bm6w-j-Qf1Vp20_MBkFlw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Oe8G6NRir267suPz3MYKCHO8k1I_L_EdvG_fFnQPCrY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Or4M1J2_rZytLg63QojbiBKifTEOJzUfio7zN5Y2NFk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/OsAeTwywQZABNuKlJ6szwY3DIey6njZBzS_1s4aOjPs.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/OxAOjFPTKF9vM4EPQvYqmTbgppG7BkKubQvYFy0ZhnY.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/P8_WyqVCwY11yXGIyKqVxwE-7Bm7z6BHV0K4hwSVKLs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/PBXox2R4C1BJ4q2CJy9G-GHvS0yK_DfvZCIU1rcbQdU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/PT8IlTD4zZn06Qy2xcgZHx-CCCulYiWvmCAKGS4DBQ8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/PYSWjWU6MVBQXN0UiypCIi4mF9X3YwDIjSH4Y-sxxek.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Q3U1YY-CxPJT0W1U5gxDWmbvUcEPaGzLX4_ycAIqG0Q.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Q9zgcQ2NvLjKYZ0vnJAkKdfKQNeMI7KHsHAaH6y36SE.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/QSxZBfIq9gA7HwU1t7xTQA-rUdDgkZZoDwBo9ZYNr7o.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/QfujprXdJ5sOEz6Sjbbd9iWS00hNe1yJWfCTzBzqNdg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/QrvJtbvY5J9rSQMkxCodRTYWlliFmjyVQRoFn6Lop7M.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/R0jWkA7KDyROnIustxheOVy2PRHUaBtl7c1Eusdr7Bk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/R5jbKnLJbKbmJDaowo6rS1XzaHVRKHggdirj6B-xniI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/RSxAaMP82-ZTl5OBiymhFLzamH69GCG-6qpztFD_FKI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Rb88gczJdsKpmTLc5_wg_Dc15GlZcKf4MMhS37KvI9k.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/SVowllwbdnuXcjrWu_DVAdCPo1VCE56rjnchnFspNvo.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/SbEY6BLgeu8gBbToLaIiNV20cWAWsj1tMRQw3G-H0_I.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/SdDxS1ynNc96LSi_lueIfNelBynvP_BMkLoVkza6-ac.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/SyHupyOb1VfGxooz9oodSduJrLFtX0zPmzsZUEfEfVI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/SzzhLIQfspH-u8gom_1h1o4VmYdn-OOTgfmYwte1wMI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/T7_OSTNwKd-wutzu46eG3qLN7W4DTA7NiPZr9sc79sQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TDAsUstXAEuoaCbybThW0ZQfB9fe5BPpH_LdAYtG8hs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TEDPEinm2kOldSZCRhRE1EY1cXcPDZFzGk4BQwTHOWI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TRCUlOT82qhGr88qVbk9_yfP6MKWoE0op0VjqenK280.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TRckLDVcVGmOV8AZuMwfJU8Eiq3P0PtY5FZENxdW7T8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TU_IzzIW5wIH1TPH2kzEzXwO-hTS_V1szFKLKpjO2Tk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TZGIeYEM5mk1I0l6X9sVrUWzFDoFAaSl_QWaiLfjDiA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/UAq3bNJdp44QhfA0yibxUDtiIwVl7XGVIwZKTKRerxQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/USCztj97loabXtEdyz5VyMWEajjAe7PijgZuV0NXlsw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/UT3Ma2rH-kXwIGXPGqMAFwoXk_LTAPHD_xMQv4fTmRg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/UdmKcKv8N88PBJs3CSR1mJ_G6oobaFV8HverF0JfDB4.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Uwu8RbOC0pL724Sj218ep1B6QMpN4uPFn4ZWMkvvXyE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Vczr1oxhEkbC3yUWMb0Tf3WUVs8l3_RoNXjuBNeCWBg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/VgVYXFnKoKfhNNidgsnYZiyZvCXF1OZeSob1_i5Rkjg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/VqgqPqjuXEBUiEpCvjMb04J4nAHqZfTzCZvlHnobn_8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/W95O_HwGQZXx5rQc5Pw-E8SErSh7L2TmGgbEHQ0NqN4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/WDCB7tjE0ZDlg_aBSKnKpbaxSsuqwusnftzr_dOuzyY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/WFLh13hrQr4SnwaDNo_GShN00wLfDyiM3yb1XW5H8NQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/WWzM3a58ZTgtw4epk3Wh-I_t9WsmddLlnihbz7pJjRE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/WrD-SrB4qOaYFzZUpFMdeKOm7NiYtWlD_FI5LruznI8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/WzFgdT_lFRtAQNw_iPOzd9RstnPeT5_mrdIRjFeILsg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/XNl0bxkiGrmxszpHGGB9cGTek0tw0rO0IBeHQmoz6tk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/XStuvVr035QnLhOT_o345-u_rK6WLY_C-jeWirIu01U.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Xmn7VOulfY8JyYtnNdcrUMoqwd0GFiPjJgtXEitvC4s.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/XnJ9A_BUd1vyWBhh8xxRnKU2hWhPr4OSxzduT1mlqdA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/XyHxqCCGsvD6UwVKpLYCIUNhWutTtQnquD00c61k7uE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/XyXE4HOafArTo_4Bkl-efr7mqbnOppqq5js1-SW0YSo.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/YGigUYfSWQk9Fs0ne_mQ5LImkEIKOyYEWQBf9Es3zKc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/YJCzURjEQjhMm2QH8RBD27vO8wpSULpPz4HGRiDO87w.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/YZBmRMdaOQnvTJlNmPyqVmQDnj4PXKHhYThKTf-tgBI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Y_-YzQS6UvM5osmzVz0fDXGPQdFPq28NmzZyOnh8kMU.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/YpYdIrntPpyPpbJIuannzkopQ7dGI9AY6hYlZae8UH8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Yx-_nTaWv2LNrOsOenMcJiLi100RSIdmfDHiELgowg0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/_-YSXkoJxisCmeDCtmPaUtdUS67jsD8zwhqdHiRFIYs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/_4C9KP4l4WiXjlzMJvDScIRYjuuEkn3VpmJuLTPsS6A.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/_HkVBKwrDptZBvRFN7R6P44TmoGb_NSdx79tyzRsz4I.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/_jz7R090MH_HZ7B-dCm4CoITeis60Y682BonJH9Mwtw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/_t5zrjwR4tfh2hE8bLNNzacG90jeFLeOmmVTP36SYsY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/a5SnN9MbCMeyEZGbBbWxjcK5yy2xj51voHfKvxqfOhg.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/a64eJtpRr9Ki4McHhF2IpquCRTAvxgYYK6Pc20tJdo0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/aAeiR_FZecMb5XfSz2o-i4fyCkqhJ7IumVf_XJvFIA4.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/aHNk-MrAgLePJA_g1G7g7QL0oUpoekWHCkngVF73Bh4.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/aNxVgQDlf4M2jZyZq-NW8nmpYRBKCxtM-pz6DL3-3hw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/aa_pg8uJJw_OSFurZrgK6OC4QX9VTJXVPf3kCXboSoY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/b9tZgjwIuYMn_62GeCI5QUB7sy5HT9ZzfoRYQN7ZkVM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/bANe0BKxDw1Y7I58p7HotvnxhHeJQPxJbfFyVBJJgbQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/bJnG9-nzh1aw9AuHwqreMm5jSMAID3-TIltmkZinYTE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/bNBBfcOHSHY_TogY6mZE05EdCPEF2WgGgp4VqBP-6FI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/bS69l_IteyXUtJZ98w6ZSxIuSnvjTahuJ78lzjDQ97A.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/bYyfTOO-SAaKy62cKPA2FCKnDf9CDYsORgaVWtbp5t8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/c2WC9sy1FFzN6Ig_cZ3niYQV5a6ttkr_gL2vOilHqco.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/c5eqULnsMChO9q0CcFXLfcJ_ZSXev6OUgoUiDrrNf_U.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/cCi18AIoGTaeUN8TULaGcBjsAxOObvlZb6F5HOFw8S0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/cCiGimgT2XCOsPOQvLmca65h2k3hXDJ4EYtu-BcErU0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/cNC5rz14gCKukQSYwQIkRZ5Qq-2J8T4zKmBDuWkccNQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/chhR3BLxGzs7ibs2Ws9EIM-9nwEfTuTN5D4McEzDtJc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/cq5yJSM4rGvsWfKmv-bQn7XIA_hTTEM-WFBb3C29_b0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/d1DJp093qRFVi8Cm6NWNINMgaQgZsdpBUlNrQ8fogto.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/d6XfMOCnrzgT53cm5yJgEJmJ9KC-7wVzUwthQwa6blM.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dMNWuvIAt0w25UQHslbJ5TmiHCwMu9z4eVBMD1-VWTs.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dZ__5cepCnFGNWJ1dHjqDx9Vf2DY8qriXS_6dOuW32s.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dxtUTopY1f5yj8icvdCKfG3_OR0wJoOWB4q1Vdk1Z_0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dz2aAOwd5i6l6QcPCQI4ComkeZAbyf-Qeb4W_wEOkE0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dzAaHzUVxwWIMo35cRt3K7yRjdjs3nmaO967ek-9fg0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/eoFnjU_f5aaAoCTQj3o68TAgYU3OUj8KlKNTrD4APDc.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ex2t_6yDYzQGun8VCKUGeP2mcftzsF4zPNUyHKWxe5Y.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/f7rwOsYMxdYD6UcqWBgWCzk-WCWTWTgRpdcELhxmsG4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/fI2tpvkjAPuqC8t__DeQXkSWlroZmpR1jOtgtktOQ3c.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/fNAAm2wdPx03Ue6IoKgQwFpaSjVDVSg7AkBNaeOXtmY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/fVjWSwOkXIKe_WTxOxYYszMKp-ixEHuTCWTZ5oiSDZw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/fqfDcEZdl9SmL5A1HB6CTDdn5PT6u9nG1XLtGSHlk-k.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/gIvRWsr0YMM3KhWCaomADJmHx9XQ9L7wz96c4ro8E3M.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ged9cs7c_A6Mx51lzZFhKYcEAMJNtbG6mRMZoXv-_0w.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/gf83oFKzWVQn0Bxg-SuAceCAsdvPVJoj8FGAUDgufSM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/giAfmhPdLM_yiHuwUvP6XrN_giCdEWBDG5J6AVGmBRw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/h4K2qvrBpFMonQTuH3rQfG_FZO3QVTIE3Aw9AtY65eQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/h5HZSC9zRpqi6OJr6kz0BjFPic_VaGoxdzjxxfYYpHY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hNh5yunVSaeTheela12_AcjIhN0j50t2mLhAnzI0XsE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hWbPWDVlwq3DCKP-Q2j1foLX9DMiNkQ-1x9icLECwKQ.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hh_atfQhM1KuLM6mAb3SXFNRoFsXvaI2CI6UrHLX7XQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hw4d5QKVtUBtugx69PQl9KegRgq6cO5ZpN7eQqhYs0w.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/i9Yrt3LpiAduse_11l6KnZS4PQz44eGoT2sCClviZRY.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/iHQmxJ5Grn4XMtI46z_yBuYSraySsTYlbSHsNuwcHY8.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/iSAF3p4k0OTZWT3WCzFoSoxJ9JZ3Uyq3oYO6v2bf5ws.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/idLyLdBfWzAVAAaP58nb5Mh86TwryGVMRkVr6Sy0DSY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/itjzXIGHvaGUSOIKgu6Xlza3zjgwqhf8K4rRJbSWUVk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/iy1bAR5YLt13HkmD2meceUkZDQQ6rtN8ACw92YENNXE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jEHxldIeBwifYR5I84sauDV9RX7MfIbQOVD4FGONxSs.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jNbeochsX_d7tp-vx_b8WDR41GSbFkUx5ShtW83_Dfk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jYlx833TPiGoxQ0OvdQboP0y4dp9hogRNIvDZd3sDis.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/junz0CHcFTyBe7Ox7bGfvS4R1ict_uxUUqII_-Zv8P8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/kHuUKOVCOeqm7zZV0Jiz8GLLkMWGQgIyuoOeuO6ruA8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/kXemBdTbe9FV_2tQq5Utcb5XiIU9NLlB-lUopGKeK-4.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/kitWASGYvbCWQzkj9SoVsTORFWrkGpDISWub1rmVe94.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/l0Cn0scO8fur89Gi8TJdwDA_5Q16tpatJ3t9FJWUSvw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/lQAlLZvJNmDi0m09C0TKKB-BtUcew75YpdODRkMjEaE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ly7ke_oiXG13P8kCqAWs1DNhcgx-tQPcE2ZUE8m2Bnw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/m-Pm1QvKuUAFbi_YObk9j1aJDsZrT4zUPYuiZStiud4.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mLKsT7te1nXY2zPATC3mAboAPOb9nwIs2ifsi5EWgCk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mTfA80FxEVEMky7GWowWPvDBzd_2CPhl7VCQx_bNunY.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mvL-9EXjinv0ATscnZi8AtCGTJRzXvbu2eJcKO5ZyNA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/n-4G5vV31kxb78MLESOHIM56EM1iuqWPgclofXyBjBk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/n3QXoXZhMZVbNsXAG5G6qazn8i5WKtAzfoS9ueqhn1o.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/nHiAk46ki1CRtuoXaOMywU8sAk3qNwiC0FFHJXcRSpI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/nSV0X9gj6iYb87SHURQeI9vhymgtdWbWqPNTcZ1VFPk.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/nUKPyTF6HR1KP_PFFk4oSdbtrN17oJ4KTyM7uf148w0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/na3tZYLkQ1TjpJAdP_A3jqhwv0mEPlhwZtF26_Q3ddI.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/neDx-MKmNBUopnpnVzK1XF0kie_YCmd9xMjONM4889Q.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/nikUPwMhjvVL6AdJVuqgRv1ML81uS0fm4irjTNQ-Br0.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/nmK58UeoVzaj0p8volzUiV9xD9V9M0esdwL-cRn-Jbk.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/o1zqkB5xetpzZ5-5k7ZXjMOJQP-mldKBcSxwtaoQnOA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/o7fuPC9rm9y0KfQh-6PznOz9W8dVEiXbMHv26-xgImA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/oJ4ti6azlZHnVr7t-4-arnzyUtSsuuNawbx3GvIycFw.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/oa1s2sl5r0ai6I6tPK983q5jMXzghhzsmmIAcSFFZY0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ocWsaICguabct-49eW8nnPRs2zyr6LlTbEm8lz6fXzY.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/otlpF6P222iJpSgeGaH71GSl2Bl-3R8x4pC1fEIZy1w.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ow0vufU1ZvyGrNcit-26Ecv64mPvtkqjhI0zxU7ekzo.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/oyXKMpyDmUG2Y1779uJKxek9JuQBcOouev4_QTqxDsg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/prK3iWsdz2qjBTyaiGdN87a6rS203qtbKRhS_7Zt0ls.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/pxpfwqBGwjC4t5WNh2UTTBxC-FJ-Pv1EVgjB58wF8ro.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/q0nKeKmQh8PE4pxsrqxw8l1Hf_q-VV2z3eKoNvW6FIA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/qMVDX5mKvKrcWpymLV2n4kP72lAYlR_wAIiZw2jvkSM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/qz-1ZS2PHvUWO3RSFbJ1fM--sWCpf4fNXGo-lxyPWVU.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/rHOHpAfOvNm8Sz827bfjDHCTqogOtRruD0qgUzqcHNU.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/rIO5fE7gg6lKc-MyndS6xOIiHEMv-NGtycrA8uPrPaM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/rR06P2CBE5nca3i0hjgfNYlOSsmTIMyI4ZQFi339N2M.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/rdtc7PT0CZMAxQHS12sxAJPXIE3TN_UgjMVxgtsVjEM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ritu1jR3S6V1s1oDPc72QhsRoEJwVx3oFd0Wb146AoA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/rmcIPIQyPqtgSD_vc8LMQ9QBmJ5A3tUeSn4fxUSZbVk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sM0IcLC64ZHJCvcuUh6IR6RV32gVZOlELga602uNdqg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sPnEoSpAKHTqsfU9IqEwGB55OrIVPJ-OzkudAiMnQ5s.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sS4VF4PSc2bc9aN5nJOmWluCg6qkbnHk5w5Nua0a-14.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sTLqDY93af5eYS440K72oQEY8eeLbUpOzW6gAXzsJvU.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sU0TLhVpZSAMU4IglFTy1BtU_YMu9FYPWlyZteg-OSQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/saIlOjRbxyp4yDHTBVZt3VEIzGAsN-KA8lOh8yOBW-o.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/smXC-ctV-yAlRTYg9nDcCyRrvnxYM3KXdgQ9p_c8rMM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/sqEzP00fxnE3aid2nQvbAqnVxlatfl_yjz0GI-1wqdA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/t8ctlHwaes6XSdio99VMxmafT1z0daYgLwTTLQlfnJk.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/tBLaYKEjGivPSV8sV4fkL6BlumsauyXZz2hwIJ5J4J4.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/tJJf58xxfMxkcsRJP2Xevld3gzoC5iBi0GeuDfy3tAk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/tN6oGEY-V02vrkaSxm2uRxctCdURA9hbS5s0nD4dk9c.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/tQhWEIMObud3WJOXtAP_Di8UhHq6wW3zJFwo76aqw5k.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/tY2NxY0pa9yCYf_Nbn9rilndjgF3I4uRL2qIxq_dSBc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/uIQKZoq1RrLprJ2RyrzT-vwa8G37-wkhcBl31EsXvmg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/uN6JPb0KoLZSW-PubVXjD-rwJMycgPwM1VtkhAD8IPo.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/urxOtrP8TOP2AYpOMZxr2qbZQyBTKxtfSRpg9Mi1MO4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/uwTIbUbT6Q68EKq9eVY3bE_NJ49av-RuJuxAPB_BXQc.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/v13ePcO1K5BaSrlDgLv4VJ9FhgQPFP5QdQgxDgOwhqw.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/vDPw2Fr0F1hWPymn8eqNtm8xAnDNLb_pq3_CWsUmVJM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/vx3om7HPGLfl_MW9YnoiC08HsmxOjtmWdIzwf-Yw_bw.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/vyd0tRb3HazlsUYqR0vp795lEhEi3YpBY5EmfO3dPng.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/wBIA3yA26v63GtbfI8M6di6EPvYrAkW8xoBghd2_zFs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/x6tFTPr-Jkizt0gRwhHLVyLBbKhFW8J60zQTgQDq0yc.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/xKnCHTMfgerJ0Q6mtnbWXgNjT8mRnugFBKz1CbSRzQ0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/xS_UYGb9Cm_HXodHTpxuAXaQEdtatLiZSCmlYh_UPPk.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/xnvv_zYnlnEf_1_rrKIQSyeVTP5qWF5Q_4UYFcGGrS4.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/y1ufiY2LIPljqtmPNDDJ9iH8fXcomn5NiDtUUDku2Os.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/y56WLxXHFA-_WHRsiEmUvyueMZCohvaoWwYKxo8ssQc.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/yAB5qRC5Rs-l2ki7konENsqMfxlrrWjKyIbdKd97t0c.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/yGczC4yMXmot8z41Yvhc7lxRBp10wTdTOgZRucGk_jk.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/yKOnDCa9-hZ4Uq3xWqQSHsMcQJbFM8rcuSgmCxMp688.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/yY4KnLQwZxis-uWjIRIedoCrfIcZA2kXClitE6l8RZs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/y_8l9LJitA_EjpZpUE0hICxLtOI2MiTMXA1qIMSY4hg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/y_uHwrPAUZWZdAyBnf-LjSyldU8kh0pMrRwRW7g3P1o.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/yjzRoOsoyMCSlW-gKpp0nOHwcLS6BcF4jkAXWa4F0Dw.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ypFoyURV_Y0NHlBKznetHE6cVjR-mmRHcGSGQ_hERVg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/z1f1CWbar-vr9hJVdmWK_fmFtdqXKjLJmIlzJoYSul4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/z3qJ3Y1cfUDyTHyk3hqotlyKhxMY7XXmA44aniNk02A.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/zJZAQ8ZkU4NlfW-FqS6INgExWfq-k8bAHXSX8GkdiD4.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/zgk39xKFaGNsKXinqCnzxmGBN6zy9IVkzCPXTsQlnxc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ziltKhphmU9-prwAQCGgPjcxxEZw4pjsn6rA1NqFSHI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/zunP_dK0O1407bf9sDTRfnAKsIDYzzdgp_1C3E91I_c.cache +0 -0
- data/test/enable_routes_test.rb +46 -0
- data/test/engine_test.rb +10 -0
- data/test/integration/navigation_test.rb +8 -0
- data/test/new_get_route_test.rb +9 -0
- data/test/non_standard_controller_test.rb +8 -0
- data/test/notification_string_test.rb +34 -0
- data/test/push_routes_listener.rb +30 -0
- data/test/push_routes_url_matcher_test.rb +22 -0
- data/test/push_routes_url_params_associations_test.rb +23 -0
- data/test/reload_test.rb +21 -0
- data/test/smarter_add_test.rb +34 -0
- data/test/test_helper.rb +23 -0
- data/test/trigger_test.rb +54 -0
- metadata +906 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e2fc62c4419b2bdc9565ce9bf8927b4b7a2471a1
|
4
|
+
data.tar.gz: 7633da272cc55d16f82565d28673408ad284a448
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 246d3adb2af66d5526abbbeedd1afea48fd06f12a80c2686d7d6d44fc45204499e83e5e173a1296c6314c5942bb74a5937098ab730a23dc25ce74ae4fc1603f8
|
7
|
+
data.tar.gz: ee1563ed13fc69a321cfb766256eb1bbb599dd4b72d524a6b573ad22e11fe34096c771f7b4d12ee83fd8c7092141103540f4917dd1e89bf0e40a707c2f0c988b
|
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 = 'PushRoutes'
|
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
|
data/config/routes.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module PushRoutes
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
def self.load_controllers
|
4
|
+
if(PushRoutes.redis)
|
5
|
+
begin
|
6
|
+
PushRoutes.redis.set("PUSH_ROUTES_ACTIVE_ROUTES",PushRoutes.active_routes.to_json)
|
7
|
+
rescue
|
8
|
+
warn "Redis connection failed"
|
9
|
+
end
|
10
|
+
else
|
11
|
+
warn "Redis server not configured properly"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer "push_routes.view_helpers" do
|
16
|
+
ActionView::Base.send :include, Helpers
|
17
|
+
end
|
18
|
+
|
19
|
+
initializer 'push_routes.precompile_hook', :group => :all do |app|
|
20
|
+
app.config.assets.precompile += ['socket.io.js']
|
21
|
+
app.config.assets.precompile += ['push_routes_socket_io.js']
|
22
|
+
end
|
23
|
+
|
24
|
+
config.after_initialize do
|
25
|
+
if(ENV["REDIS_URL"])
|
26
|
+
PushRoutes.REDIS_URL=ENV["REDIS_URL"]
|
27
|
+
end
|
28
|
+
|
29
|
+
if(ENV["NODE_URL"])
|
30
|
+
PushRoutes.NODE_URL=ENV["NODE_URL"]
|
31
|
+
end
|
32
|
+
|
33
|
+
Rails.application.reload_routes!
|
34
|
+
PushRoutes::Engine.load_controllers
|
35
|
+
ActionDispatch::Reloader.to_prepare do
|
36
|
+
#Note: may need to reload routes too? only if the routes changed
|
37
|
+
# should never happen in production
|
38
|
+
PushRoutes::Engine.load_controllers
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module PushRoutes
|
2
|
+
module Helpers
|
3
|
+
def push_routes_init debug_string = ""
|
4
|
+
out = ""
|
5
|
+
out += javascript_include_tag 'socket.io'
|
6
|
+
out += javascript_include_tag 'push_routes_socket_io'
|
7
|
+
out += javascript_tag "PushRoutes.connect({server: \"#{PushRoutes.NODE_URL}\", id: #{current_user.id}, authentication_token: \"#{current_user.authentication_token}\"}, function() {
|
8
|
+
PushRoutes.set_debug_string(\"#{debug_string}\");
|
9
|
+
});"
|
10
|
+
return out.html_safe
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,195 @@
|
|
1
|
+
#TODO: Cacheing can work because controllers return the renderd values, just need to wrap/alias the controller actions
|
2
|
+
module PushRoute
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
#Computes the file path of inherited classes for use when auto-generating routes
|
6
|
+
included do
|
7
|
+
#class_attribute :controller_path
|
8
|
+
class_attribute :push_routes
|
9
|
+
class_attribute :trigger_symbols
|
10
|
+
self.trigger_symbols = []
|
11
|
+
self.push_routes = {}
|
12
|
+
|
13
|
+
#Computed this way when mixed in to the controller base class
|
14
|
+
def self.inherited(subclass)
|
15
|
+
subclass.push_routes = {}
|
16
|
+
subclass.trigger_symbols = []
|
17
|
+
# controller_matches = caller[0].match(/^.*?\/app\/controllers\/(.*?)_controller.rb:/)
|
18
|
+
# if controller_matches
|
19
|
+
# # subclass.controller_path = controller_matches[1]
|
20
|
+
# else
|
21
|
+
# # Happens with rspec test cases
|
22
|
+
# # this might not be the best thing to do with this case
|
23
|
+
# puts "Warning: No standard controller path found for #{subclass.inspect}"
|
24
|
+
# end
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
#Do it this way when used as a mixin for controllers
|
29
|
+
#Seems like the controller file is the third method in the call stack. May change in later rails versions
|
30
|
+
#self.controller_path = caller[2].match(/^.*?\/app\/controllers\/(.*?)_controller.rb:/)[1]
|
31
|
+
end
|
32
|
+
|
33
|
+
module ClassMethods
|
34
|
+
|
35
|
+
#TODO: if not route already make, make it; set association between route(s) and action
|
36
|
+
# test method aliasing, perhaps can still do caching explicitly, or maybe just
|
37
|
+
# expiring caches properly; ignore caches for now
|
38
|
+
#
|
39
|
+
# maybe just internal whisper pub sub with a routing adapter
|
40
|
+
# also pull out seperate class for each push route to store routes and triggers
|
41
|
+
# Maybe rails magic on for trigger function names
|
42
|
+
def enable_push_route(action, route = nil)
|
43
|
+
matched_url = nil
|
44
|
+
Rails.application.routes.routes.each do |e|
|
45
|
+
if e.defaults[:controller] == self.controller_path && e.defaults[:action] == action.to_s
|
46
|
+
unless matched_url
|
47
|
+
matched_url = PushRoutes::PushRouteUrl.new(e)
|
48
|
+
else
|
49
|
+
raise ArgumentError.new("Duplicate route for push route controller")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
#If a route exists and one is provided, make sure they are compatable
|
55
|
+
if matched_url and route
|
56
|
+
raise ArgumentError.new("Provided route does not match pre-existing route") unless (matched_url.matches(route))
|
57
|
+
url = matched_url
|
58
|
+
elsif route and !matched_url
|
59
|
+
#There was no pre-existing route found and a route was specified
|
60
|
+
# Add this route to the list of live routes
|
61
|
+
url = PushRoutes::PushRouteUrl.new(route)
|
62
|
+
elsif !route and matched_url
|
63
|
+
#Matched one route only, we're good
|
64
|
+
url = matched_url
|
65
|
+
else
|
66
|
+
#No route and no match
|
67
|
+
raise ArgumentError.new("No route found and no route provided")
|
68
|
+
end
|
69
|
+
|
70
|
+
if push_routes[action]
|
71
|
+
raise ArgumentError.new("Push Route enabled twice")
|
72
|
+
else
|
73
|
+
push_routes[action] = url
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
# If it's defined as an instance method and not a static method we'll define a static method which wraps the functinality
|
79
|
+
# While this seems crazy, ActionMailer does this so there's precident
|
80
|
+
def method_missing(method_sym, *arguments, &block)
|
81
|
+
if instance_trigger?(method_sym)
|
82
|
+
new.send(method_sym, *arguments, &block)
|
83
|
+
else
|
84
|
+
super
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
#Overriding respond_to_missing to allow our method_missing override to behave properly
|
89
|
+
def respond_to_missing?(method_sym, include_private = false)
|
90
|
+
instance_trigger?(method_sym) || super
|
91
|
+
end
|
92
|
+
|
93
|
+
def instance_trigger?(method_sym)
|
94
|
+
trigger_symbols.include?(method_sym) && instance_methods.include?(method_sym)
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# Sets a trigger for pushing updates
|
99
|
+
# @param [symbol] the action in this controller for the listener to trigger
|
100
|
+
# @param model [ModelType] The type of model to listen to e.g. User, LabOrder
|
101
|
+
# @param type [Symbol] Listener type, e.g. :after_update, see below for list
|
102
|
+
# @param trigger_function [function] Function to determine if an update should be triggered, either proc or reference
|
103
|
+
# function should return true to trigger update of the route; if the route requires params to resolve (i.e /users/:id/files)
|
104
|
+
# the params should be returned as a hash. Return false or nil to not trigger an update
|
105
|
+
#
|
106
|
+
def add_trigger(action, model, type, trigger_function = nil)
|
107
|
+
enable_push_route action unless push_routes[action]
|
108
|
+
|
109
|
+
# Get get the callback passed in
|
110
|
+
if (!trigger_function and block_given?)
|
111
|
+
# Block only
|
112
|
+
# Note Proc.new gets the passed in block without instantiating an extra proc
|
113
|
+
# See http://mudge.name/2011/01/26/passing-blocks-in-ruby-without-block.html
|
114
|
+
callback = Proc.new
|
115
|
+
elsif trigger_function && trigger_function.is_a?(Proc)
|
116
|
+
# Proc passed
|
117
|
+
callback = trigger_function
|
118
|
+
elsif trigger_function #&& !trigger_function.is_a?(Proc) implied here
|
119
|
+
# Symbol passed
|
120
|
+
trigger_symbols << trigger_function
|
121
|
+
callback = lambda { |e| self.send(trigger_function, e) }
|
122
|
+
else
|
123
|
+
#default value
|
124
|
+
callback = Proc.new { true }
|
125
|
+
end
|
126
|
+
|
127
|
+
if [:after_commit, :after_save, :after_update, :after_create, :after_destroy].include? type
|
128
|
+
this = self
|
129
|
+
func = lambda do |e|
|
130
|
+
result = callback.call(e)
|
131
|
+
if (result)
|
132
|
+
result = [result] unless result.kind_of?(Array)
|
133
|
+
result.each do |params|
|
134
|
+
update_path = this.push_routes[action].notification_string(params)
|
135
|
+
msg = {channel: update_path, type: "", data: "placeholder"}
|
136
|
+
begin
|
137
|
+
#TODO: Abstract away redis server as a transport
|
138
|
+
#This try catch repetition is bad
|
139
|
+
PushRoutes.redis.publish 'rt-change', msg.to_json
|
140
|
+
rescue Redis::CannotConnectError => e
|
141
|
+
warn "PushRoutes cannot reach the redis server"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
model.send(type, func)
|
147
|
+
else
|
148
|
+
raise ArgumentError.new("Invalid trigger type")
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
#TODO: check for full class depth or shallow depth i.e. Api2::VitalsController
|
153
|
+
def model
|
154
|
+
#Note: const_defined is unrelialbe due to rails auto_loading, model might not be loaded
|
155
|
+
begin
|
156
|
+
Object.const_get(controller_path.classify)
|
157
|
+
rescue
|
158
|
+
nil
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def add_id_trigger(action, model, id_name, type = :after_save)
|
163
|
+
add_trigger(action, model, type) { |object| {id: object.send(id_name)} }
|
164
|
+
end
|
165
|
+
|
166
|
+
#If you have a route like /room/:id/messages where Message belongs_to room
|
167
|
+
#you can use add_belongs_to_trigger :index, Message
|
168
|
+
#It will look at the url and try to add a trigger
|
169
|
+
#on Message save triggering the id as Message.room.id
|
170
|
+
def add_belongs_to_trigger(action, model, type = :after_save)
|
171
|
+
enable_push_route action unless push_routes[action]
|
172
|
+
url = push_routes[action]
|
173
|
+
warn "Push Routes WARNING: Url #{url.inspect} contains too many params" if url.param_associations.count > 1
|
174
|
+
warn "Push Routes WARNING: Url #{url.inspect} contains not enough notated params" if url.param_associations.count > 1
|
175
|
+
sym = url.param_associations.first[1].singularize.to_sym
|
176
|
+
if model.table_exists?
|
177
|
+
if model&.send(:new)&.respond_to?(sym)
|
178
|
+
add_trigger(action, model, type) { |object| {id: object.send(sym)&.id} }
|
179
|
+
else
|
180
|
+
warn "Push Routes WARNING: #{model} does not respond to #{sym} in belongs_to trigger"
|
181
|
+
end
|
182
|
+
else
|
183
|
+
warn("Push Routes WARNING: no table exists for #{model}")
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def add_show_trigger(action)
|
188
|
+
if self.model
|
189
|
+
add_id_trigger(action, self.model, :id)
|
190
|
+
else
|
191
|
+
warn "Push Routes WARNING: No model found for #{controller_path}"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module PushRoutes
|
2
|
+
class PushRouteUrl
|
3
|
+
attr_accessor :source
|
4
|
+
#
|
5
|
+
# if this push_route_url is a new route that needs to be registered
|
6
|
+
# can be determined by if the input passed in was a string or not
|
7
|
+
#
|
8
|
+
attr_accessor :isNew
|
9
|
+
|
10
|
+
def initialize(input)
|
11
|
+
if (input.is_a?(ActionDispatch::Journey::Route))
|
12
|
+
#Remove traiing format string
|
13
|
+
@source = input.path.spec.to_s.gsub(/\(\.\:format\)\Z/, "")
|
14
|
+
@isNew = false
|
15
|
+
elsif input.is_a? String
|
16
|
+
@source = input
|
17
|
+
@isNew = true
|
18
|
+
else
|
19
|
+
raise ArgumentError.new("Unexpected input: #{input}")
|
20
|
+
end
|
21
|
+
#Parses out the required parameters for the route as a list of symbols
|
22
|
+
@url_args = @source.scan(/\/\:([^\/]+)/).flatten.map { |e| e.to_sym }
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
#
|
27
|
+
# Returns a true url from the original route with parameters filled in
|
28
|
+
# If the route has no parameters this function simply returns the route, ignoring input
|
29
|
+
# If the parameters are insufficient an ArgumentError is raised
|
30
|
+
#
|
31
|
+
# @param params [Hash] params
|
32
|
+
#
|
33
|
+
# @return [String] completed url
|
34
|
+
def notification_string(params)
|
35
|
+
if @url_args.count == 0
|
36
|
+
@source
|
37
|
+
else
|
38
|
+
unless (params.is_a?(Hash))
|
39
|
+
raise ArgumentError.new("Params for #{@source} must be a hash with: #{@url_args}")
|
40
|
+
end
|
41
|
+
built_string = @source
|
42
|
+
@url_args.each do |e|
|
43
|
+
if (params.include?(e))
|
44
|
+
built_string = built_string.gsub(Regexp.new("\\:#{e}"), params[e].to_s)
|
45
|
+
else
|
46
|
+
raise ArgumentError.new("Missing param #{e}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
built_string
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
@source
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# returns true of url is a valid expression of the route represented
|
59
|
+
# @param url [string] url to check
|
60
|
+
#
|
61
|
+
# @return [bool] true if url matches this route
|
62
|
+
# TODO: testing on this function
|
63
|
+
def matches(url)
|
64
|
+
str = @source.gsub(/(?!\/)\:.*?(?=\/|$)/, "([^\/]+?)")
|
65
|
+
str = "^" + str + "$"
|
66
|
+
Regexp.new(str).match(url)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Gets the parameter associations from a url if they are well formed, meaning, each
|
70
|
+
# parameter is preceded by another token
|
71
|
+
# @return [Hash] parameter_symbol => preceding symbol
|
72
|
+
def param_associations
|
73
|
+
@source.scan(/\/([^\/]*?)\/\:([^\/]+)/).map {|k,v| [v.to_sym,k]}.to_h
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/push_routes.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'push_routes/engine'
|
2
|
+
require 'push_routes/push_route_url'
|
3
|
+
require 'push_routes/push_route'
|
4
|
+
require 'push_routes/helpers'
|
5
|
+
require 'redis'
|
6
|
+
|
7
|
+
#Note: Could consider switching listeners to the 'whisper' pub-sub gem later, instead of attaching directly
|
8
|
+
# After looking at the gem it would be essentially the same for this project in it's current state
|
9
|
+
# however if we ever need to have another layer of listener events or have callbacks happen
|
10
|
+
# asynchronously, it's something we could try
|
11
|
+
|
12
|
+
#TODO: setup the add_trigger method to take a block and do the rails magic which will take functions defined with regular names and attach them
|
13
|
+
# That rails magic might not be possible...
|
14
|
+
module PushRoutes
|
15
|
+
class << self
|
16
|
+
attr_accessor :NODE_URL
|
17
|
+
end
|
18
|
+
@@redis = nil
|
19
|
+
@@controllers = Set.new
|
20
|
+
|
21
|
+
def self.newGetRoutes
|
22
|
+
hash = {}
|
23
|
+
PushRoutes.controllers.each do |c|
|
24
|
+
c.push_routes.each do |k,v|
|
25
|
+
hash[v.source] = c.controller_path+"#"+k.to_s if v.isNew
|
26
|
+
end
|
27
|
+
end
|
28
|
+
return hash
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.REDIS_URL
|
32
|
+
@@redis.client.options[:url] if @@redis
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.REDIS_URL= (x)
|
36
|
+
begin
|
37
|
+
@@redis = Redis.new(:url => x);
|
38
|
+
rescue
|
39
|
+
warn "Failed to connect to redis server. Push Routes will not work"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.redis
|
44
|
+
@@redis
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.class_prefixes(string)
|
48
|
+
res = []
|
49
|
+
pos = 0
|
50
|
+
while(string.index("::",pos))
|
51
|
+
pos = string.index("::",pos)
|
52
|
+
res << string[0..pos-1]
|
53
|
+
pos += 2
|
54
|
+
end
|
55
|
+
res << string[0..-1]
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.controllers
|
59
|
+
Dir[Rails.root.join('app','controllers','**','*.rb')].map do |file|
|
60
|
+
#Note: This may break if the directory structure has /app/controllers multiple times.
|
61
|
+
#We want to match everything after the first app/controllers after the project root
|
62
|
+
Object.const_get(/^.*?\/app\/controllers\/(.*?).rb$/.match(file)[1].camelize)
|
63
|
+
end
|
64
|
+
# Dir[Rails.root.join('app','controllers','**','*.rb')].each do |file|
|
65
|
+
# #Note: This may break if the directory structure has /app/controllers multiple times.
|
66
|
+
# #We want to match everything after the first app/controllers after the project root
|
67
|
+
|
68
|
+
# controller_name = /^.*?\/app\/controllers\/(.*?).rb$/.match(file)[1].camelize
|
69
|
+
# class_prefixes(controller_name)[0..-2].each do |name|
|
70
|
+
# Object.const_get(name)
|
71
|
+
# end
|
72
|
+
# end
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
def self.active_routes
|
78
|
+
PushRoutes.controllers.flat_map {|c| c.push_routes.map {|k,v| v.source}}
|
79
|
+
end
|
80
|
+
|
81
|
+
class ActionController::Base
|
82
|
+
include PushRoute
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
== README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
25
|
+
|
26
|
+
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
28
|
+
<tt>rake doc:app</tt>.
|
data/test/dummy/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any styles
|
10
|
+
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
|
+
* file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class ClubsController < ApplicationController
|
2
|
+
def list
|
3
|
+
render json: Club.find(params[:id]).people , status: 200
|
4
|
+
end
|
5
|
+
add_id_trigger :list, Person, :club_id
|
6
|
+
|
7
|
+
def people
|
8
|
+
render json: Club.find(params[:id]).people , status: 200
|
9
|
+
end
|
10
|
+
add_belongs_to_trigger :people, Person
|
11
|
+
|
12
|
+
def show
|
13
|
+
render json: Club.find(params[:id]) , status: 200
|
14
|
+
end
|
15
|
+
add_show_trigger :show
|
16
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class PeopleController < ApplicationController
|
2
|
+
enable_push_route :index
|
3
|
+
def index
|
4
|
+
render json: Person.all, status: 200
|
5
|
+
end
|
6
|
+
add_trigger :index, Person, :after_save
|
7
|
+
|
8
|
+
enable_push_route :old, "/old_people"
|
9
|
+
def old
|
10
|
+
render json: Person.where("age > 50"), status: 200
|
11
|
+
end
|
12
|
+
add_trigger(:old, Person, :after_update) do |person|
|
13
|
+
(person.age_was <= 50 and person.age > 50) or (person.age_was > 50 and person.age <= 50)
|
14
|
+
end
|
15
|
+
|
16
|
+
enable_push_route :old_function, "/old_function"
|
17
|
+
def old_function
|
18
|
+
render json: Person.where("age > 80"), status: 200
|
19
|
+
end
|
20
|
+
|
21
|
+
add_trigger :old_function, Person, :after_update, :old_function_trigger
|
22
|
+
def old_function_trigger(person)
|
23
|
+
(person.age_was <= 80 and person.age > 80) or (person.age_was > 80 and person.age <= 80)
|
24
|
+
end
|
25
|
+
|
26
|
+
enable_push_route :with_age
|
27
|
+
def with_age
|
28
|
+
render json: Person.where(age: params[:age]), status: 200
|
29
|
+
end
|
30
|
+
add_trigger(:with_age, Person, :after_create) do |person|
|
31
|
+
{age: person.age}
|
32
|
+
end
|
33
|
+
add_trigger(:with_age, Person, :after_update) do |person|
|
34
|
+
if(person.age_was != person.age)
|
35
|
+
[{age: person.age_was}, {age: person.age}]
|
36
|
+
else
|
37
|
+
false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class PushRoutes::NestedController < ApplicationController
|
2
|
+
enable_push_route :nested_function
|
3
|
+
def nested_function
|
4
|
+
render json: Person.find(params[:id]), status: 200
|
5
|
+
end
|
6
|
+
add_trigger :nested_function, Person, :after_save, :nested_function_trigger
|
7
|
+
def nested_function_trigger(person)
|
8
|
+
return {:id => person.id}
|
9
|
+
end
|
10
|
+
|
11
|
+
enable_push_route :added_function, "/new_route"
|
12
|
+
def added_function
|
13
|
+
render json: Person.find(params[:id]), status: 200
|
14
|
+
end
|
15
|
+
end
|