elucid-rails_admin 0.0.1

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 (348) hide show
  1. data/Gemfile +54 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +1334 -0
  4. data/Rakefile +14 -0
  5. data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
  6. data/app/assets/images/rails_admin/aristo/images/icon_sprite.png +0 -0
  7. data/app/assets/images/rails_admin/aristo/images/progress_bar.gif +0 -0
  8. data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
  9. data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  10. data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  11. data/app/assets/images/rails_admin/bullet_black.png +0 -0
  12. data/app/assets/images/rails_admin/bullet_white.png +0 -0
  13. data/app/assets/images/rails_admin/calendar.png +0 -0
  14. data/app/assets/images/rails_admin/clock.png +0 -0
  15. data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  16. data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  17. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  18. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  19. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  20. data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  21. data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  22. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  23. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  24. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  25. data/app/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  26. data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  27. data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  28. data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  29. data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  30. data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  31. data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  32. data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  33. data/app/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  34. data/app/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  35. data/app/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  36. data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  37. data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
  38. data/app/assets/images/rails_admin/colorpicker/select2.png +0 -0
  39. data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
  40. data/app/assets/images/rails_admin/logo.png +0 -0
  41. data/app/assets/images/rails_admin/magnifier.png +0 -0
  42. data/app/assets/images/rails_admin/multiselect/icon_sprite.png +0 -0
  43. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
  44. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-light.png +0 -0
  45. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
  46. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
  47. data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  48. data/app/assets/javascripts/rails_admin/jquery-ui-1.8.16.custom.js +5019 -0
  49. data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +484 -0
  50. data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1219 -0
  51. data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +67 -0
  52. data/app/assets/javascripts/rails_admin/ra.filter-box.js +119 -0
  53. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +280 -0
  54. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +181 -0
  55. data/app/assets/javascripts/rails_admin/ra.remote-form.js +147 -0
  56. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +17 -0
  57. data/app/assets/javascripts/rails_admin/themes/default/ui.js +1 -0
  58. data/app/assets/javascripts/rails_admin/ui.js.coffee +30 -0
  59. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  60. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  61. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  62. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  63. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  64. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  65. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +733 -0
  66. data/app/assets/stylesheets/rails_admin/base/README +2 -0
  67. data/app/assets/stylesheets/rails_admin/base/mixins.css.scss +1 -0
  68. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +102 -0
  69. data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
  70. data/app/assets/stylesheets/rails_admin/custom/README +3 -0
  71. data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +9 -0
  72. data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +11 -0
  73. data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +11 -0
  74. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +51 -0
  75. data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +180 -0
  76. data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +53 -0
  77. data/app/assets/stylesheets/rails_admin/ra.calendar-additions.css.scss +25 -0
  78. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +85 -0
  79. data/app/assets/stylesheets/rails_admin/rails_admin.css +4 -0
  80. data/app/assets/stylesheets/rails_admin/themes/README +11 -0
  81. data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +1 -0
  82. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +1 -0
  83. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +1 -0
  84. data/app/controllers/rails_admin/application_controller.rb +62 -0
  85. data/app/controllers/rails_admin/history_controller.rb +26 -0
  86. data/app/controllers/rails_admin/main_controller.rb +371 -0
  87. data/app/helpers/rails_admin/application_helper.rb +65 -0
  88. data/app/helpers/rails_admin/form_builder.rb +52 -0
  89. data/app/helpers/rails_admin/main_helper.rb +100 -0
  90. data/app/models/rails_admin/history.rb +64 -0
  91. data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
  92. data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
  93. data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
  94. data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
  95. data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
  96. data/app/views/layouts/rails_admin/_navigation.html.haml +19 -0
  97. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +9 -0
  98. data/app/views/layouts/rails_admin/application.html.haml +41 -0
  99. data/app/views/rails_admin/history/_dashboard.html.haml +10 -0
  100. data/app/views/rails_admin/history/show.html.haml +42 -0
  101. data/app/views/rails_admin/main/_delete_notice.html.haml +19 -0
  102. data/app/views/rails_admin/main/_form_colorpicker.html.haml +26 -0
  103. data/app/views/rails_admin/main/_form_datetime.html.haml +7 -0
  104. data/app/views/rails_admin/main/_form_enumeration.html.haml +5 -0
  105. data/app/views/rails_admin/main/_form_field.html.haml +1 -0
  106. data/app/views/rails_admin/main/_form_file_upload.html.haml +19 -0
  107. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +57 -0
  108. data/app/views/rails_admin/main/_form_filtering_select.html.haml +47 -0
  109. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +36 -0
  110. data/app/views/rails_admin/main/_form_text.html.haml +13 -0
  111. data/app/views/rails_admin/main/_models_links.html.haml +31 -0
  112. data/app/views/rails_admin/main/_object_links.html.haml +23 -0
  113. data/app/views/rails_admin/main/_submit_buttons.html.haml +12 -0
  114. data/app/views/rails_admin/main/bulk_delete.html.haml +6 -0
  115. data/app/views/rails_admin/main/dashboard.html.haml +31 -0
  116. data/app/views/rails_admin/main/delete.html.haml +13 -0
  117. data/app/views/rails_admin/main/edit.html.haml +2 -0
  118. data/app/views/rails_admin/main/export.html.haml +70 -0
  119. data/app/views/rails_admin/main/index.html.haml +98 -0
  120. data/app/views/rails_admin/main/new.html.haml +2 -0
  121. data/app/views/rails_admin/main/show.html.haml +14 -0
  122. data/config/initializers/active_record_extensions.rb +19 -0
  123. data/config/initializers/devise_patch.rb +9 -0
  124. data/config/initializers/haml.rb +3 -0
  125. data/config/locales/devise.bg.yml +42 -0
  126. data/config/locales/devise.de.yml +39 -0
  127. data/config/locales/devise.en.yml +39 -0
  128. data/config/locales/devise.es.yml +39 -0
  129. data/config/locales/devise.fi.yml +39 -0
  130. data/config/locales/devise.fr.yml +78 -0
  131. data/config/locales/devise.hr.yml +49 -0
  132. data/config/locales/devise.it.yml +39 -0
  133. data/config/locales/devise.lt.yml +39 -0
  134. data/config/locales/devise.mn.yml +39 -0
  135. data/config/locales/devise.nb.yml +43 -0
  136. data/config/locales/devise.pt-BR.yml +39 -0
  137. data/config/locales/devise.pt-PT.yml +39 -0
  138. data/config/locales/devise.ro.yml +46 -0
  139. data/config/locales/devise.ru.yml +39 -0
  140. data/config/locales/devise.sv.yml +39 -0
  141. data/config/locales/devise.tr.yml +39 -0
  142. data/config/locales/devise.uk.yml +39 -0
  143. data/config/locales/devise.zh-CN.yml +39 -0
  144. data/config/locales/devise.zh_cn.yml +39 -0
  145. data/config/locales/rails_admin.bg.yml +104 -0
  146. data/config/locales/rails_admin.da.yml +99 -0
  147. data/config/locales/rails_admin.de.yml +110 -0
  148. data/config/locales/rails_admin.en.yml +114 -0
  149. data/config/locales/rails_admin.es.yml +112 -0
  150. data/config/locales/rails_admin.fi.yml +107 -0
  151. data/config/locales/rails_admin.fr.yml +110 -0
  152. data/config/locales/rails_admin.hr.yml +81 -0
  153. data/config/locales/rails_admin.it.yml +109 -0
  154. data/config/locales/rails_admin.ja.yml +110 -0
  155. data/config/locales/rails_admin.lt.yml +102 -0
  156. data/config/locales/rails_admin.lv.yml +100 -0
  157. data/config/locales/rails_admin.mn.yml +103 -0
  158. data/config/locales/rails_admin.nb.yml +110 -0
  159. data/config/locales/rails_admin.nl.yml +135 -0
  160. data/config/locales/rails_admin.pl.yml +111 -0
  161. data/config/locales/rails_admin.pt-BR.yml +109 -0
  162. data/config/locales/rails_admin.pt-PT.yml +109 -0
  163. data/config/locales/rails_admin.ro.yml +113 -0
  164. data/config/locales/rails_admin.ru.yml +109 -0
  165. data/config/locales/rails_admin.sv.yml +103 -0
  166. data/config/locales/rails_admin.tr.yml +103 -0
  167. data/config/locales/rails_admin.uk.yml +100 -0
  168. data/config/locales/rails_admin.zh-CN.yml +114 -0
  169. data/config/locales/rails_admin.zh_cn.yml +107 -0
  170. data/config/routes.rb +28 -0
  171. data/lib/generators/rails_admin/install_generator.rb +83 -0
  172. data/lib/generators/rails_admin/templates/drop.rb +18 -0
  173. data/lib/generators/rails_admin/templates/initializer.erb +150 -0
  174. data/lib/generators/rails_admin/templates/migration.rb +18 -0
  175. data/lib/generators/rails_admin/uninstall_generator.rb +22 -0
  176. data/lib/generators/rails_admin/utils.rb +30 -0
  177. data/lib/rails_admin.rb +57 -0
  178. data/lib/rails_admin/abstract_model.rb +73 -0
  179. data/lib/rails_admin/abstract_object.rb +28 -0
  180. data/lib/rails_admin/adapters/active_record.rb +359 -0
  181. data/lib/rails_admin/config.rb +287 -0
  182. data/lib/rails_admin/config/base.rb +111 -0
  183. data/lib/rails_admin/config/fields.rb +99 -0
  184. data/lib/rails_admin/config/fields/association.rb +101 -0
  185. data/lib/rails_admin/config/fields/base.rb +273 -0
  186. data/lib/rails_admin/config/fields/factories/carrierwave.rb +16 -0
  187. data/lib/rails_admin/config/fields/factories/devise.rb +31 -0
  188. data/lib/rails_admin/config/fields/factories/dragonfly.rb +20 -0
  189. data/lib/rails_admin/config/fields/factories/enum.rb +11 -0
  190. data/lib/rails_admin/config/fields/factories/paperclip.rb +26 -0
  191. data/lib/rails_admin/config/fields/factories/password.rb +17 -0
  192. data/lib/rails_admin/config/fields/group.rb +63 -0
  193. data/lib/rails_admin/config/fields/groupable.rb +25 -0
  194. data/lib/rails_admin/config/fields/types.rb +26 -0
  195. data/lib/rails_admin/config/fields/types/all.rb +22 -0
  196. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +51 -0
  197. data/lib/rails_admin/config/fields/types/boolean.rb +29 -0
  198. data/lib/rails_admin/config/fields/types/carrierwave.rb +32 -0
  199. data/lib/rails_admin/config/fields/types/color.rb +37 -0
  200. data/lib/rails_admin/config/fields/types/date.rb +24 -0
  201. data/lib/rails_admin/config/fields/types/datetime.rb +160 -0
  202. data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
  203. data/lib/rails_admin/config/fields/types/dragonfly.rb +51 -0
  204. data/lib/rails_admin/config/fields/types/enum.rb +35 -0
  205. data/lib/rails_admin/config/fields/types/file_upload.rb +54 -0
  206. data/lib/rails_admin/config/fields/types/float.rb +14 -0
  207. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
  208. data/lib/rails_admin/config/fields/types/has_many_association.rb +42 -0
  209. data/lib/rails_admin/config/fields/types/has_one_association.rb +31 -0
  210. data/lib/rails_admin/config/fields/types/integer.rb +24 -0
  211. data/lib/rails_admin/config/fields/types/paperclip.rb +38 -0
  212. data/lib/rails_admin/config/fields/types/password.rb +41 -0
  213. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +78 -0
  214. data/lib/rails_admin/config/fields/types/string.rb +34 -0
  215. data/lib/rails_admin/config/fields/types/text.rb +39 -0
  216. data/lib/rails_admin/config/fields/types/time.rb +31 -0
  217. data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
  218. data/lib/rails_admin/config/has_fields.rb +112 -0
  219. data/lib/rails_admin/config/has_groups.rb +39 -0
  220. data/lib/rails_admin/config/hideable.rb +28 -0
  221. data/lib/rails_admin/config/model.rb +89 -0
  222. data/lib/rails_admin/config/proxy.rb +40 -0
  223. data/lib/rails_admin/config/sections.rb +51 -0
  224. data/lib/rails_admin/config/sections/create.rb +11 -0
  225. data/lib/rails_admin/config/sections/export.rb +18 -0
  226. data/lib/rails_admin/config/sections/list.rb +55 -0
  227. data/lib/rails_admin/config/sections/navigation.rb +21 -0
  228. data/lib/rails_admin/config/sections/show.rb +50 -0
  229. data/lib/rails_admin/config/sections/update.rb +11 -0
  230. data/lib/rails_admin/engine.rb +15 -0
  231. data/lib/rails_admin/extension.rb +23 -0
  232. data/lib/rails_admin/extensions/cancan.rb +5 -0
  233. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +71 -0
  234. data/lib/rails_admin/generic_support.rb +15 -0
  235. data/lib/rails_admin/i18n_support.rb +43 -0
  236. data/lib/rails_admin/support/core_extensions.rb +44 -0
  237. data/lib/rails_admin/support/csv_converter.rb +109 -0
  238. data/lib/rails_admin/version.rb +6 -0
  239. data/lib/tasks/prepare_ci_env.rake +27 -0
  240. data/lib/tasks/rails_admin.rake +18 -0
  241. data/spec/ci.sh +2 -0
  242. data/spec/controllers/application_controller_spec.rb +30 -0
  243. data/spec/controllers/main_controller_spec.rb +86 -0
  244. data/spec/database_helpers.rb +15 -0
  245. data/spec/dummy_app/Gemfile +52 -0
  246. data/spec/dummy_app/README +256 -0
  247. data/spec/dummy_app/Rakefile +7 -0
  248. data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
  249. data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
  250. data/spec/dummy_app/app/locales/models.en.yml +8 -0
  251. data/spec/dummy_app/app/models/abstract.rb +5 -0
  252. data/spec/dummy_app/app/models/ball.rb +8 -0
  253. data/spec/dummy_app/app/models/cms.rb +5 -0
  254. data/spec/dummy_app/app/models/cms/basic_page.rb +7 -0
  255. data/spec/dummy_app/app/models/cms/unscoped_page.rb +3 -0
  256. data/spec/dummy_app/app/models/comment.rb +3 -0
  257. data/spec/dummy_app/app/models/division.rb +8 -0
  258. data/spec/dummy_app/app/models/draft.rb +11 -0
  259. data/spec/dummy_app/app/models/fan.rb +5 -0
  260. data/spec/dummy_app/app/models/field_test.rb +13 -0
  261. data/spec/dummy_app/app/models/league.rb +10 -0
  262. data/spec/dummy_app/app/models/player.rb +15 -0
  263. data/spec/dummy_app/app/models/rel_test.rb +6 -0
  264. data/spec/dummy_app/app/models/team.rb +25 -0
  265. data/spec/dummy_app/app/models/user.rb +21 -0
  266. data/spec/dummy_app/app/uploaders/carrierwave_uploader.rb +53 -0
  267. data/spec/dummy_app/app/views/layouts/application.html.erb +13 -0
  268. data/spec/dummy_app/config.ru +4 -0
  269. data/spec/dummy_app/config/application.rb +47 -0
  270. data/spec/dummy_app/config/boot.rb +6 -0
  271. data/spec/dummy_app/config/database.yml +22 -0
  272. data/spec/dummy_app/config/environment.rb +5 -0
  273. data/spec/dummy_app/config/environments/development.rb +27 -0
  274. data/spec/dummy_app/config/environments/production.rb +51 -0
  275. data/spec/dummy_app/config/environments/test.rb +39 -0
  276. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
  277. data/spec/dummy_app/config/initializers/devise.rb +142 -0
  278. data/spec/dummy_app/config/initializers/inflections.rb +10 -0
  279. data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
  280. data/spec/dummy_app/config/initializers/quiet_assets.rb +10 -0
  281. data/spec/dummy_app/config/initializers/rails_admin.rb +10 -0
  282. data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
  283. data/spec/dummy_app/config/initializers/session_store.rb +8 -0
  284. data/spec/dummy_app/config/routes.rb +8 -0
  285. data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
  286. data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
  287. data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
  288. data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
  289. data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
  290. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +19 -0
  291. data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
  292. data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
  293. data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
  294. data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
  295. data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
  296. data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
  297. data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
  298. data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
  299. data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
  300. data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
  301. data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
  302. data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
  303. data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
  304. data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
  305. data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
  306. data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
  307. data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
  308. data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
  309. data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
  310. data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
  311. data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
  312. data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
  313. data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
  314. data/spec/dummy_app/db/seeds.rb +18 -0
  315. data/spec/dummy_app/doc/README_FOR_APP +2 -0
  316. data/spec/dummy_app/public/404.html +0 -0
  317. data/spec/dummy_app/public/favicon.ico +0 -0
  318. data/spec/dummy_app/script/rails +6 -0
  319. data/spec/factories.rb +62 -0
  320. data/spec/generator_helpers.rb +30 -0
  321. data/spec/generators/install_generator_spec.rb +85 -0
  322. data/spec/generators/uninstall_generator_spec.rb +35 -0
  323. data/spec/lib/abstract_object_spec.rb +119 -0
  324. data/spec/lib/rails_admin_spec.rb +153 -0
  325. data/spec/requests/authorization/cancan_spec.rb +260 -0
  326. data/spec/requests/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
  327. data/spec/requests/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +55 -0
  328. data/spec/requests/basic/create/rails_admin_basic_create_spec.rb +143 -0
  329. data/spec/requests/basic/create/rails_admin_namespaced_model_create_spec.rb +24 -0
  330. data/spec/requests/basic/delete/rails_admin_basic_delete_spec.rb +35 -0
  331. data/spec/requests/basic/destroy/rails_admin_basic_destroy_spec.rb +56 -0
  332. data/spec/requests/basic/edit/rails_admin_basic_edit_spec.rb +98 -0
  333. data/spec/requests/basic/export/rails_admin_basic_export_spec.rb +84 -0
  334. data/spec/requests/basic/list/rails_admin_basic_list_spec.rb +401 -0
  335. data/spec/requests/basic/new/rails_admin_basic_new_spec.rb +74 -0
  336. data/spec/requests/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
  337. data/spec/requests/basic/show/rails_admin_basic_show_spec.rb +83 -0
  338. data/spec/requests/basic/update/rails_admin_basic_update_spec.rb +169 -0
  339. data/spec/requests/config/edit/rails_admin_config_edit_spec.rb +744 -0
  340. data/spec/requests/config/list/rails_admin_config_list_spec.rb +549 -0
  341. data/spec/requests/config/navigation/rails_admin_config_navigation_spec.rb +107 -0
  342. data/spec/requests/config/rails_admin_config_spec.rb +180 -0
  343. data/spec/requests/config/show/rails_admin_config_show_spec.rb +275 -0
  344. data/spec/requests/history/rails_admin_history_spec.rb +57 -0
  345. data/spec/requests/rails_admin_spec.rb +103 -0
  346. data/spec/requests/relation_spec.rb +26 -0
  347. data/spec/spec_helper.rb +88 -0
  348. metadata +717 -0
