kadmin 0.1.4

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 (351) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +35 -0
  3. data/Rakefile +146 -0
  4. data/app/assets/javascripts/rails_admin/application.js +3 -0
  5. data/app/assets/stylesheets/rails_admin/application.scss +50 -0
  6. data/app/assets/stylesheets/rails_admin/finder.scss +2 -0
  7. data/app/controllers/kadmin/application_controller.rb +58 -0
  8. data/app/controllers/kadmin/auth_controller.rb +98 -0
  9. data/app/controllers/kadmin/concerns/authorized_user.rb +67 -0
  10. data/app/controllers/kadmin/dash_controller.rb +19 -0
  11. data/app/controllers/rails_admin/application_controller.rb +58 -0
  12. data/app/helpers/kadmin/application_helper.rb +4 -0
  13. data/app/helpers/kadmin/bootstrap_helper.rb +53 -0
  14. data/app/helpers/kadmin/form_builder.rb +9 -0
  15. data/app/helpers/kadmin/forms/inverted_check_box.rb +10 -0
  16. data/app/helpers/kadmin/navigation_helper.rb +28 -0
  17. data/app/helpers/kadmin/pagination_helper.rb +95 -0
  18. data/app/views/kadmin/_alerts.html.erb +14 -0
  19. data/app/views/kadmin/auth/login.html.erb +4 -0
  20. data/app/views/kadmin/dash/index.html.erb +5 -0
  21. data/app/views/kadmin/error.html.erb +5 -0
  22. data/app/views/layouts/kadmin/application.html.erb +68 -0
  23. data/config/initializers/action_view.rb +2 -0
  24. data/config/initializers/assets.rb +5 -0
  25. data/config/locales/de.yml +14 -0
  26. data/config/locales/en.yml +14 -0
  27. data/config/routes.rb +12 -0
  28. data/lib/kadmin.rb +19 -0
  29. data/lib/kadmin/auth.rb +31 -0
  30. data/lib/kadmin/auth/configuration.rb +66 -0
  31. data/lib/kadmin/auth/unauthorized_error.rb +14 -0
  32. data/lib/kadmin/auth/user.rb +15 -0
  33. data/lib/kadmin/auth/user_store.rb +21 -0
  34. data/lib/kadmin/configuration.rb +18 -0
  35. data/lib/kadmin/engine.rb +15 -0
  36. data/lib/kadmin/error.rb +7 -0
  37. data/lib/kadmin/errors/authorization.rb +15 -0
  38. data/lib/kadmin/form.rb +64 -0
  39. data/lib/kadmin/version.rb +3 -0
  40. data/test/dummy/README.rdoc +28 -0
  41. data/test/dummy/Rakefile +6 -0
  42. data/test/dummy/app/assets/javascripts/application.js +13 -0
  43. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  44. data/test/dummy/app/controllers/admin_controller.rb +4 -0
  45. data/test/dummy/app/controllers/application_controller.rb +5 -0
  46. data/test/dummy/app/controllers/authorized_controller.rb +8 -0
  47. data/test/dummy/app/helpers/application_helper.rb +2 -0
  48. data/test/dummy/app/models/person.rb +6 -0
  49. data/test/dummy/app/models/relationship.rb +4 -0
  50. data/test/dummy/app/views/admin/index.html.erb +1 -0
  51. data/test/dummy/app/views/authorized/index.html.erb +1 -0
  52. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  53. data/test/dummy/bin/bundle +3 -0
  54. data/test/dummy/bin/rails +4 -0
  55. data/test/dummy/bin/rake +4 -0
  56. data/test/dummy/bin/setup +29 -0
  57. data/test/dummy/config.ru +4 -0
  58. data/test/dummy/config/application.rb +33 -0
  59. data/test/dummy/config/boot.rb +5 -0
  60. data/test/dummy/config/database.yml +22 -0
  61. data/test/dummy/config/environment.rb +5 -0
  62. data/test/dummy/config/environments/development.rb +41 -0
  63. data/test/dummy/config/environments/production.rb +79 -0
  64. data/test/dummy/config/environments/test.rb +42 -0
  65. data/test/dummy/config/initializers/assets.rb +10 -0
  66. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  67. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  68. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  69. data/test/dummy/config/initializers/inflections.rb +16 -0
  70. data/test/dummy/config/initializers/mime_types.rb +4 -0
  71. data/test/dummy/config/initializers/rails_admin.rb +30 -0
  72. data/test/dummy/config/initializers/session_store.rb +3 -0
  73. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  74. data/test/dummy/config/locales/en.yml +23 -0
  75. data/test/dummy/config/routes.rb +10 -0
  76. data/test/dummy/config/secrets.yml +22 -0
  77. data/test/dummy/db/dummy_development.sqlite3 +0 -0
  78. data/test/dummy/db/migrate/20161006114509_create_people.rb +11 -0
  79. data/test/dummy/db/migrate/20161006121212_create_relationships.rb +12 -0
  80. data/test/dummy/log/development.log +9192 -0
  81. data/test/dummy/public/404.html +67 -0
  82. data/test/dummy/public/422.html +67 -0
  83. data/test/dummy/public/500.html +66 -0
  84. data/test/dummy/public/favicon.ico +0 -0
  85. data/test/dummy/test/fixtures/children.yml +11 -0
  86. data/test/dummy/test/fixtures/people.yml +11 -0
  87. data/test/dummy/test/models/child_test.rb +7 -0
  88. data/test/dummy/test/models/person_test.rb +7 -0
  89. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-E/-E7l5lmqv4YBdAJz55GQp5nq67ZkFAo6Bi5OjNk5wH0.cache +0 -0
  90. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-G/-GztuOFiffIyLHRd9L2OrRr8LvduErePFmti2KiEWnM.cache +0 -0
  91. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-K/-Ki0cNlcEH7alAxkgEojJTity_R8pKPW8lod9PdmQp4.cache +1 -0
  92. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-S/-SGTTENeaJKzAlSGQyBL5smW1ac-1PPh4AH47eMjetw.cache +0 -0
  93. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-_/-_GyWOMxsUj1Vcwf_522X6jS5CyLaFUziq4bW17lZAw.cache +2 -0
  94. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-o/-o5iam1FF5YJGGfs0g8b1t-piKLXB10xQ4JjXn7HN8Q.cache +1 -0
  95. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-t/-tU5oPMLVsB5iiapWYUTFN5jspQTpVWoTTnhK_T7BJM.cache +1 -0
  96. data/test/dummy/tmp/cache/assets/sprockets/v3.0/-v/-vqOeGJFsynFKnmqppb24llGxbmWaQxSHrnq-4gWjPc.cache +2 -0
  97. data/test/dummy/tmp/cache/assets/sprockets/v3.0/02/02bxKc4v-CFhk80q91j1gozmURNqN0I63O4ktseQPWo.cache +1 -0
  98. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0K/0K_O16_TTwLqEVY-HrOyDGoLlmGCAT5_-UklcrTwKZo.cache +0 -0
  99. data/test/dummy/tmp/cache/assets/sprockets/v3.0/0h/0hlU_9u3244srcgFGcCeEdEbxinDO7uTAksu_KANv3c.cache +2 -0
  100. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1G/1Gwco3SudXOMtMBavPEiJ7RnnpuHGrDhqen6FYs-CW4.cache +1 -0
  101. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1k/1kLUgMwR_HCyTvfZZneXlYEyVfRtLtCf4uZ3JJ-0jZQ.cache +0 -0
  102. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1k/1ktYHtX5nxdFuMPRPrFq16xXfbXcyVvGF6FD22sawZA.cache +1 -0
  103. data/test/dummy/tmp/cache/assets/sprockets/v3.0/1t/1ttjS_QLsxhOqT3FIJCJpWKjvclLlWBtCHR4Y0SMWvg.cache +1 -0
  104. data/test/dummy/tmp/cache/assets/sprockets/v3.0/27/27GrPfnHjlwE3wzZR1liVRgIOi7ye17uUxTmw0C17R8.cache +0 -0
  105. data/test/dummy/tmp/cache/assets/sprockets/v3.0/2I/2IjCzre4F7zp0kbCch9Z00-pd5NZ6oNLGYi2yqcBGS0.cache +1 -0
  106. data/test/dummy/tmp/cache/assets/sprockets/v3.0/2J/2JVDRZ9rv7kK6_56h-WJp7Vi3lU7ILSeJpKsPbz1XjU.cache +0 -0
  107. data/test/dummy/tmp/cache/assets/sprockets/v3.0/2t/2tt7uQX7uibhc3Ug9tgKtYLEChzWSC-9zplEIe5dOCA.cache +1 -0
  108. data/test/dummy/tmp/cache/assets/sprockets/v3.0/35/35Pg6lXHpJCBRpquM_0_zK8N-YexyeVLStSseoTZWu0.cache +1 -0
  109. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3J/3Jxkh8tw9o9Iu6lPKDOzHtvDfuMHG0IEX4uijWVkfcU.cache +0 -0
  110. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3Z/3Zl_QvMHiv0wLX0SEpTErkJp79NTGB9M9WKwLc0SCJU.cache +1 -0
  111. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3a/3amUAFAEPwz73mf3a0mLt1dWaqdvYWSVTvbdJfdQB0U.cache +0 -0
  112. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4T/4TYzWI_JMt0N69Lhj7iUsoMulFrqqTMgQa7WjMAXby4.cache +0 -0
  113. data/test/dummy/tmp/cache/assets/sprockets/v3.0/4y/4yYl2fQVTLy8WmVy4JS1KQWVTwyXi02mS21TDGFg0Uo.cache +0 -0
  114. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5E/5EK4YMOiNjfof61fycHKHeTg9YQvAvkhSKjWLEjuglk.cache +2 -0
  115. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5L/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +2 -0
  116. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5v/5vEKbxisLQKkt2c6CMW14lmsTmiaHhIxePJGI4EjkWY.cache +1 -0
  117. data/test/dummy/tmp/cache/assets/sprockets/v3.0/5v/5vNvcOzIEB6PiHBs2Q0WDFEQm9dxiD7NLXGau9FscKU.cache +1 -0
  118. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6P/6Ptq88_RYtY6LvyQvntLJsXt6ShxcNHEdrBGIGv16A4.cache +0 -0
  119. data/test/dummy/tmp/cache/assets/sprockets/v3.0/6c/6cjYZuXD-Z6hTNUsDx3kylQmppb7bKMHGRCIFMGe0Ow.cache +0 -0
  120. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7-/7-nFXT-mepU6ZjvvktlBtDlXhZ7b-bqNP-OiXAlEfOA.cache +1 -0
  121. data/test/dummy/tmp/cache/assets/sprockets/v3.0/71/71HhlTQ0x8w11jacZX1YXOGKLgQP5YtSZlsUILezcHU.cache +0 -0
  122. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7G/7GPgsy2RZq8oH9dXjsVSy2tnjQUAGDViTJ_hoIWWZHw.cache +1 -0
  123. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7Z/7ZwXstn6Mz77ciiwrR-fSsInEHKx3_hC-8WKq8MajcM.cache +0 -0
  124. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7n/7nTeXy635_E0021GPrY9liLy0OcA24r9yMv3JRZpRU0.cache +1 -0
  125. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8v/8v3HUrggYouCOdFFSOnPQeeJB-Xw50TGMmz3P-5rp-w.cache +0 -0
  126. data/test/dummy/tmp/cache/assets/sprockets/v3.0/9u/9u_JAcGXAbv46kvKHDanRFSBejhRPiviviuc63zlv6Y.cache +2 -0
  127. data/test/dummy/tmp/cache/assets/sprockets/v3.0/A0/A0qGf4ml31v0AV1CnLrNphYxKK4NMWEHlm6jL15vtfo.cache +0 -0
  128. data/test/dummy/tmp/cache/assets/sprockets/v3.0/A7/A72TkC30Vq7CX3sN-bZzghZSyQD5TfoEHppQhjWBbQc.cache +1 -0
  129. data/test/dummy/tmp/cache/assets/sprockets/v3.0/AM/AMZZZzlJgjZVIRxe6ogpt0JsFsvlUYmjPaKaCTm4uSY.cache +1 -0
  130. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Aj/AjduCjY5yKSragbRfix-ZzJmxPyRI05Bl274GjxlyOU.cache +0 -0
  131. data/test/dummy/tmp/cache/assets/sprockets/v3.0/B2/B2ynLSu6UriibYlEl4dnrXDXdWJVgYccjhDwrdwgyBc.cache +0 -0
  132. data/test/dummy/tmp/cache/assets/sprockets/v3.0/B3/B3HSs7YL9-V-LyTFlpPC7DlZ3Dxc2HrvGRaStrb9SYc.cache +1 -0
  133. data/test/dummy/tmp/cache/assets/sprockets/v3.0/BG/BGVHH6VEpL2MmLznbhFAvRmYAY5J_n1-tCy0mLo54JE.cache +0 -0
  134. data/test/dummy/tmp/cache/assets/sprockets/v3.0/BJ/BJAOVjCMeTjiOu11zW_a2_-u4d0WfkrbaX4m95p5bpM.cache +1 -0
  135. data/test/dummy/tmp/cache/assets/sprockets/v3.0/BZ/BZI1tfK8XWUqOiMGYdRFiQKYl7PMprWPs1pK0XY3mc8.cache +0 -0
  136. data/test/dummy/tmp/cache/assets/sprockets/v3.0/C0/C0esC4G-fb2p7hprt-9S39DiIN4W1l4iKuOSwUuiwUw.cache +1 -0
  137. data/test/dummy/tmp/cache/assets/sprockets/v3.0/CD/CD9gffDM4E98omhQJsjzg6xRRk6_fs-R56iZ2sQ4vL8.cache +1 -0
  138. data/test/dummy/tmp/cache/assets/sprockets/v3.0/C_/C_qme5ZIsOxcxT7egM2uaUZq5sKZ3vpifRfr3NdQmgE.cache +0 -0
  139. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Cs/CsLYOm3owL5njEre0oZrp7rfrPozQcVxlvJXllD79_8.cache +0 -0
  140. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Cs/cssh8LbSeozd9EbLHLlTSUpZTJSfpY2vFuYuGvvN6yE.cache +1 -0
  141. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DF/DFYEiUpyu7HMGnhXPzq0SZ-wq0lWhBdZ1miNtqtAPs8.cache +1 -0
  142. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DS/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +2 -0
  143. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Dn/Dnv8Gzs8hr44x47oyjl6_Mn9Wzn7y6KQAK5qaf6XTkc.cache +0 -0
  144. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Dw/DwaaKb1E_ArCW1QSj8BIsyPgRx2Ot8-ocvnWmG4s9ck.cache +1 -0
  145. data/test/dummy/tmp/cache/assets/sprockets/v3.0/EC/ECRUjKqajDEyRIx88Y6ERafwCdesNxlAM_92ShV_Tgg.cache +1 -0
  146. data/test/dummy/tmp/cache/assets/sprockets/v3.0/EJ/EJFOUvkfmWWZV0z59Uq1iNi6OVgypgSkfu2d2_nD_5s.cache +1 -0
  147. data/test/dummy/tmp/cache/assets/sprockets/v3.0/FM/FM46Jcs768Lb9a48ghTA0LQJNDwtujqOVLfWipAgFKQ.cache +1 -0
  148. data/test/dummy/tmp/cache/assets/sprockets/v3.0/FM/FMW8J65N2k8BfLe2cnSh8RdkvQouhmIaVJ7R_1Q1lU4.cache +1 -0
  149. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fj/Fj9wk3WG0X_LuTI9jEPYY2HU5btm59aOpbx1afwZy4M.cache +3 -0
  150. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fj/fJS9bnzdUzO4XRNm42nD4ucpywK6n8k97YcbMskXcNk.cache +1 -0
  151. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fw/FwlpYy2-TCGlrxSo5QMF4A60GulM8lLAjKYa332fupY.cache +1 -0
  152. data/test/dummy/tmp/cache/assets/sprockets/v3.0/G1/G1UvsZ_neSlYn4W5UQPBOcxuLthPs2c-AuvCV9YwqtY.cache +2 -0
  153. data/test/dummy/tmp/cache/assets/sprockets/v3.0/GG/GG8ZUpJCnNg9aJ9my2IqJ32HjWQkfkv6WN8oDt-QbDg.cache +1 -0
  154. data/test/dummy/tmp/cache/assets/sprockets/v3.0/GN/GNLYFos2891NV-5hu9hU1ot7EPre76NwIGW1-Pu9a4s.cache +0 -0
  155. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Gq/Gq1-o99_FTAmMpHdVD2GREMHDUBchfuVdmACX8WsXZA.cache +0 -0
  156. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Gq/Gq6UUulKfqoSlmra4vAkq6bUoYLEM5iLi3vc1fFvfY0.cache +0 -0
  157. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Gr/GrcqYYXRV1kqMSYDgEfrXHVS_JjHuMkvzi7BV3AXlhw.cache +1 -0
  158. data/test/dummy/tmp/cache/assets/sprockets/v3.0/HH/HHObifnq0-OAXcTuneRXNow7cQMS3Wk7E4SJwOFg0zc.cache +1 -0
  159. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Hq/HqG4RuVapOFDc25JLHs38cERWY1xLOVRnCtDQMSyRck.cache +0 -0
  160. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ht/HtXaaU2BVfjuwJjUoVP2tD7Npl75B98VZJDwdE26hus.cache +0 -0
  161. data/test/dummy/tmp/cache/assets/sprockets/v3.0/I9/I9rlUp9wOGCFAgFJ5b8wQZoKKXE2J1-7hfje3UXsVZg.cache +0 -0
  162. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IE/IEMOkncj_U9_93eSMbALt9yao9LbDQLvq9n3fJ-_UOI.cache +0 -0
  163. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IQ/IQKKCtHbqJ6bUx8a4uVuxH0EnTMi3Z9pTGgf5evVhgI.cache +0 -0
  164. data/test/dummy/tmp/cache/assets/sprockets/v3.0/IQ/IqSIFKQlYMHc1EbDcAmi1u7TqGO04pv24COBQR-isa4.cache +0 -0
  165. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ju/JuLeGTL8JaG5D9cyywHhb6IGinsNbD8yY6rbHWarK0Q.cache +1 -0
  166. data/test/dummy/tmp/cache/assets/sprockets/v3.0/KT/KTFy4DuyuDUx57JNP0W6fLLKCjxOWaeg7q17x5KDKfE.cache +0 -0
  167. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Kv/KvfeJal3RwHE_vFip-YDcfJf3hJYMDPzxHRPpXYqAQM.cache +0 -0
  168. data/test/dummy/tmp/cache/assets/sprockets/v3.0/L2/L2hU-WOXjHB0A8SrxDtNduvaKdwnjVQ03Z0oVziISHk.cache +0 -0
  169. data/test/dummy/tmp/cache/assets/sprockets/v3.0/L8/L88CHXoOVM-rgK33W0WiquqWq4DU9ZnngUlbj8DfAD8.cache +1 -0
  170. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LU/LUtgCslJQspV1kEmCn_syNPA4ufxPaN6hMtWohaXsnw.cache +0 -0
  171. data/test/dummy/tmp/cache/assets/sprockets/v3.0/La/LaCGKPUclgb07zgHCjGbpLD2vFtFrpfguSA7NqS8AmY.cache +1 -0
  172. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ld/LdllFJg9rQqiqWy0nyDVm4M0WfryZupUWXbpLMcH4Hw.cache +1 -0
  173. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Le/LeJ8g5lhSV21E-CuvXvQ8qE0SdGx1kCj4bpzGm9FPBA.cache +0 -0
  174. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Le/LeUQdG0D7O4lxvySURbAaoGowjdY-WmNqf3Mfqrfxyg.cache +3 -0
  175. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ln/Lnfq5j_dOByDX6HFfH6v4CKkXwkD0y8rDlbKuSbI9v0.cache +1 -0
  176. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NG/NGbUB1m2dRLO_AzYcl_oKkHdUuotDsIljodXXXwUFk8.cache +0 -0
  177. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NK/NKeacgI5h_cOQhJQTmlh5l4Nn7d-6DKGYfBIJOSDUf4.cache +0 -0
  178. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NL/NL1pFIPf2f5fuCvnoN5JF4kdGbWuHSLeeujGtqhfq6s.cache +1 -0
  179. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NT/NTFg7sX71FXGCXuBW1GUwf8uv47jZFRUrKLKIKO1Lcg.cache +0 -0
  180. data/test/dummy/tmp/cache/assets/sprockets/v3.0/NY/NYQt2UjSKo3RG_ugbqg590mhSB3mvP_gDHshzQmZVN8.cache +1 -0
  181. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Nj/NjZsOGvtYC0KyMgW_b7qtcn-Ed3x2gqsRxAnG20VBMA.cache +0 -0
  182. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Nm/NmvDTKFnq0WZO0lTY7shuZVZ35wQFx6JKventv2q0mE.cache +0 -0
  183. data/test/dummy/tmp/cache/assets/sprockets/v3.0/O3/O3rIEN4zKE7CJBM_LXwlKRJcqMURUwW_c0p9rsHJ3c8.cache +4 -0
  184. data/test/dummy/tmp/cache/assets/sprockets/v3.0/OF/OFU_37H7M33hEEuzcANwdQAGfkk90oPeGIJwIHf5Xzw.cache +0 -0
  185. data/test/dummy/tmp/cache/assets/sprockets/v3.0/OI/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +2 -0
  186. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Og/OgaMU4CNALgWmoD3psV4iD5JTmMxGGpfdcLkEDBrdKE.cache +1 -0
  187. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ol/OlTbAJQvBjcy3wv3CtTxLwTUCh23FReSq6n1cUQo7fU.cache +1 -0
  188. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ph/PhfCjJxri8GR-tRYNyZ4TGRxaqrQ2pVV7cLmqqow220.cache +1 -0
  189. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Pu/Pu1ZY6bHvgkdIneZmshfQMHO4lkdxTQGSzbUcbaR2JI.cache +0 -0
  190. data/test/dummy/tmp/cache/assets/sprockets/v3.0/QT/QTeSCu9r6R-LvVE6FvyfncwtlwuAd6YMS4u21lUHLRk.cache +0 -0
  191. data/test/dummy/tmp/cache/assets/sprockets/v3.0/QT/QTthbPiZXWJdfRab4l4_JZp54UB-wI9PjW7z-OCaoAE.cache +0 -0
  192. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Qk/QkMmY41W78BAA7nXmfYlXDl4FxoPgBdMUe9e75nLSjo.cache +1 -0
  193. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Qv/QvtydS7wcNNmB0KqFaQPpYZrpQgpm65pdcBVSI33zu8.cache +0 -0
  194. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Qv/qvDrg1W-I6y2xd5FwQGH_yi4BuTNebLqv0_LV8j58EM.cache +0 -0
  195. data/test/dummy/tmp/cache/assets/sprockets/v3.0/RU/RU_ty9eUgt_HW5HIIBzVe38BmehTQI_vAwjDrsn10Tk.cache +1 -0
  196. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Re/ReGBPYTMVGc5UsM5L7KB0_3B13aNUqF-fsr2inoeNsE.cache +2 -0
  197. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Rp/Rpto49Xq2Q5u3n6usxWXSE7maUSL5fmQ-rekahtllIo.cache +1 -0
  198. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Rv/RvEZGaGPIB-UH7NiAS47UlEz6GUMuDdd2uMjmqMvT_I.cache +1 -0
  199. data/test/dummy/tmp/cache/assets/sprockets/v3.0/S0/S0isKtIfhNRYwge39yzW9XMD7da3RVY1yn5pTHUikF4.cache +0 -0
  200. data/test/dummy/tmp/cache/assets/sprockets/v3.0/S4/S4P4Inx4O6mCu-KXPCN98udBP2vvhoP_MSgP8Po1h2o.cache +1 -0
  201. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Sc/ScfD4iKc5jFQ0sAqQcZ5vbjFrMAx1y-jsiFmQJ5zA5w.cache +1 -0
  202. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Su/Su5U7lV7sSBp5h2drScqaxP09Dzgxf5TsLqhNmF7MGw.cache +1 -0
  203. data/test/dummy/tmp/cache/assets/sprockets/v3.0/TG/TGXgExpgSc_VcKi1D8q4ny0qFNLn1zWiEPjuNlgqGg0.cache +0 -0
  204. data/test/dummy/tmp/cache/assets/sprockets/v3.0/TY/TYeBLIUjWLMlTnDsI_NJkTmwTjGiTqpI9WwVtWKi58I.cache +1 -0
  205. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ti/TIAgcRehg3UoD7fAMwDtRPsueyHdM5FFRtTzk4XsGQQ.cache +1 -0
  206. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ti/TiVa3yvBS2xeFmOHVVJYGgoUnIfCCXcUFHMuet94wRY.cache +1 -0
  207. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Tr/TrMavtlwXhgEVAvzNPfXmUqodHc3qmet6UGWf9d6zYE.cache +2 -0
  208. data/test/dummy/tmp/cache/assets/sprockets/v3.0/UK/UKk4VLLLR7q9NN5ese2d_ncL-x9qK7UGBEgA5feD9lw.cache +2 -0
  209. data/test/dummy/tmp/cache/assets/sprockets/v3.0/U_/U_4FnN2FfvOfugPWddXzWbw4DHmvFBUs5OsmFiPkiOE.cache +3 -0
  210. data/test/dummy/tmp/cache/assets/sprockets/v3.0/U_/u_QoQJErsVSZi9Cw2JQlauHZuLy0Dq-vuvecsZDZ1E0.cache +0 -0
  211. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Uc/Uc_ZTiXMSqzZZrxwSXk_IoCOjRLxD7lDlcnjW9wvJH8.cache +1 -0
  212. data/test/dummy/tmp/cache/assets/sprockets/v3.0/V6/V6qz8Dc6vP1WFXSqLfkrrM9syWy5XgI2Gep62rW6-WA.cache +1 -0
  213. data/test/dummy/tmp/cache/assets/sprockets/v3.0/VE/VEjXe6wfJKIldWLaqz3ly5pWzsZiYn7JaY7r4XLB0T0.cache +1 -0
  214. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wt/Wt2f-3IT2csmJ91fK6jFF2uDZnlQo6y1lszcBzEJyWc.cache +0 -0
  215. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Wt/wTcmxc80E-6PAz_V1hIWmNtN6nI0K8JQ1Rlc2BhL2C0.cache +1 -0
  216. data/test/dummy/tmp/cache/assets/sprockets/v3.0/X2/X2U6mKd2lA8LOGF6n9qXkc0i2o7wScG89aOK_NS02kM.cache +1 -0
  217. data/test/dummy/tmp/cache/assets/sprockets/v3.0/X2/x2m46SCZhw56dgfuvybJ3Ppq5sgz64fv8qu_4AW_LNU.cache +1 -0
  218. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XI/XI386_BkTj_gk7uXma5rbWR463wPft89TH5OjZKz2Tk.cache +1 -0
  219. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XL/XLgCehU5GSBGQhRots_0kKS4Pa9XkZOpu6Sol-YkfIo.cache +0 -0
  220. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XP/XPe3HBxR_h-ROk5qu20EvkHvF__RvrLRxMbNd7eJ_3k.cache +0 -0
  221. data/test/dummy/tmp/cache/assets/sprockets/v3.0/XX/XX3hVVDnv-sSVE7ZICha6u0NA3Ppl7l9JMSxEiPHaro.cache +0 -0
  222. data/test/dummy/tmp/cache/assets/sprockets/v3.0/X_/X_8kAzLdAuIIE06x9RzFo6ZRCxuR6SBC3YcbGtmSel4.cache +0 -0
  223. data/test/dummy/tmp/cache/assets/sprockets/v3.0/X_/x_ocdNMbswM_QSPcMA3rCY6Pxc7oS6Su7URUZI-TfGw.cache +2 -0
  224. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Xd/XDL5HGq0QRG8qEMjnfwd7KudUcAQ1gcfExvWOncMRw4.cache +1 -0
  225. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Xd/Xds81p3ZkxCM7EL8FE-LA9pEP-vt1os11SHAUoQDRDU.cache +0 -0
  226. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Xw/XwGalczmXLu1Vq7IES954Nt-bIUY_k-o0S4s_lK9QZc.cache +0 -0
  227. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Xw/XwJI5pHVYw-HuKwWYoeAcmr2nqtaXX2BUU0HLKDdLLI.cache +0 -0
  228. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Y-/Y-idZQQ3EwCSVS2t83NHKq-6a5wCO-0qQOvEcoR1BH4.cache +3 -0
  229. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YH/YHoGfC96NRHhFDFox8URBfqr3RlMaZapY8R1ROROBCU.cache +0 -0
  230. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YO/YORomuSWaH9UIEZMS78MsLuQ5w_8EBj4BfT20cBhkys.cache +0 -0
  231. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YR/YR7MQVhcz2a_uFzIgpFRDgQdqZOFrP4mQ-TenZNV0ro.cache +1 -0
  232. data/test/dummy/tmp/cache/assets/sprockets/v3.0/YY/YYsopTTp0zAa8AARWHxyfNuNoWoMJFc_dLzdmmxAfQA.cache +1 -0
  233. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Yb/YbF4X3Fte6fTBitUAdknKND5C3WX2Ch9W_ic6gCnCls.cache +1 -0
  234. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Yt/Yts0Xj-C3Fz_x6WA2WM-QLeZNam3QuouYqVdekrfrAI.cache +2 -0
  235. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Z4/Z4szC9mPaIq-4GAc__koHEKpv7u7wHzKmsGzjRRuGUA.cache +0 -0
  236. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Z4/z4l1kUVK_V4Zxcw9GRbqWjgn6XfW_gT-shx4TXDhYBM.cache +0 -0
  237. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ZS/ZSdczi_WgfcGf6T8pOIOP07xtYWzayAd1J8_oaYHlOI.cache +0 -0
  238. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Zf/ZfkqxFszjbVDAuZtXJpn-85YO1SjWn03Q3nCnUGEfGo.cache +1 -0
  239. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_9/_9G3bzAjv8L-5IO_zWzLO6TJ1LvBw-WCTrHLuupoJEI.cache +0 -0
  240. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_U/_Uj4WfSjcwp3Y4FaJyfTdk2YrFxpSn3PDfkTeHjdjYg.cache +0 -0
  241. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_z/_z32ICcgsTGhMat-hSNJ1Zs_Z1mn-WcPlWanTuz4Mow.cache +0 -0
  242. data/test/dummy/tmp/cache/assets/sprockets/v3.0/aZ/aZc1YG6XLLUwvwwAgNUs4_BuRePhg-Q7jKy5SzbxLos.cache +1 -0
  243. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bB/bBjejJEwZNPGlOwe3z3ij-Ioxpim5MBO2vIud8pOthQ.cache +0 -0
  244. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bF/bFzUPCp3h12jat2mDBKrknDhGIPGMzuPVGLTiifTxjA.cache +0 -0
  245. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bH/bHgt2eQnzB4T1PCAJuFLw3cZeUKoGJlaG0jkaXRMYWY.cache +0 -0
  246. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bS/bSgsBjtu-Y7WrxesKqith5xy2XjVTuWXEGghmr4rivk.cache +3 -0
  247. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bW/bWuyUVYXv1UBBeiimOQiJPa-Vll9LubPtXwDlinEcRk.cache +1 -0
  248. data/test/dummy/tmp/cache/assets/sprockets/v3.0/c9/c9cCA5h2e2lcRSB_xlgHVgaOZqVhIS-a9iRKPxbc3nM.cache +1 -0
  249. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cM/cMxRmRTWcm2kvRwccFPhgH4tv32a_nne4jKmUYtruqg.cache +1 -0
  250. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cN/cNbX5iq9BDETLU1py6kBl75t77IypeUadhFiqhLsNO0.cache +2 -0
  251. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cc/CcqQnWkWCnEIbpOgHRdAaNzFQHH2L9g6knBNJ3SB8lU.cache +1 -0
  252. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cc/cclgnxezXL5bICYgKM8EP6CM79EuRWNYmvhurLSvfPs.cache +0 -0
  253. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ce/ceSV8XTFh63ZHKGJlbnwKXslFPqWLiY8SGXt31FiNTo.cache +0 -0
  254. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ct/ctE1aQULS9C0J9LB59jpqNJfxmYJGXrq6ANE_tmcP4w.cache +0 -0
  255. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dG/dGYZEYroVgmnLBXQCYz9zNmGxHkxAVAlVFzGz7jsx3c.cache +0 -0
  256. data/test/dummy/tmp/cache/assets/sprockets/v3.0/de/de3Kd5dAVorCW6CiFB0dV2OOzaXIm79lVwGIy2BxtzQ.cache +1 -0
  257. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dh/dhG6jJqObdFb7S-vtYoaF6UvajS_AB64R_oO7dc_njM.cache +1 -0
  258. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dj/djTNvveHgepJFppcIoTTO_8BSWfz7u8twGkyg2KGpgY.cache +0 -0
  259. data/test/dummy/tmp/cache/assets/sprockets/v3.0/dr/drSlN03pJucysB4B7eLkghrT9ZBDhpTorjwhsdNeBI0.cache +1 -0
  260. data/test/dummy/tmp/cache/assets/sprockets/v3.0/e5/e5YwXAH4M1cmeMnY4e4tPCtFAelF3e619Uo84a7O7qw.cache +1 -0
  261. data/test/dummy/tmp/cache/assets/sprockets/v3.0/eW/eWmKSaV5eVYdVnRcCcqcBLObf13TOSuOvPqAXlJkr_4.cache +0 -0
  262. data/test/dummy/tmp/cache/assets/sprockets/v3.0/eZ/eZT6zqDkMjGHFqgkwngj4RuZlg0d7hNJxKCPTaojD70.cache +0 -0
  263. data/test/dummy/tmp/cache/assets/sprockets/v3.0/eZ/eZT_Zg0eETe2kp_kWdxpgQOMJEtjbLZaLiBsbTTYfkU.cache +2 -0
  264. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ed/ed_qL1hNVTKuXvmCCaf2fuu7m7wIpemGRzFKEKwhiEk.cache +1 -0
  265. data/test/dummy/tmp/cache/assets/sprockets/v3.0/el/elc1eh7AQtshCNx2BD4ycqBwwDW7l9W6_9PSSfkdRZw.cache +1 -0
  266. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fO/fO22bQR4zM1-2bL5N3pMbYD6T8THJlzF8ChIIHiaV-c.cache +0 -0
  267. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fc/FCuilTOjA7atfSufnrJX7rHLcHVldAsQklmbgS2K-Os.cache +0 -0
  268. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fc/fc49oE4sEETUNfi1q8ZjoBeAcwLlvrEUzN68YeBjdjM.cache +0 -0
  269. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ff/fF9GeK3y-65UhLrBd8gYyq5L3H9y4DHSHzMi6W7AU_w.cache +0 -0
  270. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ff/fF9VNsPFiwDEC4rlfFZxrYi9ZuVSRxSGC239k2h7qlk.cache +0 -0
  271. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ff/ff7iuOPVuvIGaVlIDs79qbQLLmR2KRB6iUrUUWoSSjU.cache +0 -0
  272. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ff/ffk-E0APeP-Ba5zsRy44pUjUV9_9ShJ4RbybLboXE4M.cache +0 -0
  273. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gA/gAn10cGy83oA1g2JKW58awG5trLrLnB6UIYxml3uhMA.cache +0 -0
  274. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gZ/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +2 -0
  275. data/test/dummy/tmp/cache/assets/sprockets/v3.0/h1/h143Swzrfuh5r0KHuGUjGD5LmT9EuJGM0W2KFNAS87Q.cache +2 -0
  276. data/test/dummy/tmp/cache/assets/sprockets/v3.0/h2/h2iaYlKrq06cFKZ7RQE4yO3RGYAda_9NsUhxeRtlg68.cache +0 -0
  277. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hZ/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +2 -0
  278. data/test/dummy/tmp/cache/assets/sprockets/v3.0/iJ/iJLso_yKSb6XJZsoDo7hHBcpRCC6WrB9WGAblrHWB50.cache +1 -0
  279. data/test/dummy/tmp/cache/assets/sprockets/v3.0/iJ/ijx4sr3F1vZzflIRPBnzGEOqCPOAxP5E1XENMzG4qSw.cache +0 -0
  280. data/test/dummy/tmp/cache/assets/sprockets/v3.0/iV/iVEtAXTWK7twmY_U5Gp5lP0L1zqbiBjDI9bKymw5wQQ.cache +0 -0
  281. data/test/dummy/tmp/cache/assets/sprockets/v3.0/iu/iu55c1ZNdMMG-wfBFNaDN64hBxQIuolrHPe3Dhg8AoQ.cache +0 -0
  282. data/test/dummy/tmp/cache/assets/sprockets/v3.0/j1/j1VJa8Bm4H7QML4QCgCWdo5og8MUvlO6JIePMi9quxY.cache +0 -0
  283. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jJ/jJDfuKEIKaO4anc9amIMj5VRHSVfIDAIl3IMdUHeJ68.cache +1 -0
  284. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jM/jMygXqKrCCOEXGW6nU0CBhLl3_OdGlDfZGSzljVp9cw.cache +0 -0
  285. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jQ/jQRLSAj2sB6Mor5MY9RcCOJvfqpYMY1MwpkArnwbaNg.cache +1 -0
  286. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jg/jgUQwSKVupdt_LM1yzMI9sPa7bUS0hL5NYF_7PDlQZ4.cache +0 -0
  287. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jw/jw64rIhCrdvowVxQ3lSeqlBy9KNUZti1emiuiVLaD6I.cache +0 -0
  288. data/test/dummy/tmp/cache/assets/sprockets/v3.0/kB/kBs_Zv3NgQPG_Erg_0aTHKPfGN6pTim3ZA2gfj6lXOI.cache +1 -0
  289. data/test/dummy/tmp/cache/assets/sprockets/v3.0/kN/kNbCCN-jnLMUnSRHdZYZm8J0LRr7DObseTCm0iqNSvI.cache +0 -0
  290. data/test/dummy/tmp/cache/assets/sprockets/v3.0/lY/lYX9apLRCeLVEQmZpPWPEVXX4fJbvCd1kwP--mCVLEU.cache +0 -0
  291. data/test/dummy/tmp/cache/assets/sprockets/v3.0/lc/lcUuxX1kQ2pqBCSae7T757ZBrLC-kykZBzE_IeI1P9Q.cache +0 -0
  292. data/test/dummy/tmp/cache/assets/sprockets/v3.0/lw/lwwQcg5LmgQzJk92PReGYykEm8Ro33bIc8H9kAZfQ0c.cache +0 -0
  293. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mf/mfSQliTMKdSX9o54w2Cekfmthv8R7QNOhRC-9Ofvhs8.cache +1 -0
  294. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mg/mgepIPH6FskFYPupUwR2zar-vPVmTj21YF5mrDoAbJk.cache +0 -0
  295. data/test/dummy/tmp/cache/assets/sprockets/v3.0/n2/n2RGsvZoKBxTiLhLJbX7VfPN_q3ki9fSDLKpTg9Qpag.cache +1 -0
  296. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nv/nv353JHGANla93EeXt0nbNR7q6Fc_k-Cww2sm0XLO3I.cache +1 -0
  297. data/test/dummy/tmp/cache/assets/sprockets/v3.0/oX/oX6o-19Y6MZIzE5WBT20iflpYRQ5lxqOP46WbSkrswk.cache +1 -0
  298. data/test/dummy/tmp/cache/assets/sprockets/v3.0/p-/p-YGCQ4ATLB9KhNUf6SaCWeDSi-hF25M4tlEw6wL-Tc.cache +1 -0
  299. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pE/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +2 -0
  300. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pZ/Pz22fzMNr_4S5LTu_F4aHvfLwi3a5FxWzKSB7Ih0uo4.cache +1 -0
  301. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pZ/pZeDBpX8uYaZQSL8QFb81jahqzVveXCr7-tkG1_QFMQ.cache +0 -0
  302. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pm/PmCDqEeLtrPfP2wF8MwUzaxxNP-9uAs2z6H7nT15ZT4.cache +1 -0
  303. data/test/dummy/tmp/cache/assets/sprockets/v3.0/pm/pm0Z0fr1Ng6EPwmdfw1xn3hB0ErARZuc72vQFgPXMa4.cache +1 -0
  304. data/test/dummy/tmp/cache/assets/sprockets/v3.0/px/pxxnRt2S5YKvr89tE4B2uqWKSn_tzX2iMKaKc-L3mp0.cache +0 -0
  305. data/test/dummy/tmp/cache/assets/sprockets/v3.0/py/pyeQCwCKcTKGdUT-hUoQTeAaNBcmz9IX6ytzEOVTIRE.cache +0 -0
  306. data/test/dummy/tmp/cache/assets/sprockets/v3.0/qc/qc_xczyLqAbmyMs6ToF9Yh5Y0oCPIQjLpzHiq63LWiw.cache +0 -0
  307. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rK/rKfAjDHfXPWkuIQgDFeROxJHcCrAS-6Cu_LzqEP_tY4.cache +3 -0
  308. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rQ/rQLidlmBnkrRwbSwBT8TFpss6O0RI5eBRgIqAAf7I9w.cache +0 -0
  309. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rd/rdeyGdg6nFOlk7mcLZ1v48IshJec5MYarn6wtVbTlbw.cache +1 -0
  310. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ri/ricj8G0pRbsatr9A6Ntp6UXo-EqVDghl9E_UaFnWyDI.cache +1 -0
  311. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rn/rnOtD1XvKuRcZD61y_olzgHQlxMJKFpADr46croj5r8.cache +1 -0
  312. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rs/rs29jYXdRVDaE8LFpPP5sue1m6VBOjzSSSmbj3w0R7g.cache +3 -0
  313. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ry/rygDWHz1u7v_E5X8f25Ls13ig8RrWj7AZdXJdO-Bq6Q.cache +1 -0
  314. data/test/dummy/tmp/cache/assets/sprockets/v3.0/s7/s7c54SRRAn01lzB0-C1BGaqZ6RMq3nyMAia0CyZND5k.cache +0 -0
  315. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sL/sLnioaoEAvcd1PA7DFF87-07iqZ7kMmomeiMvkhw6No.cache +0 -0
  316. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sO/sO6cCZ8-40-uH9Q3VQwsuEzFIrVAf5uFyOa-DLD196g.cache +0 -0
  317. data/test/dummy/tmp/cache/assets/sprockets/v3.0/sz/szmBNR1H1DygmcGPID8zNIcbmrO1vGqzHYRGuc5u7-c.cache +3 -0
  318. data/test/dummy/tmp/cache/assets/sprockets/v3.0/t5/t5yKLDb-oJrmM6EidUDDJ9htZXQRF_hTMBXD1A53RBs.cache +0 -0
  319. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tL/tLjAgIG8H6aT1yoSACGN9wfOA8P1Arys2JKZkVGmNXQ.cache +0 -0
  320. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tU/tU-Tu9-noE-IHLvRNqvK_woXM1aNYteaOPgUhxs6YLU.cache +3 -0
  321. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tW/tW8xtl_kBfnL8qfbu3og68_AnXJ7YupNE6BEDPPFTsw.cache +0 -0
  322. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tb/TBsC0J-09bPcPCk5aGUFhdmusxLwiGyIegmawsB3xjw.cache +0 -0
  323. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tb/tb2EHpruj_NKnlrPA8noFSH5EtqZCqBhcaFC-BVAzp0.cache +0 -0
  324. data/test/dummy/tmp/cache/assets/sprockets/v3.0/th/thEXJAStDw_NJ0oW4BatqUB4NUovgmzLYjQpoGmnt_M.cache +1 -0
  325. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tq/tqXoYuJiHJnkCpau1HYEYtY2-wDz7t8r5iGWAbGMlu0.cache +3 -0
  326. data/test/dummy/tmp/cache/assets/sprockets/v3.0/u0/U01H5dfrMbux5GogbLyC4SBOGndzsyFaj1Tvt-x_MTM.cache +1 -0
  327. data/test/dummy/tmp/cache/assets/sprockets/v3.0/u0/u05ODfGMQPjYzkiqtypQN02wNjb1TOsdM4nA6N0Gh7U.cache +1 -0
  328. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vQ/vQtYbe1XWQpkoH7AsCmn3Vg90HK8gBHJWMr-OE_Yzbg.cache +1 -0
  329. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vX/vXIuktNgDrPy8Z26iigTe5KzkVH0MLWnU_tO7fOcuQY.cache +1 -0
  330. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vi/vikgCXTfdSo0-dQ8npKdHUscpgFEvOuH8yl4kh8sg1g.cache +0 -0
  331. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vu/vuwwEKj3Pn9TBEpVl120M_XgalUJIHxkg8ki2A6V6Sk.cache +0 -0
  332. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vv/vvXsHOAgAUjJPzD2Uk0jFgsQ-q9SPSBAwKypglmyo9o.cache +1 -0
  333. data/test/dummy/tmp/cache/assets/sprockets/v3.0/w2/w2nxaML0A06iskoPgzyx7IkuH7eTgBz9pOScOPROVng.cache +0 -0
  334. data/test/dummy/tmp/cache/assets/sprockets/v3.0/wp/wpXO5iYAIrHziTkLjpJ0fLFEWA20vjlc-zodbcbXrXI.cache +1 -0
  335. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ww/wwyHZev8ZI64E4ZkAEQrGUwshw5Q5Pg0SXp5Q7EiMME.cache +0 -0
  336. data/test/dummy/tmp/cache/assets/sprockets/v3.0/x3/x3ugZrAsFu-SoYrFZ3QESK2Bv-n0twnYh7MfrC2ei5A.cache +4 -0
  337. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xE/xEt1J9sNcPPTzLnqYdO0cwcxIKiiNUvbOX1XjY4mOwQ.cache +4 -0
  338. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xO/xOHSvfsoDwJ31vBs7MeJSpnZXhYmahjbpoBruNFMSTw.cache +1 -0
  339. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xR/xRo_XLPpPL6rw8FynKSmB1jbUF4U4sdFfa9qlFEaV-M.cache +1 -0
  340. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xb/XB6BuL_-MlRJw35sb8y-MuMukKnImXWF3tM7s5NXTCs.cache +0 -0
  341. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xb/xbDqy_ABKyvnDx5qFb7bOefr2mRNtkJS6jxgaK2mymE.cache +1 -0
  342. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yE/yE-vYTftOCvTjiXwsSaPhc68Ok3Swuj7FeHDt0X1fuY.cache +0 -0
  343. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yW/yWhGG9UHY-eITiHpveUgL7MEefJBaJeb69K-sfnafHk.cache +0 -0
  344. data/test/dummy/tmp/cache/assets/sprockets/v3.0/yv/yvDUKhKfIJ7Mzn3EKrWjn7dUzISDvjV7NdAZHQb2e4k.cache +1 -0
  345. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zE/zEyHh8U1s_vyFT8TKnThlXAwgkQTZilKRZijXrGmXZQ.cache +1 -0
  346. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zQ/zQfrKzck6RKqYFUfKWT4m168XkPB0bFfxD-vJFHwzBs.cache +3 -0
  347. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zd/ZdNzirUsmGWTgLcSe08uPLwZHnzZS6fglg2UXqiZHCQ.cache +0 -0
  348. data/test/dummy/tmp/cache/assets/sprockets/v3.0/zd/zduZXmFNo0y1enN7_NdRVQRkSq5Ig0zd-ISOx8rZJac.cache +1 -0
  349. data/test/kadmin/form_test.rb +6 -0
  350. data/test/test_helper.rb +32 -0
  351. metadata +794 -0
