rails_admin-lbgraham 0.4.2

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 (416) hide show
  1. data/Gemfile +51 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +175 -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 +743 -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 +142 -0
  53. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +292 -0
  54. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +190 -0
  55. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +41 -0
  56. data/app/assets/javascripts/rails_admin/ra.remote-form.js +151 -0
  57. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +210 -0
  58. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +28 -0
  59. data/app/assets/javascripts/rails_admin/themes/cerulean/ui.js +0 -0
  60. data/app/assets/javascripts/rails_admin/themes/default/ui.js +12 -0
  61. data/app/assets/javascripts/rails_admin/ui.js.coffee +66 -0
  62. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  63. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  64. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  65. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  66. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  67. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  68. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +733 -0
  69. data/app/assets/stylesheets/rails_admin/base/README.txt +2 -0
  70. data/app/assets/stylesheets/rails_admin/base/mixins.css.scss +1 -0
  71. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +270 -0
  72. data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
  73. data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +12 -0
  74. data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
  75. data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +15 -0
  76. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +82 -0
  77. data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +182 -0
  78. data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +69 -0
  79. data/app/assets/stylesheets/rails_admin/ra.calendar-additions.css.scss +25 -0
  80. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +90 -0
  81. data/app/assets/stylesheets/rails_admin/ra.widgets.css.scss +8 -0
  82. data/app/assets/stylesheets/rails_admin/rails_admin.css +4 -0
  83. data/app/assets/stylesheets/rails_admin/themes/cerulean/mixins.css.scss +0 -0
  84. data/app/assets/stylesheets/rails_admin/themes/cerulean/theming.css.scss +97 -0
  85. data/app/assets/stylesheets/rails_admin/themes/cerulean/variables.css.scss +168 -0
  86. data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +8 -0
  87. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +11 -0
  88. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +12 -0
  89. data/app/controllers/rails_admin/application_controller.rb +84 -0
  90. data/app/controllers/rails_admin/main_controller.rb +153 -0
  91. data/app/helpers/rails_admin/application_helper.rb +147 -0
  92. data/app/helpers/rails_admin/form_builder.rb +117 -0
  93. data/app/helpers/rails_admin/main_helper.rb +36 -0
  94. data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
  95. data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
  96. data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
  97. data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
  98. data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
  99. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +12 -0
  100. data/app/views/layouts/rails_admin/application.html.haml +27 -0
  101. data/app/views/layouts/rails_admin/pjax.html.haml +16 -0
  102. data/app/views/rails_admin/main/_dashboard_history.html.haml +20 -0
  103. data/app/views/rails_admin/main/_delete_notice.html.haml +19 -0
  104. data/app/views/rails_admin/main/_form_colorpicker.html.haml +1 -0
  105. data/app/views/rails_admin/main/_form_datetime.html.haml +1 -0
  106. data/app/views/rails_admin/main/_form_enumeration.html.haml +18 -0
  107. data/app/views/rails_admin/main/_form_field.html.haml +1 -0
  108. data/app/views/rails_admin/main/_form_file_upload.html.haml +13 -0
  109. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +47 -0
  110. data/app/views/rails_admin/main/_form_filtering_select.html.haml +37 -0
  111. data/app/views/rails_admin/main/_form_nested_many.html.haml +14 -0
  112. data/app/views/rails_admin/main/_form_nested_one.html.haml +10 -0
  113. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +10 -0
  114. data/app/views/rails_admin/main/_form_text.html.haml +31 -0
  115. data/app/views/rails_admin/main/_submit_buttons.html.haml +15 -0
  116. data/app/views/rails_admin/main/bulk_delete.html.haml +11 -0
  117. data/app/views/rails_admin/main/dashboard.html.haml +35 -0
  118. data/app/views/rails_admin/main/delete.html.haml +18 -0
  119. data/app/views/rails_admin/main/edit.html.haml +2 -0
  120. data/app/views/rails_admin/main/export.html.haml +75 -0
  121. data/app/views/rails_admin/main/history.html.haml +49 -0
  122. data/app/views/rails_admin/main/index.html.haml +140 -0
  123. data/app/views/rails_admin/main/new.html.haml +2 -0
  124. data/app/views/rails_admin/main/show.html.haml +16 -0
  125. data/config/initializers/active_record_extensions.rb +19 -0
  126. data/config/initializers/devise_patch.rb +9 -0
  127. data/config/initializers/haml.rb +2 -0
  128. data/config/initializers/mongoid_extensions.rb +4 -0
  129. data/config/locales/rails_admin.en.yml +130 -0
  130. data/config/routes.rb +12 -0
  131. data/lib/generators/rails_admin/install_generator.rb +85 -0
  132. data/lib/generators/rails_admin/templates/drop.rb +18 -0
  133. data/lib/generators/rails_admin/templates/initializer.erb +100 -0
  134. data/lib/generators/rails_admin/templates/migration.rb +18 -0
  135. data/lib/generators/rails_admin/uninstall_generator.rb +22 -0
  136. data/lib/generators/rails_admin/utils.rb +30 -0
  137. data/lib/rails_admin.rb +34 -0
  138. data/lib/rails_admin/abstract_model.rb +128 -0
  139. data/lib/rails_admin/adapters/active_record.rb +296 -0
  140. data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
  141. data/lib/rails_admin/adapters/mongoid.rb +430 -0
  142. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +43 -0
  143. data/lib/rails_admin/adapters/mongoid/extension.rb +45 -0
  144. data/lib/rails_admin/config.rb +333 -0
  145. data/lib/rails_admin/config/actions.rb +121 -0
  146. data/lib/rails_admin/config/actions/base.rb +132 -0
  147. data/lib/rails_admin/config/actions/bulk_delete.rb +55 -0
  148. data/lib/rails_admin/config/actions/dashboard.rb +52 -0
  149. data/lib/rails_admin/config/actions/delete.rb +56 -0
  150. data/lib/rails_admin/config/actions/edit.rb +55 -0
  151. data/lib/rails_admin/config/actions/export.rb +40 -0
  152. data/lib/rails_admin/config/actions/history_index.rb +38 -0
  153. data/lib/rails_admin/config/actions/history_show.rb +38 -0
  154. data/lib/rails_admin/config/actions/index.rb +85 -0
  155. data/lib/rails_admin/config/actions/new.rb +65 -0
  156. data/lib/rails_admin/config/actions/show.rb +34 -0
  157. data/lib/rails_admin/config/actions/show_in_app.rb +27 -0
  158. data/lib/rails_admin/config/configurable.rb +92 -0
  159. data/lib/rails_admin/config/fields.rb +87 -0
  160. data/lib/rails_admin/config/fields/association.rb +107 -0
  161. data/lib/rails_admin/config/fields/base.rb +320 -0
  162. data/lib/rails_admin/config/fields/factories/association.rb +32 -0
  163. data/lib/rails_admin/config/fields/factories/carrierwave.rb +31 -0
  164. data/lib/rails_admin/config/fields/factories/devise.rb +27 -0
  165. data/lib/rails_admin/config/fields/factories/dragonfly.rb +27 -0
  166. data/lib/rails_admin/config/fields/factories/enum.rb +11 -0
  167. data/lib/rails_admin/config/fields/factories/paperclip.rb +26 -0
  168. data/lib/rails_admin/config/fields/factories/password.rb +17 -0
  169. data/lib/rails_admin/config/fields/group.rb +78 -0
  170. data/lib/rails_admin/config/fields/types.rb +27 -0
  171. data/lib/rails_admin/config/fields/types/all.rb +25 -0
  172. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +41 -0
  173. data/lib/rails_admin/config/fields/types/boolean.rb +38 -0
  174. data/lib/rails_admin/config/fields/types/bson_object_id.rb +45 -0
  175. data/lib/rails_admin/config/fields/types/carrierwave.rb +31 -0
  176. data/lib/rails_admin/config/fields/types/color.rb +37 -0
  177. data/lib/rails_admin/config/fields/types/date.rb +24 -0
  178. data/lib/rails_admin/config/fields/types/datetime.rb +164 -0
  179. data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
  180. data/lib/rails_admin/config/fields/types/dragonfly.rb +41 -0
  181. data/lib/rails_admin/config/fields/types/enum.rb +39 -0
  182. data/lib/rails_admin/config/fields/types/file_upload.rb +65 -0
  183. data/lib/rails_admin/config/fields/types/float.rb +14 -0
  184. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
  185. data/lib/rails_admin/config/fields/types/has_many_association.rb +32 -0
  186. data/lib/rails_admin/config/fields/types/has_one_association.rb +39 -0
  187. data/lib/rails_admin/config/fields/types/hidden.rb +27 -0
  188. data/lib/rails_admin/config/fields/types/integer.rb +22 -0
  189. data/lib/rails_admin/config/fields/types/paperclip.rb +28 -0
  190. data/lib/rails_admin/config/fields/types/password.rb +39 -0
  191. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +80 -0
  192. data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
  193. data/lib/rails_admin/config/fields/types/string.rb +43 -0
  194. data/lib/rails_admin/config/fields/types/text.rb +97 -0
  195. data/lib/rails_admin/config/fields/types/time.rb +36 -0
  196. data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
  197. data/lib/rails_admin/config/groupable.rb +18 -0
  198. data/lib/rails_admin/config/has_fields.rb +136 -0
  199. data/lib/rails_admin/config/has_groups.rb +23 -0
  200. data/lib/rails_admin/config/hideable.rb +28 -0
  201. data/lib/rails_admin/config/lazy_model.rb +21 -0
  202. data/lib/rails_admin/config/model.rb +109 -0
  203. data/lib/rails_admin/config/proxyable.rb +12 -0
  204. data/lib/rails_admin/config/proxyable/proxy.rb +43 -0
  205. data/lib/rails_admin/config/sections.rb +39 -0
  206. data/lib/rails_admin/config/sections/base.rb +46 -0
  207. data/lib/rails_admin/config/sections/create.rb +11 -0
  208. data/lib/rails_admin/config/sections/edit.rb +11 -0
  209. data/lib/rails_admin/config/sections/export.rb +11 -0
  210. data/lib/rails_admin/config/sections/list.rb +27 -0
  211. data/lib/rails_admin/config/sections/modal.rb +10 -0
  212. data/lib/rails_admin/config/sections/nested.rb +10 -0
  213. data/lib/rails_admin/config/sections/show.rb +10 -0
  214. data/lib/rails_admin/config/sections/update.rb +10 -0
  215. data/lib/rails_admin/engine.rb +27 -0
  216. data/lib/rails_admin/extension.rb +29 -0
  217. data/lib/rails_admin/extensions/cancan.rb +5 -0
  218. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +59 -0
  219. data/lib/rails_admin/extensions/history.rb +5 -0
  220. data/lib/rails_admin/extensions/history/auditing_adapter.rb +37 -0
  221. data/lib/rails_admin/extensions/history/history.rb +36 -0
  222. data/lib/rails_admin/extensions/paper_trail.rb +5 -0
  223. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +93 -0
  224. data/lib/rails_admin/i18n_support.rb +43 -0
  225. data/lib/rails_admin/support/core_extensions.rb +44 -0
  226. data/lib/rails_admin/support/csv_converter.rb +105 -0
  227. data/lib/rails_admin/version.rb +18 -0
  228. data/lib/tasks/rails_admin.rake +48 -0
  229. data/spec/ci.sh +2 -0
  230. data/spec/controllers/rails_admin/application_controller_spec.rb +30 -0
  231. data/spec/controllers/rails_admin/main_controller_spec.rb +337 -0
  232. data/spec/dummy_app/Gemfile +48 -0
  233. data/spec/dummy_app/Rakefile +7 -0
  234. data/spec/dummy_app/app/active_record/abstract.rb +5 -0
  235. data/spec/dummy_app/app/active_record/another_field_test.rb +4 -0
  236. data/spec/dummy_app/app/active_record/ball.rb +9 -0
  237. data/spec/dummy_app/app/active_record/carrierwave_uploader.rb +53 -0
  238. data/spec/dummy_app/app/active_record/category.rb +5 -0
  239. data/spec/dummy_app/app/active_record/cms.rb +5 -0
  240. data/spec/dummy_app/app/active_record/cms/basic_page.rb +9 -0
  241. data/spec/dummy_app/app/active_record/cms/unscoped_page.rb +3 -0
  242. data/spec/dummy_app/app/active_record/comment.rb +5 -0
  243. data/spec/dummy_app/app/active_record/comment/confirmed.rb +3 -0
  244. data/spec/dummy_app/app/active_record/division.rb +15 -0
  245. data/spec/dummy_app/app/active_record/draft.rb +13 -0
  246. data/spec/dummy_app/app/active_record/fan.rb +7 -0
  247. data/spec/dummy_app/app/active_record/field_test.rb +19 -0
  248. data/spec/dummy_app/app/active_record/hardball.rb +2 -0
  249. data/spec/dummy_app/app/active_record/image.rb +6 -0
  250. data/spec/dummy_app/app/active_record/league.rb +12 -0
  251. data/spec/dummy_app/app/active_record/nested_field_test.rb +8 -0
  252. data/spec/dummy_app/app/active_record/player.rb +27 -0
  253. data/spec/dummy_app/app/active_record/team.rb +28 -0
  254. data/spec/dummy_app/app/active_record/user.rb +25 -0
  255. data/spec/dummy_app/app/assets/images/rails.png +0 -0
  256. data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
  257. data/spec/dummy_app/app/assets/stylesheets/application.css +13 -0
  258. data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
  259. data/spec/dummy_app/app/controllers/players_controller.rb +5 -0
  260. data/spec/dummy_app/app/locales/models.en.yml +20 -0
  261. data/spec/dummy_app/app/mongoid/another_field_test.rb +6 -0
  262. data/spec/dummy_app/app/mongoid/ball.rb +14 -0
  263. data/spec/dummy_app/app/mongoid/carrierwave_uploader.rb +53 -0
  264. data/spec/dummy_app/app/mongoid/category.rb +7 -0
  265. data/spec/dummy_app/app/mongoid/cms.rb +5 -0
  266. data/spec/dummy_app/app/mongoid/cms/basic_page.rb +12 -0
  267. data/spec/dummy_app/app/mongoid/cms/unscoped_page.rb +5 -0
  268. data/spec/dummy_app/app/mongoid/comment.rb +9 -0
  269. data/spec/dummy_app/app/mongoid/comment/confirmed.rb +3 -0
  270. data/spec/dummy_app/app/mongoid/division.rb +14 -0
  271. data/spec/dummy_app/app/mongoid/draft.rb +22 -0
  272. data/spec/dummy_app/app/mongoid/embed.rb +6 -0
  273. data/spec/dummy_app/app/mongoid/fan.rb +12 -0
  274. data/spec/dummy_app/app/mongoid/field_test.rb +57 -0
  275. data/spec/dummy_app/app/mongoid/hardball.rb +2 -0
  276. data/spec/dummy_app/app/mongoid/image.rb +9 -0
  277. data/spec/dummy_app/app/mongoid/league.rb +16 -0
  278. data/spec/dummy_app/app/mongoid/nested_field_test.rb +13 -0
  279. data/spec/dummy_app/app/mongoid/player.rb +41 -0
  280. data/spec/dummy_app/app/mongoid/team.rb +47 -0
  281. data/spec/dummy_app/app/mongoid/user.rb +61 -0
  282. data/spec/dummy_app/app/views/layouts/application.html.erb +14 -0
  283. data/spec/dummy_app/app/views/players/show.html.haml +1 -0
  284. data/spec/dummy_app/config.ru +4 -0
  285. data/spec/dummy_app/config/application.rb +69 -0
  286. data/spec/dummy_app/config/boot.rb +9 -0
  287. data/spec/dummy_app/config/database.yml +25 -0
  288. data/spec/dummy_app/config/environment.rb +5 -0
  289. data/spec/dummy_app/config/environments/development.rb +37 -0
  290. data/spec/dummy_app/config/environments/production.rb +67 -0
  291. data/spec/dummy_app/config/environments/test.rb +37 -0
  292. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
  293. data/spec/dummy_app/config/initializers/devise.rb +216 -0
  294. data/spec/dummy_app/config/initializers/dragonfly.rb +11 -0
  295. data/spec/dummy_app/config/initializers/inflections.rb +15 -0
  296. data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
  297. data/spec/dummy_app/config/initializers/rails_admin.rb +8 -0
  298. data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
  299. data/spec/dummy_app/config/initializers/session_patch.rb +16 -0
  300. data/spec/dummy_app/config/initializers/session_store.rb +8 -0
  301. data/spec/dummy_app/config/initializers/strong_parameters.rb +2 -0
  302. data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
  303. data/spec/dummy_app/config/locales/fr.yml +24 -0
  304. data/spec/dummy_app/config/mongoid.yml +22 -0
  305. data/spec/dummy_app/config/routes.rb +10 -0
  306. data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
  307. data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
  308. data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
  309. data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
  310. data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
  311. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +49 -0
  312. data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
  313. data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
  314. data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
  315. data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
  316. data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
  317. data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
  318. data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
  319. data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
  320. data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
  321. data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
  322. data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
  323. data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
  324. data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
  325. data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
  326. data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
  327. data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
  328. data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
  329. data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
  330. data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
  331. data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
  332. data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
  333. data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
  334. data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
  335. data/spec/dummy_app/db/migrate/20111115041025_add_type_to_balls.rb +5 -0
  336. data/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +10 -0
  337. data/spec/dummy_app/db/migrate/20111130075338_add_dragonfly_asset_name_to_field_tests.rb +5 -0
  338. data/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +8 -0
  339. data/spec/dummy_app/db/migrate/20120117151733_add_custom_field_to_teams.rb +5 -0
  340. data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +7 -0
  341. data/spec/dummy_app/db/migrate/20120319041705_drop_rel_tests.rb +15 -0
  342. data/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb +8 -0
  343. data/spec/dummy_app/db/migrate/20120928075608_create_images.rb +8 -0
  344. data/spec/dummy_app/db/seeds.rb +29 -0
  345. data/spec/dummy_app/doc/README_FOR_APP +2 -0
  346. data/spec/dummy_app/public/404.html +26 -0
  347. data/spec/dummy_app/public/422.html +26 -0
  348. data/spec/dummy_app/public/500.html +25 -0
  349. data/spec/dummy_app/public/favicon.ico +0 -0
  350. data/spec/dummy_app/public/robots.txt +5 -0
  351. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg +0 -0
  352. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg.meta +1 -0
  353. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg +0 -0
  354. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg.meta +1 -0
  355. data/spec/dummy_app/public/system/paperclip_assets/1/original/Boston City Flow.jpg +0 -0
  356. data/spec/dummy_app/public/system/paperclip_assets/1/thumb/Boston City Flow.jpg +0 -0
  357. data/spec/dummy_app/public/system/paperclip_assets/3/original/Costa Rican Frog.jpg +0 -0
  358. data/spec/dummy_app/public/system/paperclip_assets/3/thumb/Costa Rican Frog.jpg +0 -0
  359. data/spec/dummy_app/public/system/paperclip_assets/6/original/liste-electorale.pdf +0 -0
  360. data/spec/dummy_app/public/system/paperclip_assets/6/thumb/liste-electorale.pdf +148 -0
  361. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/Boston_City_Flow.jpg +0 -0
  362. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/thumb_Boston_City_Flow.jpg +0 -0
  363. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/Costa_Rican_Frog.jpg +0 -0
  364. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/thumb_Costa_Rican_Frog.jpg +0 -0
  365. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/Pensive_Parakeet.jpg +0 -0
  366. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/thumb_Pensive_Parakeet.jpg +0 -0
  367. data/spec/dummy_app/script/rails +6 -0
  368. data/spec/factories.rb +75 -0
  369. data/spec/helpers/rails_admin/application_helper_spec.rb +353 -0
  370. data/spec/helpers/rails_admin/form_builder_spec.rb +17 -0
  371. data/spec/integration/authorization/cancan_spec.rb +366 -0
  372. data/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
  373. data/spec/integration/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +53 -0
  374. data/spec/integration/basic/create/rails_admin_basic_create_spec.rb +140 -0
  375. data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +16 -0
  376. data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +64 -0
  377. data/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +84 -0
  378. data/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +109 -0
  379. data/spec/integration/basic/export/rails_admin_basic_export_spec.rb +106 -0
  380. data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +444 -0
  381. data/spec/integration/basic/new/rails_admin_basic_new_spec.rb +73 -0
  382. data/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
  383. data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +82 -0
  384. data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +229 -0
  385. data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +1026 -0
  386. data/spec/integration/config/list/rails_admin_config_list_spec.rb +441 -0
  387. data/spec/integration/config/show/rails_admin_config_show_spec.rb +331 -0
  388. data/spec/integration/history/rails_admin_history_spec.rb +88 -0
  389. data/spec/integration/rails_admin_spec.rb +150 -0
  390. data/spec/integration/relation_spec.rb +35 -0
  391. data/spec/orm/active_record.rb +42 -0
  392. data/spec/orm/mongoid.rb +21 -0
  393. data/spec/rails_admin/abstract_model_spec.rb +75 -0
  394. data/spec/rails_admin/active_record_extension_spec.rb +16 -0
  395. data/spec/rails_admin/adapters/active_record/abstract_object_spec.rb +132 -0
  396. data/spec/rails_admin/adapters/active_record_spec.rb +409 -0
  397. data/spec/rails_admin/adapters/mongoid/abstract_object_spec.rb +31 -0
  398. data/spec/rails_admin/adapters/mongoid_spec.rb +776 -0
  399. data/spec/rails_admin/config/actions/base_spec.rb +32 -0
  400. data/spec/rails_admin/config/actions_spec.rb +180 -0
  401. data/spec/rails_admin/config/fields/base_spec.rb +421 -0
  402. data/spec/rails_admin/config/fields/date_spec.rb +74 -0
  403. data/spec/rails_admin/config/fields/datetime_spec.rb +55 -0
  404. data/spec/rails_admin/config/fields/file_upload_spec.rb +21 -0
  405. data/spec/rails_admin/config/fields/time_spec.rb +39 -0
  406. data/spec/rails_admin/config/fields/timestamp_spec.rb +20 -0
  407. data/spec/rails_admin/config/fields/types/datetime_spec.rb +18 -0
  408. data/spec/rails_admin/config/fields_spec.rb +15 -0
  409. data/spec/rails_admin/config/has_fields_spec.rb +30 -0
  410. data/spec/rails_admin/config/lazy_model_spec.rb +29 -0
  411. data/spec/rails_admin/config/model_spec.rb +75 -0
  412. data/spec/rails_admin/config/sections_spec.rb +123 -0
  413. data/spec/rails_admin/config_spec.rb +277 -0
  414. data/spec/rails_admin/support/csv_converter_spec.rb +16 -0
  415. data/spec/spec_helper.rb +84 -0
  416. metadata +868 -0
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin History", :active_record => true do
4
+ describe "model history fetch" do
5
+ before :each do
6
+ RailsAdmin::History.delete_all
7
+ @model = RailsAdmin::AbstractModel.new("Player")
8
+ player = FactoryGirl.create :player
9
+ 30.times do |i|
10
+ player.number = i
11
+ RailsAdmin::History.create_history_item "change #{i}", player, @model, nil
12
+ end
13
+ end
14
+
15
+ it "fetches on page of history" do
16
+ histories = RailsAdmin::History.history_for_model @model, nil, false, false, false, nil, 20
17
+ expect(histories.total_count).to eq(30)
18
+ expect(histories.count).to eq(20)
19
+ end
20
+
21
+ it "respects RailsAdmin::Config.default_items_per_page" do
22
+ RailsAdmin.config.default_items_per_page = 15
23
+ histories = RailsAdmin::History.history_for_model @model, nil, false, false, false, nil
24
+ expect(histories.total_count).to eq(30)
25
+ expect(histories.count).to eq(15)
26
+ end
27
+
28
+ context "with Kaminari" do
29
+ before do
30
+ Kaminari.config.page_method_name = :per_page_kaminari
31
+ @paged = RailsAdmin::History.page(1)
32
+ end
33
+
34
+ after do
35
+ Kaminari.config.page_method_name = :page
36
+ end
37
+
38
+ it "supports pagination when Kaminari's page_method_name is customized" do
39
+ RailsAdmin::History.should_receive(:per_page_kaminari).twice.and_return(@paged)
40
+ RailsAdmin::History.history_for_model @model, nil, false, false, false, nil
41
+ RailsAdmin::History.history_for_object @model, Player.first, nil, false, false, false, nil
42
+ end
43
+ end
44
+
45
+ context "GET admin/history/@model" do
46
+ before :each do
47
+ RailsAdmin.config do |c|
48
+ c.audit_with :history
49
+ end
50
+
51
+ visit history_index_path(@model)
52
+ end
53
+
54
+ # https://github.com/sferik/rails_admin/issues/362
55
+ # test that no link uses the "wildcard route" with the history
56
+ # controller and for_model method
57
+ it "does not use the 'wildcard route'" do
58
+ expect(page).to have_selector("a[href*='all=true']") # make sure we're fully testing pagination
59
+ expect(page).to have_no_selector("a[href^='/rails_admin/history/for_model']")
60
+ end
61
+
62
+ context "with a lot of histories" do
63
+ before :each do
64
+ player = Player.create(:team_id => -1, :number => -1, :name => "Player 1")
65
+ 101.times do |i|
66
+ player.number = i
67
+ RailsAdmin::History.create_history_item "change #{i}", player, @model, nil
68
+ end
69
+ end
70
+
71
+ it "gets latest ones" do
72
+ expect(RailsAdmin::History.latest.count).to eq(100)
73
+ end
74
+
75
+ it "gets latest ones orderly" do
76
+ latest = RailsAdmin::History.latest
77
+ expect(latest.first.message).to eq("change 100")
78
+ expect(latest.last.message).to eq("change 1")
79
+ end
80
+
81
+ it "renders a XHR request successfully" do
82
+ xhr :get, history_index_path(@model, :page => 2)
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,150 @@
1
+ require 'spec_helper'
2
+
3
+ describe RailsAdmin do
4
+
5
+ subject { page }
6
+
7
+ describe "authentication" do
8
+ it "is disableable" do
9
+ logout
10
+ RailsAdmin.config do |config|
11
+ config.included_models = []
12
+ config.authenticate_with {}
13
+ end
14
+ visit dashboard_path
15
+ end
16
+ end
17
+
18
+ # A common mistake for translators is to forget to change the YAML file's
19
+ # root key from en to their own locale (as people tend to use the English
20
+ # file as template for a new translation).
21
+ describe "localization" do
22
+ it "defaults to English" do
23
+ RailsAdmin.config.included_models = []
24
+ visit dashboard_path
25
+
26
+ should have_content("Site administration")
27
+ should have_content("Dashboard")
28
+ end
29
+ end
30
+
31
+ describe "html head" do
32
+ before { visit dashboard_path }
33
+
34
+ # Note: the [href^="/asset... syntax matches the start of a value. The reason
35
+ # we just do that is to avoid being confused by rails' asset_ids.
36
+ it "loads stylesheets in header" do
37
+ should have_selector('head link[href^="/assets/rails_admin/rails_admin.css"]')
38
+ end
39
+
40
+ it "loads javascript files in body" do
41
+ should have_selector('head script[src^="/assets/rails_admin/rails_admin.js"]')
42
+ end
43
+ end
44
+
45
+ describe "hidden fields with default values" do
46
+
47
+ before (:each) do
48
+ RailsAdmin.config Player do
49
+ include_all_fields
50
+ edit do
51
+ field :name, :hidden do
52
+ default_value do
53
+ bindings[:view]._current_user.email
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ it "shows up with default value, hidden" do
61
+ visit new_path(:model_name => "player")
62
+ should have_selector("#player_name[type=hidden][value='username@example.com']")
63
+ should_not have_selector("#player_name[type=hidden][value='toto@example.com']")
64
+ end
65
+
66
+ it "does not show label" do
67
+ should_not have_selector("label", :text => "Name")
68
+ end
69
+
70
+ it "does not show help block" do
71
+ should_not have_xpath("id('player_name')/../p[@class='help-block']")
72
+ end
73
+ end
74
+
75
+ describe "_current_user" do # https://github.com/sferik/rails_admin/issues/549
76
+
77
+ it "is accessible from the list view" do
78
+ RailsAdmin.config Player do
79
+ list do
80
+ field :name do
81
+ visible do
82
+ bindings[:view]._current_user.email == 'username@example.com'
83
+ end
84
+ end
85
+
86
+ field :team do
87
+ visible do
88
+ bindings[:view]._current_user.email == 'foo@example.com'
89
+ end
90
+ end
91
+ end
92
+ end
93
+
94
+ visit index_path(:model_name => "player")
95
+ should have_selector(".header.name_field")
96
+ should_not have_selector(".header.team_field")
97
+ end
98
+ end
99
+
100
+ describe "polymorphic associations" do
101
+ before :each do
102
+ @team = FactoryGirl.create :team
103
+ @comment = FactoryGirl.create :comment, :commentable => @team
104
+ end
105
+
106
+ it "works like belongs to associations in the list view" do
107
+ visit index_path(:model_name => "comment")
108
+
109
+ should have_content(@team.name)
110
+ end
111
+
112
+ it "is editable" do
113
+ visit edit_path(:model_name => "comment", :id => @comment.id)
114
+
115
+ should have_selector("select#comment_commentable_type")
116
+ should have_selector("select#comment_commentable_id")
117
+ end
118
+
119
+ it "is visible in the owning end" do
120
+ visit edit_path(:model_name => "team", :id => @team.id)
121
+
122
+ should have_selector("select#team_comment_ids")
123
+ end
124
+ end
125
+
126
+ describe "secondary navigation" do
127
+ it "has Gravatar image" do
128
+ visit dashboard_path
129
+ should have_selector("ul.nav.pull-right li img")
130
+ end
131
+
132
+ it "does not show Gravatar when user doesn't have email method" do
133
+ User.any_instance.stub(:respond_to?).with(:email).and_return(false)
134
+ visit dashboard_path
135
+ should_not have_selector("ul.nav.pull-right li img")
136
+ end
137
+
138
+ it "does not cause error when email is nil" do
139
+ User.any_instance.stub(:email).and_return(nil)
140
+ visit dashboard_path
141
+ should have_selector("body.rails_admin")
142
+ end
143
+
144
+ it "shows a log out link" do
145
+ visit dashboard_path
146
+ click_link "Log out"
147
+ should have_content("Sign in")
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe "table relations" do
4
+
5
+ before(:each) do
6
+ class RelTest < Tableless
7
+ column :league_id, :integer
8
+ column :division_id, :integer, nil, false
9
+ column :player_id, :integer
10
+ belongs_to :league
11
+ belongs_to :division
12
+ belongs_to :player
13
+ validates_numericality_of(:player_id, :only_integer => true)
14
+ end
15
+ @fields = RailsAdmin.config(RelTest).create.fields
16
+ end
17
+
18
+ describe "column with nullable fk and no model validations" do
19
+ it "is optional" do
20
+ expect(@fields.find{ |f| f.name == :league }.required?).to be_false
21
+ end
22
+ end
23
+
24
+ describe "column with non-nullable fk and no model validations" do
25
+ it "is not required" do
26
+ expect(@fields.find{ |f| f.name == :division }.required?).to be_false
27
+ end
28
+ end
29
+
30
+ describe "column with nullable fk and a numericality model validation" do
31
+ it "is required" do
32
+ expect(@fields.find{ |f| f.name == :player }.required?).to be_true
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ require 'rails_admin/extensions/history/history'
2
+ require 'rails_admin/adapters/active_record'
3
+
4
+ DatabaseCleaner.strategy = :transaction
5
+
6
+ ActiveRecord::Base.connection.tables.each do |table|
7
+ ActiveRecord::Base.connection.drop_table(table)
8
+ end
9
+
10
+ silence_stream(STDOUT) do
11
+ ActiveRecord::Migrator.migrate File.expand_path('../../dummy_app/db/migrate/', __FILE__)
12
+ end
13
+
14
+ class Tableless < ActiveRecord::Base
15
+ class <<self
16
+ def columns
17
+ @columns ||= [];
18
+ end
19
+
20
+ def column(name, sql_type = nil, default = nil, null = true)
21
+ columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default,
22
+ sql_type.to_s, null)
23
+ end
24
+
25
+ def columns_hash
26
+ @columns_hash ||= Hash[columns.map { |column| [column.name, column] }]
27
+ end
28
+
29
+ def column_names
30
+ @column_names ||= columns.map { |column| column.name }
31
+ end
32
+
33
+ def column_defaults
34
+ @column_defaults ||= columns.map { |column| [column.name, nil] }.inject({}) { |m, e| m[e[0]] = e[1]; m }
35
+ end
36
+ end
37
+
38
+ # Override the save method to prevent exceptions.
39
+ def save(validate = true)
40
+ validate ? valid? : true
41
+ end
42
+ end
@@ -0,0 +1,21 @@
1
+ require 'rails_admin/adapters/mongoid'
2
+
3
+ Paperclip.logger = Logger.new(nil)
4
+
5
+ class Tableless
6
+ include Mongoid::Document
7
+
8
+ class <<self
9
+ def column(name, sql_type = 'string', default = nil, null = true)
10
+ # ignore length
11
+ sql_type = sql_type.to_s.sub(/\(.*\)/, '').to_sym
12
+ field name, :type => {
13
+ :integer => Integer,
14
+ :string => String,
15
+ :text => String,
16
+ :date => Date,
17
+ :datetime => DateTime,
18
+ }[sql_type], :default => default
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe RailsAdmin::AbstractModel do
4
+
5
+ describe "#to_s" do
6
+ it 'returns model\'s name' do
7
+ expect(RailsAdmin::AbstractModel.new(Cms::BasicPage).to_s).to eq Cms::BasicPage.to_s
8
+ end
9
+ end
10
+
11
+ describe "filters" do
12
+ before do
13
+ @abstract_model = RailsAdmin::AbstractModel.new('FieldTest')
14
+ end
15
+
16
+ context "ActiveModel::ForbiddenAttributesProtection" do
17
+ it "is present" do
18
+ @abstract_model.model.ancestors.map(&:to_s).include?('ActiveModel::ForbiddenAttributesProtection')
19
+ end
20
+ end
21
+
22
+ context "on dates" do
23
+ it "lists elements within outbound limits" do
24
+ 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')
25
+
26
+ FactoryGirl.create(:field_test, :date_field => Date.strptime("01/01/2012", date_format))
27
+ FactoryGirl.create(:field_test, :date_field => Date.strptime("01/02/2012", date_format))
28
+ FactoryGirl.create(:field_test, :date_field => Date.strptime("01/03/2012", date_format))
29
+ FactoryGirl.create(:field_test, :date_field => Date.strptime("01/04/2012", date_format))
30
+ expect(@abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["", "01/02/2012", "01/03/2012"], :o => 'between' } } } ).count).to eq(2)
31
+ expect(@abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["", "01/02/2012", "01/02/2012"], :o => 'between' } } } ).count).to eq(1)
32
+ expect(@abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["", "01/03/2012", ""], :o => 'between' } } } ).count).to eq(2)
33
+ expect(@abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["", "", "01/02/2012"], :o => 'between' } } } ).count).to eq(2)
34
+ expect(@abstract_model.all(:filters => { "date_field" => { "1" => { :v => ["01/02/2012"], :o => 'default' } } } ).count).to eq(1)
35
+
36
+ end
37
+ end
38
+
39
+ context "on datetimes" do
40
+ it "lists elements within outbound limits" do
41
+ FactoryGirl.create(:field_test, :datetime_field => Time.local(2012, 1, 1, 23, 59, 59))
42
+ FactoryGirl.create(:field_test, :datetime_field => Time.local(2012, 1, 2, 0, 0, 0))
43
+ FactoryGirl.create(:field_test, :datetime_field => Time.local(2012, 1, 3, 23, 59, 59))
44
+ if defined?(Mongoid) && Mongoid::VERSION >= '3.0.0'
45
+ # TODO: Mongoid 3.0.0 mysteriously expands the range of inclusion slightly...
46
+ FactoryGirl.create(:field_test, :datetime_field => Time.local(2012, 1, 4, 0, 0, 1))
47
+ else
48
+ FactoryGirl.create(:field_test, :datetime_field => Time.local(2012, 1, 4, 0, 0, 0))
49
+ end
50
+ expect(@abstract_model.all(:filters => { "datetime_field" => { "1" => { :v => ["", "01/02/2012", "01/03/2012"], :o => 'between' } } } ).count).to eq(2)
51
+ expect(@abstract_model.all(:filters => { "datetime_field" => { "1" => { :v => ["", "01/02/2012", "01/02/2012"], :o => 'between' } } } ).count).to eq(1)
52
+ expect(@abstract_model.all(:filters => { "datetime_field" => { "1" => { :v => ["", "01/03/2012", ""], :o => 'between' } } } ).count).to eq(2)
53
+ expect(@abstract_model.all(:filters => { "datetime_field" => { "1" => { :v => ["", "", "01/02/2012"], :o => 'between' } } } ).count).to eq(2)
54
+ expect(@abstract_model.all(:filters => { "datetime_field" => { "1" => { :v => ["01/02/2012"], :o => 'default' } } } ).count).to eq(1)
55
+ end
56
+ end
57
+ end
58
+
59
+ context "with Kaminari" do
60
+ before do
61
+ Kaminari.config.page_method_name = :per_page_kaminari
62
+ @abstract_model = RailsAdmin::AbstractModel.new('Player')
63
+ @paged = Player.page(1)
64
+ end
65
+
66
+ after do
67
+ Kaminari.config.page_method_name = :page
68
+ end
69
+
70
+ it "supports pagination when Kaminari's page_method_name is customized" do
71
+ Player.should_receive(:per_page_kaminari).once.and_return(@paged)
72
+ @abstract_model.all(:sort => PK_COLUMN, :page => 1, :per => 2)
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+ require File.expand_path('../../../config/initializers/active_record_extensions', __FILE__)
3
+
4
+ describe "ActiveRecord::Base", :active_record => true do
5
+ describe "#safe_send" do
6
+ it "only calls #read_attribute once" do
7
+ @player = Player.new
8
+ @player.number = 23
9
+ original_method = @player.method(:read_attribute)
10
+ @player.should_receive(:read_attribute).exactly(1).times do |*args|
11
+ original_method.call(*args)
12
+ end
13
+ expect(@player.safe_send(:number)).to eq(23)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,132 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin::Adapters::ActiveRecord::AbstractObject", :active_record => true do
4
+ describe "proxy" do
5
+ let(:object) { mock("object") }
6
+ let(:abstract_object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new(object) }
7
+
8
+ it "acts 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 "creates a Player with given attributes" do
28
+ expect(object.save).to be_true
29
+
30
+ player.reload
31
+ expect(player.name).to eq(name)
32
+ expect(player.number).to eq(number)
33
+ expect(player.position).to eq(position)
34
+ expect(player.suspended).to be_false
35
+ expect(player.draft).to be_nil
36
+ expect(player.team).to be_nil
37
+ end
38
+ end
39
+
40
+ describe "a record with protected attributes and has_one association" do
41
+ let(:draft) { FactoryGirl.create(:draft) }
42
+ let(:number) { draft.player.number + 1 } # to avoid collision
43
+
44
+ before do
45
+ object.set_attributes({ :name => name, :number => number, :position => position, :suspended => suspended, :team_id => nil, :draft_id => draft.id })
46
+ end
47
+
48
+ it "creates a Player with given attributes" do
49
+ expect(object.save).to be_true
50
+
51
+ player.reload
52
+ expect(player.name).to eq(name)
53
+ expect(player.number).to eq(number)
54
+ expect(player.position).to eq(position)
55
+ expect(player.suspended).to be_false
56
+ expect(player.draft).to eq(draft.reload)
57
+ expect(player.team).to be_nil
58
+ end
59
+ end
60
+
61
+ describe "a record with has_many associations" do
62
+ let(:league) { League.new }
63
+ let(:object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new league }
64
+ let(:name) { "Awesome League" }
65
+ let(:teams) { [FactoryGirl.create(:team)] }
66
+ let(:divisions) { [Division.create!(:name => 'div 1', :league => League.create!(:name => 'north')), Division.create!(:name => 'div 2', :league => League.create!(:name => 'south'))] }
67
+
68
+ before do
69
+ object.set_attributes({ :name => name, :division_ids => divisions.map(&:id) })
70
+ end
71
+
72
+ it "creates a League with given attributes and associations" do
73
+ expect(object.save).to be_true
74
+ league.reload
75
+ expect(league.name).to eq(name)
76
+ expect(league.divisions).to eq(divisions)
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "update" do
82
+ describe "a record with protected attributes and has_one association" do
83
+ let(:name) { "Stefan Koza" }
84
+ let(:suspended) { true }
85
+ let(:player) { FactoryGirl.create(:player, :suspended => true, :name => name, :draft => FactoryGirl.create(:draft)) }
86
+ let(:object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new player }
87
+ let(:new_team) { FactoryGirl.create(:team) }
88
+ let(:new_suspended) { false }
89
+ let(:new_draft) { nil }
90
+ let(:new_number) { player.number + 29 }
91
+
92
+ before do
93
+ object.set_attributes({ :number => new_number, :team_id => new_team.id, :suspended => new_suspended, :draft_id => new_draft })
94
+ object.save
95
+ end
96
+
97
+ it "updates a record and associations" do
98
+ object.reload
99
+ expect(object.number).to eq(new_number)
100
+ expect(object.name).to eq(name)
101
+ expect(object.draft).to be_nil
102
+ expect(object.suspended).to be_true
103
+ expect(object.team).to eq(new_team)
104
+ end
105
+ end
106
+ end
107
+
108
+ describe "destroy" do
109
+ let(:player) { FactoryGirl.create(:player) }
110
+ let(:object) { RailsAdmin::Adapters::ActiveRecord::AbstractObject.new player }
111
+
112
+ before do
113
+ object.destroy
114
+ end
115
+
116
+ it "deletes the record" do
117
+ expect(Player.exists?(player.id)).to be_false
118
+ end
119
+ end
120
+
121
+ describe "object_label_method" do
122
+ it "is configurable" do
123
+ RailsAdmin.config League do
124
+ object_label_method { :custom_name }
125
+ end
126
+
127
+ @league = FactoryGirl.create :league
128
+
129
+ expect(RailsAdmin.config('League').with(:object => @league).object_label).to eq("League '#{@league.name}'")
130
+ end
131
+ end
132
+ end