obitum-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 (401) hide show
  1. data/Gemfile +57 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +206 -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 +12 -0
  48. data/app/assets/javascripts/rails_admin/jquery-ui-1.8.16.custom.js +5271 -0
  49. data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +484 -0
  50. data/app/assets/javascripts/rails_admin/jquery.pjax.js +266 -0
  51. data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1219 -0
  52. data/app/assets/javascripts/rails_admin/jquery_nested_form.js +58 -0
  53. data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +67 -0
  54. data/app/assets/javascripts/rails_admin/ra.filter-box.js +120 -0
  55. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +280 -0
  56. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +181 -0
  57. data/app/assets/javascripts/rails_admin/ra.remote-form.js +148 -0
  58. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +19 -0
  59. data/app/assets/javascripts/rails_admin/themes/default/ui.js +12 -0
  60. data/app/assets/javascripts/rails_admin/ui.js.coffee +33 -0
  61. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  62. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  63. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  64. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  65. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  66. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  67. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +733 -0
  68. data/app/assets/stylesheets/rails_admin/base/README +2 -0
  69. data/app/assets/stylesheets/rails_admin/base/mixins.css.scss +1 -0
  70. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +145 -0
  71. data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
  72. data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +12 -0
  73. data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
  74. data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +15 -0
  75. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +41 -0
  76. data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +180 -0
  77. data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +53 -0
  78. data/app/assets/stylesheets/rails_admin/ra.calendar-additions.css.scss +25 -0
  79. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +85 -0
  80. data/app/assets/stylesheets/rails_admin/rails_admin.css +4 -0
  81. data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +8 -0
  82. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +11 -0
  83. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +12 -0
  84. data/app/controllers/rails_admin/application_controller.rb +87 -0
  85. data/app/controllers/rails_admin/main_controller.rb +148 -0
  86. data/app/helpers/rails_admin/application_helper.rb +97 -0
  87. data/app/helpers/rails_admin/form_builder.rb +106 -0
  88. data/app/helpers/rails_admin/main_helper.rb +36 -0
  89. data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
  90. data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
  91. data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
  92. data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
  93. data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
  94. data/app/views/layouts/rails_admin/_navigation.html.haml +17 -0
  95. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +11 -0
  96. data/app/views/layouts/rails_admin/application.html.haml +39 -0
  97. data/app/views/rails_admin/main/_dashboard_history.html.haml +10 -0
  98. data/app/views/rails_admin/main/_delete_notice.html.haml +19 -0
  99. data/app/views/rails_admin/main/_form_colorpicker.html.haml +23 -0
  100. data/app/views/rails_admin/main/_form_datetime.html.haml +4 -0
  101. data/app/views/rails_admin/main/_form_enumeration.html.haml +4 -0
  102. data/app/views/rails_admin/main/_form_field.html.haml +1 -0
  103. data/app/views/rails_admin/main/_form_file_upload.html.haml +17 -0
  104. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +57 -0
  105. data/app/views/rails_admin/main/_form_filtering_select.html.haml +46 -0
  106. data/app/views/rails_admin/main/_form_nested_many.html.haml +6 -0
  107. data/app/views/rails_admin/main/_form_nested_one.html.haml +6 -0
  108. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +34 -0
  109. data/app/views/rails_admin/main/_form_text.html.haml +9 -0
  110. data/app/views/rails_admin/main/_submit_buttons.html.haml +13 -0
  111. data/app/views/rails_admin/main/bulk_delete.html.haml +7 -0
  112. data/app/views/rails_admin/main/dashboard.html.haml +31 -0
  113. data/app/views/rails_admin/main/delete.html.haml +14 -0
  114. data/app/views/rails_admin/main/edit.html.haml +2 -0
  115. data/app/views/rails_admin/main/export.html.haml +71 -0
  116. data/app/views/rails_admin/main/history.html.haml +42 -0
  117. data/app/views/rails_admin/main/index.html.haml +123 -0
  118. data/app/views/rails_admin/main/new.html.haml +2 -0
  119. data/app/views/rails_admin/main/show.html.haml +14 -0
  120. data/config/initializers/active_record_extensions.rb +19 -0
  121. data/config/initializers/devise_patch.rb +9 -0
  122. data/config/initializers/haml.rb +3 -0
  123. data/config/locales/rails_admin.en.yml +129 -0
  124. data/config/routes.rb +12 -0
  125. data/lib/generators/rails_admin/install_generator.rb +84 -0
  126. data/lib/generators/rails_admin/templates/drop.rb +18 -0
  127. data/lib/generators/rails_admin/templates/initializer.erb +101 -0
  128. data/lib/generators/rails_admin/templates/migration.rb +18 -0
  129. data/lib/generators/rails_admin/uninstall_generator.rb +22 -0
  130. data/lib/generators/rails_admin/utils.rb +30 -0
  131. data/lib/rails_admin.rb +39 -0
  132. data/lib/rails_admin/abstract_model.rb +73 -0
  133. data/lib/rails_admin/abstract_object.rb +28 -0
  134. data/lib/rails_admin/adapters/active_record.rb +347 -0
  135. data/lib/rails_admin/config.rb +293 -0
  136. data/lib/rails_admin/config/actions.rb +121 -0
  137. data/lib/rails_admin/config/actions/base.rb +105 -0
  138. data/lib/rails_admin/config/actions/bulk_delete.rb +56 -0
  139. data/lib/rails_admin/config/actions/dashboard.rb +40 -0
  140. data/lib/rails_admin/config/actions/delete.rb +50 -0
  141. data/lib/rails_admin/config/actions/edit.rb +52 -0
  142. data/lib/rails_admin/config/actions/export.rb +37 -0
  143. data/lib/rails_admin/config/actions/history_index.rb +34 -0
  144. data/lib/rails_admin/config/actions/history_show.rb +34 -0
  145. data/lib/rails_admin/config/actions/index.rb +73 -0
  146. data/lib/rails_admin/config/actions/new.rb +60 -0
  147. data/lib/rails_admin/config/actions/show.rb +27 -0
  148. data/lib/rails_admin/config/actions/show_in_app.rb +23 -0
  149. data/lib/rails_admin/config/base.rb +111 -0
  150. data/lib/rails_admin/config/fields.rb +97 -0
  151. data/lib/rails_admin/config/fields/association.rb +115 -0
  152. data/lib/rails_admin/config/fields/base.rb +274 -0
  153. data/lib/rails_admin/config/fields/factories/carrierwave.rb +12 -0
  154. data/lib/rails_admin/config/fields/factories/devise.rb +30 -0
  155. data/lib/rails_admin/config/fields/factories/dragonfly.rb +21 -0
  156. data/lib/rails_admin/config/fields/factories/enum.rb +11 -0
  157. data/lib/rails_admin/config/fields/factories/paperclip.rb +27 -0
  158. data/lib/rails_admin/config/fields/factories/password.rb +17 -0
  159. data/lib/rails_admin/config/fields/group.rb +65 -0
  160. data/lib/rails_admin/config/fields/groupable.rb +25 -0
  161. data/lib/rails_admin/config/fields/types.rb +26 -0
  162. data/lib/rails_admin/config/fields/types/all.rb +23 -0
  163. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +43 -0
  164. data/lib/rails_admin/config/fields/types/boolean.rb +29 -0
  165. data/lib/rails_admin/config/fields/types/carrierwave.rb +40 -0
  166. data/lib/rails_admin/config/fields/types/color.rb +37 -0
  167. data/lib/rails_admin/config/fields/types/date.rb +24 -0
  168. data/lib/rails_admin/config/fields/types/datetime.rb +165 -0
  169. data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
  170. data/lib/rails_admin/config/fields/types/dragonfly.rb +59 -0
  171. data/lib/rails_admin/config/fields/types/enum.rb +35 -0
  172. data/lib/rails_admin/config/fields/types/file_upload.rb +65 -0
  173. data/lib/rails_admin/config/fields/types/float.rb +14 -0
  174. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
  175. data/lib/rails_admin/config/fields/types/has_many_association.rb +37 -0
  176. data/lib/rails_admin/config/fields/types/has_one_association.rb +35 -0
  177. data/lib/rails_admin/config/fields/types/hidden.rb +19 -0
  178. data/lib/rails_admin/config/fields/types/integer.rb +20 -0
  179. data/lib/rails_admin/config/fields/types/paperclip.rb +46 -0
  180. data/lib/rails_admin/config/fields/types/password.rb +42 -0
  181. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +76 -0
  182. data/lib/rails_admin/config/fields/types/string.rb +43 -0
  183. data/lib/rails_admin/config/fields/types/text.rb +38 -0
  184. data/lib/rails_admin/config/fields/types/time.rb +36 -0
  185. data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
  186. data/lib/rails_admin/config/has_fields.rb +135 -0
  187. data/lib/rails_admin/config/has_groups.rb +23 -0
  188. data/lib/rails_admin/config/hideable.rb +28 -0
  189. data/lib/rails_admin/config/model.rb +82 -0
  190. data/lib/rails_admin/config/proxy.rb +40 -0
  191. data/lib/rails_admin/config/sections.rb +38 -0
  192. data/lib/rails_admin/config/sections/base.rb +19 -0
  193. data/lib/rails_admin/config/sections/create.rb +11 -0
  194. data/lib/rails_admin/config/sections/edit.rb +11 -0
  195. data/lib/rails_admin/config/sections/export.rb +11 -0
  196. data/lib/rails_admin/config/sections/list.rb +27 -0
  197. data/lib/rails_admin/config/sections/nested.rb +10 -0
  198. data/lib/rails_admin/config/sections/show.rb +10 -0
  199. data/lib/rails_admin/config/sections/update.rb +10 -0
  200. data/lib/rails_admin/engine.rb +21 -0
  201. data/lib/rails_admin/extension.rb +29 -0
  202. data/lib/rails_admin/extensions/cancan.rb +5 -0
  203. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +59 -0
  204. data/lib/rails_admin/extensions/history.rb +5 -0
  205. data/lib/rails_admin/extensions/history/auditing_adapter.rb +37 -0
  206. data/lib/rails_admin/extensions/history/history.rb +68 -0
  207. data/lib/rails_admin/extensions/paper_trail.rb +5 -0
  208. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +92 -0
  209. data/lib/rails_admin/generic_support.rb +18 -0
  210. data/lib/rails_admin/i18n_support.rb +43 -0
  211. data/lib/rails_admin/support/core_extensions.rb +44 -0
  212. data/lib/rails_admin/support/csv_converter.rb +109 -0
  213. data/lib/rails_admin/version.rb +6 -0
  214. data/lib/tasks/prepare_ci_env.rake +27 -0
  215. data/lib/tasks/rails_admin.rake +18 -0
  216. data/spec/ci.sh +2 -0
  217. data/spec/controllers/application_controller_spec.rb +30 -0
  218. data/spec/controllers/main_controller_spec.rb +114 -0
  219. data/spec/database_helpers.rb +15 -0
  220. data/spec/dummy_app/Gemfile +53 -0
  221. data/spec/dummy_app/Rakefile +7 -0
  222. data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
  223. data/spec/dummy_app/app/controllers/players_controller.rb +5 -0
  224. data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
  225. data/spec/dummy_app/app/locales/models.en.yml +16 -0
  226. data/spec/dummy_app/app/models/abstract.rb +5 -0
  227. data/spec/dummy_app/app/models/ball.rb +8 -0
  228. data/spec/dummy_app/app/models/category.rb +3 -0
  229. data/spec/dummy_app/app/models/cms.rb +5 -0
  230. data/spec/dummy_app/app/models/cms/basic_page.rb +7 -0
  231. data/spec/dummy_app/app/models/cms/unscoped_page.rb +3 -0
  232. data/spec/dummy_app/app/models/comment.rb +3 -0
  233. data/spec/dummy_app/app/models/division.rb +8 -0
  234. data/spec/dummy_app/app/models/draft.rb +11 -0
  235. data/spec/dummy_app/app/models/fan.rb +5 -0
  236. data/spec/dummy_app/app/models/field_test.rb +20 -0
  237. data/spec/dummy_app/app/models/hardball.rb +2 -0
  238. data/spec/dummy_app/app/models/league.rb +10 -0
  239. data/spec/dummy_app/app/models/nested_field_test.rb +3 -0
  240. data/spec/dummy_app/app/models/player.rb +23 -0
  241. data/spec/dummy_app/app/models/rel_test.rb +6 -0
  242. data/spec/dummy_app/app/models/team.rb +25 -0
  243. data/spec/dummy_app/app/models/user.rb +21 -0
  244. data/spec/dummy_app/app/uploaders/carrierwave_uploader.rb +53 -0
  245. data/spec/dummy_app/app/views/layouts/application.html.erb +13 -0
  246. data/spec/dummy_app/app/views/players/show.html.haml +1 -0
  247. data/spec/dummy_app/config.ru +4 -0
  248. data/spec/dummy_app/config/application.rb +47 -0
  249. data/spec/dummy_app/config/boot.rb +6 -0
  250. data/spec/dummy_app/config/database.yml +22 -0
  251. data/spec/dummy_app/config/environment.rb +5 -0
  252. data/spec/dummy_app/config/environments/development.rb +27 -0
  253. data/spec/dummy_app/config/environments/production.rb +51 -0
  254. data/spec/dummy_app/config/environments/test.rb +39 -0
  255. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
  256. data/spec/dummy_app/config/initializers/devise.rb +142 -0
  257. data/spec/dummy_app/config/initializers/inflections.rb +10 -0
  258. data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
  259. data/spec/dummy_app/config/initializers/quiet_assets.rb +10 -0
  260. data/spec/dummy_app/config/initializers/rails_admin.rb +11 -0
  261. data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
  262. data/spec/dummy_app/config/initializers/session_store.rb +8 -0
  263. data/spec/dummy_app/config/routes.rb +10 -0
  264. data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
  265. data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
  266. data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
  267. data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
  268. data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
  269. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +19 -0
  270. data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
  271. data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
  272. data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
  273. data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
  274. data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
  275. data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
  276. data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
  277. data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
  278. data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
  279. data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
  280. data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
  281. data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
  282. data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
  283. data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
  284. data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
  285. data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
  286. data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
  287. data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
  288. data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
  289. data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
  290. data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
  291. data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
  292. data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
  293. data/spec/dummy_app/db/migrate/20111115041025_add_type_to_balls.rb +5 -0
  294. data/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +10 -0
  295. data/spec/dummy_app/db/migrate/20111130075338_add_dragonfly_asset_name_to_field_tests.rb +5 -0
  296. data/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +8 -0
  297. data/spec/dummy_app/db/migrate/20120117151733_add_custom_field_to_teams.rb +5 -0
  298. data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +7 -0
  299. data/spec/dummy_app/db/seeds.rb +18 -0
  300. data/spec/dummy_app/foo/Gemfile +17 -0
  301. data/spec/dummy_app/foo/MIT-LICENSE +20 -0
  302. data/spec/dummy_app/foo/README.rdoc +3 -0
  303. data/spec/dummy_app/foo/Rakefile +39 -0
  304. data/spec/dummy_app/foo/app/assets/javascripts/foo/application.js +9 -0
  305. data/spec/dummy_app/foo/app/assets/stylesheets/foo/application.css +7 -0
  306. data/spec/dummy_app/foo/app/controllers/foo/application_controller.rb +4 -0
  307. data/spec/dummy_app/foo/app/helpers/foo/application_helper.rb +4 -0
  308. data/spec/dummy_app/foo/app/models/foo/bar.rb +4 -0
  309. data/spec/dummy_app/foo/app/views/layouts/foo/application.html.erb +14 -0
  310. data/spec/dummy_app/foo/config/routes.rb +2 -0
  311. data/spec/dummy_app/foo/foo.gemspec +23 -0
  312. data/spec/dummy_app/foo/lib/foo.rb +4 -0
  313. data/spec/dummy_app/foo/lib/foo/engine.rb +5 -0
  314. data/spec/dummy_app/foo/lib/foo/version.rb +3 -0
  315. data/spec/dummy_app/foo/lib/tasks/foo_tasks.rake +4 -0
  316. data/spec/dummy_app/foo/script/rails +6 -0
  317. data/spec/dummy_app/foo/test/dummy/Rakefile +7 -0
  318. data/spec/dummy_app/foo/test/dummy/app/assets/javascripts/application.js +9 -0
  319. data/spec/dummy_app/foo/test/dummy/app/assets/stylesheets/application.css +7 -0
  320. data/spec/dummy_app/foo/test/dummy/app/controllers/application_controller.rb +3 -0
  321. data/spec/dummy_app/foo/test/dummy/app/helpers/application_helper.rb +2 -0
  322. data/spec/dummy_app/foo/test/dummy/app/views/layouts/application.html.erb +14 -0
  323. data/spec/dummy_app/foo/test/dummy/config.ru +4 -0
  324. data/spec/dummy_app/foo/test/dummy/config/application.rb +45 -0
  325. data/spec/dummy_app/foo/test/dummy/config/boot.rb +10 -0
  326. data/spec/dummy_app/foo/test/dummy/config/database.yml +25 -0
  327. data/spec/dummy_app/foo/test/dummy/config/environment.rb +5 -0
  328. data/spec/dummy_app/foo/test/dummy/config/environments/development.rb +30 -0
  329. data/spec/dummy_app/foo/test/dummy/config/environments/production.rb +60 -0
  330. data/spec/dummy_app/foo/test/dummy/config/environments/test.rb +39 -0
  331. data/spec/dummy_app/foo/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  332. data/spec/dummy_app/foo/test/dummy/config/initializers/inflections.rb +10 -0
  333. data/spec/dummy_app/foo/test/dummy/config/initializers/mime_types.rb +5 -0
  334. data/spec/dummy_app/foo/test/dummy/config/initializers/secret_token.rb +7 -0
  335. data/spec/dummy_app/foo/test/dummy/config/initializers/session_store.rb +8 -0
  336. data/spec/dummy_app/foo/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  337. data/spec/dummy_app/foo/test/dummy/config/locales/en.yml +5 -0
  338. data/spec/dummy_app/foo/test/dummy/config/routes.rb +4 -0
  339. data/spec/dummy_app/foo/test/dummy/db/schema.rb +21 -0
  340. data/spec/dummy_app/foo/test/dummy/public/404.html +26 -0
  341. data/spec/dummy_app/foo/test/dummy/public/422.html +26 -0
  342. data/spec/dummy_app/foo/test/dummy/public/500.html +26 -0
  343. data/spec/dummy_app/foo/test/dummy/public/favicon.ico +0 -0
  344. data/spec/dummy_app/foo/test/dummy/script/rails +6 -0
  345. data/spec/dummy_app/foo/test/fixtures/foo/bars.yml +11 -0
  346. data/spec/dummy_app/foo/test/foo_test.rb +7 -0
  347. data/spec/dummy_app/foo/test/integration/navigation_test.rb +10 -0
  348. data/spec/dummy_app/foo/test/test_helper.rb +10 -0
  349. data/spec/dummy_app/foo/test/unit/foo/bar_test.rb +9 -0
  350. data/spec/dummy_app/public/404.html +0 -0
  351. data/spec/dummy_app/public/favicon.ico +0 -0
  352. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg +0 -0
  353. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg.meta +1 -0
  354. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg +0 -0
  355. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg.meta +1 -0
  356. data/spec/dummy_app/public/system/paperclip_assets/1/original/Boston City Flow.jpg +0 -0
  357. data/spec/dummy_app/public/system/paperclip_assets/1/thumb/Boston City Flow.jpg +0 -0
  358. data/spec/dummy_app/public/system/paperclip_assets/3/original/Costa Rican Frog.jpg +0 -0
  359. data/spec/dummy_app/public/system/paperclip_assets/3/thumb/Costa Rican Frog.jpg +0 -0
  360. data/spec/dummy_app/public/system/paperclip_assets/6/original/liste-electorale.pdf +0 -0
  361. data/spec/dummy_app/public/system/paperclip_assets/6/thumb/liste-electorale.pdf +148 -0
  362. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/Boston_City_Flow.jpg +0 -0
  363. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/thumb_Boston_City_Flow.jpg +0 -0
  364. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/Costa_Rican_Frog.jpg +0 -0
  365. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/thumb_Costa_Rican_Frog.jpg +0 -0
  366. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/Pensive_Parakeet.jpg +0 -0
  367. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/thumb_Pensive_Parakeet.jpg +0 -0
  368. data/spec/dummy_app/script/rails +6 -0
  369. data/spec/factories.rb +66 -0
  370. data/spec/generator_helpers.rb +30 -0
  371. data/spec/generators/install_generator_spec.rb +85 -0
  372. data/spec/generators/uninstall_generator_spec.rb +35 -0
  373. data/spec/helpers/application_helper_spec.rb +212 -0
  374. data/spec/lib/abstract_object_spec.rb +119 -0
  375. data/spec/lib/custom_field.rb +7 -0
  376. data/spec/lib/rails_admin_spec.rb +301 -0
  377. data/spec/requests/actions.rb +161 -0
  378. data/spec/requests/authorization/cancan_spec.rb +350 -0
  379. data/spec/requests/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
  380. data/spec/requests/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +57 -0
  381. data/spec/requests/basic/create/rails_admin_basic_create_spec.rb +143 -0
  382. data/spec/requests/basic/create/rails_admin_namespaced_model_create_spec.rb +39 -0
  383. data/spec/requests/basic/delete/rails_admin_basic_delete_spec.rb +27 -0
  384. data/spec/requests/basic/destroy/rails_admin_basic_destroy_spec.rb +56 -0
  385. data/spec/requests/basic/edit/rails_admin_basic_edit_spec.rb +109 -0
  386. data/spec/requests/basic/export/rails_admin_basic_export_spec.rb +87 -0
  387. data/spec/requests/basic/list/rails_admin_basic_list_spec.rb +417 -0
  388. data/spec/requests/basic/new/rails_admin_basic_new_spec.rb +74 -0
  389. data/spec/requests/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
  390. data/spec/requests/basic/show/rails_admin_basic_show_spec.rb +92 -0
  391. data/spec/requests/basic/update/rails_admin_basic_update_spec.rb +191 -0
  392. data/spec/requests/config/edit/rails_admin_config_edit_spec.rb +913 -0
  393. data/spec/requests/config/list/rails_admin_config_list_spec.rb +509 -0
  394. data/spec/requests/config/navigation/rails_admin_config_navigation_spec.rb +107 -0
  395. data/spec/requests/config/rails_admin_config_spec.rb +227 -0
  396. data/spec/requests/config/show/rails_admin_config_show_spec.rb +282 -0
  397. data/spec/requests/history/rails_admin_history_spec.rb +66 -0
  398. data/spec/requests/rails_admin_spec.rb +146 -0
  399. data/spec/requests/relation_spec.rb +26 -0
  400. data/spec/spec_helper.rb +91 -0
  401. metadata +967 -0
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Namespaced Model Create" do
4
+
5
+ subject { page }
6
+
7
+ before(:each) do
8
+ visit new_path(:model_name => "cms~basic_page")
9
+
10
+ fill_in "cms_basic_page[title]", :with => "Hello"
11
+ fill_in "cms_basic_page[content]", :with => "World"
12
+ end
13
+
14
+ it 'should be successful' do
15
+ click_button "Save"
16
+ end
17
+
18
+ it 'should create object with correct attributes' do
19
+ expect {
20
+ click_button "Save"
21
+ }.to change(Cms::BasicPage, :count).by(1)
22
+ end
23
+ end
24
+
25
+
26
+ describe "RailsAdmin Mounted Engine Model Create" do
27
+
28
+ subject { page }
29
+
30
+ before(:each) do
31
+ visit new_path(:model_name => "foo~bar")
32
+ fill_in "foo_bar[title]", :with => "Hello"
33
+ click_button "Save"
34
+ end
35
+
36
+ it 'should be successful' do
37
+ Foo::Bar.first.title.should == 'Hello'
38
+ end
39
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Delete" do
4
+
5
+ subject { page }
6
+
7
+ describe "delete" do
8
+ before(:each) do
9
+ @player = FactoryGirl.create :player
10
+ visit delete_path(:model_name => "player", :id => @player.id)
11
+ end
12
+
13
+ it "should show \"Delete model\"" do
14
+ should have_content("delete this player")
15
+ end
16
+ end
17
+
18
+ describe "delete with missing object" do
19
+ before(:each) do
20
+ visit delete_path(:model_name => "player", :id => 1)
21
+ end
22
+
23
+ it "should raise NotFound" do
24
+ page.driver.status_code.should eql(404)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Destroy" do
4
+
5
+ subject { page }
6
+
7
+ describe "destroy" do
8
+ before(:each) do
9
+ @player = FactoryGirl.create :player
10
+ visit delete_path(:model_name => "player", :id => @player.id)
11
+ click_button "Yes, I'm sure"
12
+ @player = RailsAdmin::AbstractModel.new("Player").first
13
+ end
14
+
15
+ it "should destroy an object" do
16
+ @player.should be_nil
17
+ end
18
+ end
19
+
20
+ describe "destroy with errors" do
21
+ before(:each) do
22
+ Player.any_instance.stub(:destroy).and_return false
23
+ @player = FactoryGirl.create :player
24
+ visit delete_path(:model_name => "player", :id => @player.id)
25
+ click_button "Yes, I'm sure"
26
+ end
27
+
28
+ it "should destroy an object" do
29
+ @player.reload.should be
30
+ end
31
+ end
32
+
33
+ describe "destroy" do
34
+ before(:each) do
35
+ @player = FactoryGirl.create :player
36
+ visit delete_path(:model_name => "player", :id => @player.id)
37
+ click_button "Cancel"
38
+ @player = RailsAdmin::AbstractModel.new("Player").first
39
+ end
40
+
41
+ it "should not destroy an object" do
42
+ @player.should be
43
+ end
44
+ end
45
+
46
+ describe "destroy with missing object" do
47
+ before(:each) do
48
+ page.driver.delete(delete_path(:model_name => "player", :id => 1))
49
+ end
50
+
51
+ it "should raise NotFound" do
52
+ page.driver.status_code.should eql(404)
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,109 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Edit" do
4
+
5
+ subject { page }
6
+
7
+ describe "edit" do
8
+ before(:each) do
9
+ @player = FactoryGirl.create :player
10
+ visit edit_path(:model_name => "player", :id => @player.id)
11
+ end
12
+
13
+ it "should show \"Edit model\"" do
14
+ should have_content("Edit Player")
15
+ end
16
+
17
+ it "should show required fields as \"Required\"" do
18
+ should have_selector("div", :text => /Name\s*Required/)
19
+ should have_selector("div", :text => /Number\s*Required/)
20
+ end
21
+
22
+ it "should show non-required fields as \"Optional\"" do
23
+ find("#player_position_field .help-block").should have_content("Optional")
24
+ find("#player_born_on_field .help-block").should have_content("Optional")
25
+ find("#player_notes_field .help-block").should have_content("Optional")
26
+ end
27
+ end
28
+
29
+ describe "association with inverse_of option" do
30
+ it "should add a related id to the belongs_to create team link" do
31
+ @player = FactoryGirl.create :player
32
+ visit edit_path(:model_name => "player", :id => @player.id)
33
+ should have_selector("a", :href => 'admin/teams/new?associations[players]=' + @player.id.to_s)
34
+ end
35
+
36
+ it "should add a related id to the has_many create team link" do
37
+ @team = FactoryGirl.create :team
38
+ visit edit_path(:model_name => "team", :id => @team.id)
39
+ should have_selector("a", :href => 'admin/players/new?associations[team]=' + @team.id.to_s)
40
+ end
41
+ end
42
+
43
+ describe "readonly associations" do
44
+
45
+ it 'should not be editable' do
46
+ @league = FactoryGirl.create :league
47
+ visit edit_path(:model_name => "league", :id => @league.id)
48
+ should_not have_selector('select#league_team_ids')
49
+ should have_selector('select#league_division_ids') # decoy, fails if naming scheme changes
50
+ end
51
+ end
52
+
53
+ describe "edit with has-and-belongs-to-many association" do
54
+ before(:each) do
55
+ @teams = 3.times.map { FactoryGirl.create :team }
56
+ @fan = FactoryGirl.create :fan, :teams => [@teams[0]]
57
+ visit edit_path(:model_name => "fan", :id => @fan.id)
58
+ end
59
+
60
+ it "should show associated objects" do
61
+ should have_selector "#fan_team_ids" do |select|
62
+ select[0].should have_selector 'option[selected="selected"]'
63
+ select[1].should_not have_selector 'option[selected="selected"]'
64
+ select[2].should_not have_selector 'option[selected="selected"]'
65
+ end
66
+ end
67
+ end
68
+
69
+ describe "edit with missing object" do
70
+ before(:each) do
71
+ visit edit_path(:model_name => "player", :id => 1)
72
+ end
73
+
74
+ it "should raise NotFound" do
75
+ page.driver.status_code.should eql(404)
76
+ end
77
+ end
78
+
79
+ describe "edit with missing label", :given => ["a player exists", "three teams with no name exist"] do
80
+ before(:each) do
81
+ @player = FactoryGirl.create :player
82
+ @teams = 3.times.map { FactoryGirl.create :team, :name => "" }
83
+ visit edit_path(:model_name => "player", :id => @player.id)
84
+ end
85
+ end
86
+
87
+ describe "edit object with overridden to_param" do
88
+ before(:each) do
89
+ @ball = FactoryGirl.create :ball
90
+ visit edit_path(:model_name => "ball", :id => @ball.id)
91
+ end
92
+
93
+ it "should display a link to the delete page" do
94
+ should have_selector "a[href='/admin/ball/#{@ball.id}/delete']"
95
+ end
96
+
97
+ end
98
+
99
+ describe "clicking cancel when editing an object" do
100
+
101
+ it "should send back to previous URL" do
102
+ @ball = FactoryGirl.create :ball
103
+ visit '/admin/ball?sort=color'
104
+ click_link 'Edit'
105
+ click_button 'Cancel'
106
+ page.current_url.should == 'http://www.example.com/admin/ball?sort=color'
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Export" do
4
+
5
+ subject { page }
6
+
7
+ before(:each) do
8
+ Comment.all.map &:destroy # rspec bug => doesn't get destroyed with transaction
9
+
10
+ @players = 4.times.map { FactoryGirl.create :player }
11
+ @player = @players.first
12
+ @player.team = FactoryGirl.create :team
13
+ @player.draft = FactoryGirl.create :draft
14
+ @player.comments = (@comments = 2.times.map { FactoryGirl.create(:comment) })
15
+ @player.save
16
+
17
+ # removed schema=>only=>created_at
18
+ @non_default_schema = {
19
+ "only"=>["id", "updated_at", "deleted_at", "name", "position", "number", "retired", "injured", "born_on", "notes", "suspended"],
20
+ "include"=>{
21
+ "team"=>{"only"=>["id", "created_at", "updated_at", "name", "logo_url", "manager", "ballpark", "mascot", "founded", "wins", "losses", "win_percentage", "revenue", "color"]},
22
+ "draft"=>{"only"=>["id", "created_at", "updated_at", "date", "round", "pick", "overall", "college", "notes"]},
23
+ "comments"=>{"only"=>["id", "content", "created_at", "updated_at"]}
24
+ }
25
+ }
26
+ end
27
+
28
+ describe "POST /admin/players/export (prompt)" do
29
+
30
+ it "should allow to export to CSV with associations and default schema, containing properly translated header and follow configuration" do
31
+ RailsAdmin.config do |c|
32
+ c.model Player do
33
+ include_all_fields
34
+ field :name do
35
+ export_value do
36
+ "#{value} exported"
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ visit export_path(:model_name => 'player')
43
+ should have_content 'Select fields to export'
44
+ select "<comma> ','", :from => "csv_options_generator_col_sep"
45
+ click_button 'Export to csv'
46
+ should have_content "Id,Created at,Updated at,Deleted at,Name,Position,Number,Retired,Injured,Born on,Notes,Suspended"
47
+ should have_content "Id [Team],Created at [Team],Updated at [Team],Name [Team],Logo url [Team],Team Manager [Team],Ballpark [Team],Mascot [Team],Founded [Team],Wins [Team],Losses [Team],Win percentage [Team],Revenue [Team],Color [Team]"
48
+ should have_content "Id [Draft],Created at [Draft],Updated at [Draft],Date [Draft],Round [Draft],Pick [Draft],Overall [Draft],College [Draft],Notes [Draft]"
49
+ should have_content "Id [Comments],Content [Comments],Created at [Comments],Updated at [Comments]"
50
+ should have_content @player.name + " exported"
51
+ should have_content @player.team.name
52
+ should have_content @player.draft.college
53
+ should have_content @player.comments.first.content.split("\n").first.strip # can't match for more than one line
54
+ should have_content @player.comments.second.content.split("\n").first.strip
55
+ end
56
+
57
+ it "should allow to export to JSON" do
58
+ visit export_path(:model_name => 'player')
59
+ click_button 'Export to json'
60
+ should have_content @player.team.name
61
+ end
62
+
63
+ it "should allow to export to XML" do
64
+ visit export_path(:model_name => 'player')
65
+ click_button 'Export to xml'
66
+
67
+ # spec fails on non 1.9 mri rubies because of this https://github.com/rails/rails/pull/2076
68
+ # waiting for fix (rails-3.1.4?)
69
+ should have_content @player.team.name if RUBY_VERSION =~ /1\.9/
70
+ end
71
+
72
+ it "should export polymorphic fields the easy way for now" do
73
+ visit export_path(:model_name => 'comment')
74
+ select "<comma> ','", :from => "csv_options_generator_col_sep"
75
+ click_button 'Export to csv'
76
+ should have_content "Id,Commentable,Commentable type,Content,Created at,Updated at"
77
+ should have_content "#{@player.id},#{@player.class}"
78
+ end
79
+ end
80
+
81
+ describe "POST /admin/players/export :format => :csv" do
82
+ it "should export with modified schema" do
83
+ page.driver.post(export_path(:model_name => 'player', :schema => @non_default_schema, :csv => true, :all => true, :csv_options => { :generator => { :col_sep => "," } }))
84
+ should have_content "Id,Updated at,Deleted at,Name,Position,Number,Retired,Injured,Born on,Notes,Suspended" # no created_at
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,417 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "RailsAdmin Basic List" do
6
+
7
+ subject { page }
8
+
9
+ describe "GET /admin" do
10
+ it "should respond successfully" do
11
+ visit dashboard_path
12
+ end
13
+ end
14
+
15
+ describe "GET /admin/typo" do
16
+ it "should redirect to dashboard and inform the user the model wasn't found" do
17
+ visit '/admin/whatever'
18
+ page.driver.status_code.should eql(404)
19
+ find('.alert-message.error').should have_content("Model 'Whatever' could not be found")
20
+ end
21
+ end
22
+
23
+ describe "GET /admin/balls/545-typo" do
24
+ it "should redirect to balls index and inform the user the id wasn't found" do
25
+ visit '/admin/ball/545-typo'
26
+ page.driver.status_code.should eql(404)
27
+ find('.alert-message.error').should have_content("Ball with id '545-typo' could not be found")
28
+ end
29
+ end
30
+
31
+ describe "GET /admin/player as list" do
32
+ before(:each) do
33
+ 21.times { FactoryGirl.create :player } # two pages of players
34
+ visit index_path(:model_name => "player")
35
+ end
36
+
37
+ it "should show \"List of Models\", should show filters and should show column headers" do
38
+ should have_content("List of Players")
39
+ should have_content("Created at")
40
+ should have_content("Updated at")
41
+ end
42
+
43
+ it "shows the show, edit and delete links" do
44
+ should have_selector("td a", :text => 'Show')
45
+ should have_selector("td a", :text => 'Edit')
46
+ should have_selector("td a", :text => 'Delete')
47
+ end
48
+
49
+ it "has the search box with some prompt text" do
50
+ should have_selector("input[placeholder='Filter']")
51
+ end
52
+
53
+ # https://github.com/sferik/rails_admin/issues/362
54
+ # test that no link uses the "wildcard route" with the main
55
+ # controller and list method
56
+ it "should not use the 'wildcard route'" do
57
+ should have_selector("a[href*='all=true']") # make sure we're fully testing pagination
58
+ should have_no_selector("a[href^='/rails_admin/main/list']")
59
+ end
60
+ end
61
+
62
+ describe "GET /admin/player with sort" do
63
+ before(:each) do
64
+ @players = 2.times.map { FactoryGirl.create :player }
65
+ visit index_path(:model_name => "player", :sort => "name")
66
+ end
67
+
68
+ it "should be sorted correctly" do
69
+ 2.times { |i| should have_selector("td", :text => /#{@players[i].name}/) }
70
+ end
71
+ end
72
+
73
+ describe "GET /admin/player with reverse sort" do
74
+
75
+ before(:each) do
76
+ @players = 2.times.map { FactoryGirl.create :player }
77
+ visit index_path(:model_name => "player", :sort => "name", :sort_reverse => "true")
78
+ end
79
+
80
+ it "should be sorted correctly" do
81
+ 2.times { |i| should have_selector("td", :text => /#{@players.reverse[i].name}/) }
82
+ end
83
+ end
84
+
85
+ describe "GET /admin/player" do
86
+ before(:each) do
87
+ @teams = 2.times.map do
88
+ FactoryGirl.create(:team)
89
+ end
90
+ @players = [
91
+ FactoryGirl.create(:player, :retired => true, :injured => true, :team => @teams[0]),
92
+ FactoryGirl.create(:player, :retired => true, :injured => false, :team => @teams[0]),
93
+ FactoryGirl.create(:player, :retired => false, :injured => true, :team => @teams[1]),
94
+ FactoryGirl.create(:player, :retired => false, :injured => false, :team => @teams[1]),
95
+ ]
96
+ end
97
+
98
+ it "should allow to query on any attribute" do
99
+ visit index_path(:model_name => "player", :query => @players[0].name)
100
+ should have_content(@players[0].name)
101
+ (1..3).each do |i|
102
+ should have_no_content(@players[i].name)
103
+ end
104
+ end
105
+
106
+ it "should allow to filter on one attribute" do
107
+ visit index_path(:model_name => "player", :f => {:injured => {"1" => {:v => "true"}}})
108
+ should have_content(@players[0].name)
109
+ should have_no_content(@players[1].name)
110
+ should have_content(@players[2].name)
111
+ should have_no_content(@players[3].name)
112
+ end
113
+
114
+ it "should allow to combine filters on two different attributes" do
115
+ visit index_path(:model_name => "player", :f => {:retired => {"1" => {:v => "true"}}, :injured => {"1" => {:v => "true"}}})
116
+ should have_content(@players[0].name)
117
+ (1..3).each do |i|
118
+ should have_no_content(@players[i].name)
119
+ end
120
+ end
121
+
122
+ it "should allow to filter on belongs_to relationships" do
123
+ visit index_path(:model_name => "player", :f => {:team => {"1" => { :v => @teams[0].name }}})
124
+ should have_content(@players[0].name)
125
+ should have_content(@players[1].name)
126
+ should have_no_content(@players[2].name)
127
+ should have_no_content(@players[3].name)
128
+ end
129
+
130
+ it "should allow to disable search on attributes" do
131
+ RailsAdmin.config Player do
132
+ list do
133
+ field :position
134
+ field :name do
135
+ searchable false
136
+ end
137
+ end
138
+ end
139
+ visit index_path(:model_name => "player", :query => @players[0].name)
140
+ should have_no_content(@players[0].name)
141
+ end
142
+
143
+ it "should allow to search a belongs_to attribute over the base table" do
144
+ RailsAdmin.config Player do
145
+ list do
146
+ field :id
147
+ field :name
148
+ field :team do
149
+ searchable Player => :team_id
150
+ end
151
+ end
152
+ end
153
+ visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.id}}})
154
+ should have_content(@players[0].name)
155
+ should have_content(@players[1].name)
156
+ should have_no_content(@players[2].name)
157
+ should have_no_content(@players[3].name)
158
+ end
159
+
160
+
161
+ it "should allow to search a belongs_to attribute over the target table" do
162
+ RailsAdmin.config Player do
163
+ list do
164
+ field :id
165
+ field :name
166
+ field :team do
167
+ searchable Team => :name
168
+ end
169
+ end
170
+ end
171
+ visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
172
+ should have_content(@players[0].name)
173
+ should have_content(@players[1].name)
174
+ should have_no_content(@players[2].name)
175
+ should have_no_content(@players[3].name)
176
+ end
177
+
178
+ it "should allow to search a belongs_to attribute over the target table with a table name specified as a hash" do
179
+ RailsAdmin.config Player do
180
+ list do
181
+ field :id
182
+ field :name
183
+ field :team do
184
+ searchable :teams => :name
185
+ end
186
+ end
187
+ end
188
+ visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
189
+ should have_content(@players[0].name)
190
+ should have_content(@players[1].name)
191
+ should have_no_content(@players[2].name)
192
+ should have_no_content(@players[3].name)
193
+ end
194
+
195
+ it "should allow to search a belongs_to attribute over the target table with a table name specified as a string" do
196
+ RailsAdmin.config Player do
197
+ list do
198
+ field :id
199
+ field :name
200
+ field :team do
201
+ searchable 'teams.name'
202
+ end
203
+ end
204
+ end
205
+ visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
206
+ should have_content(@players[0].name)
207
+ should have_content(@players[1].name)
208
+ should have_no_content(@players[2].name)
209
+ should have_no_content(@players[3].name)
210
+ end
211
+
212
+ it "should allow to search a belongs_to attribute over the label method by default" do
213
+ RailsAdmin.config Player do
214
+ list do
215
+ field :id
216
+ field :name
217
+ field :team
218
+ end
219
+ end
220
+ visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
221
+ should have_content(@players[0].name)
222
+ should have_content(@players[1].name)
223
+ should have_no_content(@players[2].name)
224
+ should have_no_content(@players[3].name)
225
+ end
226
+
227
+ it "should allow to search a belongs_to attribute over the target table when an attribute is specified" do
228
+ RailsAdmin.config Player do
229
+ list do
230
+ field :id
231
+ field :name
232
+ field :team do
233
+ searchable :name
234
+ end
235
+ end
236
+ end
237
+ visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
238
+ should have_content(@players[0].name)
239
+ should have_content(@players[1].name)
240
+ should have_no_content(@players[2].name)
241
+ should have_no_content(@players[3].name)
242
+ end
243
+
244
+ it "should allow to search over more than one attribute" do
245
+ RailsAdmin.config Player do
246
+ list do
247
+ field :id
248
+ field :name
249
+ field :team do
250
+ searchable [:name, {Player => :team_id}]
251
+ end
252
+ end
253
+ end
254
+ visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}, "2" => {:v => @teams.first.id}}})
255
+ should have_content(@players[0].name)
256
+ should have_content(@players[1].name)
257
+ should have_no_content(@players[2].name)
258
+ should have_no_content(@players[3].name)
259
+ # same with a different id
260
+ visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}, "2" => {:v => @teams.last.id}}})
261
+ should have_no_content(@players[0].name)
262
+ should have_no_content(@players[1].name)
263
+ should have_no_content(@players[2].name)
264
+ should have_no_content(@players[3].name)
265
+ end
266
+
267
+ it "should display base filters when no filters are present in the params" do
268
+ RailsAdmin.config Player do
269
+ list do
270
+ filters [:name, :team]
271
+ end
272
+ end
273
+
274
+ visit index_path(:model_name => "player")
275
+ should have_content("$.filters.append('Name', 'name', 'string', '', '', '', false, '1');$.filters.append('Team', 'team', 'belongs_to_association', '', '', '', false, '2');")
276
+ end
277
+ end
278
+
279
+ describe "GET /admin/player with 2 objects" do
280
+ before(:each) do
281
+ @players = 2.times.map { FactoryGirl.create :player }
282
+ visit index_path(:model_name => "player")
283
+ end
284
+
285
+ it "should show \"2 results\"" do
286
+ should have_content("2 players")
287
+ end
288
+ end
289
+
290
+ describe "GET /admin/player with 20 objects" do
291
+ before(:each) do
292
+ @players = 20.times.map { FactoryGirl.create :player }
293
+ visit index_path(:model_name => "player")
294
+ end
295
+
296
+ it "should show \"20 results\"" do
297
+ should have_content("20 players")
298
+ end
299
+ end
300
+
301
+ describe "GET /admin/player with 20 pages, page 8" do
302
+ before(:each) do
303
+ items_per_page = RailsAdmin.config.default_items_per_page
304
+ (items_per_page * 20).times { FactoryGirl.create(:player) }
305
+ visit index_path(:model_name => "player", :page => 8)
306
+ end
307
+
308
+ it "should paginate correctly" do
309
+ find('.pagination ul li:first').should have_content("« Prev")
310
+ find('.pagination ul li:last').should have_content("Next »")
311
+ find('.pagination ul li.active').should have_content("8")
312
+ end
313
+ end
314
+
315
+ describe "list with 20 pages, page 20" do
316
+ before(:each) do
317
+ items_per_page = RailsAdmin.config.default_items_per_page
318
+ @players = (items_per_page * 20).times.map { FactoryGirl.create(:player) }
319
+ visit index_path(:model_name => "player", :page => 20)
320
+ end
321
+
322
+ it "should paginate correctly and contain the right item" do
323
+ find('.pagination ul li:first').should have_content("« Prev")
324
+ find('.pagination ul li:last').should have_content("Next »")
325
+ find('.pagination ul li.active').should have_content("20")
326
+ end
327
+ end
328
+
329
+ describe "GET /admin/player show all" do
330
+ it "should respond successfully" do
331
+ 2.times.map { FactoryGirl.create :player }
332
+ visit index_path(:model_name => "player", :all => true)
333
+ end
334
+ end
335
+
336
+ describe "list as compact json" do
337
+ it "should have_content an array with 2 elements and contain an array of elements with keys id and label" do
338
+ 2.times.map { FactoryGirl.create :player }
339
+ response = page.driver.get(index_path(:model_name => "player", :compact => true, :format => :json))
340
+ ActiveSupport::JSON.decode(response.body).length.should eql(2)
341
+ ActiveSupport::JSON.decode(response.body).each do |object|
342
+ object.should have_key("id")
343
+ object.should have_key("label")
344
+ end
345
+ end
346
+ end
347
+
348
+ describe "search operator" do
349
+ let(:player) { FactoryGirl.create :player }
350
+
351
+ before do
352
+ Player.count.should == 0
353
+ end
354
+
355
+ it "finds the player if the query matches the default search opeartor" do
356
+ RailsAdmin.config do |config|
357
+ config.default_search_operator = 'ends_with'
358
+ config.model Player do
359
+ list { field :name }
360
+ end
361
+ end
362
+ visit index_path(:model_name => "player", :query => player.name[2, -1])
363
+ should have_content(player.name)
364
+ end
365
+
366
+ it "does not find the player if the query does not match the default search opeartor" do
367
+ RailsAdmin.config do |config|
368
+ config.default_search_operator = 'ends_with'
369
+ config.model Player do
370
+ list { field :name }
371
+ end
372
+ end
373
+ visit index_path(:model_name => "player", :query => player.name[0, 2])
374
+ should have_no_content(player.name)
375
+ end
376
+
377
+ it "finds the player if the query matches the specified search operator" do
378
+ RailsAdmin.config Player do
379
+ list do
380
+ field :name do
381
+ search_operator 'starts_with'
382
+ end
383
+ end
384
+ end
385
+ visit index_path(:model_name => "player", :query => player.name[0, 2])
386
+ should have_content(player.name)
387
+ end
388
+
389
+ it "does not find the player if the query does not match the specified search operator" do
390
+ RailsAdmin.config Player do
391
+ list do
392
+ field :name do
393
+ search_operator 'starts_with'
394
+ end
395
+ end
396
+ end
397
+ visit index_path(:model_name => "player", :query => player.name[1..-1])
398
+ should have_no_content(player.name)
399
+ end
400
+ end
401
+
402
+ describe "list for objects with overridden to_param" do
403
+ before(:each) do
404
+ @ball = FactoryGirl.create :ball
405
+
406
+ visit index_path(:model_name => "ball")
407
+ end
408
+
409
+ it "shows the show, edit and delete links with valid url" do
410
+ should have_selector("td a[href='/admin/ball/#{@ball.id}']")
411
+ should have_selector("td a[href='/admin/ball/#{@ball.id}/edit']")
412
+ should have_selector("td a[href='/admin/ball/#{@ball.id}/delete']")
413
+ end
414
+
415
+ end
416
+
417
+ end