data/lib/kadmin.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'kadmin/configuration'
2
+ require 'kadmin/error'
3
+ require 'kadmin/engine'
4
+ require 'kadmin/auth'
5
+
6
+ module Kadmin
7
+ class << self
8
+ delegate :logger, :logger=, to: :config
9
+
10
+ def config
11
+ return @config ||= Kadmin::Configuration.new
12
+ end
13
+
14
+ def configure
15
+ yield(config) if block_given?
16
+ return config
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ # Third party dependency
2
+ require 'omniauth-google-oauth2'
3
+
4
+ # Core files
5
+ require 'kadmin/auth/unauthorized_error'
6
+ require 'kadmin/auth/configuration'
7
+ require 'kadmin/auth/user'
8
+ require 'kadmin/auth/user_store'
9
+
10
+ module Kadmin
11
+ module Auth
12
+ class << self
13
+ def users
14
+ @users ||= config.user_store_class.new
15
+ end
16
+
17
+ def config
18
+ return @config ||= Kadmin::Auth::Configuration.new
19
+ end
20
+
21
+ def configure
22
+ yield(config) if block_given?
23
+ return config
24
+ end
25
+
26
+ def omniauth_provider
27
+ return config.oauth_credentials.present? ? :google_oauth2 : :developer
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,66 @@
1
+ module Kadmin
2
+ module Auth
3
+ class Configuration
4
+ OAuthCredentials = Struct.new(:id, :secret)
5
+
6
+ # @return [Kadmin::Auth::Configuration::OAuthCredentials] credentials for OAuth2 authentication; if absent, fallback to :developer provider
7
+ attr_accessor :oauth_credentials
8
+
9
+ # @return [Class<Kadmin::Auth::User>] class to use for authenticated users (mostly for resource authorization)
10
+ attr_accessor :user_class
11
+
12
+ # @return [Class<Kadmin::Auth::UserStore>] class for user lookup/registration
13
+ attr_accessor :user_store_class
14
+
15
+ def initialize
16
+ @oauth_credentials = nil
17
+ @user_class = Kadmin::Auth::User
18
+ @user_store_class = Kadmin::Auth::UserStore
19
+ @enabled = false
20
+ end
21
+
22
+ # @return [Boolean] true if enabled, false otherwise
23
+ def enabled?
24
+ return @enabled
25
+ end
26
+
27
+ # Enables authentication and adds OmniAuth middlewares
28
+ def enable!
29
+ unless @enabled
30
+ append_omniauth_middleware
31
+ @enabled = true
32
+ end
33
+ end
34
+
35
+ # Disables authentication and removes OmniAuth middlewares
36
+ def disable!
37
+ if @enabled
38
+ delete_omniauth_middleware
39
+ @enabled = false
40
+ end
41
+ end
42
+
43
+ def append_omniauth_middleware
44
+ OmniAuth.config.logger = Kadmin.logger
45
+ OmniAuth.config.path_prefix = File.join(Kadmin.config.mount_path, OmniAuth.config.path_prefix)
46
+
47
+ provider_args = case Kadmin::Auth.omniauth_provider
48
+ when :google_oauth2
49
+ [:google_oauth2, @oauth_credentials.id, @oauth_credentials.secret]
50
+ else
51
+ [:developer, fields: [:email]]
52
+ end
53
+
54
+ Rails.application.config.middleware.use OmniAuth::Builder do
55
+ provider(*provider_args)
56
+ end
57
+ end
58
+ private :append_omniauth_middleware
59
+
60
+ def delete_omniauth_middleware
61
+ Rails.application.config.middleware.delete OmniAuth::Builder
62
+ end
63
+ private :delete_omniauth_middleware
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,14 @@
1
+ module Kadmin
2
+ module Auth
3
+ class UnauthorizedError < Kadmin::Error
4
+ # Attempts to translate message, if not found returns message as a string
5
+ def message
6
+ I18n.t(@message, default: @message)
7
+ end
8
+
9
+ def title
10
+ I18n.t('kadmin.auth.unauthorized')
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module Kadmin
2
+ module Auth
3
+ class User
4
+ attr_accessor :email
5
+
6
+ def initialize(email)
7
+ @email = email
8
+ end
9
+
10
+ def authorized?(_request)
11
+ return true
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ module Kadmin
2
+ module Auth
3
+ class UserStore
4
+ def initialize
5
+ @store = {}
6
+ end
7
+
8
+ def get(email)
9
+ return @store[email.downcase]
10
+ end
11
+
12
+ def set(email, user)
13
+ @store[email.downcase] = user
14
+ end
15
+
16
+ def exists?(email)
17
+ @store.key?(email.downcase)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Kadmin
2
+ class Configuration
3
+ # @return [Logger] An instance of a Ruby compatible logger
4
+ attr_accessor :logger
5
+
6
+ # @return [String] the path the engine is mounted at (used for authentication routes)
7
+ attr_accessor :mount_path
8
+
9
+ # @return [Array<Hash<Symbol, String>] list of admin links, format: { title: '', path: '' }
10
+ attr_accessor :navbar_links
11
+
12
+ def initialize
13
+ @mount_path = '/admin'
14
+ @logger = Rails.logger
15
+ @navbar_links = []
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ # Rails dependencies
2
+ require 'bootstrap-sass'
3
+ require 'sass-rails'
4
+ require 'jquery-rails'
5
+ require 'select2-rails'
6
+
7
+ module Kadmin
8
+ class Engine < ::Rails::Engine
9
+ isolate_namespace Kadmin
10
+
11
+ initializer 'kadmin.install', after: :finisher_hook do
12
+ Kadmin.logger = Rails.logger
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ module Kadmin
2
+ # Base class for all gem errors
3
+ class Error < StandardError
4
+ end
5
+ end
6
+
7
+ require 'kadmin/errors/authorization'
@@ -0,0 +1,15 @@
1
+ module Kadmin
2
+ module Errors
3
+ class Authorization < Kadmin::Error
4
+ attr_reader :resource, :user, :reason
5
+
6
+ def initialize(resource, user, reason)
7
+ @resource = resource
8
+ @user = user
9
+ @reason = reason
10
+
11
+ super("#{@user} is unauthorized to access #{@resource} => #{@reason}")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,64 @@
1
+ module Kadmin
2
+ # Parsing is done by using attribute setters. If you have an attribute called
3
+ # name, then add a reader/writer for it, name and name=, and perform the
4
+ # parsing in name=. If there is no parsing to be done, you can simply delegate
5
+ # the method to the underlying model.
6
+ #
7
+ # If the attribute is a nested form, in the writer, simply instantiate that
8
+ # form, and pass the attributes on to it, then update the model's association
9
+ # (if any) to reflect the changes.
10
+ #
11
+ # Validation is performed like on a normal model or ActiveRecord object.
12
+ # If you have no extra validation to perform than that of the model, simply
13
+ # delegate the validate and valid? methods to the model.
14
+ #
15
+ # To use nested forms, you need to add a reader and a writer. For example,
16
+ # for a form called Person, with potentially X nested Person forms as children,
17
+ # you would have:
18
+ # class Person
19
+ # def children
20
+ # [@child1, @child2]
21
+ # end
22
+ #
23
+ # def children_attributes=(attributes)
24
+ # ...instantiate subforms and pass attributes...
25
+ # end
26
+ # end
27
+ class Form
28
+ # Provides common validators and methods to add custom ones
29
+ include ActiveModel::Validations
30
+
31
+ # Provides translation scope and helpers (useful for error messages)
32
+ # Also includes ActiveModel::Naming at the same time
33
+ extend ActiveModel::Translation
34
+
35
+ # @return [ActiveModel::Model] underlying model to populate
36
+ attr_reader :model
37
+
38
+ delegate :id, :persisted?, to: :model
39
+
40
+ def initialize(model)
41
+ @errors = ActiveModel::Errors.new(self)
42
+ @model = model
43
+ @form_input = {}
44
+ end
45
+
46
+ # @!group Parsing/Deserialization
47
+
48
+ # Populates the model based on the form input. The input is typically obtained
49
+ # from the controller's params method, but can be any hash which conforms to
50
+ # whatever the form object is expecting.
51
+ # If some input was previously parsed, there is no "rollback" on the state
52
+ # of the model; it should be done prior to reparsing if it is necessary.
53
+ # @param [Hash<String, Object>] form_input a hash representing the raw form input
54
+ def assign_attributes(form_input)
55
+ @errors.clear
56
+ form_input.each do |attr, value|
57
+ setter = "#{attr}="
58
+ send(setter, value) if respond_to?(setter)
59
+ end
60
+ end
61
+
62
+ # @!endgroup
63
+ end
64
+ end
@@ -0,0 +1,3 @@
1
+ module Kadmin
2
+ VERSION = '0.1.4'.freeze
3
+ 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,4 @@
1
+ class AdminController < Kadmin::ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -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,8 @@
1
+ class AuthorizedController < ApplicationController
2
+ include Kadmin::Concerns::AuthorizedUser
3
+
4
+ before_action :authorize
5
+
6
+ def index
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,6 @@
1
+ class Person < ActiveRecord::Base
2
+ has_many :relationships, autosave: true, dependent: :destroy, foreign_key: 'person_from'
3
+
4
+ has_many :children, { autosave: true, dependent: :destroy, foreign_key: 'person_to' }, -> { where(name: 'child') }
5
+ has_one :father, { autosave: true, dependent: :destroy, foreign_key: 'person_to' }, -> { where(name: 'father') }
6
+ end
@@ -0,0 +1,4 @@
1
+ class Relationship < ActiveRecord::Base
2
+ belongs_to :from, autosave: true, class_name: Person.name, foreign_key: 'person_from'
3
+ belongs_to :to, autosave: true, class_name: Person.name, foreign_key: 'person_to'
4
+ end
@@ -0,0 +1 @@
1
+ <h1>You are authorized my dude!</h1>
@@ -0,0 +1 @@
1
+ <h1>You are authorized, but not within an admin controller!</h1>
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dummy</title>
5
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
6
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>