push_routes 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|