push_routes 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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