@@ -0,0 +1,85 @@
1
+ .ra-multiselect {
2
+
3
+ .ra-multiselect-header {
4
+ margin-bottom: 5px;
5
+ clear: right;
6
+ .help {
7
+ float: left;
8
+ font-size: 10px;
9
+ }
10
+ .ui-icon {
11
+ position: relative;
12
+ top: 10px;
13
+ left: 3px;
14
+ }
15
+ }
16
+
17
+ .ra-multiselect-search {
18
+ width: 180px;
19
+ }
20
+
21
+ .ra-multiselect-column {
22
+ width: 190px;
23
+ float: left;
24
+ }
25
+
26
+ .ra-multiselect-center {
27
+ width: 30px;
28
+ padding-top: 15px;
29
+ text-align: center;
30
+ .ui-icon {
31
+ margin: 5px auto;
32
+ }
33
+ }
34
+ .ra-multiselect-collection, .ra-multiselect-selection {
35
+ height: 130px;
36
+ margin-bottom: 5px;
37
+ width: 100%;
38
+ }
39
+
40
+ span.ui-icon {
41
+ margin-right: 4px;
42
+ }
43
+ .ui-icon {
44
+ cursor: pointer;
45
+ display: inline-block;
46
+ vertical-align: top;
47
+ &.ui-icon-circle-triangle-e {
48
+ background-position: -16px -32px !important;
49
+ background-image: image-url("rails_admin/multiselect/icon_sprite.png");
50
+ }
51
+ &.ui-icon-circle-triangle-e:hover {
52
+ background-position: -16px -48px !important;
53
+ background-image: image-url('rails_admin/multiselect/icon_sprite.png');
54
+ }
55
+ &.ui-icon-circle-triangle-w {
56
+ background-position: 0px -32px !important;
57
+ background-image: image-url('rails_admin/multiselect/icon_sprite.png');
58
+ }
59
+ &.ui-icon-circle-triangle-w:hover {
60
+ background-position: 0px -48px !important;
61
+ background-image: image-url('rails_admin/multiselect/icon_sprite.png');
62
+ }
63
+ &.ui-icon-circle-triangle-n {
64
+ background-position: 0px 0px !important;
65
+ margin-left: 1px;
66
+ background-image: image-url('rails_admin/multiselect/ui-icon-circle-triangle-n-light.png');
67
+ }
68
+ &.ui-icon-circle-triangle-n:hover {
69
+ background-position: 0px 0px !important;
70
+ margin-left: 1px;
71
+ background-image: image-url('rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png');
72
+ }
73
+ &.ui-icon-circle-triangle-s {
74
+ background-position: 0px 0px !important;
75
+ margin-left: 1px;
76
+ background-image: image-url('rails_admin/multiselect/ui-icon-circle-triangle-s-light.png');
77
+ }
78
+ &.ui-icon-circle-triangle-s:hover {
79
+ background-position: 0px 0px !important;
80
+ margin-left: 1px;
81
+ background-image: image-url('rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png');
82
+ }
83
+ }
84
+ }
85
+
@@ -0,0 +1,4 @@
1
+ /*
2
+ *= require rails_admin/imports.css.scss
3
+ */
4
+ /* Nothing else here (sass @import statements create weird pbs in a self required scss file) */
@@ -0,0 +1,11 @@
1
+ Dear themers,
2
+
3
+ Please:
4
+ - copy 'themes/default' content to 'themes/my_theme_name'
5
+ - update 'theme' in 'import.css.scss.erb' to 'my_theme_name'
6
+ - do your magic
7
+ - send us a pull request
8
+
9
+ Thanks,
10
+
11
+ Not the zombies.
@@ -0,0 +1 @@
1
+ /* All sass mixins should be overriden/created here */
@@ -0,0 +1 @@
1
+ /* All real theming should happen here */
@@ -0,0 +1 @@
1
+ /* All sass variables should be overriden/created here */
@@ -0,0 +1,62 @@
1
+ require 'rails_admin/abstract_model'
2
+
3
+ module RailsAdmin
4
+ class ApplicationController < ::ApplicationController
5
+ newrelic_ignore if defined?(NewRelic)
6
+
7
+ before_filter :_authenticate!
8
+ before_filter :_authorize!
9
+
10
+ helper_method :_current_user, :_attr_accessible_role, :_get_plugin_name
11
+
12
+ def get_model
13
+ model_name = to_model_name(params[:model_name])
14
+ @abstract_model = RailsAdmin::AbstractModel.new(model_name)
15
+ not_found unless @abstract_model
16
+ @model_config = RailsAdmin.config(@abstract_model)
17
+ not_found if @model_config.excluded?
18
+ @properties = @abstract_model.properties
19
+ end
20
+
21
+ def to_model_name(param)
22
+ parts = param.split("~")
23
+ parts[-1] = parts.last.singularize
24
+ parts.map(&:camelize).join("::")
25
+ end
26
+
27
+ def get_object
28
+ @object = @abstract_model.get(params[:id])
29
+ not_found unless @object
30
+ end
31
+
32
+
33
+ private
34
+ def _get_plugin_name
35
+ @plugin_name_array ||= [RailsAdmin.config.main_app_name.is_a?(Proc) ? instance_eval(&RailsAdmin.config.main_app_name) : RailsAdmin.config.main_app_name].flatten
36
+ end
37
+
38
+ def _authenticate!
39
+ instance_eval &RailsAdmin::Config.authenticate_with
40
+ end
41
+
42
+ def _authorize!
43
+ instance_eval &RailsAdmin::Config.authorize_with
44
+ end
45
+
46
+ def _current_user
47
+ instance_eval &RailsAdmin::Config.current_user_method
48
+ end
49
+
50
+ def _attr_accessible_role
51
+ instance_eval &RailsAdmin::Config.attr_accessible_role
52
+ end
53
+
54
+ def not_found
55
+ render :file => Rails.root.join('public', '404.html'), :layout => false, :status => :not_found
56
+ end
57
+
58
+ def rails_admin_controller?
59
+ true
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,26 @@
1
+ module RailsAdmin
2
+ class HistoryController < RailsAdmin::ApplicationController
3
+ before_filter :get_model
4
+ before_filter :get_object, :except => :for_model
5
+
6
+ def for_model
7
+ @authorization_adapter.authorize(:history) if @authorization_adapter
8
+ @page_type = @abstract_model.pretty_name.downcase
9
+ @page_name = t("admin.history.page_name", :name => @model_config.label.downcase)
10
+ @general = true
11
+ @history = History.history_for_model(@abstract_model, params[:query], params[:sort], params[:sort_reverse], params[:all], params[:page])
12
+
13
+ render "show", :layout => request.xhr? ? false : 'rails_admin/application'
14
+ end
15
+
16
+ def for_object
17
+ @authorization_adapter.authorize(:history) if @authorization_adapter
18
+ @page_type = @abstract_model.pretty_name.downcase
19
+ @page_name = t("admin.history.page_name", :name => "#{@model_config.label.downcase} '#{@model_config.with(:object => @object).object_label}'")
20
+ @general = false
21
+ @history = History.history_for_object(@abstract_model, @object, params[:query], params[:sort], params[:sort_reverse], params[:all], params[:page])
22
+
23
+ render "show", :layout => request.xhr? ? false : 'rails_admin/application'
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,371 @@
1
+ module RailsAdmin
2
+
3
+ class MainController < RailsAdmin::ApplicationController
4
+ include ActionView::Helpers::TextHelper
5
+
6
+ layout "rails_admin/application"
7
+
8
+ before_filter :get_model, :except => [:dashboard]
9
+ before_filter :get_object, :only => [:show, :edit, :update, :delete, :destroy]
10
+ before_filter :get_attributes, :only => [:create, :update]
11
+ before_filter :check_for_cancel, :only => [:create, :update, :destroy, :export, :bulk_destroy]
12
+
13
+ def dashboard
14
+ @page_name = t("admin.dashboard.pagename")
15
+ @page_type = "dashboard"
16
+
17
+ @history= History.all
18
+ @abstract_models = RailsAdmin::Config.visible_models.map(&:abstract_model)
19
+
20
+ @most_recent_changes = {}
21
+ @count = {}
22
+ @max = 0
23
+ @abstract_models.each do |t|
24
+ scope = @authorization_adapter && @authorization_adapter.query(:index, t)
25
+ current_count = t.count({}, scope)
26
+ @max = current_count > @max ? current_count : @max
27
+ @count[t.pretty_name] = current_count
28
+ @most_recent_changes[t.pretty_name] = t.model.order("updated_at desc").first.try(:updated_at) rescue nil
29
+ end
30
+ render :dashboard
31
+ end
32
+
33
+ def index
34
+ @authorization_adapter.authorize(:index, @abstract_model) if @authorization_adapter
35
+
36
+ @page_type = @abstract_model.pretty_name.downcase
37
+ @page_name = t("admin.index.select", :name => @model_config.label.downcase)
38
+
39
+ @objects = list_entries
40
+
41
+ @schema ||= { :only => @model_config.list.visible_fields.map { |f| f.name } }
42
+
43
+ respond_to do |format|
44
+ format.html { render :layout => !request.xhr? }
45
+ format.json do
46
+ output = if params[:compact]
47
+ @objects.map{ |o| { :id => o.id, :label => o.send(@model_config.object_label_method) } }
48
+ else
49
+ @objects.to_json(@schema)
50
+ end
51
+ if params[:send_data]
52
+ send_data output, :filename => "#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.json"
53
+ else
54
+ render :json => output
55
+ end
56
+ end
57
+ format.xml do
58
+ output = @objects.to_xml(@schema)
59
+ if params[:send_data]
60
+ send_data output, :filename => "#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.xml"
61
+ else
62
+ render :xml => output
63
+ end
64
+ end
65
+ format.csv do
66
+ header, encoding, output = CSVConverter.new(@objects, @schema).to_csv(params[:csv_options])
67
+ if params[:send_data]
68
+ send_data output,
69
+ :type => "text/csv; charset=#{encoding}; #{"header=present" if header}",
70
+ :disposition => "attachment; filename=#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.csv"
71
+ else
72
+ render :text => output
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ def new
79
+ @object = @abstract_model.new
80
+ if @authorization_adapter
81
+ @authorization_adapter.attributes_for(:new, @abstract_model).each do |name, value|
82
+ @object.send("#{name}=", value)
83
+ end
84
+ @authorization_adapter.authorize(:new, @abstract_model, @object)
85
+ end
86
+ if object_params = params[@abstract_model.to_param]
87
+ @object.set_attributes(@object.attributes.merge(object_params), _attr_accessible_role)
88
+ end
89
+ @page_name = t("admin.actions.create").capitalize + " " + @model_config.label.downcase
90
+ @page_type = @abstract_model.pretty_name.downcase
91
+ respond_to do |format|
92
+ format.html
93
+ format.js { render :layout => false }
94
+ end
95
+ end
96
+
97
+ def create
98
+ @modified_assoc = []
99
+ @object = @abstract_model.new
100
+ @model_config.create.fields.each {|f| f.parse_input(@attributes) if f.respond_to?(:parse_input) }
101
+ if @authorization_adapter
102
+ @authorization_adapter.attributes_for(:create, @abstract_model).each do |name, value|
103
+ @object.send("#{name}=", value)
104
+ end
105
+ @authorization_adapter.authorize(:create, @abstract_model, @object)
106
+ end
107
+ @object.set_attributes(@attributes, _attr_accessible_role)
108
+ @page_name = t("admin.actions.create").capitalize + " " + @model_config.label.downcase
109
+ @page_type = @abstract_model.pretty_name.downcase
110
+
111
+ if @object.save
112
+ History.create_history_item("Created #{@model_config.with(:object => @object).object_label}", @object, @abstract_model, _current_user)
113
+ respond_to do |format|
114
+ format.html do
115
+ redirect_to_on_success
116
+ end
117
+ format.js do
118
+ render :json => {
119
+ :id => @object.id,
120
+ :label => @model_config.with(:object => @object).object_label,
121
+ }
122
+ end
123
+ end
124
+ else
125
+ handle_save_error
126
+ end
127
+ end
128
+
129
+ def show
130
+ @authorization_adapter.authorize(:show, @abstract_model, @object) if @authorization_adapter
131
+ @page_name = t("admin.show.page_name", :name => "#{@model_config.label.downcase} '#{@object.send(@model_config.object_label_method)}'")
132
+ @page_type = @abstract_model.pretty_name.downcase
133
+ end
134
+
135
+ def edit
136
+ @authorization_adapter.authorize(:edit, @abstract_model, @object) if @authorization_adapter
137
+ @page_name = "#{t("admin.actions.update").capitalize} #{@model_config.label.downcase} '#{@object.send(@model_config.object_label_method)}'"
138
+ @page_type = @abstract_model.pretty_name.downcase
139
+ respond_to do |format|
140
+ format.html
141
+ format.js { render :layout => false }
142
+ end
143
+ end
144
+
145
+ def update
146
+ @authorization_adapter.authorize(:update, @abstract_model, @object) if @authorization_adapter
147
+
148
+ @cached_assocations_hash = associations_hash
149
+ @modified_assoc = []
150
+
151
+ @page_name = "#{t("admin.actions.update").capitalize} #{@model_config.label.downcase} '#{@object.send(@model_config.object_label_method)}'"
152
+ @page_type = @abstract_model.pretty_name.downcase
153
+
154
+ @old_object = @object.dup
155
+ @model_config.update.fields.map {|f| f.parse_input(@attributes) if f.respond_to?(:parse_input) }
156
+ @object.set_attributes(@attributes, _attr_accessible_role)
157
+
158
+ if @object.save
159
+ History.create_update_history @abstract_model, @object, @cached_assocations_hash, associations_hash, @modified_assoc, @old_object, _current_user
160
+ respond_to do |format|
161
+ format.html do
162
+ redirect_to_on_success
163
+ end
164
+ format.js do
165
+ render :json => {
166
+ :id => @object.id,
167
+ :label => @model_config.with(:object => @object).object_label,
168
+ }
169
+ end
170
+ end
171
+ else
172
+ handle_save_error :edit
173
+ end
174
+ end
175
+
176
+ def delete
177
+ @authorization_adapter.authorize(:delete, @abstract_model, @object) if @authorization_adapter
178
+ @page_name = "#{t("admin.actions.delete").capitalize} #{@model_config.label.downcase} '#{@object.send(@model_config.object_label_method)}'"
179
+ @page_type = @abstract_model.pretty_name.downcase
180
+ respond_to do |format|
181
+ format.html
182
+ format.js { render :layout => false }
183
+ end
184
+ end
185
+
186
+ def destroy
187
+ @authorization_adapter.authorize(:destroy, @abstract_model, @object) if @authorization_adapter
188
+
189
+ if @abstract_model.destroy(@object)
190
+ History.create_history_item("Destroyed #{@model_config.with(:object => @object).object_label}", @object, @abstract_model, _current_user)
191
+ flash[:success] = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.deleted"))
192
+ else
193
+ flash[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.deleted"))
194
+ end
195
+
196
+ redirect_to index_path(:model_name => @abstract_model.to_param)
197
+ end
198
+
199
+ def export
200
+ # todo
201
+ # limitation: need to display at least one real attribute ('only') so that the full object doesn't get displayed, a way to fix this? maybe force :only => [""]
202
+ # use send_file instead of send_data to leverage the x-sendfile header set by rails 3 (generate and let the front server handle the rest)
203
+ # maybe
204
+ # n-levels (backend: possible with xml&json, frontend: not possible?)
205
+ @authorization_adapter.authorize(:export, @abstract_model) if @authorization_adapter
206
+
207
+ if format = params[:json] && :json || params[:csv] && :csv || params[:xml] && :xml
208
+ request.format = format
209
+ @schema = params[:schema].symbolize if params[:schema] # to_json and to_xml expect symbols for keys AND values.
210
+ index
211
+ else
212
+ @page_name = t("admin.actions.export").capitalize + " " + @model_config.label_plural.downcase
213
+ @page_type = @abstract_model.pretty_name.downcase
214
+
215
+ render :action => 'export'
216
+ end
217
+ end
218
+
219
+ def bulk_action
220
+ redirect_to index_path, :flash => { :info => t("admin.flash.noaction") } and return if params[:bulk_ids].blank?
221
+ case params[:bulk_action]
222
+ when "delete" then bulk_delete
223
+ when "export" then export
224
+ else redirect_to(index_path(:model_name => @abstract_model.to_param), :flash => { :info => t("admin.flash.noaction") })
225
+ end
226
+ end
227
+
228
+ def bulk_delete
229
+ @authorization_adapter.authorize(:bulk_delete, @abstract_model) if @authorization_adapter
230
+ @page_name = t("admin.actions.delete").capitalize + " " + @model_config.label.downcase
231
+ @page_type = @abstract_model.pretty_name.downcase
232
+ @objects = list_entries(@model_config, :destroy)
233
+ not_found and return if @objects.empty?
234
+
235
+ render :action => 'bulk_delete'
236
+ end
237
+
238
+ def bulk_destroy
239
+ @authorization_adapter.authorize(:bulk_destroy, @abstract_model) if @authorization_adapter
240
+ @objects = list_entries(@model_config, :destroy)
241
+ processed_objects = @abstract_model.destroy(@objects)
242
+
243
+ destroyed = processed_objects.select(&:destroyed?)
244
+ not_destroyed = processed_objects - destroyed
245
+
246
+ destroyed.each do |object|
247
+ message = "Destroyed #{@model_config.with(:object => object).object_label}"
248
+ History.create_history_item(message, object, @abstract_model, _current_user)
249
+ end
250
+
251
+ unless destroyed.empty?
252
+ flash[:success] = t("admin.flash.successful", :name => pluralize(destroyed.count, @model_config.label), :action => t("admin.actions.deleted"))
253
+ end
254
+
255
+ unless not_destroyed.empty?
256
+ flash[:error] = t("admin.flash.error", :name => pluralize(not_destroyed.count, @model_config.label), :action => t("admin.actions.deleted"))
257
+ end
258
+
259
+ redirect_to index_path
260
+ end
261
+
262
+ def list_entries(model_config = @model_config, auth_scope_key = :index, additional_scope = get_association_scope_from_params)
263
+ scope = @authorization_adapter && @authorization_adapter.query(auth_scope_key, model_config.abstract_model)
264
+ scope = model_config.abstract_model.scoped.merge(scope)
265
+ scope = scope.instance_eval(&additional_scope) if additional_scope
266
+ get_collection(model_config, scope)
267
+ end
268
+
269
+ private
270
+
271
+ def get_sort_hash(model_config)
272
+ abstract_model = model_config.abstract_model
273
+ params[:sort] = params[:sort_reverse] = nil unless model_config.list.with(:view => self, :object => abstract_model.model.new).visible_fields.map {|f| f.name.to_s}.include? params[:sort]
274
+
275
+ params[:sort] ||= model_config.list.sort_by.to_s
276
+ params[:sort_reverse] ||= 'false'
277
+
278
+ field = model_config.list.fields.find{ |f| f.name.to_s == params[:sort] }
279
+
280
+ column = if field.nil? || field.sortable == true # use params[:sort] on the base table
281
+ "#{abstract_model.model.table_name}.#{params[:sort]}"
282
+ elsif field.sortable == false # use default sort, asked field is not sortable
283
+ "#{abstract_model.model.table_name}.#{model_config.list.sort_by}"
284
+ elsif field.sortable.is_a?(String) && field.sortable.include?('.') # just provide sortable, don't do anything smart
285
+ field.sortable
286
+ elsif field.sortable.is_a?(Hash) # just join sortable hash, don't do anything smart
287
+ "#{field.sortable.keys.first}.#{field.sortable.values.first}"
288
+ elsif field.association? # use column on target table
289
+ "#{field.associated_model_config.abstract_model.model.table_name}.#{field.sortable}"
290
+ else # use described column in the field conf.
291
+ "#{abstract_model.model.table_name}.#{field.sortable}"
292
+ end
293
+
294
+ reversed_sort = (field ? field.sort_reverse? : model_config.list.sort_reverse?)
295
+ {:sort => column, :sort_reverse => (params[:sort_reverse] == reversed_sort.to_s)}
296
+ end
297
+
298
+
299
+ def get_attributes
300
+ @attributes = params[@abstract_model.to_param.singularize.gsub('~','_')] || {}
301
+ @attributes.each do |key, value|
302
+ # Deserialize the attribute if attribute is serialized
303
+ if @abstract_model.model.serialized_attributes.keys.include?(key) and value.is_a? String
304
+ @attributes[key] = YAML::load(value)
305
+ end
306
+ # Delete fields that are blank
307
+ @attributes[key] = nil if value.blank?
308
+ end
309
+ end
310
+
311
+ def redirect_to_on_success
312
+ notice = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.#{params[:action]}d"))
313
+ if params[:_add_another]
314
+ redirect_to new_path, :flash => { :success => notice }
315
+ elsif params[:_add_edit]
316
+ redirect_to edit_path(:id => @object.id), :flash => { :success => notice }
317
+ else
318
+ redirect_to index_path, :flash => { :success => notice }
319
+ end
320
+ end
321
+
322
+ def handle_save_error whereto = :new
323
+ action = params[:action]
324
+
325
+ flash.now[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.#{action}d"))
326
+ flash.now[:error] += ". #{@object.errors[:base].to_sentence}" unless @object.errors[:base].blank?
327
+
328
+ respond_to do |format|
329
+ format.html { render whereto, :status => :not_acceptable }
330
+ format.js { render whereto, :layout => false, :status => :not_acceptable }
331
+ end
332
+ end
333
+
334
+ def check_for_cancel
335
+ redirect_to index_path, :flash => { :warning => t("admin.flash.noaction") } if params[:_continue]
336
+ end
337
+
338
+ def get_collection(model_config, scope)
339
+ associations = model_config.list.fields.select {|f| f.type == :belongs_to_association && !f.polymorphic? }.map {|f| f.association[:name] }
340
+ options = {}
341
+ options = options.merge(:page => (params[:page] || 1).to_i, :per => (params[:per] || model_config.list.items_per_page)) if params[:action] == 'index'
342
+ options = options.merge(:include => associations) unless associations.blank?
343
+ options = options.merge(get_sort_hash(model_config)) unless params[:associated_collection]
344
+ options = options.merge(model_config.abstract_model.get_conditions_hash(model_config, params[:query], params[:filters])) if params[:query] || params[:filters]
345
+ options = options.merge(:bulk_ids => params[:bulk_ids]) if params[:bulk_ids]
346
+
347
+ objects = model_config.abstract_model.all(options, scope)
348
+ end
349
+
350
+ def get_association_scope_from_params
351
+ return nil unless params[:associated_collection].present?
352
+ source_abstract_model = RailsAdmin::AbstractModel.new(to_model_name(params[:source_abstract_model]))
353
+ source_model_config = RailsAdmin.config(source_abstract_model)
354
+ source_object = source_abstract_model.get(params[:source_object_id])
355
+ action = params[:current_action].in?(['create', 'update']) ? params[:current_action] : 'edit'
356
+ association = source_model_config.send(action).fields.find{|f| f.name == params[:associated_collection].to_sym }.with(:controller => self, :object => source_object)
357
+ association.associated_collection_scope
358
+ end
359
+
360
+ def associations_hash
361
+ associations = {}
362
+ @abstract_model.associations.each do |association|
363
+ if [:has_many, :has_and_belongs_to_many].include?(association[:type])
364
+ records = Array(@object.send(association[:name]))
365
+ associations[association[:name]] = records.collect(&:id)
366
+ end
367
+ end
368
+ associations
369
+ end
370
+ end
371
+ end