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
@@ -0,0 +1,19 @@
1
+ module Kadmin
2
+ class DashController < Kadmin::ApplicationController
3
+ # @!group Endpoints
4
+
5
+ # GET /
6
+ def index
7
+ end
8
+
9
+ # @!endgroup
10
+
11
+ # @!group Helpers
12
+
13
+ def set_navbar_links
14
+ @layout_navbar_links = Kadmin.config.navbar_links
15
+ end
16
+
17
+ # @!endgroup
18
+ end
19
+ end
@@ -0,0 +1,58 @@
1
+ module Kadmin
2
+ class ApplicationController < ActionController::Base
3
+ layout 'kadmin/application'
4
+
5
+ helper Kadmin::ApplicationHelper
6
+ helper Kadmin::BootstrapHelper
7
+ helper Kadmin::NavigationHelper
8
+ helper Kadmin::PaginationHelper
9
+
10
+ include Kadmin::Concerns::AuthorizedUser
11
+
12
+ before_action :authorize
13
+ before_action :set_navbar_links
14
+ before_action :set_default_format
15
+
16
+ # @!group Error Handling
17
+
18
+ unless defined?(BetterErrors)
19
+ rescue_from StandardError, with: :handle_error
20
+ rescue_from ActiveRecord::RecordNotFound, with: :not_found
21
+ rescue_from ActionController::ParameterMissing, with: :params_missing
22
+ end
23
+
24
+ def params_missing(error)
25
+ handle_error(error, title: I18n.t('kadmin.errors.params_missing'), status: :bad_request)
26
+ end
27
+
28
+ def not_found(error)
29
+ handle_error(error, title: I18n.t('kadmin.errors.not_found'), status: :not_found)
30
+ end
31
+
32
+ def handle_error(error, options = {})
33
+ options = {
34
+ title: error.try(:title) || error.class.name,
35
+ message: error.message,
36
+ status: :internal_server_error
37
+ }.merge(options)
38
+ render 'kadmin/error', status: options[:status], locals: options
39
+ end
40
+
41
+ # @!endgroup
42
+
43
+ # @!group Helpers
44
+
45
+ # Overload in the sub-controllers to set up the links in the layout
46
+ def set_navbar_links
47
+ @layout_navbar_links = []
48
+ end
49
+ protected :set_navbar_links
50
+
51
+ def set_default_format
52
+ params[:format] = 'html' if params[:format].blank?
53
+ end
54
+ protected :set_default_format
55
+
56
+ # @!endgroup
57
+ end
58
+ end
@@ -0,0 +1,4 @@
1
+ module Kadmin
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,53 @@
1
+ module Kadmin
2
+ # Collection of Bootstrap helpers
3
+ module BootstrapHelper
4
+ # @see http://getbootstrap.com/components/#glyphicons-glyphs
5
+ # @param [String] icon the part after glyphicon-
6
+ def glyphicon(icon)
7
+ return content_tag(:span, ' ', class: "glyphicon glyphicon-#{icon}", 'aria-hidden': 'true')
8
+ end
9
+
10
+ # @param [Boolean] condition condition of evaluate
11
+ # @param [String] icon_true the glyphicon to use if true
12
+ # @param [String] icon_false the glyphicon to use if false
13
+ def glyphicon_if_else(condition, icon_true, icon_false)
14
+ return condition ? glyphicon(icon_true) : glyphicon(icon_false)
15
+ end
16
+
17
+ # Generates HTML for a bootstrap alert message, optionally closable.
18
+ # @param [String] type the type of the alert: danger, success, info, warning, or any alert-<TYPE> defined in your CSS
19
+ # @param [String] text optionally some text if you're not going to pass a block
20
+ # @param [Boolean] dismissible if true, adds a close button to the alert. Requires JS enabled
21
+ # @param [Proc] block optional block to pass if you want add more complex HTML inside
22
+ def alert(type, text: '', dismissible: true, &block)
23
+ css_classes = %W(alert alert-#{type})
24
+ css_classes << 'alert-dismissible' if dismissible
25
+
26
+ block_content = capture(&block)
27
+
28
+ html = nil
29
+ unless block_content.blank? && text.blank?
30
+ html = content_tag(:div, '', class: css_classes.join(' '), role: 'alert') do
31
+ content = text.html_safe
32
+
33
+ if dismissible
34
+ button = button_tag(type: 'button', class: 'close', 'data-dismiss': 'alert') do
35
+ content_tag(:span, '&times', {}, false)
36
+ end
37
+ content.concat(button)
38
+ end
39
+
40
+ content.concat(capture(&block)) if block_given?
41
+ end
42
+ end
43
+
44
+ return html
45
+ end
46
+
47
+ # @param [Hash, String] url_options anything accepted by link_to and image_tag
48
+ # @param [Integer] max_height maximum height of the thumbnail
49
+ def thumbnail_link(url_options, max_height)
50
+ return link_to(image_tag(url_options), url_options, class: 'thumbnail', style: "max-height: #{max_height}px", target: 'new')
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,9 @@
1
+ module Kadmin
2
+ class FormBuilder < ActionView::Helpers::FormBuilder
3
+ # Creates a checkbox where the value is 0 when checked, 1 when unchecked.
4
+ # @see Kadmin::Forms::InvertedCheckBox
5
+ def inverted_check_box(method, options = {})
6
+ Kadmin::Forms::InvertedCheckBox.new(@object_name, method, @template, '0', '1', objectify_options(options)).render
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module Kadmin
2
+ module Forms
3
+ class InvertedCheckBox < ActionView::Helpers::Tags::CheckBox
4
+ # Overload how it gets the value and return the invert
5
+ def value(*args)
6
+ return !super
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,28 @@
1
+ module Kadmin
2
+ module NavigationHelper
3
+ # Generates HTML for a bootstrap navigation link
4
+ # @param [String] title the navigation text
5
+ # @param [Hash, String] path the path for the link
6
+ # @param [Proc] block optional block to include content within the link
7
+ def nav_link_to(title, path, &block)
8
+ css_classes = []
9
+ css_classes << 'active' if request.path.starts_with?(path)
10
+ return content_tag(:li, link_to(title, path, &block), class: css_classes.join(' '))
11
+ end
12
+
13
+ # Generates a navigation drop down for bootstrap
14
+ # @param [String] prompt dropdown prompt
15
+ # @param [Array<Hash,String>] links list of links to add within the dropdown
16
+ def dropdown(prompt, links = [])
17
+ button_content = content_tag(:span, '', class: 'caret').prepend(prompt)
18
+ button = button_tag(button_content, type: 'button', data: { toggle: 'dropdown' }, class: 'btn btn-default')
19
+ list = content_tag(:ul, '', class: 'dropdown-menu') do
20
+ links.reduce(ActiveSupport::SafeBuffer.new) do |buffer, link|
21
+ buffer + content_tag(:li, link)
22
+ end
23
+ end
24
+
25
+ return content_tag(:div, button + list, class: 'dropdown', style: 'display: inline-block;')
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,95 @@
1
+ module Kadmin
2
+ module PaginationHelper
3
+ # @param [Kadmin::Finder::Pager] pager context to paginate
4
+ # @param [Array<Integer>] sizes array of page sizes
5
+ def paginate(pager, sizes)
6
+ return content_tag(:div, pagination_page_list(pager) + pagination_size_list(pager, sizes), class: 'btn-toolbar')
7
+ end
8
+
9
+ # Page Links
10
+ # Always include:
11
+ # => Previous page, first, last, next
12
+ # If we're over page 10, at ... after previous link
13
+ # If there aren't showing the last page yet, add ... before next link
14
+ def pagination_page_list(pager)
15
+ links = []
16
+ window = (pager.current_page - 2)..(pager.current_page + 2)
17
+
18
+ window = Range.new(0, window.end - window.begin) if window.begin.negative?
19
+ window = Range.new(window.begin, pager.pages - 1) if window.end >= pager.pages
20
+
21
+ first_link = pagination_navigate_link(pager, 0, '&laquo;')
22
+ previous_link = pagination_navigate_link(pager, pager.current_page - 1, '&lsaquo;')
23
+ last_link = pagination_navigate_link(pager, pager.pages - 1, '&raquo;')
24
+ next_link = pagination_navigate_link(pager, pager.current_page + 1, '&rsaquo;')
25
+
26
+ if pager.previous_page?(window.begin)
27
+ links << pagination_non_link('&hellip;', 'disabled')
28
+ end
29
+
30
+ window.each do |number|
31
+ links << pagination_page_link(number, pager)
32
+ end
33
+
34
+ if pager.next_page?(window.end)
35
+ links << pagination_non_link('&hellip;', 'disabled')
36
+ end
37
+
38
+ links.unshift(first_link, previous_link)
39
+ links << next_link
40
+ links << last_link
41
+
42
+ return content_tag(:div, links.reduce(&:+), class: 'btn-group')
43
+ end
44
+ private :pagination_page_list
45
+
46
+ def pagination_non_link(text, css_classes = nil)
47
+ classes = %w(btn btn-default) + Array.wrap(css_classes)
48
+ return content_tag(:div, text.to_s.html_safe, class: classes.join(' '))
49
+ end
50
+ private :pagination_non_link
51
+
52
+ def pagination_link(text, options = {}, css_classes = nil)
53
+ classes = %w(btn btn-default) + Array.wrap(css_classes)
54
+ return link_to(text.to_s.html_safe, params.merge(options), class: classes.join(' '))
55
+ end
56
+ private :pagination_link
57
+
58
+ def pagination_page_link(page, pager)
59
+ link = if pager.current_page?(page)
60
+ pagination_non_link(page + 1, 'active')
61
+ else
62
+ pagination_link(page + 1, page_offset: pager.offset_at(page))
63
+ end
64
+
65
+ return link
66
+ end
67
+ private :pagination_page_link
68
+
69
+ def pagination_navigate_link(pager, page, text)
70
+ link = if pager.contains?(page)
71
+ pagination_link(text, page_offset: pager.offset_at(page))
72
+ else
73
+ pagination_non_link(text, 'disabled')
74
+ end
75
+
76
+ return link
77
+ end
78
+ private :pagination_navigate_link
79
+
80
+ # Page Sizes
81
+ def pagination_size_list(pager, sizes)
82
+ label = content_tag(:div, 'Per page: ', class: 'btn')
83
+ links = sizes.map do |size|
84
+ if pager.size == size
85
+ pagination_non_link(size, 'active')
86
+ else
87
+ pagination_link(size, page_size: size)
88
+ end
89
+ end.reduce(&:+)
90
+
91
+ return content_tag(:div, label + links, class: 'btn-group')
92
+ end
93
+ private :pagination_size_list
94
+ end
95
+ end
@@ -0,0 +1,14 @@
1
+ <% if flash.notice.present? || flash.alert.present? %>
2
+ <div class='alerts'>
3
+ <%= alert('danger') do %>
4
+ <% Array.wrap(flash.alert).each do |danger| %>
5
+ <p><%= glyphicon('exclamation-sign') %> <%= danger&.html_safe %></p>
6
+ <% end %>
7
+ <% end %>
8
+ <%= alert('success') do %>
9
+ <% Array.wrap(flash.notice).each do |success| %>
10
+ <p><%= glyphicon('ok-sign') %> <%= success&.html_safe %></p>
11
+ <% end %>
12
+ <% end %>
13
+ </div>
14
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <div style='text-align: center; margin-top: 1em'>
2
+ <p><%= link_to(t('kadmin.auth.please_login'), omniauth_provider_link) %></p>
3
+ <p><%= t('kadmin.auth.login_required') %></p>
4
+ </div>
@@ -0,0 +1,5 @@
1
+ <div class='jumbotron' style='margin-top: 1em;'>
2
+ <h1 class='display-3'><%= t('kadmin.welcome', user: current_user) %></h1>
3
+ <hr class='m-y-2'>
4
+ <p><%= t('kadmin.dash_message') %></p>
5
+ </div>
@@ -0,0 +1,5 @@
1
+ <div class='jumbotron' style='margin-top: 1em'>
2
+ <h1 class='display-3'><%= title %></h1>
3
+ <hr class='m-y-2'>
4
+ <p><%= message %></p>
5
+ </div>
@@ -0,0 +1,68 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
8
+
9
+ <title>Admin</title>
10
+
11
+ <%= stylesheet_link_tag "kadmin/application", media: "all" %>
12
+ <%= javascript_include_tag "kadmin/application" %>
13
+ <%= csrf_meta_tags %>
14
+
15
+ <!-- Additional CSS -->
16
+ <%= yield :stylesheets %>
17
+ </head>
18
+ <body>
19
+ <nav class="navbar navbar-default navbar-static-top" style="margin-bottom: 0;">
20
+ <div class="container-fluid">
21
+ <div class="navbar-header">
22
+ <%= link_to('Admin Dashboard', Kadmin.config.mount_path, { class: 'navbar-brand' }) %>
23
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
24
+ <span class="icon-bar"></span>
25
+ <span class="icon-bar"></span>
26
+ <span class="icon-bar"></span>
27
+ </button>
28
+ </div>
29
+ <div class="collapse navbar-collapse">
30
+ <% unless @layout_navbar_links.blank? %>
31
+ <ul class="nav navbar-nav navbar-left">
32
+ <% @layout_navbar_links.each do |link| %>
33
+ <%= nav_link_to(link[:title], link[:path]) %>
34
+ <% end %>
35
+ </ul>
36
+ <% end %>
37
+ <% if logged_in? %>
38
+ <ul class="nav navbar-nav navbar-right">
39
+ <li><%= link_to(t('kadmin.authorization.logout'), Kadmin::Engine.routes.url_helpers.auth_logout_path) %></li>
40
+ </ul>
41
+ <% end %>
42
+ </div>
43
+ </nav>
44
+ <div class="container-fluid content">
45
+ <div class="row">
46
+ <% if content_for?(:sidebar) %>
47
+ <!-- main -->
48
+ <div class="col-sm-8 col-md-8 col-lg-9 main">
49
+ <%= render partial: 'kadmin/alerts' %>
50
+ <%= yield %>
51
+ </div>
52
+ <!-- sidebar -->
53
+ <div class="col-sm-4 col-md-4 col-lg-3 sidebar hidden-xs">
54
+ <%= yield(:sidebar) %>
55
+ </div>
56
+ <% else %>
57
+ <div class="col-sm-12 col-md-12 main">
58
+ <%= render partial: 'kadmin/alerts' %>
59
+ <%= yield %>
60
+ </div>
61
+ <% end %>
62
+ </div>
63
+ </div>
64
+
65
+ <!-- Additional scripts -->
66
+ <%= yield :javascripts %>
67
+ </body>
68
+ </html>
@@ -0,0 +1,2 @@
1
+ # Allow use of custom field tags for form builder
2
+ ActionView::Base.default_form_builder = Kadmin::FormBuilder
@@ -0,0 +1,5 @@
1
+ # Load engine assets
2
+ # While loading images by extensions seem to work, loading JS and (S)CSS by extension seems
3
+ # to cause issues, although loading them by filename is fine. Go figure.
4
+ Rails.application.config.assets.precompile += %w(select2.css select2-bootstrap.css select2.js)
5
+ Rails.application.config.assets.precompile += Dir.glob("#{Kadmin::Engine.root}/app/assets/**/*").reject { |fn| File.directory?(fn) }
@@ -0,0 +1,14 @@
1
+ de:
2
+ kadmin:
3
+ auth:
4
+ error: Ein Fehler ist aufgetreten; bitte nochmal versuchen
5
+ login_required: Ein gültiges E-Mail von Google ist erforderlich
6
+ please_login: Bitte melden Sie sich an
7
+ unauthorized: Unberechtigte Zugriff
8
+ unauthorized_message: Sie haben für die gewünschte Seite leider keine Zugriffsrechte; falls Sie haben sollten, bitte das Apps & Services Team kontaktieren
9
+ dash_message: Schaue Dir mal die Bereiche in der Navigationsleiste oben. Wenn es irgenwelche Probleme gibt, oder es fehlt Dir Zugriffsrechte, bitte das Apps & Services Team kontaktieren.
10
+ error: Fehler
11
+ errors:
12
+ not_found: Objekt nicht gefunden
13
+ params_missing: Fehlenden erforderlichen Parameter
14
+ welcome: Willkommen zurück, %{user}!
@@ -0,0 +1,14 @@
1
+ en:
2
+ kadmin:
3
+ auth:
4
+ error: An error occurred; please try again
5
+ login_required: A valid Google enabled email is necessary to login
6
+ please_login: Please authenticate yourself
7
+ unauthorized: Unauthorized access
8
+ unauthorized_message: You are not authorized to access this resource; if you think you should be, contact the Apps & Services team
9
+ dash_message: See the top navigation bar for the different admin sections. If you are missing authorizations, or if there is any issue at all, contact the Apps & Services team!
10
+ error: Error
11
+ errors:
12
+ not_found: Requested object not found
13
+ params_missing: Missing required parameters
14
+ welcome: Welcome %{user}!
data/config/routes.rb ADDED
@@ -0,0 +1,12 @@
1
+ Kadmin::Engine.routes.draw do
2
+ get '/', controller: :dash, action: :index
3
+
4
+ scope '/auth', controller: :auth, as: 'auth', defaults: { format: 'html' } do
5
+ get '/login', action: :login, as: :login
6
+ get '/logout', action: :logout, as: :logout
7
+ get '/:provider/callback', action: :save
8
+ post '/:provider/callback', action: :save
9
+ get '/failure', action: :failure, as: :failure
10
+ get '/unauthorized', action: :unauthorized, as: :unauthorized
11
+ end
12
+ end