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.
Files changed (417) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +37 -0
  3. data/app/helpers/push_routes/application_helper.rb +4 -0
  4. data/config/routes.rb +5 -0
  5. data/lib/push_routes/engine.rb +42 -0
  6. data/lib/push_routes/helpers.rb +13 -0
  7. data/lib/push_routes/push_route.rb +195 -0
  8. data/lib/push_routes/push_route_url.rb +76 -0
  9. data/lib/push_routes/version.rb +3 -0
  10. data/lib/push_routes.rb +84 -0
  11. data/lib/tasks/push_routes_tasks.rake +4 -0
  12. data/test/dummy/README.rdoc +28 -0
  13. data/test/dummy/Rakefile +6 -0
  14. data/test/dummy/app/assets/javascripts/application.js +13 -0
  15. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  16. data/test/dummy/app/controllers/application_controller.rb +5 -0
  17. data/test/dummy/app/controllers/clubs_controller.rb +16 -0
  18. data/test/dummy/app/controllers/people_controller.rb +40 -0
  19. data/test/dummy/app/controllers/push_routes/clubs_controller.rb +6 -0
  20. data/test/dummy/app/controllers/push_routes/nested_controller.rb +15 -0
  21. data/test/dummy/app/controllers/reload_test_models_controller.rb +7 -0
  22. data/test/dummy/app/controllers/sockets_controller.rb +5 -0
  23. data/test/dummy/app/helpers/application_helper.rb +2 -0
  24. data/test/dummy/app/models/club.rb +3 -0
  25. data/test/dummy/app/models/person.rb +3 -0
  26. data/test/dummy/app/models/reload_test_model.rb +2 -0
  27. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  28. data/test/dummy/app/views/sockets/test.html.erb +31 -0
  29. data/test/dummy/bin/bundle +3 -0
  30. data/test/dummy/bin/rails +4 -0
  31. data/test/dummy/bin/rake +4 -0
  32. data/test/dummy/bin/setup +29 -0
  33. data/test/dummy/config/application.rb +25 -0
  34. data/test/dummy/config/boot.rb +5 -0
  35. data/test/dummy/config/database.yml +25 -0
  36. data/test/dummy/config/environment.rb +5 -0
  37. data/test/dummy/config/environments/development.rb +41 -0
  38. data/test/dummy/config/environments/production.rb +79 -0
  39. data/test/dummy/config/environments/test.rb +42 -0
  40. data/test/dummy/config/initializers/assets.rb +11 -0
  41. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  42. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  43. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  44. data/test/dummy/config/initializers/inflections.rb +16 -0
  45. data/test/dummy/config/initializers/mime_types.rb +4 -0
  46. data/test/dummy/config/initializers/push_routes.rb +2 -0
  47. data/test/dummy/config/initializers/session_store.rb +3 -0
  48. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  49. data/test/dummy/config/locales/en.yml +23 -0
  50. data/test/dummy/config/routes.rb +12 -0
  51. data/test/dummy/config/secrets.yml +22 -0
  52. data/test/dummy/config.ru +4 -0
  53. data/test/dummy/db/development.sqlite3 +0 -0
  54. data/test/dummy/db/migrate/20160402002530_create_people.rb +9 -0
  55. data/test/dummy/db/migrate/20160504183412_create_reload_test_models.rb +7 -0
  56. data/test/dummy/db/migrate/20160513005720_create_clubs.rb +9 -0
  57. data/test/dummy/db/schema.rb +34 -0
  58. data/test/dummy/db/test.sqlite3 +0 -0
  59. data/test/dummy/log/development.log +6773 -0
  60. data/test/dummy/log/test.log +33953 -0
  61. data/test/dummy/public/404.html +67 -0
  62. data/test/dummy/public/422.html +67 -0
  63. data/test/dummy/public/500.html +66 -0
  64. data/test/dummy/public/favicon.ico +0 -0
  65. data/test/dummy/test/fixtures/clubs.yml +7 -0
  66. data/test/dummy/test/fixtures/people.yml +2 -0
  67. data/test/dummy/test/test_controller.rb +2 -0
  68. data/test/dummy/tmp/cache/assets/sprockets/v3.0/--ZWYz07A52YngRjvhUhrESg1-dCzYAOO58WQTRiPLQ.cache +0 -0
  69. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-PW_EqGj-6lX6VVXnnE5vl9QhIeSCVbrcPbFstIFjdY.cache +1 -0
  70. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-U7PnTMK2SLCNYqxuWg83ro2I7B_WLYK8BbQDAA7d3k.cache +0 -0
  71. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-Vz23VmKQjOtbCGZ1oVQW-JvNvNsYjWtl7rwUZQla40.cache +1 -0
  72. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-bsno3PsL8EjVSn1AQXh0iRKgPzRAHYynHRlQf8fpOc.cache +0 -0
  73. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-iRudPteSy4NccIeaxRbxBwQ1GYN6MbWaw2DuAIDtyA.cache +1 -0
  74. data/test/dummy/tmp/cache/assets/sprockets/v3.0/07M7KmVf2WC0NpvUZN2DgZLrlDDe16hjbEuwnqkxyJc.cache +0 -0
  75. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0FujpXjeO5gqyOq-kJtB0LMrMS4EEsRDnA6GQFtERiY.cache +1 -0
  76. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0YhhkNvDq_z3r1_EOCluZuAb1-zO1JxE95NH_ySN5b0.cache +1 -0
  77. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0az_zDE-1paVI4SYGjB4M1BGGg2xzPWQdo9l10G4rt0.cache +0 -0
  78. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0p9AjB58Z9YDv8Fh9rDpKgKh_m7B-jAekL5Q3KvTt6g.cache +0 -0
  79. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0rRAgxvkPzHo6J3j_N73LDBL1ORtdbNhCHeO2dx1HLE.cache +2 -0
  80. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0xpTJ5N4wj8L2aM2hu0FnJQmoMq8r60hl-KN4ISnw28.cache +0 -0
  81. data/test/dummy/tmp/cache/assets/sprockets/v3.0/14eCPaxGuS6nHQvETLa7AD1Ch8Ws9spMSm49BGjbrN4.cache +0 -0
  82. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1fFJ3Ou9Tu4CCsZJJVSskj3rmuLLkDoR9xEnMueTXpE.cache +0 -0
  83. data/test/dummy/tmp/cache/assets/sprockets/v3.0/2lHNuUCxU3QSUNG3NWrrQOgjBL2OyZMMDSQegUa0zfc.cache +1 -0
  84. data/test/dummy/tmp/cache/assets/sprockets/v3.0/2tuEeicQAIjwZdSpvTJYh34nL0VsEMe1fGbvXW8gqO0.cache +1 -0
  85. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3cjRg6vyolRqymzH2UnHvlPQsimxcTL5A5fQr_s8pUE.cache +0 -0
  86. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3dzv0FNMPjRltPZSdhWxVw5eHDDoDK29oC9ngpdKb3I.cache +0 -0
  87. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3oxe_NGdmT7fBu45V--tJdiTdoyN9Ph_yUInpt4PomQ.cache +1 -0
  88. data/test/dummy/tmp/cache/assets/sprockets/v3.0/41zJ55HFFLiaPXiKVkZ-KMBNv2yuwbQH_pWZ72539qg.cache +0 -0
  89. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4IKDDNLPS790nV3I3Hq5q8k50ABf0QQwBkijBkE3oiU.cache +2 -0
  90. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4KKrlcR1Z7kTO90TLwL2jRWDDJo8OKYAIwqftV8Jt0M.cache +0 -0
  91. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4NIdchJry9NvpQJkON-iM4lzQHjCsNyi9py72GZew78.cache +2 -0
  92. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4Q7swEro3qz_jUYFASedqSIgDFicVmAlj8t0UCuJWSk.cache +1 -0
  93. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4TesoSCa3bULRn4Zy7KWMO6Yy8HzQFBtjaXF8MQpFnA.cache +2 -0
  94. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4svVzjQ4M9xi3FL_kz6UlKrme2kI4geGUnGylbDGXLk.cache +2 -0
  95. data/test/dummy/tmp/cache/assets/sprockets/v3.0/506zrXZtgB8X-5bk2jQvh3AJzLiu3DZZdl_QLkdIzNo.cache +3 -0
  96. data/test/dummy/tmp/cache/assets/sprockets/v3.0/52-UhtUloe-LW8iSQRhYPC2HAgxWZrYRpwCbCuq4Akw.cache +1 -0
  97. data/test/dummy/tmp/cache/assets/sprockets/v3.0/52XKV2Rk1MXEzB-iai8SaQalj2NK0x-WJoq95gDqPtQ.cache +1 -0
  98. data/test/dummy/tmp/cache/assets/sprockets/v3.0/577XIuvm7oUu5x36pEk5A7mvjxZGXXhAgMpg7xKNHHs.cache +1 -0
  99. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5G4p5nqRJbmMaM5KsL4eup83d3Ka0xIMn7CbTXnWKtU.cache +1 -0
  100. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +0 -0
  101. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5Quo30H-TKxHUO_JJo5d7Z-GONofPBF58j7RMMp0X54.cache +0 -0
  102. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5XpwHz3QVwwDJrhtFRRzqXzNGfyZDVFzFfrCLp8aEY4.cache +1 -0
  103. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5bFNWxuTz6wfz9bVFs7duT3hWxtI9YpSV0SXcZkbh8g.cache +0 -0
  104. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5jZwtDcHLebrPhfe_GOlIsTgSOJp7vGoWxfGF0fjcHM.cache +0 -0
  105. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5mAD_QSR36KS4Bp7K7wiOIfFlf4uB3NbZUE2KRBH1rY.cache +0 -0
  106. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6UwiJx-6TIHkGp-uYLRYiOtOel59i84NlGNK_YVr_XY.cache +0 -0
  107. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6VoPZk7pHd443fXs-VRDSt_KbrR8Oa_s_MjWS9QNWpw.cache +1 -0
  108. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6XOpj27Io1UG1teBwVF4QyY-3ERGNYaC_5TZQ9w0R6o.cache +1 -0
  109. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6_48w_qAZdk-os97ML_y95nmzRPGyXg6I_57VppGKRI.cache +2 -0
  110. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6ip1pA7fXhE5WJAsprdd3v6bcOAHhkkLESNTCcsCj4A.cache +3 -0
  111. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6sFWU_3KLx_FGlcPDW8q0DqWe_dEHwmGJFAkXzvXgWw.cache +1 -0
  112. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6zbU4lZ6H4FuD4wV084axR_rPbCuqpfwSMT8eRYlz34.cache +0 -0
  113. data/test/dummy/tmp/cache/assets/sprockets/v3.0/73UjEuejnBHHfDzBfAfeYMBAztEJxefCzT7iQv7SLhk.cache +1 -0
  114. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7Ac1pYV2wZ39EMiESma2NaEd3auk0soCL9ihw4zlhf4.cache +1 -0
  115. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7CoFOGEkLZ1V4rwsCR-6dNSz4YQtVwvNN20ZSry3z6Y.cache +0 -0
  116. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7SdVkWFDjVRQWM9Njawuyo9vZR1MS4dcnpxUIyb1X_0.cache +0 -0
  117. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7c7wvSmluzKCDkRlWnPz3hnm3EVgCe-fM5E2prOJ70U.cache +3 -0
  118. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7c_erSIkRUxcwHB8pkD69FTiEhizlfgS_rjO64KS6gk.cache +0 -0
  119. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7dYAWtsSTXxsq4neJ1ihVwIUAXmiaYloJOHdZ2Yyat4.cache +3 -0
  120. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7edc0zpTQc4BzOkvz1sZ4i4x5a6de187vj2X9iX-4gk.cache +1 -0
  121. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8A2SojMYAZAN_MHEMsST_xFak3ogNzQGtCsFQMGcmKQ.cache +1 -0
  122. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8EGmtWrEez70X7_wAqTavMFmIKkw_0ro55MloukhnPA.cache +1 -0
  123. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8ELs_Sdyox18x9CQjy_23Ut8izEnx0MX9T5VVyNHImA.cache +0 -0
  124. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8KEOOW8gdH6i3aWYBZJGyIpTcpXGN0TK1KOPi_I_A94.cache +0 -0
  125. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8RggqbR-fEtxOf_FQIIoBIpdnpKID2qQPzgs1q2RXVs.cache +1 -0
  126. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8ks-DnUrChVlffxgxWrQ3_TEROzM-zIB2PwNhpnY0W8.cache +0 -0
  127. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8r9UYP_8UJP09ZlytUBA7xftK_PcZqiYOgzy5OfxJp4.cache +1 -0
  128. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8tzswLgiRPAOlqeHXsJcZobJbp_EI2W4jkWS2ohZSOI.cache +1 -0
  129. data/test/dummy/tmp/cache/assets/sprockets/v3.0/97wSrrny0NGdtZl4jipg6Hkyhr-uq9NlufvOTIzF_qs.cache +1 -0
  130. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9IVsLVNmrV1lh1TDLseo1PuBGOcts5EwLWGUasKYqQs.cache +0 -0
  131. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9Ml1mUdgY35d91_I4oi3yngXXXPBLbjSZJDUCntTfkg.cache +0 -0
  132. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9TEluewRLiVECi1aeYQDIgIBRX4XV_W_qQyEHXlbF5U.cache +1 -0
  133. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9lqU_c_7Qf3rvAMdNhS9bzXDPqhzHO_FW2vaH3ZfZ6o.cache +3 -0
  134. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9mJTnS8N1NDJwqdpKMgitIuUHGaSGUnZvuVj42MEAfE.cache +1 -0
  135. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9oFQAXshTvJKhbAWFol-TfEDc9ae3OP2FnxGuVz4ZNU.cache +1 -0
  136. data/test/dummy/tmp/cache/assets/sprockets/v3.0/A2S-wqdDQV-amudd7EI_oSsG772CQxg26bKCAdioo1M.cache +1 -0
  137. data/test/dummy/tmp/cache/assets/sprockets/v3.0/AL_TMFm39MgDIUXsJCOeiRTXveIEn_B1nx116G94o-A.cache +1 -0
  138. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ARXymBBVkfJkFBX47yzHvJNnlgz948at_O6nbBpyWw0.cache +1 -0
  139. data/test/dummy/tmp/cache/assets/sprockets/v3.0/AizHvDjJDntPPkH3rF9hm4MgrUtq91IxihqY7WIQceA.cache +1 -0
  140. data/test/dummy/tmp/cache/assets/sprockets/v3.0/AssBLZ2aoqfXlm34jW7KrwCUfJeT1_BvLAP_INs3J7c.cache +1 -0
  141. data/test/dummy/tmp/cache/assets/sprockets/v3.0/B3Ak2OB7ZIa_SulVPZIQNf2Vm17-0enh13FqdzhSByY.cache +1 -0
  142. data/test/dummy/tmp/cache/assets/sprockets/v3.0/BHl7X5Vz7nkk-qoD11IMsGJ-09nGKlBOzbnYlLXBEy4.cache +1 -0
  143. data/test/dummy/tmp/cache/assets/sprockets/v3.0/BX3Q5-5HxFoVPtM8b0ENDDvEIoX3Jhq0IqEEPysU2f0.cache +1 -0
  144. data/test/dummy/tmp/cache/assets/sprockets/v3.0/C8K36nd9JueZUEmmXas517PENmoHIAKYNSvo4JVDcaQ.cache +1 -0
  145. data/test/dummy/tmp/cache/assets/sprockets/v3.0/CANt6goTEzW8ap3Y5sBnlOJns-0u1MtVVgaXlTJM2YY.cache +1 -0
  146. data/test/dummy/tmp/cache/assets/sprockets/v3.0/CVdzvqF1ZBWpR_0j0fI30CJunUbFr15jnLjteh8B2i0.cache +1 -0
  147. data/test/dummy/tmp/cache/assets/sprockets/v3.0/CWjE5Ll4t9IfLPwsRFJEi2ihXF3m4489GkIXEVuVn-0.cache +1 -0
  148. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Cai3JDNKg8aByr4hlwsGKajj1QNy7jLgTqz0p3rvH_Q.cache +3 -0
  149. data/test/dummy/tmp/cache/assets/sprockets/v3.0/D0u2TvlxYMIVx0Myqy4Cy9JtqeFPk2gUKyC-f8iDqK0.cache +1 -0
  150. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DBVoJ1s8c5PlUMxHnQa0Z_c9X0YNbqLFi38zZaBsOQE.cache +1 -0
  151. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DLqCGj69FpyjHFOqDGL30zDVKWzk94adp6CCYV436zs.cache +1 -0
  152. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +0 -0
  153. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DgGbu7yn8ARIK9j0ikUNx8_xAK24BpuTQw5i2rKa31k.cache +2 -0
  154. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DoZ9hT4-YToNutP919PD-eJ7l_aj-um7c2Z0eSlZN7U.cache +2 -0
  155. data/test/dummy/tmp/cache/assets/sprockets/v3.0/E68zF5vWC2DuLypqUXTXDDWJbzC5Urrh2XxDN5KKKK8.cache +0 -0
  156. data/test/dummy/tmp/cache/assets/sprockets/v3.0/EEpAMNHegM-XMUw11x_bVJMdhOyt_dSZzUuuCbV5wtM.cache +0 -0
  157. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ef3rtIcLz5I-zbQ_X_jjAkK65b_oeMZI2r1QDX6rfOs.cache +1 -0
  158. data/test/dummy/tmp/cache/assets/sprockets/v3.0/F-UY7eW5Y4SJaBJJns8jzsraKI2Lubu2MIWlALoq-yM.cache +0 -0
  159. data/test/dummy/tmp/cache/assets/sprockets/v3.0/FJixoOa0GJkH6Uy_aoJYXHfehhd6dGOt7w8-S5_5mgw.cache +0 -0
  160. data/test/dummy/tmp/cache/assets/sprockets/v3.0/FMbt-uXEi0fymD2HUTIkNseCqzGKV1nC6wQny44jBLY.cache +0 -0
  161. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fo2mB9mY_hVwkoDkFihgod6FfmaL9G0RXKVOFspuw3c.cache +1 -0
  162. data/test/dummy/tmp/cache/assets/sprockets/v3.0/G39Sv1kXdLXGAB4yP50CD5p2H7cZK-KmnQ13cj5msSw.cache +3 -0
  163. data/test/dummy/tmp/cache/assets/sprockets/v3.0/HCOE7BAcXGEfz9GcIe_HdFh-eg5KcamD4wNGAAfkNlQ.cache +1 -0
  164. data/test/dummy/tmp/cache/assets/sprockets/v3.0/HF_DwCX1ZCGR0s9-PshtfKuz4fbeXxUJgfy04ohZaMo.cache +1 -0
  165. data/test/dummy/tmp/cache/assets/sprockets/v3.0/HPY5PWaCP9BApLSikFfHxjghy2PDhuXFjHLMXGVnovA.cache +1 -0
  166. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Hhlhr-5E59Oww-DpCvjlean41rtY8NZA69E5xBGAznI.cache +0 -0
  167. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Hpm5KNXSK1ndOSpQtPgnGDGEG3Af_4aC_EwUlID6Vw4.cache +1 -0
  168. data/test/dummy/tmp/cache/assets/sprockets/v3.0/I0595piIa2kZ7BF_8WxhX6g2zYA9pZvVT8y9J2dDrjA.cache +0 -0
  169. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IDvz119bETcOMa_Q1V5jHL_XeYAf7kyns1AnSGPzNZM.cache +1 -0
  170. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IQa0nKiiIrEjfXsQiukXO9t7gvRL4ACkbQGuqTShkB8.cache +0 -0
  171. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IegRHVN6tmZNB7s5wkSXMLKlAD2owi1aKUI2L32H3Rs.cache +0 -0
  172. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ImVVic5s-z0ug3skqE2PgJqVLTmHtap2awbwNqflt9g.cache +1 -0
  173. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IqCDZkm-PVH74ZN-ZkTeWGyhgHtpxFOSNWnUdZ8Wj2E.cache +1 -0
  174. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IwyxqQ-y9FD0P-NI0JrOJXxZNUc4F8dlED465TrmPDA.cache +1 -0
  175. data/test/dummy/tmp/cache/assets/sprockets/v3.0/JGV1yX8-fpVxlcohntl3KH6iFy5ej3qeDuzVUfyH09Q.cache +0 -0
  176. data/test/dummy/tmp/cache/assets/sprockets/v3.0/JOt5b6DGOHhx7-hHBmcgBqy27hvlALcJn7s-396pSMg.cache +1 -0
  177. data/test/dummy/tmp/cache/assets/sprockets/v3.0/JhcMnw6CWgn0ZZqkgbVkROirX9sRWtCDsg24KTnvQzg.cache +1 -0
  178. data/test/dummy/tmp/cache/assets/sprockets/v3.0/KFMHjdL5qDZ7BlWxKKqMz9P7tE608MHLw2LZXqgGK0I.cache +0 -0
  179. data/test/dummy/tmp/cache/assets/sprockets/v3.0/KOffGeLOfGp-qnlcNRHh6Sniwcmncq2NETO5PUzTOCY.cache +1 -0
  180. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Kr-P3SDtjKWPJU7muAZkSpL6pbP9tweOgjttgaSvxic.cache +0 -0
  181. data/test/dummy/tmp/cache/assets/sprockets/v3.0/KvesZdZ2YE6x3kV3U3sR-iisKvdE5ixjyamUpUtZWHw.cache +0 -0
  182. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LBONmlvnByIcpB3Zp749VqaVGPvc6IdCdVenm-PXeN0.cache +1 -0
  183. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LBxSZZEjzr6A3TA2PB9Iemw2tn4dMY4Xg-QjilF95YI.cache +0 -0
  184. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LDOhCbPotRxcqwucEKwoTT-AErExQpl3jpMJ_lftJ6M.cache +0 -0
  185. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LN6DDLN0s2d_QxzTr18gLvolmjsQPR9KWH7FnFpDg9o.cache +3 -0
  186. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LNaHEasH_wnVXq_TvIH-KbcvihTxHBGfXp5jWmg3r74.cache +1 -0
  187. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LV6pY-dywJL4rd8rR2enBxz-n__hGTptVkwn4Eb1MMI.cache +1 -0
  188. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LbRxf-RNJEqikA17bAaP9CUcAwNHL-fQmoiKSInSNrc.cache +0 -0
  189. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ls3pXM6_E6TZmp93aVVwJdV5uzjxhyNupImMszn8ndw.cache +0 -0
  190. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LzwGmzGVIVjFyr6j3K6OMiZTX6vsaHelHM0psko57xs.cache +3 -0
  191. data/test/dummy/tmp/cache/assets/sprockets/v3.0/M6h8MHkXqPjt1U-S7O2nlzK4PBa94H3-nQZvqQXCdZw.cache +0 -0
  192. data/test/dummy/tmp/cache/assets/sprockets/v3.0/MOkWhVoIye5uA2WlnIO5vQmlQBN2AlIJiwD22fKrHGY.cache +0 -0
  193. data/test/dummy/tmp/cache/assets/sprockets/v3.0/MkWCoJ_Yc7FIcJIKHkaGKJooOC_jI9BWC9-CGpgG25Q.cache +1 -0
  194. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Mp7PW-GvAe-P-FS5u6fMvcTpnoZDyPqJZhAyIoLdBqg.cache +1 -0
  195. data/test/dummy/tmp/cache/assets/sprockets/v3.0/MtA1Qi_sJiPPw3kjHTHKyRNRYWiSSX6Q6dskNUq2BLs.cache +0 -0
  196. data/test/dummy/tmp/cache/assets/sprockets/v3.0/N03C1yOeDWUbJv6m--EgQ3HX6rvk5TB5IsZDoQol3Uk.cache +0 -0
  197. data/test/dummy/tmp/cache/assets/sprockets/v3.0/N31dlOdqVCmnfFs0CFYdY3GY-XBXH3aqnXxIJ6oUQOM.cache +0 -0
  198. data/test/dummy/tmp/cache/assets/sprockets/v3.0/N6qfafKwSyfCL3KUlBy05KcsNOvhyYcXqeWFYBsAmNk.cache +1 -0
  199. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NJdsGWVa86jH3bIR-60AT_wOA4sS72v0BMVTKG2kKIg.cache +1 -0
  200. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NKzp5tHdzyTdo4DLRshVSMTjkHub0YpYRGQDu1-aw60.cache +1 -0
  201. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NLspqKUPe4g6Q4WEvWHMjSTqkF8YS4m2vcBhHBuhVqc.cache +0 -0
  202. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NQdxTyYwXoIegQzGMBx0aPr3yrC70eMbzmk4LE7S1cQ.cache +0 -0
  203. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Nh-7NPWIhBfMDx0vPFCO9ikYfOON2hq2yFfONiOJYnU.cache +0 -0
  204. data/test/dummy/tmp/cache/assets/sprockets/v3.0/O77pb7jj-k_3zQC5fyMHRgREX6JPQr9rz4f33KJUFJk.cache +2 -0
  205. data/test/dummy/tmp/cache/assets/sprockets/v3.0/OHKX8ru80M2SmEsQLykXN2Bm6w-j-Qf1Vp20_MBkFlw.cache +0 -0
  206. data/test/dummy/tmp/cache/assets/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +0 -0
  207. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Oe8G6NRir267suPz3MYKCHO8k1I_L_EdvG_fFnQPCrY.cache +0 -0
  208. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Or4M1J2_rZytLg63QojbiBKifTEOJzUfio7zN5Y2NFk.cache +0 -0
  209. data/test/dummy/tmp/cache/assets/sprockets/v3.0/OsAeTwywQZABNuKlJ6szwY3DIey6njZBzS_1s4aOjPs.cache +0 -0
  210. data/test/dummy/tmp/cache/assets/sprockets/v3.0/OxAOjFPTKF9vM4EPQvYqmTbgppG7BkKubQvYFy0ZhnY.cache +2 -0
  211. data/test/dummy/tmp/cache/assets/sprockets/v3.0/P8_WyqVCwY11yXGIyKqVxwE-7Bm7z6BHV0K4hwSVKLs.cache +1 -0
  212. data/test/dummy/tmp/cache/assets/sprockets/v3.0/PBXox2R4C1BJ4q2CJy9G-GHvS0yK_DfvZCIU1rcbQdU.cache +0 -0
  213. data/test/dummy/tmp/cache/assets/sprockets/v3.0/PT8IlTD4zZn06Qy2xcgZHx-CCCulYiWvmCAKGS4DBQ8.cache +1 -0
  214. data/test/dummy/tmp/cache/assets/sprockets/v3.0/PYSWjWU6MVBQXN0UiypCIi4mF9X3YwDIjSH4Y-sxxek.cache +1 -0
  215. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Q3U1YY-CxPJT0W1U5gxDWmbvUcEPaGzLX4_ycAIqG0Q.cache +3 -0
  216. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Q9zgcQ2NvLjKYZ0vnJAkKdfKQNeMI7KHsHAaH6y36SE.cache +2 -0
  217. data/test/dummy/tmp/cache/assets/sprockets/v3.0/QSxZBfIq9gA7HwU1t7xTQA-rUdDgkZZoDwBo9ZYNr7o.cache +0 -0
  218. data/test/dummy/tmp/cache/assets/sprockets/v3.0/QfujprXdJ5sOEz6Sjbbd9iWS00hNe1yJWfCTzBzqNdg.cache +1 -0
  219. data/test/dummy/tmp/cache/assets/sprockets/v3.0/QrvJtbvY5J9rSQMkxCodRTYWlliFmjyVQRoFn6Lop7M.cache +1 -0
  220. data/test/dummy/tmp/cache/assets/sprockets/v3.0/R0jWkA7KDyROnIustxheOVy2PRHUaBtl7c1Eusdr7Bk.cache +0 -0
  221. data/test/dummy/tmp/cache/assets/sprockets/v3.0/R5jbKnLJbKbmJDaowo6rS1XzaHVRKHggdirj6B-xniI.cache +1 -0
  222. data/test/dummy/tmp/cache/assets/sprockets/v3.0/RSxAaMP82-ZTl5OBiymhFLzamH69GCG-6qpztFD_FKI.cache +1 -0
  223. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Rb88gczJdsKpmTLc5_wg_Dc15GlZcKf4MMhS37KvI9k.cache +0 -0
  224. data/test/dummy/tmp/cache/assets/sprockets/v3.0/SVowllwbdnuXcjrWu_DVAdCPo1VCE56rjnchnFspNvo.cache +0 -0
  225. data/test/dummy/tmp/cache/assets/sprockets/v3.0/SbEY6BLgeu8gBbToLaIiNV20cWAWsj1tMRQw3G-H0_I.cache +1 -0
  226. data/test/dummy/tmp/cache/assets/sprockets/v3.0/SdDxS1ynNc96LSi_lueIfNelBynvP_BMkLoVkza6-ac.cache +0 -0
  227. data/test/dummy/tmp/cache/assets/sprockets/v3.0/SyHupyOb1VfGxooz9oodSduJrLFtX0zPmzsZUEfEfVI.cache +1 -0
  228. data/test/dummy/tmp/cache/assets/sprockets/v3.0/SzzhLIQfspH-u8gom_1h1o4VmYdn-OOTgfmYwte1wMI.cache +0 -0
  229. data/test/dummy/tmp/cache/assets/sprockets/v3.0/T7_OSTNwKd-wutzu46eG3qLN7W4DTA7NiPZr9sc79sQ.cache +0 -0
  230. data/test/dummy/tmp/cache/assets/sprockets/v3.0/TDAsUstXAEuoaCbybThW0ZQfB9fe5BPpH_LdAYtG8hs.cache +1 -0
  231. data/test/dummy/tmp/cache/assets/sprockets/v3.0/TEDPEinm2kOldSZCRhRE1EY1cXcPDZFzGk4BQwTHOWI.cache +0 -0
  232. data/test/dummy/tmp/cache/assets/sprockets/v3.0/TRCUlOT82qhGr88qVbk9_yfP6MKWoE0op0VjqenK280.cache +1 -0
  233. data/test/dummy/tmp/cache/assets/sprockets/v3.0/TRckLDVcVGmOV8AZuMwfJU8Eiq3P0PtY5FZENxdW7T8.cache +1 -0
  234. data/test/dummy/tmp/cache/assets/sprockets/v3.0/TU_IzzIW5wIH1TPH2kzEzXwO-hTS_V1szFKLKpjO2Tk.cache +1 -0
  235. data/test/dummy/tmp/cache/assets/sprockets/v3.0/TZGIeYEM5mk1I0l6X9sVrUWzFDoFAaSl_QWaiLfjDiA.cache +0 -0
  236. data/test/dummy/tmp/cache/assets/sprockets/v3.0/UAq3bNJdp44QhfA0yibxUDtiIwVl7XGVIwZKTKRerxQ.cache +0 -0
  237. data/test/dummy/tmp/cache/assets/sprockets/v3.0/USCztj97loabXtEdyz5VyMWEajjAe7PijgZuV0NXlsw.cache +0 -0
  238. data/test/dummy/tmp/cache/assets/sprockets/v3.0/UT3Ma2rH-kXwIGXPGqMAFwoXk_LTAPHD_xMQv4fTmRg.cache +1 -0
  239. data/test/dummy/tmp/cache/assets/sprockets/v3.0/UdmKcKv8N88PBJs3CSR1mJ_G6oobaFV8HverF0JfDB4.cache +2 -0
  240. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Uwu8RbOC0pL724Sj218ep1B6QMpN4uPFn4ZWMkvvXyE.cache +1 -0
  241. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Vczr1oxhEkbC3yUWMb0Tf3WUVs8l3_RoNXjuBNeCWBg.cache +0 -0
  242. data/test/dummy/tmp/cache/assets/sprockets/v3.0/VgVYXFnKoKfhNNidgsnYZiyZvCXF1OZeSob1_i5Rkjg.cache +0 -0
  243. data/test/dummy/tmp/cache/assets/sprockets/v3.0/VqgqPqjuXEBUiEpCvjMb04J4nAHqZfTzCZvlHnobn_8.cache +1 -0
  244. data/test/dummy/tmp/cache/assets/sprockets/v3.0/W95O_HwGQZXx5rQc5Pw-E8SErSh7L2TmGgbEHQ0NqN4.cache +1 -0
  245. data/test/dummy/tmp/cache/assets/sprockets/v3.0/WDCB7tjE0ZDlg_aBSKnKpbaxSsuqwusnftzr_dOuzyY.cache +1 -0
  246. data/test/dummy/tmp/cache/assets/sprockets/v3.0/WFLh13hrQr4SnwaDNo_GShN00wLfDyiM3yb1XW5H8NQ.cache +1 -0
  247. data/test/dummy/tmp/cache/assets/sprockets/v3.0/WWzM3a58ZTgtw4epk3Wh-I_t9WsmddLlnihbz7pJjRE.cache +1 -0
  248. data/test/dummy/tmp/cache/assets/sprockets/v3.0/WrD-SrB4qOaYFzZUpFMdeKOm7NiYtWlD_FI5LruznI8.cache +1 -0
  249. data/test/dummy/tmp/cache/assets/sprockets/v3.0/WzFgdT_lFRtAQNw_iPOzd9RstnPeT5_mrdIRjFeILsg.cache +1 -0
  250. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XNl0bxkiGrmxszpHGGB9cGTek0tw0rO0IBeHQmoz6tk.cache +0 -0
  251. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XStuvVr035QnLhOT_o345-u_rK6WLY_C-jeWirIu01U.cache +2 -0
  252. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Xmn7VOulfY8JyYtnNdcrUMoqwd0GFiPjJgtXEitvC4s.cache +0 -0
  253. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XnJ9A_BUd1vyWBhh8xxRnKU2hWhPr4OSxzduT1mlqdA.cache +1 -0
  254. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XyHxqCCGsvD6UwVKpLYCIUNhWutTtQnquD00c61k7uE.cache +1 -0
  255. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XyXE4HOafArTo_4Bkl-efr7mqbnOppqq5js1-SW0YSo.cache +3 -0
  256. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YGigUYfSWQk9Fs0ne_mQ5LImkEIKOyYEWQBf9Es3zKc.cache +1 -0
  257. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YJCzURjEQjhMm2QH8RBD27vO8wpSULpPz4HGRiDO87w.cache +1 -0
  258. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YZBmRMdaOQnvTJlNmPyqVmQDnj4PXKHhYThKTf-tgBI.cache +0 -0
  259. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Y_-YzQS6UvM5osmzVz0fDXGPQdFPq28NmzZyOnh8kMU.cache +3 -0
  260. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YpYdIrntPpyPpbJIuannzkopQ7dGI9AY6hYlZae8UH8.cache +0 -0
  261. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Yx-_nTaWv2LNrOsOenMcJiLi100RSIdmfDHiELgowg0.cache +0 -0
  262. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_-YSXkoJxisCmeDCtmPaUtdUS67jsD8zwhqdHiRFIYs.cache +1 -0
  263. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_4C9KP4l4WiXjlzMJvDScIRYjuuEkn3VpmJuLTPsS6A.cache +2 -0
  264. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_HkVBKwrDptZBvRFN7R6P44TmoGb_NSdx79tyzRsz4I.cache +1 -0
  265. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_jz7R090MH_HZ7B-dCm4CoITeis60Y682BonJH9Mwtw.cache +1 -0
  266. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_t5zrjwR4tfh2hE8bLNNzacG90jeFLeOmmVTP36SYsY.cache +1 -0
  267. data/test/dummy/tmp/cache/assets/sprockets/v3.0/a5SnN9MbCMeyEZGbBbWxjcK5yy2xj51voHfKvxqfOhg.cache +1 -0
  268. data/test/dummy/tmp/cache/assets/sprockets/v3.0/a64eJtpRr9Ki4McHhF2IpquCRTAvxgYYK6Pc20tJdo0.cache +0 -0
  269. data/test/dummy/tmp/cache/assets/sprockets/v3.0/aAeiR_FZecMb5XfSz2o-i4fyCkqhJ7IumVf_XJvFIA4.cache +0 -0
  270. data/test/dummy/tmp/cache/assets/sprockets/v3.0/aHNk-MrAgLePJA_g1G7g7QL0oUpoekWHCkngVF73Bh4.cache +0 -0
  271. data/test/dummy/tmp/cache/assets/sprockets/v3.0/aNxVgQDlf4M2jZyZq-NW8nmpYRBKCxtM-pz6DL3-3hw.cache +0 -0
  272. data/test/dummy/tmp/cache/assets/sprockets/v3.0/aa_pg8uJJw_OSFurZrgK6OC4QX9VTJXVPf3kCXboSoY.cache +0 -0
  273. data/test/dummy/tmp/cache/assets/sprockets/v3.0/b9tZgjwIuYMn_62GeCI5QUB7sy5HT9ZzfoRYQN7ZkVM.cache +1 -0
  274. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bANe0BKxDw1Y7I58p7HotvnxhHeJQPxJbfFyVBJJgbQ.cache +0 -0
  275. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bJnG9-nzh1aw9AuHwqreMm5jSMAID3-TIltmkZinYTE.cache +0 -0
  276. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bNBBfcOHSHY_TogY6mZE05EdCPEF2WgGgp4VqBP-6FI.cache +0 -0
  277. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bS69l_IteyXUtJZ98w6ZSxIuSnvjTahuJ78lzjDQ97A.cache +0 -0
  278. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bYyfTOO-SAaKy62cKPA2FCKnDf9CDYsORgaVWtbp5t8.cache +1 -0
  279. data/test/dummy/tmp/cache/assets/sprockets/v3.0/c2WC9sy1FFzN6Ig_cZ3niYQV5a6ttkr_gL2vOilHqco.cache +1 -0
  280. data/test/dummy/tmp/cache/assets/sprockets/v3.0/c5eqULnsMChO9q0CcFXLfcJ_ZSXev6OUgoUiDrrNf_U.cache +0 -0
  281. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cCi18AIoGTaeUN8TULaGcBjsAxOObvlZb6F5HOFw8S0.cache +1 -0
  282. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cCiGimgT2XCOsPOQvLmca65h2k3hXDJ4EYtu-BcErU0.cache +0 -0
  283. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cNC5rz14gCKukQSYwQIkRZ5Qq-2J8T4zKmBDuWkccNQ.cache +1 -0
  284. data/test/dummy/tmp/cache/assets/sprockets/v3.0/chhR3BLxGzs7ibs2Ws9EIM-9nwEfTuTN5D4McEzDtJc.cache +1 -0
  285. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cq5yJSM4rGvsWfKmv-bQn7XIA_hTTEM-WFBb3C29_b0.cache +1 -0
  286. data/test/dummy/tmp/cache/assets/sprockets/v3.0/d1DJp093qRFVi8Cm6NWNINMgaQgZsdpBUlNrQ8fogto.cache +2 -0
  287. data/test/dummy/tmp/cache/assets/sprockets/v3.0/d6XfMOCnrzgT53cm5yJgEJmJ9KC-7wVzUwthQwa6blM.cache +2 -0
  288. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dMNWuvIAt0w25UQHslbJ5TmiHCwMu9z4eVBMD1-VWTs.cache +0 -0
  289. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dZ__5cepCnFGNWJ1dHjqDx9Vf2DY8qriXS_6dOuW32s.cache +2 -0
  290. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dxtUTopY1f5yj8icvdCKfG3_OR0wJoOWB4q1Vdk1Z_0.cache +1 -0
  291. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dz2aAOwd5i6l6QcPCQI4ComkeZAbyf-Qeb4W_wEOkE0.cache +1 -0
  292. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dzAaHzUVxwWIMo35cRt3K7yRjdjs3nmaO967ek-9fg0.cache +0 -0
  293. data/test/dummy/tmp/cache/assets/sprockets/v3.0/eoFnjU_f5aaAoCTQj3o68TAgYU3OUj8KlKNTrD4APDc.cache +2 -0
  294. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ex2t_6yDYzQGun8VCKUGeP2mcftzsF4zPNUyHKWxe5Y.cache +0 -0
  295. data/test/dummy/tmp/cache/assets/sprockets/v3.0/f7rwOsYMxdYD6UcqWBgWCzk-WCWTWTgRpdcELhxmsG4.cache +1 -0
  296. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fI2tpvkjAPuqC8t__DeQXkSWlroZmpR1jOtgtktOQ3c.cache +1 -0
  297. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fNAAm2wdPx03Ue6IoKgQwFpaSjVDVSg7AkBNaeOXtmY.cache +0 -0
  298. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fVjWSwOkXIKe_WTxOxYYszMKp-ixEHuTCWTZ5oiSDZw.cache +1 -0
  299. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fqfDcEZdl9SmL5A1HB6CTDdn5PT6u9nG1XLtGSHlk-k.cache +0 -0
  300. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gIvRWsr0YMM3KhWCaomADJmHx9XQ9L7wz96c4ro8E3M.cache +0 -0
  301. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +2 -0
  302. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ged9cs7c_A6Mx51lzZFhKYcEAMJNtbG6mRMZoXv-_0w.cache +0 -0
  303. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gf83oFKzWVQn0Bxg-SuAceCAsdvPVJoj8FGAUDgufSM.cache +1 -0
  304. data/test/dummy/tmp/cache/assets/sprockets/v3.0/giAfmhPdLM_yiHuwUvP6XrN_giCdEWBDG5J6AVGmBRw.cache +0 -0
  305. data/test/dummy/tmp/cache/assets/sprockets/v3.0/h4K2qvrBpFMonQTuH3rQfG_FZO3QVTIE3Aw9AtY65eQ.cache +0 -0
  306. data/test/dummy/tmp/cache/assets/sprockets/v3.0/h5HZSC9zRpqi6OJr6kz0BjFPic_VaGoxdzjxxfYYpHY.cache +1 -0
  307. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hNh5yunVSaeTheela12_AcjIhN0j50t2mLhAnzI0XsE.cache +0 -0
  308. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hWbPWDVlwq3DCKP-Q2j1foLX9DMiNkQ-1x9icLECwKQ.cache +2 -0
  309. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +2 -0
  310. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hh_atfQhM1KuLM6mAb3SXFNRoFsXvaI2CI6UrHLX7XQ.cache +0 -0
  311. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hw4d5QKVtUBtugx69PQl9KegRgq6cO5ZpN7eQqhYs0w.cache +0 -0
  312. data/test/dummy/tmp/cache/assets/sprockets/v3.0/i9Yrt3LpiAduse_11l6KnZS4PQz44eGoT2sCClviZRY.cache +2 -0
  313. data/test/dummy/tmp/cache/assets/sprockets/v3.0/iHQmxJ5Grn4XMtI46z_yBuYSraySsTYlbSHsNuwcHY8.cache +3 -0
  314. data/test/dummy/tmp/cache/assets/sprockets/v3.0/iSAF3p4k0OTZWT3WCzFoSoxJ9JZ3Uyq3oYO6v2bf5ws.cache +1 -0
  315. data/test/dummy/tmp/cache/assets/sprockets/v3.0/idLyLdBfWzAVAAaP58nb5Mh86TwryGVMRkVr6Sy0DSY.cache +1 -0
  316. data/test/dummy/tmp/cache/assets/sprockets/v3.0/itjzXIGHvaGUSOIKgu6Xlza3zjgwqhf8K4rRJbSWUVk.cache +1 -0
  317. data/test/dummy/tmp/cache/assets/sprockets/v3.0/iy1bAR5YLt13HkmD2meceUkZDQQ6rtN8ACw92YENNXE.cache +1 -0
  318. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jEHxldIeBwifYR5I84sauDV9RX7MfIbQOVD4FGONxSs.cache +0 -0
  319. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jNbeochsX_d7tp-vx_b8WDR41GSbFkUx5ShtW83_Dfk.cache +0 -0
  320. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jYlx833TPiGoxQ0OvdQboP0y4dp9hogRNIvDZd3sDis.cache +3 -0
  321. data/test/dummy/tmp/cache/assets/sprockets/v3.0/junz0CHcFTyBe7Ox7bGfvS4R1ict_uxUUqII_-Zv8P8.cache +0 -0
  322. data/test/dummy/tmp/cache/assets/sprockets/v3.0/kHuUKOVCOeqm7zZV0Jiz8GLLkMWGQgIyuoOeuO6ruA8.cache +1 -0
  323. data/test/dummy/tmp/cache/assets/sprockets/v3.0/kXemBdTbe9FV_2tQq5Utcb5XiIU9NLlB-lUopGKeK-4.cache +3 -0
  324. data/test/dummy/tmp/cache/assets/sprockets/v3.0/kitWASGYvbCWQzkj9SoVsTORFWrkGpDISWub1rmVe94.cache +1 -0
  325. data/test/dummy/tmp/cache/assets/sprockets/v3.0/l0Cn0scO8fur89Gi8TJdwDA_5Q16tpatJ3t9FJWUSvw.cache +1 -0
  326. data/test/dummy/tmp/cache/assets/sprockets/v3.0/lQAlLZvJNmDi0m09C0TKKB-BtUcew75YpdODRkMjEaE.cache +1 -0
  327. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ly7ke_oiXG13P8kCqAWs1DNhcgx-tQPcE2ZUE8m2Bnw.cache +1 -0
  328. data/test/dummy/tmp/cache/assets/sprockets/v3.0/m-Pm1QvKuUAFbi_YObk9j1aJDsZrT4zUPYuiZStiud4.cache +0 -0
  329. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mLKsT7te1nXY2zPATC3mAboAPOb9nwIs2ifsi5EWgCk.cache +1 -0
  330. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mTfA80FxEVEMky7GWowWPvDBzd_2CPhl7VCQx_bNunY.cache +2 -0
  331. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mvL-9EXjinv0ATscnZi8AtCGTJRzXvbu2eJcKO5ZyNA.cache +1 -0
  332. data/test/dummy/tmp/cache/assets/sprockets/v3.0/n-4G5vV31kxb78MLESOHIM56EM1iuqWPgclofXyBjBk.cache +1 -0
  333. data/test/dummy/tmp/cache/assets/sprockets/v3.0/n3QXoXZhMZVbNsXAG5G6qazn8i5WKtAzfoS9ueqhn1o.cache +0 -0
  334. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nHiAk46ki1CRtuoXaOMywU8sAk3qNwiC0FFHJXcRSpI.cache +1 -0
  335. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nSV0X9gj6iYb87SHURQeI9vhymgtdWbWqPNTcZ1VFPk.cache +2 -0
  336. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nUKPyTF6HR1KP_PFFk4oSdbtrN17oJ4KTyM7uf148w0.cache +0 -0
  337. data/test/dummy/tmp/cache/assets/sprockets/v3.0/na3tZYLkQ1TjpJAdP_A3jqhwv0mEPlhwZtF26_Q3ddI.cache +0 -0
  338. data/test/dummy/tmp/cache/assets/sprockets/v3.0/neDx-MKmNBUopnpnVzK1XF0kie_YCmd9xMjONM4889Q.cache +1 -0
  339. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nikUPwMhjvVL6AdJVuqgRv1ML81uS0fm4irjTNQ-Br0.cache +0 -0
  340. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nmK58UeoVzaj0p8volzUiV9xD9V9M0esdwL-cRn-Jbk.cache +1 -0
  341. data/test/dummy/tmp/cache/assets/sprockets/v3.0/o1zqkB5xetpzZ5-5k7ZXjMOJQP-mldKBcSxwtaoQnOA.cache +0 -0
  342. data/test/dummy/tmp/cache/assets/sprockets/v3.0/o7fuPC9rm9y0KfQh-6PznOz9W8dVEiXbMHv26-xgImA.cache +0 -0
  343. data/test/dummy/tmp/cache/assets/sprockets/v3.0/oJ4ti6azlZHnVr7t-4-arnzyUtSsuuNawbx3GvIycFw.cache +2 -0
  344. data/test/dummy/tmp/cache/assets/sprockets/v3.0/oa1s2sl5r0ai6I6tPK983q5jMXzghhzsmmIAcSFFZY0.cache +1 -0
  345. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ocWsaICguabct-49eW8nnPRs2zyr6LlTbEm8lz6fXzY.cache +1 -0
  346. data/test/dummy/tmp/cache/assets/sprockets/v3.0/otlpF6P222iJpSgeGaH71GSl2Bl-3R8x4pC1fEIZy1w.cache +1 -0
  347. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ow0vufU1ZvyGrNcit-26Ecv64mPvtkqjhI0zxU7ekzo.cache +0 -0
  348. data/test/dummy/tmp/cache/assets/sprockets/v3.0/oyXKMpyDmUG2Y1779uJKxek9JuQBcOouev4_QTqxDsg.cache +0 -0
  349. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +2 -0
  350. data/test/dummy/tmp/cache/assets/sprockets/v3.0/prK3iWsdz2qjBTyaiGdN87a6rS203qtbKRhS_7Zt0ls.cache +1 -0
  351. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pxpfwqBGwjC4t5WNh2UTTBxC-FJ-Pv1EVgjB58wF8ro.cache +3 -0
  352. data/test/dummy/tmp/cache/assets/sprockets/v3.0/q0nKeKmQh8PE4pxsrqxw8l1Hf_q-VV2z3eKoNvW6FIA.cache +1 -0
  353. data/test/dummy/tmp/cache/assets/sprockets/v3.0/qMVDX5mKvKrcWpymLV2n4kP72lAYlR_wAIiZw2jvkSM.cache +0 -0
  354. data/test/dummy/tmp/cache/assets/sprockets/v3.0/qz-1ZS2PHvUWO3RSFbJ1fM--sWCpf4fNXGo-lxyPWVU.cache +1 -0
  355. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rHOHpAfOvNm8Sz827bfjDHCTqogOtRruD0qgUzqcHNU.cache +1 -0
  356. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rIO5fE7gg6lKc-MyndS6xOIiHEMv-NGtycrA8uPrPaM.cache +0 -0
  357. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rR06P2CBE5nca3i0hjgfNYlOSsmTIMyI4ZQFi339N2M.cache +0 -0
  358. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rdtc7PT0CZMAxQHS12sxAJPXIE3TN_UgjMVxgtsVjEM.cache +0 -0
  359. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ritu1jR3S6V1s1oDPc72QhsRoEJwVx3oFd0Wb146AoA.cache +0 -0
  360. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rmcIPIQyPqtgSD_vc8LMQ9QBmJ5A3tUeSn4fxUSZbVk.cache +0 -0
  361. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sM0IcLC64ZHJCvcuUh6IR6RV32gVZOlELga602uNdqg.cache +0 -0
  362. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sPnEoSpAKHTqsfU9IqEwGB55OrIVPJ-OzkudAiMnQ5s.cache +1 -0
  363. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sS4VF4PSc2bc9aN5nJOmWluCg6qkbnHk5w5Nua0a-14.cache +1 -0
  364. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sTLqDY93af5eYS440K72oQEY8eeLbUpOzW6gAXzsJvU.cache +3 -0
  365. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sU0TLhVpZSAMU4IglFTy1BtU_YMu9FYPWlyZteg-OSQ.cache +0 -0
  366. data/test/dummy/tmp/cache/assets/sprockets/v3.0/saIlOjRbxyp4yDHTBVZt3VEIzGAsN-KA8lOh8yOBW-o.cache +0 -0
  367. data/test/dummy/tmp/cache/assets/sprockets/v3.0/smXC-ctV-yAlRTYg9nDcCyRrvnxYM3KXdgQ9p_c8rMM.cache +1 -0
  368. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sqEzP00fxnE3aid2nQvbAqnVxlatfl_yjz0GI-1wqdA.cache +1 -0
  369. data/test/dummy/tmp/cache/assets/sprockets/v3.0/t8ctlHwaes6XSdio99VMxmafT1z0daYgLwTTLQlfnJk.cache +2 -0
  370. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tBLaYKEjGivPSV8sV4fkL6BlumsauyXZz2hwIJ5J4J4.cache +0 -0
  371. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tJJf58xxfMxkcsRJP2Xevld3gzoC5iBi0GeuDfy3tAk.cache +0 -0
  372. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tN6oGEY-V02vrkaSxm2uRxctCdURA9hbS5s0nD4dk9c.cache +1 -0
  373. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tQhWEIMObud3WJOXtAP_Di8UhHq6wW3zJFwo76aqw5k.cache +2 -0
  374. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tY2NxY0pa9yCYf_Nbn9rilndjgF3I4uRL2qIxq_dSBc.cache +0 -0
  375. data/test/dummy/tmp/cache/assets/sprockets/v3.0/uIQKZoq1RrLprJ2RyrzT-vwa8G37-wkhcBl31EsXvmg.cache +0 -0
  376. data/test/dummy/tmp/cache/assets/sprockets/v3.0/uN6JPb0KoLZSW-PubVXjD-rwJMycgPwM1VtkhAD8IPo.cache +1 -0
  377. data/test/dummy/tmp/cache/assets/sprockets/v3.0/urxOtrP8TOP2AYpOMZxr2qbZQyBTKxtfSRpg9Mi1MO4.cache +1 -0
  378. data/test/dummy/tmp/cache/assets/sprockets/v3.0/uwTIbUbT6Q68EKq9eVY3bE_NJ49av-RuJuxAPB_BXQc.cache +0 -0
  379. data/test/dummy/tmp/cache/assets/sprockets/v3.0/v13ePcO1K5BaSrlDgLv4VJ9FhgQPFP5QdQgxDgOwhqw.cache +0 -0
  380. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vDPw2Fr0F1hWPymn8eqNtm8xAnDNLb_pq3_CWsUmVJM.cache +1 -0
  381. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vx3om7HPGLfl_MW9YnoiC08HsmxOjtmWdIzwf-Yw_bw.cache +2 -0
  382. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vyd0tRb3HazlsUYqR0vp795lEhEi3YpBY5EmfO3dPng.cache +1 -0
  383. data/test/dummy/tmp/cache/assets/sprockets/v3.0/wBIA3yA26v63GtbfI8M6di6EPvYrAkW8xoBghd2_zFs.cache +1 -0
  384. data/test/dummy/tmp/cache/assets/sprockets/v3.0/x6tFTPr-Jkizt0gRwhHLVyLBbKhFW8J60zQTgQDq0yc.cache +3 -0
  385. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xKnCHTMfgerJ0Q6mtnbWXgNjT8mRnugFBKz1CbSRzQ0.cache +1 -0
  386. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xS_UYGb9Cm_HXodHTpxuAXaQEdtatLiZSCmlYh_UPPk.cache +3 -0
  387. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xnvv_zYnlnEf_1_rrKIQSyeVTP5qWF5Q_4UYFcGGrS4.cache +2 -0
  388. data/test/dummy/tmp/cache/assets/sprockets/v3.0/y1ufiY2LIPljqtmPNDDJ9iH8fXcomn5NiDtUUDku2Os.cache +0 -0
  389. data/test/dummy/tmp/cache/assets/sprockets/v3.0/y56WLxXHFA-_WHRsiEmUvyueMZCohvaoWwYKxo8ssQc.cache +2 -0
  390. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yAB5qRC5Rs-l2ki7konENsqMfxlrrWjKyIbdKd97t0c.cache +1 -0
  391. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yGczC4yMXmot8z41Yvhc7lxRBp10wTdTOgZRucGk_jk.cache +2 -0
  392. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yKOnDCa9-hZ4Uq3xWqQSHsMcQJbFM8rcuSgmCxMp688.cache +1 -0
  393. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yY4KnLQwZxis-uWjIRIedoCrfIcZA2kXClitE6l8RZs.cache +1 -0
  394. data/test/dummy/tmp/cache/assets/sprockets/v3.0/y_8l9LJitA_EjpZpUE0hICxLtOI2MiTMXA1qIMSY4hg.cache +0 -0
  395. data/test/dummy/tmp/cache/assets/sprockets/v3.0/y_uHwrPAUZWZdAyBnf-LjSyldU8kh0pMrRwRW7g3P1o.cache +1 -0
  396. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yjzRoOsoyMCSlW-gKpp0nOHwcLS6BcF4jkAXWa4F0Dw.cache +2 -0
  397. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ypFoyURV_Y0NHlBKznetHE6cVjR-mmRHcGSGQ_hERVg.cache +0 -0
  398. data/test/dummy/tmp/cache/assets/sprockets/v3.0/z1f1CWbar-vr9hJVdmWK_fmFtdqXKjLJmIlzJoYSul4.cache +1 -0
  399. data/test/dummy/tmp/cache/assets/sprockets/v3.0/z3qJ3Y1cfUDyTHyk3hqotlyKhxMY7XXmA44aniNk02A.cache +0 -0
  400. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zJZAQ8ZkU4NlfW-FqS6INgExWfq-k8bAHXSX8GkdiD4.cache +3 -0
  401. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zgk39xKFaGNsKXinqCnzxmGBN6zy9IVkzCPXTsQlnxc.cache +1 -0
  402. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ziltKhphmU9-prwAQCGgPjcxxEZw4pjsn6rA1NqFSHI.cache +1 -0
  403. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zunP_dK0O1407bf9sDTRfnAKsIDYzzdgp_1C3E91I_c.cache +0 -0
  404. data/test/enable_routes_test.rb +46 -0
  405. data/test/engine_test.rb +10 -0
  406. data/test/integration/navigation_test.rb +8 -0
  407. data/test/new_get_route_test.rb +9 -0
  408. data/test/non_standard_controller_test.rb +8 -0
  409. data/test/notification_string_test.rb +34 -0
  410. data/test/push_routes_listener.rb +30 -0
  411. data/test/push_routes_url_matcher_test.rb +22 -0
  412. data/test/push_routes_url_params_associations_test.rb +23 -0
  413. data/test/reload_test.rb +21 -0
  414. data/test/smarter_add_test.rb +34 -0
  415. data/test/test_helper.rb +23 -0
  416. data/test/trigger_test.rb +54 -0
  417. 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
