drewda_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 (372) hide show
  1. data/Gemfile +53 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +160 -0
  4. data/Rakefile +19 -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.colorpicker.js +484 -0
  49. data/app/assets/javascripts/rails_admin/jquery.pjax.js +431 -0
  50. data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1371 -0
  51. data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +67 -0
  52. data/app/assets/javascripts/rails_admin/ra.filter-box.js +129 -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.nested-form-hooks.coffee +40 -0
  56. data/app/assets/javascripts/rails_admin/ra.remote-form.js +150 -0
  57. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +25 -0
  58. data/app/assets/javascripts/rails_admin/themes/default/ui.js +12 -0
  59. data/app/assets/javascripts/rails_admin/ui.js.coffee +61 -0
  60. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  61. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  62. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  63. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  64. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  65. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  66. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +733 -0
  67. data/app/assets/stylesheets/rails_admin/base/README +2 -0
  68. data/app/assets/stylesheets/rails_admin/base/mixins.css.scss +1 -0
  69. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +263 -0
  70. data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
  71. data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +12 -0
  72. data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
  73. data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +15 -0
  74. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +76 -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 +69 -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/default/mixins.css.scss +8 -0
  81. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +11 -0
  82. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +12 -0
  83. data/app/controllers/rails_admin/application_controller.rb +82 -0
  84. data/app/controllers/rails_admin/main_controller.rb +151 -0
  85. data/app/helpers/rails_admin/application_helper.rb +123 -0
  86. data/app/helpers/rails_admin/form_builder.rb +104 -0
  87. data/app/helpers/rails_admin/main_helper.rb +36 -0
  88. data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
  89. data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
  90. data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
  91. data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
  92. data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
  93. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +12 -0
  94. data/app/views/layouts/rails_admin/application.html.haml +39 -0
  95. data/app/views/rails_admin/main/_dashboard_history.html.haml +10 -0
  96. data/app/views/rails_admin/main/_delete_notice.html.haml +18 -0
  97. data/app/views/rails_admin/main/_form_colorpicker.html.haml +24 -0
  98. data/app/views/rails_admin/main/_form_datetime.html.haml +4 -0
  99. data/app/views/rails_admin/main/_form_enumeration.html.haml +4 -0
  100. data/app/views/rails_admin/main/_form_field.html.haml +1 -0
  101. data/app/views/rails_admin/main/_form_file_upload.html.haml +18 -0
  102. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +59 -0
  103. data/app/views/rails_admin/main/_form_filtering_select.html.haml +47 -0
  104. data/app/views/rails_admin/main/_form_nested_many.html.haml +41 -0
  105. data/app/views/rails_admin/main/_form_nested_one.html.haml +35 -0
  106. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +34 -0
  107. data/app/views/rails_admin/main/_form_text.html.haml +9 -0
  108. data/app/views/rails_admin/main/_submit_buttons.html.haml +15 -0
  109. data/app/views/rails_admin/main/bulk_delete.html.haml +11 -0
  110. data/app/views/rails_admin/main/dashboard.html.haml +31 -0
  111. data/app/views/rails_admin/main/delete.html.haml +18 -0
  112. data/app/views/rails_admin/main/edit.html.haml +2 -0
  113. data/app/views/rails_admin/main/export.html.haml +75 -0
  114. data/app/views/rails_admin/main/history.html.haml +42 -0
  115. data/app/views/rails_admin/main/index.html.haml +140 -0
  116. data/app/views/rails_admin/main/new.html.haml +2 -0
  117. data/app/views/rails_admin/main/show.html.haml +14 -0
  118. data/config/initializers/active_record_extensions.rb +19 -0
  119. data/config/initializers/devise_patch.rb +9 -0
  120. data/config/initializers/haml.rb +2 -0
  121. data/config/initializers/mongoid_extensions.rb +4 -0
  122. data/config/locales/fr.yml +24 -0
  123. data/config/locales/rails_admin.en.yml +130 -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 +34 -0
  132. data/lib/rails_admin/abstract_model.rb +110 -0
  133. data/lib/rails_admin/adapters/active_record.rb +247 -0
  134. data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
  135. data/lib/rails_admin/adapters/mongoid.rb +333 -0
  136. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +32 -0
  137. data/lib/rails_admin/adapters/mongoid/extension.rb +27 -0
  138. data/lib/rails_admin/config.rb +322 -0
  139. data/lib/rails_admin/config/actions.rb +121 -0
  140. data/lib/rails_admin/config/actions/base.rb +117 -0
  141. data/lib/rails_admin/config/actions/bulk_delete.rb +55 -0
  142. data/lib/rails_admin/config/actions/dashboard.rb +44 -0
  143. data/lib/rails_admin/config/actions/delete.rb +53 -0
  144. data/lib/rails_admin/config/actions/edit.rb +60 -0
  145. data/lib/rails_admin/config/actions/export.rb +40 -0
  146. data/lib/rails_admin/config/actions/history_index.rb +38 -0
  147. data/lib/rails_admin/config/actions/history_show.rb +38 -0
  148. data/lib/rails_admin/config/actions/index.rb +85 -0
  149. data/lib/rails_admin/config/actions/new.rb +64 -0
  150. data/lib/rails_admin/config/actions/show.rb +32 -0
  151. data/lib/rails_admin/config/actions/show_in_app.rb +28 -0
  152. data/lib/rails_admin/config/configurable.rb +92 -0
  153. data/lib/rails_admin/config/fields.rb +88 -0
  154. data/lib/rails_admin/config/fields/association.rb +108 -0
  155. data/lib/rails_admin/config/fields/base.rb +281 -0
  156. data/lib/rails_admin/config/fields/factories/belongs_to_association.rb +29 -0
  157. data/lib/rails_admin/config/fields/factories/carrierwave.rb +31 -0
  158. data/lib/rails_admin/config/fields/factories/devise.rb +27 -0
  159. data/lib/rails_admin/config/fields/factories/dragonfly.rb +27 -0
  160. data/lib/rails_admin/config/fields/factories/enum.rb +11 -0
  161. data/lib/rails_admin/config/fields/factories/paperclip.rb +26 -0
  162. data/lib/rails_admin/config/fields/factories/password.rb +17 -0
  163. data/lib/rails_admin/config/fields/factories/serialized.rb +17 -0
  164. data/lib/rails_admin/config/fields/group.rb +78 -0
  165. data/lib/rails_admin/config/fields/types.rb +27 -0
  166. data/lib/rails_admin/config/fields/types/all.rb +26 -0
  167. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +41 -0
  168. data/lib/rails_admin/config/fields/types/boolean.rb +31 -0
  169. data/lib/rails_admin/config/fields/types/bson_object_id.rb +42 -0
  170. data/lib/rails_admin/config/fields/types/carrierwave.rb +31 -0
  171. data/lib/rails_admin/config/fields/types/color.rb +37 -0
  172. data/lib/rails_admin/config/fields/types/date.rb +24 -0
  173. data/lib/rails_admin/config/fields/types/datetime.rb +165 -0
  174. data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
  175. data/lib/rails_admin/config/fields/types/dragonfly.rb +41 -0
  176. data/lib/rails_admin/config/fields/types/enum.rb +35 -0
  177. data/lib/rails_admin/config/fields/types/file_upload.rb +61 -0
  178. data/lib/rails_admin/config/fields/types/float.rb +14 -0
  179. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
  180. data/lib/rails_admin/config/fields/types/has_many_association.rb +32 -0
  181. data/lib/rails_admin/config/fields/types/has_one_association.rb +39 -0
  182. data/lib/rails_admin/config/fields/types/hidden.rb +21 -0
  183. data/lib/rails_admin/config/fields/types/integer.rb +22 -0
  184. data/lib/rails_admin/config/fields/types/mongoid_type.rb +25 -0
  185. data/lib/rails_admin/config/fields/types/paperclip.rb +28 -0
  186. data/lib/rails_admin/config/fields/types/password.rb +39 -0
  187. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +76 -0
  188. data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
  189. data/lib/rails_admin/config/fields/types/string.rb +41 -0
  190. data/lib/rails_admin/config/fields/types/text.rb +36 -0
  191. data/lib/rails_admin/config/fields/types/time.rb +36 -0
  192. data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
  193. data/lib/rails_admin/config/groupable.rb +18 -0
  194. data/lib/rails_admin/config/has_fields.rb +135 -0
  195. data/lib/rails_admin/config/has_groups.rb +23 -0
  196. data/lib/rails_admin/config/hideable.rb +28 -0
  197. data/lib/rails_admin/config/model.rb +88 -0
  198. data/lib/rails_admin/config/proxyable.rb +12 -0
  199. data/lib/rails_admin/config/proxyable/proxy.rb +43 -0
  200. data/lib/rails_admin/config/sections.rb +38 -0
  201. data/lib/rails_admin/config/sections/base.rb +29 -0
  202. data/lib/rails_admin/config/sections/create.rb +11 -0
  203. data/lib/rails_admin/config/sections/edit.rb +11 -0
  204. data/lib/rails_admin/config/sections/export.rb +11 -0
  205. data/lib/rails_admin/config/sections/list.rb +27 -0
  206. data/lib/rails_admin/config/sections/nested.rb +10 -0
  207. data/lib/rails_admin/config/sections/show.rb +10 -0
  208. data/lib/rails_admin/config/sections/update.rb +10 -0
  209. data/lib/rails_admin/engine.rb +22 -0
  210. data/lib/rails_admin/extension.rb +29 -0
  211. data/lib/rails_admin/extensions/cancan.rb +5 -0
  212. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +59 -0
  213. data/lib/rails_admin/extensions/history.rb +5 -0
  214. data/lib/rails_admin/extensions/history/auditing_adapter.rb +37 -0
  215. data/lib/rails_admin/extensions/history/history.rb +69 -0
  216. data/lib/rails_admin/extensions/paper_trail.rb +5 -0
  217. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +92 -0
  218. data/lib/rails_admin/i18n_support.rb +43 -0
  219. data/lib/rails_admin/support/core_extensions.rb +44 -0
  220. data/lib/rails_admin/support/csv_converter.rb +109 -0
  221. data/lib/rails_admin/version.rb +6 -0
  222. data/lib/tasks/prepare_ci_env.rake +27 -0
  223. data/lib/tasks/rails_admin.rake +18 -0
  224. data/spec/ci.sh +2 -0
  225. data/spec/controllers/application_controller_spec.rb +30 -0
  226. data/spec/controllers/main_controller_spec.rb +180 -0
  227. data/spec/database_helpers.rb +15 -0
  228. data/spec/dummy_app/Gemfile +58 -0
  229. data/spec/dummy_app/Rakefile +7 -0
  230. data/spec/dummy_app/app/assets/images/rails.png +0 -0
  231. data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
  232. data/spec/dummy_app/app/assets/stylesheets/application.css +13 -0
  233. data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
  234. data/spec/dummy_app/app/controllers/players_controller.rb +5 -0
  235. data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
  236. data/spec/dummy_app/app/locales/models.en.yml +16 -0
  237. data/spec/dummy_app/app/models/abstract.rb +5 -0
  238. data/spec/dummy_app/app/models/article.rb +9 -0
  239. data/spec/dummy_app/app/models/author.rb +6 -0
  240. data/spec/dummy_app/app/models/ball.rb +8 -0
  241. data/spec/dummy_app/app/models/category.rb +3 -0
  242. data/spec/dummy_app/app/models/cms.rb +5 -0
  243. data/spec/dummy_app/app/models/cms/basic_page.rb +7 -0
  244. data/spec/dummy_app/app/models/cms/unscoped_page.rb +3 -0
  245. data/spec/dummy_app/app/models/comment.rb +3 -0
  246. data/spec/dummy_app/app/models/division.rb +12 -0
  247. data/spec/dummy_app/app/models/draft.rb +11 -0
  248. data/spec/dummy_app/app/models/fan.rb +5 -0
  249. data/spec/dummy_app/app/models/field_test.rb +20 -0
  250. data/spec/dummy_app/app/models/hardball.rb +2 -0
  251. data/spec/dummy_app/app/models/league.rb +10 -0
  252. data/spec/dummy_app/app/models/mongoid_field_test.rb +22 -0
  253. data/spec/dummy_app/app/models/nested_field_test.rb +6 -0
  254. data/spec/dummy_app/app/models/player.rb +23 -0
  255. data/spec/dummy_app/app/models/rel_test.rb +6 -0
  256. data/spec/dummy_app/app/models/tag.rb +7 -0
  257. data/spec/dummy_app/app/models/team.rb +25 -0
  258. data/spec/dummy_app/app/models/user.rb +21 -0
  259. data/spec/dummy_app/app/uploaders/carrierwave_uploader.rb +53 -0
  260. data/spec/dummy_app/app/views/layouts/application.html.erb +14 -0
  261. data/spec/dummy_app/app/views/players/show.html.haml +1 -0
  262. data/spec/dummy_app/config.ru +4 -0
  263. data/spec/dummy_app/config/application.rb +62 -0
  264. data/spec/dummy_app/config/boot.rb +6 -0
  265. data/spec/dummy_app/config/database.yml +25 -0
  266. data/spec/dummy_app/config/environment.rb +5 -0
  267. data/spec/dummy_app/config/environments/development.rb +37 -0
  268. data/spec/dummy_app/config/environments/production.rb +67 -0
  269. data/spec/dummy_app/config/environments/test.rb +37 -0
  270. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
  271. data/spec/dummy_app/config/initializers/devise.rb +148 -0
  272. data/spec/dummy_app/config/initializers/inflections.rb +15 -0
  273. data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
  274. data/spec/dummy_app/config/initializers/rails_admin.rb +11 -0
  275. data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
  276. data/spec/dummy_app/config/initializers/session_store.rb +8 -0
  277. data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
  278. data/spec/dummy_app/config/mongoid.yml +17 -0
  279. data/spec/dummy_app/config/routes.rb +10 -0
  280. data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
  281. data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
  282. data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
  283. data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
  284. data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
  285. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +49 -0
  286. data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
  287. data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
  288. data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
  289. data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
  290. data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
  291. data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
  292. data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
  293. data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
  294. data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
  295. data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
  296. data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
  297. data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
  298. data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
  299. data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
  300. data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
  301. data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
  302. data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
  303. data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
  304. data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
  305. data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
  306. data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
  307. data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
  308. data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
  309. data/spec/dummy_app/db/migrate/20111115041025_add_type_to_balls.rb +5 -0
  310. data/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +10 -0
  311. data/spec/dummy_app/db/migrate/20111130075338_add_dragonfly_asset_name_to_field_tests.rb +5 -0
  312. data/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +8 -0
  313. data/spec/dummy_app/db/migrate/20120117151733_add_custom_field_to_teams.rb +5 -0
  314. data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +7 -0
  315. data/spec/dummy_app/db/seeds.rb +18 -0
  316. data/spec/dummy_app/doc/README_FOR_APP +2 -0
  317. data/spec/dummy_app/public/404.html +26 -0
  318. data/spec/dummy_app/public/422.html +26 -0
  319. data/spec/dummy_app/public/500.html +25 -0
  320. data/spec/dummy_app/public/favicon.ico +0 -0
  321. data/spec/dummy_app/public/robots.txt +5 -0
  322. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg +0 -0
  323. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg.meta +1 -0
  324. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg +0 -0
  325. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg.meta +1 -0
  326. data/spec/dummy_app/public/system/paperclip_assets/1/original/Boston City Flow.jpg +0 -0
  327. data/spec/dummy_app/public/system/paperclip_assets/1/thumb/Boston City Flow.jpg +0 -0
  328. data/spec/dummy_app/public/system/paperclip_assets/3/original/Costa Rican Frog.jpg +0 -0
  329. data/spec/dummy_app/public/system/paperclip_assets/3/thumb/Costa Rican Frog.jpg +0 -0
  330. data/spec/dummy_app/public/system/paperclip_assets/6/original/liste-electorale.pdf +0 -0
  331. data/spec/dummy_app/public/system/paperclip_assets/6/thumb/liste-electorale.pdf +148 -0
  332. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/Boston_City_Flow.jpg +0 -0
  333. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/thumb_Boston_City_Flow.jpg +0 -0
  334. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/Costa_Rican_Frog.jpg +0 -0
  335. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/thumb_Costa_Rican_Frog.jpg +0 -0
  336. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/Pensive_Parakeet.jpg +0 -0
  337. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/thumb_Pensive_Parakeet.jpg +0 -0
  338. data/spec/dummy_app/script/rails +6 -0
  339. data/spec/factories.rb +89 -0
  340. data/spec/helpers/application_helper_spec.rb +277 -0
  341. data/spec/integration/authorization/cancan_spec.rb +349 -0
  342. data/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
  343. data/spec/integration/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +44 -0
  344. data/spec/integration/basic/create/rails_admin_basic_create_spec.rb +154 -0
  345. data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +23 -0
  346. data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +27 -0
  347. data/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +56 -0
  348. data/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +109 -0
  349. data/spec/integration/basic/export/rails_admin_basic_export_spec.rb +87 -0
  350. data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +392 -0
  351. data/spec/integration/basic/new/rails_admin_basic_new_spec.rb +74 -0
  352. data/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
  353. data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +91 -0
  354. data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +219 -0
  355. data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +954 -0
  356. data/spec/integration/config/list/rails_admin_config_list_spec.rb +509 -0
  357. data/spec/integration/config/show/rails_admin_config_show_spec.rb +302 -0
  358. data/spec/integration/history/rails_admin_history_spec.rb +66 -0
  359. data/spec/integration/rails_admin_spec.rb +113 -0
  360. data/spec/integration/relation_spec.rb +26 -0
  361. data/spec/spec_helper.rb +86 -0
  362. data/spec/support/tableless.rb +27 -0
  363. data/spec/unit/adapters/active_record/abstract_object_spec.rb +131 -0
  364. data/spec/unit/adapters/active_record_spec.rb +373 -0
  365. data/spec/unit/adapters/mongoid/abstract_object_spec.rb +30 -0
  366. data/spec/unit/adapters/mongoid_spec.rb +581 -0
  367. data/spec/unit/config/actions_spec.rb +181 -0
  368. data/spec/unit/config/fields/base_spec.rb +300 -0
  369. data/spec/unit/config/model_spec.rb +75 -0
  370. data/spec/unit/config/sections_spec.rb +123 -0
  371. data/spec/unit/config_spec.rb +273 -0
  372. metadata +823 -0
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'table relations' do
4
+
5
+ before(:each) do
6
+ @fields = RailsAdmin.config(RelTest).create.fields
7
+ end
8
+
9
+ describe 'column with nullable fk and no model validations' do
10
+ it 'should be optional' do
11
+ @fields.find{ |f| f.name == :league }.required?.should == false
12
+ end
13
+ end
14
+
15
+ describe 'column with non-nullable fk and no model validations' do
16
+ it 'should not be required' do
17
+ @fields.find{ |f| f.name == :division }.required?.should == false
18
+ end
19
+ end
20
+
21
+ describe 'column with nullable fk and a numericality model validation' do
22
+ it 'should be required' do
23
+ @fields.find{ |f| f.name == :player }.required?.should == true
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,86 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+ ENV['SKIP_RAILS_ADMIN_INITIALIZER'] = 'true'
4
+
5
+ if ENV['INVOKE_SIMPLECOV']
6
+ require 'simplecov'
7
+ SimpleCov.start 'rails'
8
+ end
9
+
10
+ require File.expand_path('../dummy_app/config/environment', __FILE__)
11
+
12
+ require 'rspec/rails'
13
+ require 'factory_girl'
14
+ require 'factories'
15
+ require 'database_helpers'
16
+ require 'support/tableless'
17
+
18
+ ActionMailer::Base.delivery_method = :test
19
+ ActionMailer::Base.perform_deliveries = true
20
+ ActionMailer::Base.default_url_options[:host] = "example.com"
21
+
22
+ Rails.backtrace_cleaner.remove_silencers!
23
+
24
+ include DatabaseHelpers
25
+ drop_all_tables
26
+ migrate_database
27
+ ENV['SKIP_RAILS_ADMIN_INITIALIZER'] = 'false'
28
+
29
+ # Don't need passwords in test DB to be secure, but we would like 'em to be
30
+ # fast -- and the stretches mechanism is intended to make passwords
31
+ # computationally expensive.
32
+ module Devise
33
+ module Models
34
+ module DatabaseAuthenticatable
35
+ protected
36
+
37
+ def password_digest(password)
38
+ password
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ Devise.setup do |config|
45
+ config.stretches = 0
46
+ end
47
+
48
+ RSpec.configure do |config|
49
+ require 'rspec/expectations'
50
+
51
+ config.include RSpec::Matchers
52
+ config.include DatabaseHelpers
53
+ config.include RailsAdmin::Engine.routes.url_helpers
54
+
55
+ config.include Warden::Test::Helpers
56
+
57
+ config.before(:each) do
58
+ RailsAdmin::Config.reset
59
+ RailsAdmin::AbstractModel.reset
60
+ RailsAdmin::Config.excluded_models = [RelTest, FieldTest, Category]
61
+ RailsAdmin::Config.audit_with :history
62
+ Category.delete_all
63
+ Division.delete_all
64
+ Draft.delete_all
65
+ Fan.delete_all
66
+ League.delete_all
67
+ Player.delete_all
68
+ Team.delete_all
69
+ User.delete_all
70
+ FieldTest.delete_all
71
+ Author.delete_all
72
+ Article.delete_all
73
+ MongoidFieldTest.delete_all
74
+ Tag.delete_all
75
+ login_as User.create(
76
+ :email => "username@example.com",
77
+ :password => "password"
78
+ )
79
+ end
80
+
81
+ config.after(:each) do
82
+ Warden.test_reset!
83
+ end
84
+
85
+ config.seed = ENV['SEED'] if ENV['SEED']
86
+ end
@@ -0,0 +1,27 @@
1
+ class Tableless < ActiveRecord::Base
2
+ def self.columns
3
+ @columns ||= [];
4
+ end
5
+
6
+ def self.column(name, sql_type = nil, default = nil, null = true)
7
+ columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default,
8
+ sql_type.to_s, null)
9
+ end
10
+
11
+ def self.columns_hash
12
+ @columns_hash ||= Hash[columns.map { |column| [column.name, column] }]
13
+ end
14
+
15
+ def self.column_names
16
+ @column_names ||= columns.map { |column| column.name }
17
+ end
18
+
19
+ def self.column_defaults
20
+ @column_defaults ||= columns.map { |column| [column.name, nil] }.inject({}) { |m, e| m[e[0]] = e[1]; m }
21
+ end
22
+
23
+ # Override the save method to prevent exceptions.
24
+ def save(validate = true)
25
+ validate ? valid? : true
26
+ end
27
+ end
@@ -0,0 +1,131 @@
1
+ require 'spec_helper'
2
+
3
+ describe "AbstractObject" do
4
+ describe "proxy" do
5
+ let(:object) { mock("object") }
6
+ let(:abstract_object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new(object) }
7
+
8
+ it "should act like a proxy" do
9
+ object.should_receive(:method_call)
10
+ abstract_object.method_call
11
+ end
12
+ end
13
+
14
+ describe "create" do
15
+ let(:player) { Player.new }
16
+ let(:object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new player }
17
+ let(:name) { "Stefan Kiszonka" }
18
+ let(:number) { 87 }
19
+ let(:position) { "Fifth baseman" }
20
+ let(:suspended) { true }
21
+
22
+ describe "a record without associations" do
23
+ before do
24
+ object.set_attributes({ :name => name, :number => number, :position => position, :suspended => suspended, :team_id => nil })
25
+ end
26
+
27
+ it "should create a Player with given attributes" do
28
+ object.save.should be_true
29
+
30
+ player.reload
31
+ player.name.should == name
32
+ player.number.should == number
33
+ player.position.should == position
34
+ player.suspended.should == false # protected
35
+ player.draft.should == nil
36
+ player.team.should == nil
37
+ end
38
+ end
39
+
40
+ describe "a record with protected attributes and has_one association" do
41
+ let(:draft) { Factory :draft }
42
+
43
+ before do
44
+ object.set_attributes({ :name => name, :number => number, :position => position, :suspended => suspended, :team_id => nil, :draft_id => draft.id })
45
+ end
46
+
47
+ it "should create a Player with given attributes" do
48
+ object.save.should be_true
49
+
50
+ player.reload
51
+ player.name.should == name
52
+ player.number.should == number
53
+ player.position.should == position
54
+ player.suspended.should == false # protected
55
+ player.draft.should == draft.reload
56
+ player.team.should == nil
57
+ end
58
+ end
59
+
60
+ describe "a record with has_many associations" do
61
+ let(:league) { League.new }
62
+ let(:object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new league }
63
+ let(:name) { "Awesome League" }
64
+ let(:teams) { [Factory(:team)] }
65
+ let(:divisions) { [Division.create!(:name => 'div 1', :league => League.create!(:name => 'north')), Division.create!(:name => 'div 2', :league => League.create!(:name => 'south'))] }
66
+
67
+ before do
68
+ object.set_attributes({ :name => name, :division_ids => divisions.map(&:id) })
69
+ end
70
+
71
+ it "should create a League with given attributes and associations" do
72
+ object.save.should be_true
73
+ league.reload
74
+ league.name.should == name
75
+ league.divisions.should == divisions
76
+ end
77
+ end
78
+ end
79
+
80
+ describe "update" do
81
+ describe "a record with protected attributes and has_one association" do
82
+ let(:name) { "Stefan Koza" }
83
+ let(:suspended) { true }
84
+ let(:player) { Factory :player, :suspended => true, :name => name, :draft => Factory(:draft) }
85
+ let(:object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new player }
86
+ let(:new_team) { Factory :team }
87
+ let(:new_suspended) { false }
88
+ let(:new_draft) { nil }
89
+ let(:new_number) { player.number + 29 }
90
+
91
+ before do
92
+ object.set_attributes({ :number => new_number, :team_id => new_team.id, :suspended => new_suspended, :draft_id => new_draft })
93
+ object.save
94
+ end
95
+
96
+ it "should update a record and associations" do
97
+ object.reload
98
+ object.number.should == new_number
99
+ object.name.should == name
100
+ object.draft.should == nil
101
+ object.suspended.should == true # protected
102
+ object.team.should == new_team
103
+ end
104
+ end
105
+ end
106
+
107
+ describe "destroy" do
108
+ let(:player) { Factory :player }
109
+ let(:object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new player }
110
+
111
+ before do
112
+ object.destroy
113
+ end
114
+
115
+ it "should delete the record" do
116
+ Player.exists?(player.id).should == false
117
+ end
118
+ end
119
+
120
+ describe "object_label_method" do
121
+ it 'should be configurable' do
122
+ RailsAdmin.config League do
123
+ object_label_method { :custom_name }
124
+ end
125
+
126
+ @league = FactoryGirl.create :league
127
+
128
+ RailsAdmin.config('League').with(:object => @league).object_label.should == "League '#{@league.name}'"
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,373 @@
1
+ require 'spec_helper'
2
+ require 'timecop'
3
+ require 'rails_admin/adapters/active_record'
4
+
5
+
6
+ describe RailsAdmin::Adapters::ActiveRecord do
7
+ before do
8
+ @like = ::ActiveRecord::Base.configurations[Rails.env]['adapter'] == "postgresql" ? 'ILIKE' : 'LIKE'
9
+ end
10
+
11
+ describe '#associations' do
12
+ before :all do
13
+ RailsAdmin::AbstractModel.reset_polymorphic_parents
14
+
15
+ class ARBlog < ActiveRecord::Base
16
+ has_many :a_r_posts
17
+ has_many :a_r_comments, :as => :commentable
18
+ end
19
+
20
+ class ARPost < ActiveRecord::Base
21
+ belongs_to :a_r_blog
22
+ has_and_belongs_to_many :a_r_categories
23
+ has_many :a_r_comments, :as => :commentable
24
+ end
25
+
26
+ class ARCategory < ActiveRecord::Base
27
+ has_and_belongs_to_many :a_r_posts
28
+ end
29
+
30
+ class ARUser < ActiveRecord::Base
31
+ has_one :a_r_profile
32
+ end
33
+
34
+ class ARProfile < ActiveRecord::Base
35
+ belongs_to :a_r_user
36
+ end
37
+
38
+ class ARComment < ActiveRecord::Base
39
+ belongs_to :commentable, :polymorphic => true
40
+ end
41
+
42
+ @blog = RailsAdmin::AbstractModel.new(ARBlog)
43
+ @post = RailsAdmin::AbstractModel.new(ARPost)
44
+ @category = RailsAdmin::AbstractModel.new(ARCategory)
45
+ @user = RailsAdmin::AbstractModel.new(ARUser)
46
+ @profile = RailsAdmin::AbstractModel.new(ARProfile)
47
+ @comment = RailsAdmin::AbstractModel.new(ARComment)
48
+ end
49
+
50
+ after :all do
51
+ RailsAdmin::AbstractModel.reset_polymorphic_parents
52
+ end
53
+
54
+ it 'lists associations' do
55
+ @post.associations.map{|a|a[:name].to_s}.sort.should == ['a_r_blog', 'a_r_categories', 'a_r_comments']
56
+ end
57
+
58
+ it 'list associations types in supported [:belongs_to, :has_and_belongs_to_many, :has_many, :has_one]' do
59
+ (@post.associations + @blog.associations + @user.associations).map{|a|a[:type]}.uniq.map(&:to_s).sort.should == ['belongs_to', 'has_and_belongs_to_many', 'has_many', 'has_one']
60
+ end
61
+
62
+ it "has correct parameter of belongs_to association" do
63
+ param = @post.associations.select{|a| a[:name] == :a_r_blog}.first
64
+ param.reject{|k, v| [:primary_key_proc, :model_proc].include? k }.should == {
65
+ :name=>:a_r_blog,
66
+ :pretty_name=>"A r blog",
67
+ :type=>:belongs_to,
68
+ :foreign_key=>:a_r_blog_id,
69
+ :foreign_type=>nil,
70
+ :as=>nil,
71
+ :polymorphic=>false,
72
+ :inverse_of=>nil,
73
+ :read_only=>nil,
74
+ :nested_form=>nil
75
+ }
76
+ param[:primary_key_proc].call.should == 'id'
77
+ param[:model_proc].call.should == ARBlog
78
+ end
79
+
80
+ it "has correct parameter of has_many association" do
81
+ param = @blog.associations.select{|a| a[:name] == :a_r_posts}.first
82
+ param.reject{|k, v| [:primary_key_proc, :model_proc].include? k }.should == {
83
+ :name=>:a_r_posts,
84
+ :pretty_name=>"A r posts",
85
+ :type=>:has_many,
86
+ :foreign_key=>:ar_blog_id,
87
+ :foreign_type=>nil,
88
+ :as=>nil,
89
+ :polymorphic=>false,
90
+ :inverse_of=>nil,
91
+ :read_only=>nil,
92
+ :nested_form=>nil
93
+ }
94
+ param[:primary_key_proc].call.should == 'id'
95
+ param[:model_proc].call.should == ARPost
96
+ end
97
+
98
+ it "has correct parameter of has_and_belongs_to_many association" do
99
+ param = @post.associations.select{|a| a[:name] == :a_r_categories}.first
100
+ param.reject{|k, v| [:primary_key_proc, :model_proc].include? k }.should == {
101
+ :name=>:a_r_categories,
102
+ :pretty_name=>"A r categories",
103
+ :type=>:has_and_belongs_to_many,
104
+ :foreign_key=>:ar_post_id,
105
+ :foreign_type=>nil,
106
+ :as=>nil,
107
+ :polymorphic=>false,
108
+ :inverse_of=>nil,
109
+ :read_only=>nil,
110
+ :nested_form=>nil
111
+ }
112
+ param[:primary_key_proc].call.should == 'id'
113
+ param[:model_proc].call.should == ARCategory
114
+ end
115
+
116
+ it "has correct parameter of polymorphic belongs_to association" do
117
+ RailsAdmin::Config.stub!(:models_pool).and_return(["ARBlog", "ARPost", "ARCategory", "ARUser", "ARProfile", "ARComment"])
118
+ param = @comment.associations.select{|a| a[:name] == :commentable}.first
119
+ param.reject{|k, v| [:primary_key_proc, :model_proc].include? k }.should == {
120
+ :name=>:commentable,
121
+ :pretty_name=>"Commentable",
122
+ :type=>:belongs_to,
123
+ :foreign_key=>:commentable_id,
124
+ :foreign_type=>:commentable_type,
125
+ :as=>nil,
126
+ :polymorphic=>true,
127
+ :inverse_of=>nil,
128
+ :read_only=>nil,
129
+ :nested_form=>nil
130
+ }
131
+ # param[:primary_key_proc].call.should == 'id' Should not be called for polymorphic relations. Todo, Handle this niver
132
+ param[:model_proc].call.should == [ARBlog, ARPost]
133
+ end
134
+
135
+ it "has correct parameter of polymorphic inverse has_many association" do
136
+ param = @blog.associations.select{|a| a[:name] == :a_r_comments}.first
137
+ param.reject{|k, v| [:primary_key_proc, :model_proc].include? k }.should == {
138
+ :name=>:a_r_comments,
139
+ :pretty_name=>"A r comments",
140
+ :type=>:has_many,
141
+ :foreign_key=>:commentable_id,
142
+ :foreign_type=>nil,
143
+ :as=>:commentable,
144
+ :polymorphic=>false,
145
+ :inverse_of=>nil,
146
+ :read_only=>nil,
147
+ :nested_form=>nil
148
+ }
149
+ param[:primary_key_proc].call.should == 'id'
150
+ param[:model_proc].call.should == ARComment
151
+ end
152
+ end
153
+
154
+
155
+ describe "#properties" do
156
+ before do
157
+ @abstract_model = RailsAdmin::AbstractModel.new('Player')
158
+ end
159
+
160
+ it "returns parameters of string-type field" do
161
+ @abstract_model.properties.select{|f| f[:name] == :name}.should ==
162
+ [{:name => :name, :pretty_name => "Name", :type => :string, :length => 100, :nullable? => false, :serial? => false}]
163
+ end
164
+ end
165
+
166
+ describe "data access method" do
167
+ before do
168
+ @players = FactoryGirl.create_list(:player, 3)
169
+ @abstract_model = RailsAdmin::AbstractModel.new('Player')
170
+ end
171
+
172
+ it "#new returns instance of AbstractObject" do
173
+ @abstract_model.new.object.should be_instance_of(Player)
174
+ end
175
+
176
+ it "#get returns instance of AbstractObject" do
177
+ @abstract_model.get(@players.first.id).object.should == @players.first
178
+ end
179
+
180
+ it "#get returns nil when id does not exist" do
181
+ @abstract_model.get('abc').should be_nil
182
+ end
183
+
184
+ it "#first returns first item" do
185
+ @abstract_model.first.should == @players.first
186
+ end
187
+
188
+ it "#count returns count of items" do
189
+ @abstract_model.count.should == @players.count
190
+ end
191
+
192
+ it "#destroy destroys multiple items" do
193
+ @abstract_model.destroy(@players[0..1])
194
+ Player.all.should == @players[2..2]
195
+ end
196
+
197
+ describe "#all" do
198
+ it "works without options" do
199
+ @abstract_model.all.sort.should == @players.sort
200
+ end
201
+
202
+ it "supports eager loading" do
203
+ @abstract_model.all(:include => :team).includes_values.should == [:team]
204
+ end
205
+
206
+ it "supports limiting" do
207
+ @abstract_model.all(:limit => 2).count.should == 2
208
+ end
209
+
210
+ it "supports retrieval by bulk_ids" do
211
+ @abstract_model.all(:bulk_ids => @players[0..1].map{|player| player.id }).
212
+ sort.should == @players[0..1].sort
213
+ end
214
+
215
+ it "supports pagination" do
216
+ @abstract_model.all(:page => 2, :per => 1).should == @players[1..1]
217
+ end
218
+
219
+ it "supports ordering" do
220
+ @abstract_model.all(:sort => "id", :sort_reverse => true).should == @players.sort
221
+ end
222
+
223
+ it "supports querying" do
224
+ @abstract_model.all(:query => @players[1].name).should == @players[1..1]
225
+ end
226
+
227
+ it "supports filtering" do
228
+ @abstract_model.all(:filters => {"name" => {"0000" => {:o=>"is", :v=>@players[1].name}}}).should == @players[1..1]
229
+ end
230
+ end
231
+ end
232
+
233
+ describe "#query_conditions" do
234
+ before do
235
+ @abstract_model = RailsAdmin::AbstractModel.new('Team')
236
+ @teams = [{}, {:name=>'somewhere foos'}, {:manager=>'foo junior'}].
237
+ map{|h| FactoryGirl.create :team, h}
238
+ end
239
+
240
+ it "makes conrrect query" do
241
+ @abstract_model.all(:query => "foo").sort.should == @teams[1..2]
242
+ end
243
+ end
244
+
245
+ describe "#filter_conditions" do
246
+ before do
247
+ @abstract_model = RailsAdmin::AbstractModel.new('Team')
248
+ @division = FactoryGirl.create :division, :name => 'bar division'
249
+ @teams = [{}, {:division=>@division}, {:name=>'somewhere foos', :division=>@division}, {:name=>'nowhere foos'}].
250
+ map{|h| FactoryGirl.create :team, h}
251
+ end
252
+
253
+ it "makes conrrect query" do
254
+ @abstract_model.all(
255
+ :filters => {"name" => {"0000" => {:o=>"like", :v=>"foo"}},
256
+ "division" => {"0001" => {:o=>"like", :v=>"bar"}}},
257
+ :include => :division
258
+ ).should == [@teams[2]]
259
+ end
260
+ end
261
+
262
+ describe "#build_statement" do
263
+ before do
264
+ @abstract_model = RailsAdmin::AbstractModel.new('FieldTest')
265
+ end
266
+
267
+ it "ignores '_discard' operator or value" do
268
+ [["_discard", ""], ["", "_discard"]].each do |value, operator|
269
+ @abstract_model.send(:build_statement, :name, :string, value, operator).should be_nil
270
+ end
271
+ end
272
+
273
+ it "supports '_blank' operator" do
274
+ [["_blank", ""], ["", "_blank"]].each do |value, operator|
275
+ @abstract_model.send(:build_statement, :name, :string, value, operator).should == ["(name IS NULL OR name = '')"]
276
+ end
277
+ end
278
+
279
+ it "supports '_present' operator" do
280
+ [["_present", ""], ["", "_present"]].each do |value, operator|
281
+ @abstract_model.send(:build_statement, :name, :string, value, operator).should == ["(name IS NOT NULL AND name != '')"]
282
+ end
283
+ end
284
+
285
+ it "supports '_null' operator" do
286
+ [["_null", ""], ["", "_null"]].each do |value, operator|
287
+ @abstract_model.send(:build_statement, :name, :string, value, operator).should == ["(name IS NULL)"]
288
+ end
289
+ end
290
+
291
+ it "supports '_not_null' operator" do
292
+ [["_not_null", ""], ["", "_not_null"]].each do |value, operator|
293
+ @abstract_model.send(:build_statement, :name, :string, value, operator).should == ["(name IS NOT NULL)"]
294
+ end
295
+ end
296
+
297
+ it "supports '_empty' operator" do
298
+ [["_empty", ""], ["", "_empty"]].each do |value, operator|
299
+ @abstract_model.send(:build_statement, :name, :string, value, operator).should == ["(name = '')"]
300
+ end
301
+ end
302
+
303
+ it "supports '_not_empty' operator" do
304
+ [["_not_empty", ""], ["", "_not_empty"]].each do |value, operator|
305
+ @abstract_model.send(:build_statement, :name, :string, value, operator).should == ["(name != '')"]
306
+ end
307
+ end
308
+
309
+ it "supports boolean type query" do
310
+ ['false', 'f', '0'].each do |value|
311
+ @abstract_model.send(:build_statement, :field, :boolean, value, nil).should == ["(field IS NULL OR field = ?)", false]
312
+ end
313
+ ['true', 't', '1'].each do |value|
314
+ @abstract_model.send(:build_statement, :field, :boolean, value, nil).should == ["(field = ?)", true]
315
+ end
316
+ @abstract_model.send(:build_statement, :field, :boolean, 'word', nil).should be_nil
317
+ end
318
+
319
+ it "supports integer type query" do
320
+ @abstract_model.send(:build_statement, :field, :integer, "1", nil).should == ["(field = ?)", 1]
321
+ @abstract_model.send(:build_statement, :field, :integer, 'word', nil).should be_nil
322
+ end
323
+
324
+ it "supports string type query" do
325
+ @abstract_model.send(:build_statement, :field, :string, "", nil).should be_nil
326
+ @abstract_model.send(:build_statement, :field, :string, "foo", "was").should be_nil
327
+ @abstract_model.send(:build_statement, :field, :string, "foo", "default").should == ["(field #{@like} ?)", "%foo%"]
328
+ @abstract_model.send(:build_statement, :field, :string, "foo", "like").should == ["(field #{@like} ?)", "%foo%"]
329
+ @abstract_model.send(:build_statement, :field, :string, "foo", "starts_with").should == ["(field #{@like} ?)", "foo%"]
330
+ @abstract_model.send(:build_statement, :field, :string, "foo", "ends_with").should == ["(field #{@like} ?)", "%foo"]
331
+ @abstract_model.send(:build_statement, :field, :string, "foo", "is").should == ["(field #{@like} ?)", "foo"]
332
+ end
333
+
334
+ context 'filters on dates' do
335
+ it 'lists elements within outbound limits' do
336
+ date_format = I18n.t("admin.misc.filter_date_format", :default => I18n.t("admin.misc.filter_date_format", :locale => :en)).gsub('dd', '%d').gsub('mm', '%m').gsub('yy', '%Y')
337
+
338
+ FieldTest.create!(:date_field => Date.strptime("01/01/2012", date_format))
339
+ FieldTest.create!(:date_field => Date.strptime("01/02/2012", date_format))
340
+ FieldTest.create!(:date_field => Date.strptime("01/03/2012", date_format))
341
+ FieldTest.create!(:date_field => Date.strptime("01/04/2012", date_format))
342
+ @abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["", "01/02/2012", "01/03/2012"], :o => 'between' } } } ).count.should == 2
343
+ @abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["", "01/02/2012", "01/02/2012"], :o => 'between' } } } ).count.should == 1
344
+ @abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["", "01/03/2012", ""], :o => 'between' } } } ).count.should == 2
345
+ @abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["", "", "01/02/2012"], :o => 'between' } } } ).count.should == 2
346
+ @abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["01/02/2012"], :o => 'default' } } } ).count.should == 1
347
+
348
+ end
349
+ end
350
+
351
+ it "supports enum type query" do
352
+ @abstract_model.send(:build_statement, :field, :enum, "1", nil).should == ["(field IN (?))", ["1"]]
353
+ end
354
+ end
355
+
356
+ describe "model attribute method" do
357
+ before do
358
+ @abstract_model = RailsAdmin::AbstractModel.new('Player')
359
+ end
360
+
361
+ it "#scoped returns relation object" do
362
+ @abstract_model.scoped.should be_instance_of(ActiveRecord::Relation)
363
+ end
364
+
365
+ it "#table_name works" do
366
+ @abstract_model.table_name.should == 'players'
367
+ end
368
+
369
+ it "#serialized_attributes works" do
370
+ RailsAdmin::AbstractModel.new('User').serialized_attributes.should == ["roles"]
371
+ end
372
+ end
373
+ end