@@ -0,0 +1,4 @@
1
+ module PushRoutes
2
+ module ApplicationHelper
3
+ end
4
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ Rails.application.routes.draw do
2
+ PushRoutes.newGetRoutes.each do |route,controller|
3
+ get route, :to => controller
4
+ end
5
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module PushRoutes
2
+ VERSION = "0.0.6"
3
+ end
@@ -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,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :push_routes do
3
+ # # Task goes here
4
+ # 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>.
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Rails.application.load_tasks
@@ -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,5 @@
1
+ class ApplicationController < ActionController::Base
2
+ # Prevent CSRF attacks by raising an exception.
3
+ # For APIs, you may want to use :null_session instead.
4
+ protect_from_forgery with: :exception
5
+ end
@@ -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,6 @@
1
+ class PushRoutes::ClubsController < ApplicationController
2
+ def show
3
+ render json: Club.find(params[:id]) , status: 200
4
+ end
5
+ add_show_trigger :show
6
+ 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
@@ -0,0 +1,7 @@
1
+ class ReloadTestModelsController < ApplicationController
2
+ enable_push_route :index, "/reloadTestModel"
3
+ def index
4
+ render json: [], status: 200
5
+ end
6
+ add_trigger :index, ReloadTestModel, :after_save
7
+ end
@@ -0,0 +1,5 @@
1
+ class SocketsController < ApplicationController
2
+ def test
3
+ end
4
+ add_trigger :test, Person, :after_save
5
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,3 @@
1
+ class Club < ActiveRecord::Base
2
+ has_many :people
3
+ end
@@ -0,0 +1,3 @@
1
+ class Person < ActiveRecord::Base
2
+ belongs_to :club
3
+ end
@@ -0,0 +1,2 @@
1
+ class ReloadTestModel < ActiveRecord::Base
2
+ end