upstream-rails_admin 1.0.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 (556) hide show
  1. data/Gemfile +74 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +162 -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 +543 -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 +41 -0
  56. data/app/assets/javascripts/rails_admin/ra.remote-form.js +152 -0
  57. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +135 -0
  58. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +27 -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 +65 -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 +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 +78 -0
  77. data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +180 -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 +85 -0
  81. data/app/assets/stylesheets/rails_admin/rails_admin.css +4 -0
  82. data/app/assets/stylesheets/rails_admin/themes/cerulean/mixins.css.scss +0 -0
  83. data/app/assets/stylesheets/rails_admin/themes/cerulean/theming.css.scss +97 -0
  84. data/app/assets/stylesheets/rails_admin/themes/cerulean/variables.css.scss +168 -0
  85. data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +8 -0
  86. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +11 -0
  87. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +12 -0
  88. data/app/controllers/rails_admin/application_controller.rb +82 -0
  89. data/app/controllers/rails_admin/main_controller.rb +155 -0
  90. data/app/helpers/rails_admin/application_helper.rb +125 -0
  91. data/app/helpers/rails_admin/form_builder.rb +113 -0
  92. data/app/helpers/rails_admin/main_helper.rb +36 -0
  93. data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
  94. data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
  95. data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
  96. data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
  97. data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
  98. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +12 -0
  99. data/app/views/layouts/rails_admin/application.html.haml +26 -0
  100. data/app/views/layouts/rails_admin/pjax.html.haml +20 -0
  101. data/app/views/rails_admin/main/_dashboard_history.html.haml +10 -0
  102. data/app/views/rails_admin/main/_delete_notice.html.haml +18 -0
  103. data/app/views/rails_admin/main/_form_colorpicker.html.haml +1 -0
  104. data/app/views/rails_admin/main/_form_datetime.html.haml +1 -0
  105. data/app/views/rails_admin/main/_form_enumeration.html.haml +1 -0
  106. data/app/views/rails_admin/main/_form_field.html.haml +1 -0
  107. data/app/views/rails_admin/main/_form_file_upload.html.haml +13 -0
  108. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +47 -0
  109. data/app/views/rails_admin/main/_form_filtering_select.html.haml +37 -0
  110. data/app/views/rails_admin/main/_form_nested_many.html.haml +14 -0
  111. data/app/views/rails_admin/main/_form_nested_one.html.haml +10 -0
  112. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +10 -0
  113. data/app/views/rails_admin/main/_form_text.html.haml +15 -0
  114. data/app/views/rails_admin/main/_submit_buttons.html.haml +15 -0
  115. data/app/views/rails_admin/main/bulk_delete.html.haml +11 -0
  116. data/app/views/rails_admin/main/dashboard.html.haml +31 -0
  117. data/app/views/rails_admin/main/delete.html.haml +18 -0
  118. data/app/views/rails_admin/main/edit.html.haml +2 -0
  119. data/app/views/rails_admin/main/export.html.haml +75 -0
  120. data/app/views/rails_admin/main/history.html.haml +42 -0
  121. data/app/views/rails_admin/main/index.html.haml +140 -0
  122. data/app/views/rails_admin/main/new.html.haml +2 -0
  123. data/app/views/rails_admin/main/show.html.haml +14 -0
  124. data/config/initializers/active_record_extensions.rb +19 -0
  125. data/config/initializers/devise_patch.rb +9 -0
  126. data/config/initializers/haml.rb +2 -0
  127. data/config/initializers/mongoid_extensions.rb +5 -0
  128. data/config/locales/fr.yml +24 -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 +84 -0
  132. data/lib/generators/rails_admin/templates/drop.rb +18 -0
  133. data/lib/generators/rails_admin/templates/initializer.erb +101 -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 +108 -0
  139. data/lib/rails_admin/adapters/active_record.rb +255 -0
  140. data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
  141. data/lib/rails_admin/adapters/mongoid.rb +390 -0
  142. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +48 -0
  143. data/lib/rails_admin/adapters/mongoid/extension.rb +48 -0
  144. data/lib/rails_admin/config.rb +323 -0
  145. data/lib/rails_admin/config/actions.rb +121 -0
  146. data/lib/rails_admin/config/actions/base.rb +117 -0
  147. data/lib/rails_admin/config/actions/bulk_delete.rb +55 -0
  148. data/lib/rails_admin/config/actions/dashboard.rb +46 -0
  149. data/lib/rails_admin/config/actions/delete.rb +53 -0
  150. data/lib/rails_admin/config/actions/edit.rb +60 -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 +64 -0
  156. data/lib/rails_admin/config/actions/show.rb +32 -0
  157. data/lib/rails_admin/config/actions/show_in_app.rb +28 -0
  158. data/lib/rails_admin/config/configurable.rb +92 -0
  159. data/lib/rails_admin/config/fields.rb +88 -0
  160. data/lib/rails_admin/config/fields/association.rb +108 -0
  161. data/lib/rails_admin/config/fields/base.rb +298 -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/factories/serialized.rb +17 -0
  170. data/lib/rails_admin/config/fields/group.rb +78 -0
  171. data/lib/rails_admin/config/fields/types.rb +27 -0
  172. data/lib/rails_admin/config/fields/types/all.rb +25 -0
  173. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +41 -0
  174. data/lib/rails_admin/config/fields/types/boolean.rb +31 -0
  175. data/lib/rails_admin/config/fields/types/bson_object_id.rb +42 -0
  176. data/lib/rails_admin/config/fields/types/carrierwave.rb +31 -0
  177. data/lib/rails_admin/config/fields/types/color.rb +37 -0
  178. data/lib/rails_admin/config/fields/types/date.rb +24 -0
  179. data/lib/rails_admin/config/fields/types/datetime.rb +163 -0
  180. data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
  181. data/lib/rails_admin/config/fields/types/dragonfly.rb +41 -0
  182. data/lib/rails_admin/config/fields/types/enum.rb +35 -0
  183. data/lib/rails_admin/config/fields/types/file_upload.rb +61 -0
  184. data/lib/rails_admin/config/fields/types/float.rb +14 -0
  185. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
  186. data/lib/rails_admin/config/fields/types/has_many_association.rb +32 -0
  187. data/lib/rails_admin/config/fields/types/has_one_association.rb +39 -0
  188. data/lib/rails_admin/config/fields/types/hidden.rb +21 -0
  189. data/lib/rails_admin/config/fields/types/integer.rb +22 -0
  190. data/lib/rails_admin/config/fields/types/paperclip.rb +28 -0
  191. data/lib/rails_admin/config/fields/types/password.rb +39 -0
  192. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +76 -0
  193. data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
  194. data/lib/rails_admin/config/fields/types/string.rb +41 -0
  195. data/lib/rails_admin/config/fields/types/text.rb +36 -0
  196. data/lib/rails_admin/config/fields/types/time.rb +36 -0
  197. data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
  198. data/lib/rails_admin/config/groupable.rb +18 -0
  199. data/lib/rails_admin/config/has_fields.rb +135 -0
  200. data/lib/rails_admin/config/has_groups.rb +23 -0
  201. data/lib/rails_admin/config/hideable.rb +28 -0
  202. data/lib/rails_admin/config/model.rb +88 -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 +29 -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 +22 -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 +70 -0
  222. data/lib/rails_admin/extensions/paper_trail.rb +5 -0
  223. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +92 -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 +109 -0
  227. data/lib/rails_admin/version.rb +3 -0
  228. data/lib/tasks/prepare_ci_env.rake +27 -0
  229. data/lib/tasks/rails_admin.rake +18 -0
  230. data/spec/ci.sh +2 -0
  231. data/spec/controllers/application_controller_spec.rb +30 -0
  232. data/spec/controllers/main_controller_spec.rb +179 -0
  233. data/spec/dummy_app/Gemfile +71 -0
  234. data/spec/dummy_app/Gemfile.lock +205 -0
  235. data/spec/dummy_app/Rakefile +7 -0
  236. data/spec/dummy_app/app/active_record/abstract.rb +5 -0
  237. data/spec/dummy_app/app/active_record/ball.rb +9 -0
  238. data/spec/dummy_app/app/active_record/carrierwave_uploader.rb +53 -0
  239. data/spec/dummy_app/app/active_record/category.rb +5 -0
  240. data/spec/dummy_app/app/active_record/cms.rb +5 -0
  241. data/spec/dummy_app/app/active_record/cms/basic_page.rb +9 -0
  242. data/spec/dummy_app/app/active_record/cms/unscoped_page.rb +3 -0
  243. data/spec/dummy_app/app/active_record/comment.rb +5 -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 +20 -0
  248. data/spec/dummy_app/app/active_record/hardball.rb +2 -0
  249. data/spec/dummy_app/app/active_record/league.rb +12 -0
  250. data/spec/dummy_app/app/active_record/nested_field_test.rb +7 -0
  251. data/spec/dummy_app/app/active_record/player.rb +23 -0
  252. data/spec/dummy_app/app/active_record/team.rb +27 -0
  253. data/spec/dummy_app/app/active_record/user.rb +21 -0
  254. data/spec/dummy_app/app/assets/images/rails.png +0 -0
  255. data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
  256. data/spec/dummy_app/app/assets/stylesheets/application.css +13 -0
  257. data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
  258. data/spec/dummy_app/app/controllers/players_controller.rb +5 -0
  259. data/spec/dummy_app/app/locales/models.en.yml +20 -0
  260. data/spec/dummy_app/app/mongoid/ball.rb +14 -0
  261. data/spec/dummy_app/app/mongoid/carrierwave_uploader.rb +53 -0
  262. data/spec/dummy_app/app/mongoid/category.rb +7 -0
  263. data/spec/dummy_app/app/mongoid/cms.rb +5 -0
  264. data/spec/dummy_app/app/mongoid/cms/basic_page.rb +12 -0
  265. data/spec/dummy_app/app/mongoid/cms/unscoped_page.rb +5 -0
  266. data/spec/dummy_app/app/mongoid/comment.rb +9 -0
  267. data/spec/dummy_app/app/mongoid/division.rb +14 -0
  268. data/spec/dummy_app/app/mongoid/draft.rb +22 -0
  269. data/spec/dummy_app/app/mongoid/embed.rb +6 -0
  270. data/spec/dummy_app/app/mongoid/fan.rb +12 -0
  271. data/spec/dummy_app/app/mongoid/field_test.rb +56 -0
  272. data/spec/dummy_app/app/mongoid/hardball.rb +2 -0
  273. data/spec/dummy_app/app/mongoid/league.rb +16 -0
  274. data/spec/dummy_app/app/mongoid/nested_field_test.rb +12 -0
  275. data/spec/dummy_app/app/mongoid/player.rb +37 -0
  276. data/spec/dummy_app/app/mongoid/team.rb +47 -0
  277. data/spec/dummy_app/app/mongoid/user.rb +61 -0
  278. data/spec/dummy_app/app/views/layouts/application.html.erb +14 -0
  279. data/spec/dummy_app/app/views/players/show.html.haml +1 -0
  280. data/spec/dummy_app/config.ru +4 -0
  281. data/spec/dummy_app/config/application.rb +69 -0
  282. data/spec/dummy_app/config/boot.rb +9 -0
  283. data/spec/dummy_app/config/database.yml +25 -0
  284. data/spec/dummy_app/config/environment.rb +5 -0
  285. data/spec/dummy_app/config/environments/development.rb +37 -0
  286. data/spec/dummy_app/config/environments/production.rb +67 -0
  287. data/spec/dummy_app/config/environments/test.rb +37 -0
  288. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
  289. data/spec/dummy_app/config/initializers/devise.rb +223 -0
  290. data/spec/dummy_app/config/initializers/dragonfly.rb +14 -0
  291. data/spec/dummy_app/config/initializers/inflections.rb +15 -0
  292. data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
  293. data/spec/dummy_app/config/initializers/rails_admin.rb +8 -0
  294. data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
  295. data/spec/dummy_app/config/initializers/session_patch.rb +16 -0
  296. data/spec/dummy_app/config/initializers/session_store.rb +8 -0
  297. data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
  298. data/spec/dummy_app/config/mongoid.yml +11 -0
  299. data/spec/dummy_app/config/routes.rb +10 -0
  300. data/spec/dummy_app/db/development.sqlite3 +0 -0
  301. data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
  302. data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
  303. data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
  304. data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
  305. data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
  306. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +49 -0
  307. data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
  308. data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
  309. data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
  310. data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
  311. data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
  312. data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
  313. data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
  314. data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
  315. data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
  316. data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
  317. data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
  318. data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
  319. data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
  320. data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
  321. data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
  322. data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
  323. data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
  324. data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
  325. data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
  326. data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
  327. data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
  328. data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
  329. data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
  330. data/spec/dummy_app/db/migrate/20111115041025_add_type_to_balls.rb +5 -0
  331. data/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +10 -0
  332. data/spec/dummy_app/db/migrate/20111130075338_add_dragonfly_asset_name_to_field_tests.rb +5 -0
  333. data/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +8 -0
  334. data/spec/dummy_app/db/migrate/20120117151733_add_custom_field_to_teams.rb +5 -0
  335. data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +7 -0
  336. data/spec/dummy_app/db/migrate/20120319041705_drop_rel_tests.rb +15 -0
  337. data/spec/dummy_app/db/schema.rb +188 -0
  338. data/spec/dummy_app/db/seeds.rb +29 -0
  339. data/spec/dummy_app/db/test.sqlite3 +0 -0
  340. data/spec/dummy_app/doc/README_FOR_APP +2 -0
  341. data/spec/dummy_app/log/development.log +865 -0
  342. data/spec/dummy_app/log/test.log +36651 -0
  343. data/spec/dummy_app/public/404.html +26 -0
  344. data/spec/dummy_app/public/422.html +26 -0
  345. data/spec/dummy_app/public/500.html +25 -0
  346. data/spec/dummy_app/public/favicon.ico +0 -0
  347. data/spec/dummy_app/public/robots.txt +5 -0
  348. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg +0 -0
  349. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg.meta +1 -0
  350. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg +0 -0
  351. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg.meta +1 -0
  352. data/spec/dummy_app/public/system/paperclip_assets/1/original/Boston City Flow.jpg +0 -0
  353. data/spec/dummy_app/public/system/paperclip_assets/1/thumb/Boston City Flow.jpg +0 -0
  354. data/spec/dummy_app/public/system/paperclip_assets/3/original/Costa Rican Frog.jpg +0 -0
  355. data/spec/dummy_app/public/system/paperclip_assets/3/thumb/Costa Rican Frog.jpg +0 -0
  356. data/spec/dummy_app/public/system/paperclip_assets/6/original/liste-electorale.pdf +0 -0
  357. data/spec/dummy_app/public/system/paperclip_assets/6/thumb/liste-electorale.pdf +148 -0
  358. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/Boston_City_Flow.jpg +0 -0
  359. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/thumb_Boston_City_Flow.jpg +0 -0
  360. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/Costa_Rican_Frog.jpg +0 -0
  361. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/thumb_Costa_Rican_Frog.jpg +0 -0
  362. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/Pensive_Parakeet.jpg +0 -0
  363. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/thumb_Pensive_Parakeet.jpg +0 -0
  364. data/spec/dummy_app/script/rails +6 -0
  365. data/spec/dummy_app/tmp/cache/assets/BE5/B00/sprockets%2F47892969925432da563a88e366309859 +1833 -0
  366. data/spec/dummy_app/tmp/cache/assets/C1C/C90/sprockets%2F4c1f0504074864b8b21792c77391e206 +0 -0
  367. data/spec/dummy_app/tmp/cache/assets/C29/F50/sprockets%2F6d087f33314fd5091b1270969287268b +0 -0
  368. data/spec/dummy_app/tmp/cache/assets/C2C/130/sprockets%2F2d09a75917207f5a55929639226b4b48 +26 -0
  369. data/spec/dummy_app/tmp/cache/assets/C49/FD0/sprockets%2F07901b5391110eea9648d5c25d481327 +0 -0
  370. data/spec/dummy_app/tmp/cache/assets/C63/BF0/sprockets%2F600472e1a4718315162a7cb0f285a02b +547 -0
  371. data/spec/dummy_app/tmp/cache/assets/C66/0B0/sprockets%2F2560ef2871b489690ff209e164d86665 +635 -0
  372. data/spec/dummy_app/tmp/cache/assets/C68/560/sprockets%2F5996692771c33962a9a2c72790ddd754 +0 -0
  373. data/spec/dummy_app/tmp/cache/assets/C83/F90/sprockets%2Fa580b424c36c26dd59f660078d541755 +0 -0
  374. data/spec/dummy_app/tmp/cache/assets/C86/C30/sprockets%2F23ca33803f8248991f3fa8d2104e9961 +0 -0
  375. data/spec/dummy_app/tmp/cache/assets/C88/790/sprockets%2F538d9562b05167d03d26b0e5e9f78830 +5 -0
  376. data/spec/dummy_app/tmp/cache/assets/C89/3B0/sprockets%2F503f729e1bc985e17b730122c7176f97 +0 -0
  377. data/spec/dummy_app/tmp/cache/assets/C95/A00/sprockets%2F458c72992a558902c05a9d6d99339af2 +4 -0
  378. data/spec/dummy_app/tmp/cache/assets/C97/4C0/sprockets%2F97a81a953151b41a100165fb83dfa023 +133 -0
  379. data/spec/dummy_app/tmp/cache/assets/C9A/C90/sprockets%2F400271d29a3bb9124a286ba761c3f254 +0 -0
  380. data/spec/dummy_app/tmp/cache/assets/C9D/BA0/sprockets%2F1bfd091b2034980851caa077c0892c40 +490 -0
  381. data/spec/dummy_app/tmp/cache/assets/CA2/FA0/sprockets%2F0c3f1c8708606aa0440c866138d1e9a2 +0 -0
  382. data/spec/dummy_app/tmp/cache/assets/CA7/480/sprockets%2F23a375f496616605e4144a21fb4dc83a +4 -0
  383. data/spec/dummy_app/tmp/cache/assets/CB1/8A0/sprockets%2F25c2eb1d72087ed5e863f217109b6069 +0 -0
  384. data/spec/dummy_app/tmp/cache/assets/CB3/B50/sprockets%2F03a7c1f7144eb79946ceb8e151772127 +0 -0
  385. data/spec/dummy_app/tmp/cache/assets/CC4/220/sprockets%2F8d947b008798f16134b7d576fa456ce4 +285 -0
  386. data/spec/dummy_app/tmp/cache/assets/CC7/F70/sprockets%2F1a1af5b2c6473f104b2f0b252a729338 +0 -0
  387. data/spec/dummy_app/tmp/cache/assets/CD1/C70/sprockets%2F75b65e7751a3f030d43c1cf6827cc100 +133 -0
  388. data/spec/dummy_app/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  389. data/spec/dummy_app/tmp/cache/assets/CD8/430/sprockets%2Fc89f860631079a34d3c0d662aac0d256 +635 -0
  390. data/spec/dummy_app/tmp/cache/assets/CD8/AF0/sprockets%2Ffa2b25b3f4c05f51086482175c970ca7 +0 -0
  391. data/spec/dummy_app/tmp/cache/assets/CD9/590/sprockets%2F6882cdc2e05726d5172e2b9b334ec007 +0 -0
  392. data/spec/dummy_app/tmp/cache/assets/CD9/E00/sprockets%2F233f366461a5722d7dfb7a0ecd064087 +0 -0
  393. data/spec/dummy_app/tmp/cache/assets/CDA/880/sprockets%2Fa1e3e4ae81b451c8b4b798061148a358 +275 -0
  394. data/spec/dummy_app/tmp/cache/assets/CE2/490/sprockets%2Fab26cd4524240da60a93659780f9ae78 +0 -0
  395. data/spec/dummy_app/tmp/cache/assets/CEC/270/sprockets%2Fb531a7fa499c7953ab753fa911a61799 +328 -0
  396. data/spec/dummy_app/tmp/cache/assets/CFD/D70/sprockets%2F79acf34495d5196bd47278685b4ee68b +237 -0
  397. data/spec/dummy_app/tmp/cache/assets/CFE/060/sprockets%2Fd97e1e070419bcfe35c7000d1a70427b +303 -0
  398. data/spec/dummy_app/tmp/cache/assets/D02/8B0/sprockets%2F0c493e35ea651c55155b2a383bf2d34d +0 -0
  399. data/spec/dummy_app/tmp/cache/assets/D04/A20/sprockets%2Fa264585296de2351212f1063ebcccd9b +1092 -0
  400. data/spec/dummy_app/tmp/cache/assets/D0F/EA0/sprockets%2F4a754f04f5d1c8995a01927bbd074fa4 +0 -0
  401. data/spec/dummy_app/tmp/cache/assets/D11/470/sprockets%2F67d64aa5490686515e07cdb8ae05b4c6 +9 -0
  402. data/spec/dummy_app/tmp/cache/assets/D12/F60/sprockets%2F6ac89a4a48bf0e3bb6364925661da565 +0 -0
  403. data/spec/dummy_app/tmp/cache/assets/D15/3D0/sprockets%2F7ef98ea43116410c4c50ffff444428c8 +1376 -0
  404. data/spec/dummy_app/tmp/cache/assets/D17/9B0/sprockets%2F3154059ed98209719dc1a7c493cb0fff +381 -0
  405. data/spec/dummy_app/tmp/cache/assets/D20/9E0/sprockets%2F9e5560466ce41eac747392c97eef4c51 +0 -0
  406. data/spec/dummy_app/tmp/cache/assets/D24/B30/sprockets%2F69d62273002dffc74f5368f55dfb97f3 +0 -0
  407. data/spec/dummy_app/tmp/cache/assets/D2D/840/sprockets%2F6f3b681ef8ba260acc705e3b262425a0 +0 -0
  408. data/spec/dummy_app/tmp/cache/assets/D2F/7C0/sprockets%2F99f6619fe89012fb9908a47ebb9b92a8 +7 -0
  409. data/spec/dummy_app/tmp/cache/assets/D2F/D60/sprockets%2Fa0cb0b3d7d775c4707c42a58fb0d2615 +9409 -0
  410. data/spec/dummy_app/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  411. data/spec/dummy_app/tmp/cache/assets/D3A/260/sprockets%2F35a5b51d1927651a39e3edca8c483dd1 +0 -0
  412. data/spec/dummy_app/tmp/cache/assets/D3B/F80/sprockets%2F304efb1d2d219915606f3fd96b3bf5c2 +9409 -0
  413. data/spec/dummy_app/tmp/cache/assets/D3C/7C0/sprockets%2F6a50cb4a5d265838f510fc8e6178bae1 +0 -0
  414. data/spec/dummy_app/tmp/cache/assets/D3D/0A0/sprockets%2Fa92066280edcd6b188dc38e35361dd3b +0 -0
  415. data/spec/dummy_app/tmp/cache/assets/D40/9B0/sprockets%2F704cfd791b468a6fba4fb820ec128941 +237 -0
  416. data/spec/dummy_app/tmp/cache/assets/D40/E10/sprockets%2F97d56619e64ca8c9c514a3aa2a4b339c +0 -0
  417. data/spec/dummy_app/tmp/cache/assets/D42/1F0/sprockets%2Fcaf59e1c6d22bae908a06e476b752791 +0 -0
  418. data/spec/dummy_app/tmp/cache/assets/D43/E30/sprockets%2Fece324b9d4dc935a92333fd0149bf773 +0 -0
  419. data/spec/dummy_app/tmp/cache/assets/D47/520/sprockets%2Ff142cf9478904f9e3ebb31ecc8c50913 +0 -0
  420. data/spec/dummy_app/tmp/cache/assets/D4B/390/sprockets%2Feb90dbdd2a6275f48086881f7b74ee32 +0 -0
  421. data/spec/dummy_app/tmp/cache/assets/D4B/6D0/sprockets%2F760ec9c344d334cfe919a55cf7f6a165 +0 -0
  422. data/spec/dummy_app/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  423. data/spec/dummy_app/tmp/cache/assets/D53/5C0/sprockets%2Fa93098db097c86d1e33dc86dece09991 +1092 -0
  424. data/spec/dummy_app/tmp/cache/assets/D56/F00/sprockets%2F48f6039e6745b557cbe83957abc8df2d +303 -0
  425. data/spec/dummy_app/tmp/cache/assets/D58/940/sprockets%2F0c3d05522ea3be49ba23372222fdcde7 +328 -0
  426. data/spec/dummy_app/tmp/cache/assets/D58/950/sprockets%2F6ade11e1b9d3ac4736b05aaf039c0804 +0 -0
  427. data/spec/dummy_app/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  428. data/spec/dummy_app/tmp/cache/assets/D5C/D10/sprockets%2F3fddf4c16115fad562082a5d4f1bd520 +0 -0
  429. data/spec/dummy_app/tmp/cache/assets/D5D/950/sprockets%2F9ed4c3b788618998fefb569a0a58da80 +0 -0
  430. data/spec/dummy_app/tmp/cache/assets/D5F/F30/sprockets%2Fc93672decbf5fb650336d1a67001fba0 +547 -0
  431. data/spec/dummy_app/tmp/cache/assets/D62/4A0/sprockets%2F47b7cb361e1f2e2ce081ea52fe32f640 +0 -0
  432. data/spec/dummy_app/tmp/cache/assets/D65/140/sprockets%2F5cc4a9317d68e31bb0c5b8d3f517a0e4 +0 -0
  433. data/spec/dummy_app/tmp/cache/assets/D6C/170/sprockets%2Fdc1a668e0c34eb1206fc67cf526249cf +0 -0
  434. data/spec/dummy_app/tmp/cache/assets/D71/9B0/sprockets%2Fc98bb1ca9b745d615b0f2f0d963c44d8 +5 -0
  435. data/spec/dummy_app/tmp/cache/assets/D74/020/sprockets%2Fd99999af4693dfa5998fdaf5b68276e6 +0 -0
  436. data/spec/dummy_app/tmp/cache/assets/D74/050/sprockets%2Fab9217b6ce5c3c8969791adc819b2a2b +0 -0
  437. data/spec/dummy_app/tmp/cache/assets/D7A/410/sprockets%2Fd1decdae4824f395df114687f262e78a +381 -0
  438. data/spec/dummy_app/tmp/cache/assets/D7C/630/sprockets%2Fff49f6b45a167453dabfa743e588dd16 +0 -0
  439. data/spec/dummy_app/tmp/cache/assets/D85/CC0/sprockets%2F09f7b34bbc050700a3bcbf6c6c5c1b45 +0 -0
  440. data/spec/dummy_app/tmp/cache/assets/D8F/DD0/sprockets%2F7bd51d74d575ec0bfad624acc81a6040 +0 -0
  441. data/spec/dummy_app/tmp/cache/assets/D93/C20/sprockets%2F2f48ab1ea8216fd918beb173c2a4f04d +0 -0
  442. data/spec/dummy_app/tmp/cache/assets/D9B/920/sprockets%2F4a02c68d7d2e9a072b8cdd5f715ab7c4 +26 -0
  443. data/spec/dummy_app/tmp/cache/assets/D9D/720/sprockets%2Fc7c311fcebe12a3cf86631a4a47f849f +490 -0
  444. data/spec/dummy_app/tmp/cache/assets/D9F/F20/sprockets%2F32f6c0bcea62f9ab09385db3217ee7e8 +0 -0
  445. data/spec/dummy_app/tmp/cache/assets/DA0/8A0/sprockets%2F9aff0ec8777da07337a51280eacd3f4e +768 -0
  446. data/spec/dummy_app/tmp/cache/assets/DA2/DB0/sprockets%2Fa6cfbef08a491ac3397e006bed885b38 +275 -0
  447. data/spec/dummy_app/tmp/cache/assets/DA4/010/sprockets%2F9663c5eebc07fdb49dd221cf84804c6b +0 -0
  448. data/spec/dummy_app/tmp/cache/assets/DA5/FE0/sprockets%2Fc5d487522471a6ab39cac1bf8e7e9b9b +0 -0
  449. data/spec/dummy_app/tmp/cache/assets/DA6/0A0/sprockets%2Fae11a6ff426fe2d094a5cde67159f94d +0 -0
  450. data/spec/dummy_app/tmp/cache/assets/DA9/170/sprockets%2F88a844719bb0fc081d9cfafc0e76ca96 +0 -0
  451. data/spec/dummy_app/tmp/cache/assets/DC2/720/sprockets%2F6a32e6f352ddd183d19dcac10cfc456b +0 -0
  452. data/spec/dummy_app/tmp/cache/assets/DCA/070/sprockets%2F8ec1ae13cf7ba342507cbb8f877a6dd1 +768 -0
  453. data/spec/dummy_app/tmp/cache/assets/DCB/120/sprockets%2Fc29be206ce74d90a4ad1f9a3d9d20f7d +0 -0
  454. data/spec/dummy_app/tmp/cache/assets/DD6/9B0/sprockets%2Fb92fb5cec0493bfdbe8248cd5673f71b +0 -0
  455. data/spec/dummy_app/tmp/cache/assets/DD7/5C0/sprockets%2Fe0912ed75a6ed23afdf293deed66871c +1376 -0
  456. data/spec/dummy_app/tmp/cache/assets/DD8/110/sprockets%2F8dfc7ac2667a017ee469f4cd443cfa8c +0 -0
  457. data/spec/dummy_app/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +21 -0
  458. data/spec/dummy_app/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +21 -0
  459. data/spec/dummy_app/tmp/cache/assets/E05/140/sprockets%2F41bf6f07f45b76cd2eef60ed2ffbb908 +0 -0
  460. data/spec/dummy_app/tmp/cache/assets/E09/FE0/sprockets%2Fc5df928b0e066c9e19ee3f2be8f6dbd0 +0 -0
  461. data/spec/dummy_app/tmp/cache/assets/E30/BF0/sprockets%2Fd35aca629e1763dd5a9deeb6caa78b6c +285 -0
  462. data/spec/dummy_app/tmp/cache/assets/E42/8C0/sprockets%2Faff1c93e2a43b887cbdebf8f9df9087b +0 -0
  463. data/spec/dummy_app/tmp/cache/assets/E61/F10/sprockets%2Fe616dbbacda8602fc9c589aefaf4c34f +1833 -0
  464. data/spec/dummy_app/tmp/cache/assets/E87/8F0/sprockets%2Ff90a7f08fcd06d0faf133fed3edbfa6a +0 -0
  465. data/spec/dummy_app/tmp/cache/sass/0591c977016a0bb372763f6f1cfb8002d44de3b2/mixins.css.scssc +0 -0
  466. data/spec/dummy_app/tmp/cache/sass/0591c977016a0bb372763f6f1cfb8002d44de3b2/theming.css.scssc +0 -0
  467. data/spec/dummy_app/tmp/cache/sass/0591c977016a0bb372763f6f1cfb8002d44de3b2/variables.css.scssc +0 -0
  468. data/spec/dummy_app/tmp/cache/sass/10238403c134661921596d094764445b02e815fe/mixins.css.scssc +0 -0
  469. data/spec/dummy_app/tmp/cache/sass/10238403c134661921596d094764445b02e815fe/theming.css.scssc +0 -0
  470. data/spec/dummy_app/tmp/cache/sass/10238403c134661921596d094764445b02e815fe/variables.css.scssc +0 -0
  471. data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/imports.css.scss.erbc +0 -0
  472. data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/jquery.colorpicker.css.scssc +0 -0
  473. data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/jquery.ui.timepicker.css.scssc +0 -0
  474. data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/ra.calendar-additions.css.scssc +0 -0
  475. data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/ra.filtering-multiselect.css.scssc +0 -0
  476. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_accordion.scssc +0 -0
  477. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_alerts.scssc +0 -0
  478. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_breadcrumbs.scssc +0 -0
  479. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_button-groups.scssc +0 -0
  480. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_buttons.scssc +0 -0
  481. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_carousel.scssc +0 -0
  482. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_close.scssc +0 -0
  483. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_code.scssc +0 -0
  484. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_component-animations.scssc +0 -0
  485. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_dropdowns.scssc +0 -0
  486. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_forms.scssc +0 -0
  487. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_grid.scssc +0 -0
  488. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_hero-unit.scssc +0 -0
  489. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_labels.scssc +0 -0
  490. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_layouts.scssc +0 -0
  491. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_mixins.scssc +0 -0
  492. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_modals.scssc +0 -0
  493. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_navbar.scssc +0 -0
  494. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_navs.scssc +0 -0
  495. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_pager.scssc +0 -0
  496. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_pagination.scssc +0 -0
  497. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_popovers.scssc +0 -0
  498. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_progress-bars.scssc +0 -0
  499. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_reset.scssc +0 -0
  500. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_scaffolding.scssc +0 -0
  501. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_sprites.scssc +0 -0
  502. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_tables.scssc +0 -0
  503. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_thumbnails.scssc +0 -0
  504. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_tooltip.scssc +0 -0
  505. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_type.scssc +0 -0
  506. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_utilities.scssc +0 -0
  507. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_variables.scssc +0 -0
  508. data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_wells.scssc +0 -0
  509. data/spec/dummy_app/tmp/cache/sass/ea17b334a44bfc0f3681b2e3e4202c941da9ee82/jquery-ui-1.8.7.custom.css.scssc +0 -0
  510. data/spec/dummy_app/tmp/cache/sass/fb68f840f6ad0344d3dcaecafd4b6ac4e35ca8fe/mixins.css.scssc +0 -0
  511. data/spec/dummy_app/tmp/cache/sass/fb68f840f6ad0344d3dcaecafd4b6ac4e35ca8fe/theming.css.scssc +0 -0
  512. data/spec/dummy_app/tmp/cache/sass/fb68f840f6ad0344d3dcaecafd4b6ac4e35ca8fe/variables.css.scssc +0 -0
  513. data/spec/dummy_app/tmp/dragonfly/cache/body/67/c49ea211b51fee9c0ccde26af73f27446aa071 +1 -0
  514. data/spec/dummy_app/tmp/dragonfly/cache/body/da/39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
  515. data/spec/dummy_app/tmp/dragonfly/cache/body/e7/536a0250f5395f318c24bee30dbbb0a2a28714 +24 -0
  516. data/spec/dummy_app/tmp/dragonfly/cache/body/f0/76846cb5891d588ad63ea7f6451e26b4f48c3d +19 -0
  517. data/spec/dummy_app/tmp/dragonfly/cache/meta/26/1464d915347774c08b1ddf6d305783e3acfadb +0 -0
  518. data/spec/dummy_app/tmp/dragonfly/cache/meta/7f/29e62b90d2b255e74d7e1a8ee8ed509c3f0406 +0 -0
  519. data/spec/dummy_app/tmp/dragonfly/cache/meta/c1/0f5c4fe64b3d3cffe2793ad7a8e51aeb4f3eec +0 -0
  520. data/spec/dummy_app/tmp/dragonfly/cache/meta/fe/97fd48b64023fee9cc7d8a12f0f1e9097058da +0 -0
  521. data/spec/factories.rb +71 -0
  522. data/spec/helpers/application_helper_spec.rb +277 -0
  523. data/spec/integration/authorization/cancan_spec.rb +358 -0
  524. data/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
  525. data/spec/integration/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +42 -0
  526. data/spec/integration/basic/create/rails_admin_basic_create_spec.rb +141 -0
  527. data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +23 -0
  528. data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +27 -0
  529. data/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +56 -0
  530. data/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +109 -0
  531. data/spec/integration/basic/export/rails_admin_basic_export_spec.rb +106 -0
  532. data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +400 -0
  533. data/spec/integration/basic/new/rails_admin_basic_new_spec.rb +74 -0
  534. data/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
  535. data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +91 -0
  536. data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +223 -0
  537. data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +1043 -0
  538. data/spec/integration/config/list/rails_admin_config_list_spec.rb +521 -0
  539. data/spec/integration/config/show/rails_admin_config_show_spec.rb +312 -0
  540. data/spec/integration/history/rails_admin_history_spec.rb +65 -0
  541. data/spec/integration/rails_admin_spec.rb +113 -0
  542. data/spec/integration/relation_spec.rb +35 -0
  543. data/spec/orm/active_record.rb +42 -0
  544. data/spec/orm/mongoid.rb +19 -0
  545. data/spec/spec_helper.rb +79 -0
  546. data/spec/unit/abstract_model_spec.rb +45 -0
  547. data/spec/unit/adapters/active_record/abstract_object_spec.rb +132 -0
  548. data/spec/unit/adapters/active_record_spec.rb +373 -0
  549. data/spec/unit/adapters/mongoid/abstract_object_spec.rb +31 -0
  550. data/spec/unit/adapters/mongoid_spec.rb +686 -0
  551. data/spec/unit/config/actions_spec.rb +181 -0
  552. data/spec/unit/config/fields/base_spec.rb +339 -0
  553. data/spec/unit/config/model_spec.rb +75 -0
  554. data/spec/unit/config/sections_spec.rb +123 -0
  555. data/spec/unit/config_spec.rb +278 -0
  556. metadata +1317 -0
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic New" do
4
+
5
+ subject { page }
6
+
7
+ describe "GET /admin/player/new" do
8
+ before(:each) do
9
+ visit new_path(:model_name => "player")
10
+ end
11
+
12
+ it "should show \"New Model\"" do
13
+ should have_content("New Player")
14
+ end
15
+
16
+ it "should show required fields as \"Required\"" do
17
+ should have_selector("div", :text => /Name\s*Required/)
18
+ should have_selector("div", :text => /Number\s*Required/)
19
+ end
20
+
21
+ it "should show non-required fields as \"Optional\"" do
22
+ should have_selector("#player_position_field .help-block", :text => "Optional")
23
+ should have_selector("#player_born_on_field .help-block", :text => "Optional")
24
+ should have_selector("#player_notes_field .help-block", :text => "Optional")
25
+ end
26
+
27
+ # https://github.com/sferik/rails_admin/issues/362
28
+ # test that no link uses the "wildcard route" with the main
29
+ # controller and new method
30
+ it "should not use the 'wildcard route'" do
31
+ should have_no_selector("a[href^='/rails_admin/main/new']")
32
+ end
33
+ end
34
+
35
+ describe "GET /admin/player/new with has-one/belongs_to/has_many association" do
36
+ before(:each) do
37
+ FactoryGirl.create :draft
38
+ visit new_path(:model_name => "player")
39
+ end
40
+
41
+ it "should show selects" do
42
+ should have_selector("select#player_draft_id")
43
+ should have_selector("select#player_team_id")
44
+ should have_selector("select#player_comment_ids")
45
+ end
46
+ end
47
+
48
+ describe "GET /admin/player/new with missing label" do
49
+ before(:each) do
50
+ FactoryGirl.create :team, :name => ""
51
+ visit new_path(:model_name => "player")
52
+ end
53
+ end
54
+
55
+ describe "GET /admin/player/new with parameters for pre-population" do
56
+ it "should populate form field when corresponding parameters are passed in" do
57
+ visit new_path(:model_name => 'player', :player => {:name => 'Sam'})
58
+ page.should have_css('input[value=Sam]')
59
+ end
60
+
61
+ it "should prepropulate belongs to relationships" do
62
+ @team = FactoryGirl.create :team, :name => "belongs_to association prepopulated"
63
+ visit new_path(:model_name => 'player', :associations => { :team => @team.id } )
64
+ page.should have_css("select#player_team_id option[selected='selected'][value='#{@team.id}']")
65
+ end
66
+
67
+ it "should prepropulate has_many relationships" do
68
+ @player = FactoryGirl.create :player, :name => "has_many association prepopulated"
69
+ visit new_path(:model_name => 'team', :associations => { :players => @player.id } )
70
+ page.should have_css("select#team_player_ids option[selected='selected'][value='#{@player.id}']")
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Namespaced Model New" do
4
+
5
+ subject { page }
6
+
7
+ describe "AbstractModel#to_param" do
8
+ it 'turns namespaces into prefixes with ~' do
9
+ RailsAdmin::AbstractModel.new("Cms::BasicPage").to_param.should == 'cms~basic_page'
10
+ end
11
+ end
12
+
13
+ describe "ApplicationController#to_model_name" do
14
+ it 'turns cms~basic_page into Cms::BasicPage' do
15
+ RailsAdmin::ApplicationController.new.to_model_name('cms~basic_page').should == 'Cms::BasicPage'
16
+ end
17
+ end
18
+
19
+ describe "GET /admin/cms_basic_page/new" do
20
+ before(:each) do
21
+ visit new_path(:model_name => "cms~basic_page")
22
+ end
23
+
24
+ it 'should have correct input field names' do
25
+ should have_selector("label[for=cms_basic_page_title]")
26
+ should have_selector("input#cms_basic_page_title[name='cms_basic_page[title]']")
27
+ should have_selector("label[for=cms_basic_page_content]")
28
+ should have_selector("textarea#cms_basic_page_content[name='cms_basic_page[content]']")
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Show" do
4
+ subject { page }
5
+
6
+ describe "show" do
7
+ before(:each) do
8
+ @player = FactoryGirl.create :player
9
+ visit show_path(:model_name => "player", :id => @player.id)
10
+ end
11
+
12
+ it "should have History, Edit, Delete" do
13
+ should have_selector("a", :text => "History")
14
+ should have_selector("a", :text => "Edit")
15
+ should have_selector("a", :text => "Delete")
16
+ end
17
+
18
+ it "should show 'Details'" do
19
+ should have_content("Details")
20
+ end
21
+
22
+ it "should show attributes" do
23
+ should have_content("Name")
24
+ should have_content(@player.name)
25
+ should have_content("Number")
26
+ should have_content(@player.number)
27
+ end
28
+ end
29
+
30
+ describe "GET /admin/players/123this-id-doesnt-exist" do
31
+ it "should raise NotFound" do
32
+ visit '/admin/players/123this-id-doesnt-exist'
33
+ page.driver.status_code.should eql(404)
34
+ end
35
+ end
36
+
37
+
38
+ describe "show with belongs_to association" do
39
+ before(:each) do
40
+ @player = FactoryGirl.create :player
41
+ @team = FactoryGirl.create :team
42
+ @player.update_attribute(:team_id, @team.id)
43
+ visit show_path(:model_name => "player", :id => @player.id)
44
+ end
45
+
46
+ it "should show associated objects" do
47
+ should have_css("a[href='/admin/team/#{@team.id}']")
48
+ end
49
+ end
50
+
51
+ describe "show with has-one association" do
52
+ before(:each) do
53
+ @player = FactoryGirl.create :player
54
+ @draft = FactoryGirl.create :draft, :player => @player
55
+ visit show_path(:model_name => "player", :id => @player.id)
56
+ end
57
+
58
+ it "should show associated objects" do
59
+ should have_css("a[href='/admin/draft/#{@draft.id}']")
60
+ end
61
+ end
62
+
63
+ describe "show with has-and-belongs-to-many association" do
64
+ before(:each) do
65
+ @player = FactoryGirl.create :player
66
+ @comment1 = FactoryGirl.create :comment, :commentable => @player
67
+ @comment2 = FactoryGirl.create :comment, :commentable => @player
68
+ @comment3 = FactoryGirl.create :comment, :commentable => FactoryGirl.create(:player)
69
+
70
+ visit show_path(:model_name => "player", :id => @player.id)
71
+ end
72
+
73
+ it "should show associated objects" do
74
+ should have_css("a[href='/admin/comment/#{@comment1.id}']")
75
+ should have_css("a[href='/admin/comment/#{@comment2.id}']")
76
+ should_not have_css("a[href='/admin/comment/#{@comment3.id}']")
77
+ end
78
+ end
79
+
80
+ describe "show for polymorphic objects" do
81
+ before(:each) do
82
+ @player = FactoryGirl.create :player
83
+ @comment = FactoryGirl.create :comment, :commentable => @player
84
+ visit show_path(:model_name => "comment", :id => @comment.id)
85
+ end
86
+
87
+ it "should show associated object" do
88
+ should have_css("a[href='/admin/player/#{@player.id}']")
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,223 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Update" do
4
+
5
+ subject { page }
6
+
7
+ describe "update with errors" do
8
+ before(:each) do
9
+ @player = FactoryGirl.create :player
10
+ visit edit_path(:model_name => "player", :id => @player.id)
11
+ end
12
+
13
+ it "should return to edit page" do
14
+ fill_in "player[name]", :with => ""
15
+ click_button "Save"
16
+ page.driver.status_code.should eql(406)
17
+ should have_selector "form", :action => "/admin/players/#{@player.id}"
18
+ end
19
+ end
20
+
21
+ describe "update and add another" do
22
+ before(:each) do
23
+ @player = FactoryGirl.create :player
24
+
25
+ visit edit_path(:model_name => "player", :id => @player.id)
26
+
27
+ fill_in "player[name]", :with => "Jackie Robinson"
28
+ fill_in "player[number]", :with => "42"
29
+ fill_in "player[position]", :with => "Second baseman"
30
+ click_button "Save"
31
+
32
+ @player = RailsAdmin::AbstractModel.new("Player").first
33
+ end
34
+
35
+ it "should update an object with correct attributes" do
36
+ @player.name.should eql("Jackie Robinson")
37
+ @player.number.should eql(42)
38
+ @player.position.should eql("Second baseman")
39
+ end
40
+ end
41
+
42
+ describe "update and edit" do
43
+ before(:each) do
44
+ @player = FactoryGirl.create :player
45
+
46
+ visit edit_path(:model_name => "player", :id => @player.id)
47
+
48
+ fill_in "player[name]", :with => "Jackie Robinson"
49
+ fill_in "player[number]", :with => "42"
50
+ fill_in "player[position]", :with => "Second baseman"
51
+ click_button "Save and edit"
52
+
53
+ @player.reload
54
+ end
55
+
56
+ it "should update an object with correct attributes" do
57
+ @player.name.should eql("Jackie Robinson")
58
+ @player.number.should eql(42)
59
+ @player.position.should eql("Second baseman")
60
+ end
61
+ end
62
+
63
+ describe "update with has-one association" do
64
+ before(:each) do
65
+ @player = FactoryGirl.create :player
66
+ @draft = FactoryGirl.create :draft
67
+ @number = @draft.player.number + 1 # to avoid collision
68
+ page.driver.put edit_path(:model_name => "player", :id => @player.id, :player => {:name => "Jackie Robinson", :draft_id => @draft.id, :number => @number, :position => "Second baseman"})
69
+ @player.reload
70
+ end
71
+
72
+ it "should update an object with correct attributes" do
73
+ @player.name.should eql("Jackie Robinson")
74
+ @player.number.should eql(@number)
75
+ @player.position.should eql("Second baseman")
76
+ end
77
+
78
+ it "should update an object with correct associations" do
79
+ @draft.reload
80
+ @player.draft.should eql(@draft)
81
+ end
82
+ end
83
+
84
+ describe "update with has-many association" do
85
+ it "should be fillable and emptyable", :active_record => true do
86
+ RailsAdmin.config do |c|
87
+ c.audit_with :history
88
+ end
89
+
90
+ @league = FactoryGirl.create :league
91
+ @divisions = 3.times.map { Division.create!(:name => "div #{Time.now.to_f}", :league => League.create!(:name => "league #{Time.now.to_f}")) }
92
+
93
+ page.driver.put edit_path(:model_name => "league", :id => @league.id, :league => {:name => "National League", :division_ids => [@divisions[0].id] })
94
+
95
+ @league.reload
96
+ @league.name.should eql("National League")
97
+ @divisions[0].reload
98
+ @league.divisions.should include(@divisions[0])
99
+ @league.divisions.should_not include(@divisions[1])
100
+ @league.divisions.should_not include(@divisions[2])
101
+
102
+ RailsAdmin::History.where(:item => @league.id).collect(&:message).should include("Added Divisions ##{@divisions[0].id} associations, Changed name")
103
+
104
+ page.driver.put edit_path(:model_name => "league", :id => @league.id, :league => {:division_ids => [""]})
105
+
106
+ @league.reload
107
+ @league.divisions.should be_empty
108
+ RailsAdmin::History.where(:item => @league.id).collect(&:message).should include("Removed Divisions ##{@divisions[0].id} associations")
109
+ end
110
+ end
111
+
112
+ describe "update with missing object" do
113
+ before(:each) do
114
+ page.driver.put(edit_path(:model_name => "player", :id => 1), :params => {:player => {:name => "Jackie Robinson", :number => 42, :position => "Second baseman"}})
115
+ end
116
+
117
+ it "should raise NotFound" do
118
+ page.driver.status_code.should eql(404)
119
+ end
120
+ end
121
+
122
+ describe "update with invalid object" do
123
+ before(:each) do
124
+ @player = FactoryGirl.create :player
125
+
126
+ visit edit_path(:model_name => "player", :id => @player.id)
127
+
128
+ fill_in "player[name]", :with => "Jackie Robinson"
129
+ fill_in "player[number]", :with => "a"
130
+ fill_in "player[position]", :with => "Second baseman"
131
+ click_button "Save"
132
+
133
+ @player.reload
134
+ end
135
+
136
+ it "should show an error message" do
137
+ # TODO: Mongoid 3.0.0 lacks ability of numericality validation on Integer field.
138
+ # This is caused by change in https://github.com/mongoid/mongoid/pull/1698
139
+ # I believe this should be a bug in Mongoid.
140
+ body.should have_content("Player failed to be updated") unless CI_ORM == :mongoid && Mongoid::VERSION >= '3.0.0'
141
+ end
142
+ end
143
+
144
+ describe "update with serialized objects" do
145
+ before(:each) do
146
+ @user = FactoryGirl.create :user
147
+
148
+ visit edit_path(:model_name => "user", :id => @user.id)
149
+
150
+ fill_in "user[roles]", :with => %{['admin', 'user']}
151
+ click_button "Save"
152
+
153
+ @user.reload
154
+ end
155
+
156
+ it "should save the serialized data" do
157
+ @user.roles.should eql(['admin','user'])
158
+ end
159
+ end
160
+
161
+ describe "update with serialized objects of Mongoid", :mongoid => true do
162
+ before(:each) do
163
+ @field_test = FactoryGirl.create :field_test
164
+
165
+ visit edit_path(:model_name => "field_test", :id => @field_test.id)
166
+ end
167
+
168
+ it "should save the serialized data" do
169
+ fill_in "field_test[array_field]", :with => "[4, 2]"
170
+ fill_in "field_test[hash_field]", :with => "{ a: 6, b: 2 }"
171
+ click_button "Save"
172
+
173
+ @field_test.reload
174
+ @field_test.array_field.should eql([4, 2])
175
+ @field_test.hash_field.should eql({ "a" => 6, "b" => 2 })
176
+ end
177
+
178
+ it "should clear data when empty string is passed" do
179
+ fill_in "field_test[array_field]", :with => ""
180
+ fill_in "field_test[hash_field]", :with => ""
181
+ click_button "Save"
182
+
183
+ @field_test.reload
184
+ @field_test.array_field.should eql(nil)
185
+ @field_test.hash_field.should eql(nil)
186
+ end
187
+ end
188
+
189
+ describe "update with overridden to_param" do
190
+ before(:each) do
191
+ @ball = FactoryGirl.create :ball
192
+
193
+ visit edit_path(:model_name => "ball", :id => @ball.id)
194
+
195
+ fill_in "ball[color]", :with => "gray"
196
+ click_button "Save and edit"
197
+
198
+ @ball.reload
199
+ end
200
+
201
+ it "should update an object with correct attributes" do
202
+ @ball.color.should eql("gray")
203
+ end
204
+ end
205
+
206
+ describe "update of STI subclass on superclass view" do
207
+ before(:each) do
208
+ @hardball = FactoryGirl.create :hardball
209
+
210
+ visit edit_path(:model_name => "ball", :id => @hardball.id)
211
+
212
+ fill_in "ball[color]", :with => "cyan"
213
+ click_button "Save and edit"
214
+
215
+ @hardball.reload
216
+ end
217
+
218
+ it "should update an object with correct attributes" do
219
+ @hardball.color.should eql("cyan")
220
+ end
221
+ end
222
+
223
+ end
@@ -0,0 +1,1043 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "RailsAdmin Config DSL Edit Section" do
6
+
7
+ subject { page }
8
+
9
+ describe "default_value" do
10
+
11
+ it "should be set for all types of input fields" do
12
+ RailsAdmin.config do |config|
13
+ config.excluded_models = []
14
+ config.model(FieldTest) do
15
+
16
+ field :string_field do
17
+ default_value 'string_field default_value'
18
+ end
19
+ field :text_field do
20
+ default_value 'string_field text_field'
21
+ end
22
+ field :boolean_field do
23
+ default_value true
24
+ end
25
+ field :date_field do
26
+ default_value Date.today.to_s
27
+ end
28
+ end
29
+ end
30
+
31
+ visit new_path(:model_name => "field_test")
32
+ # In Rails 3.2.3 behavior of textarea has changed to insert newline after the opening tag,
33
+ # but Capybara's RackTest driver is not up to this behavior change.
34
+ # (https://github.com/jnicklas/capybara/issues/677)
35
+ # So we manually cut off first newline character as a workaround here.
36
+ find_field('field_test[string_field]').value.gsub(/^\n/, '').should == 'string_field default_value'
37
+ find_field('field_test[text_field]').value.gsub(/^\n/, '').should == 'string_field text_field'
38
+ find_field('field_test[date_field]').value.should == Date.today.to_s
39
+ has_checked_field?('field_test[boolean_field]').should be_true
40
+ end
41
+
42
+ it "should set default value for selects" do
43
+ RailsAdmin.config(Team) do
44
+ field :color, :enum do
45
+ default_value 'black'
46
+ enum do
47
+ ['black', 'white']
48
+ end
49
+ end
50
+ end
51
+ visit new_path(:model_name => "team")
52
+ find_field('team[color]').value.should == 'black'
53
+ end
54
+ end
55
+
56
+ describe "attr_accessible" do
57
+
58
+
59
+ it "should be configurable in the controller scope" do
60
+
61
+ RailsAdmin.config do |config|
62
+ config.excluded_models = []
63
+ config.attr_accessible_role do
64
+ _current_user.attr_accessible_role # sould be :custom_role
65
+ end
66
+
67
+ config.model FieldTest do
68
+ edit do
69
+ field :string_field
70
+ field :restricted_field
71
+ field :protected_field
72
+ end
73
+ end
74
+ end
75
+
76
+ visit new_path(:model_name => "field_test")
77
+ fill_in "field_test[string_field]", :with => "No problem here"
78
+ fill_in "field_test[restricted_field]", :with => "I'm allowed to do that as :custom_role only"
79
+ should have_no_selector "field_test[protected_field]"
80
+ click_button "Save"
81
+ @field_test = FieldTest.first
82
+ @field_test.string_field.should == "No problem here"
83
+ @field_test.restricted_field.should == "I'm allowed to do that as :custom_role only"
84
+ end
85
+ end
86
+
87
+ describe "css hooks" do
88
+ it "should be present" do
89
+ visit new_path(:model_name => "team")
90
+ should have_selector("#team_division_id_field.belongs_to_association_type.division_field")
91
+ end
92
+ end
93
+
94
+ describe "field groupings" do
95
+
96
+ it "should be hideable" do
97
+ RailsAdmin.config Team do
98
+ edit do
99
+ group :default do
100
+ label "Hidden group"
101
+ hide
102
+ end
103
+ end
104
+ end
105
+ visit new_path(:model_name => "team")
106
+ # Should not have the group header
107
+ should have_no_selector("legend", :text => "Hidden Group")
108
+ # Should not have any of the group's fields either
109
+ should have_no_selector("select#team_division")
110
+ should have_no_selector("input#team_name")
111
+ should have_no_selector("input#team_logo_url")
112
+ should have_no_selector("input#team_manager")
113
+ should have_no_selector("input#team_ballpark")
114
+ should have_no_selector("input#team_mascot")
115
+ should have_no_selector("input#team_founded")
116
+ should have_no_selector("input#team_wins")
117
+ should have_no_selector("input#team_losses")
118
+ should have_no_selector("input#team_win_percentage")
119
+ should have_no_selector("input#team_revenue")
120
+ end
121
+
122
+ it "should hide association groupings" do
123
+ RailsAdmin.config Team do
124
+ edit do
125
+ group :players do
126
+ label "Players"
127
+ field :players
128
+ hide
129
+ end
130
+ end
131
+ end
132
+ visit new_path(:model_name => "team")
133
+ # Should not have the group header
134
+ should have_no_selector("legend", :text => "Players")
135
+ # Should not have any of the group's fields either
136
+ should have_no_selector("select#team_player_ids")
137
+ end
138
+
139
+ it "should be renameable" do
140
+ RailsAdmin.config Team do
141
+ edit do
142
+ group :default do
143
+ label "Renamed group"
144
+ end
145
+ end
146
+ end
147
+ visit new_path(:model_name => "team")
148
+ should have_selector("legend", :text => "Renamed group")
149
+ end
150
+
151
+ describe "help" do
152
+ before(:each) do
153
+ class HelpTest < Tableless
154
+ column :name, 'string(50)'
155
+ column :division, :string
156
+ end
157
+ RailsAdmin.config.included_models = [HelpTest]
158
+ end
159
+
160
+ after(:each) do
161
+ # restore validation setting
162
+ HelpTest._validators[:name] = []
163
+ HelpTest.reset_callbacks(:validate)
164
+ end
165
+
166
+ it "should show help section if present" do
167
+ RailsAdmin.config HelpTest do
168
+ edit do
169
+ group :default do
170
+ help "help paragraph to display"
171
+ end
172
+ end
173
+ end
174
+ visit new_path(:model_name => "help_test")
175
+ should have_selector('fieldset>p', :text => "help paragraph to display")
176
+ end
177
+
178
+ it "should not show help if not present" do
179
+ RailsAdmin.config HelpTest do
180
+ edit do
181
+ group :default do
182
+ label 'no help'
183
+ end
184
+ end
185
+ end
186
+ visit new_path(:model_name => "help_test")
187
+ should_not have_selector('fieldset>p')
188
+ end
189
+
190
+ it "should be able to display multiple help if there are multiple sections" do
191
+ RailsAdmin.config HelpTest do
192
+ edit do
193
+ group :default do
194
+ field :name
195
+ help 'help for default'
196
+ end
197
+ group :other_section do
198
+ label "Other Section"
199
+ field :division
200
+ help 'help for other section'
201
+ end
202
+ end
203
+ end
204
+ visit new_path(:model_name => "help_test")
205
+ should have_selector("fieldset>p", :text => 'help for default')
206
+ should have_selector("fieldset>p", :text => 'help for other section')
207
+ should have_selector("fieldset>p", :count => 2)
208
+ end
209
+
210
+ it "should use the :is setting from the validation" do
211
+ HelpTest.class_eval do
212
+ validates_length_of :name, :is => 3
213
+ end
214
+ visit new_path(:model_name => "help_test")
215
+ find("#help_test_name_field .help-block").should have_content("Length of 3.")
216
+ end
217
+
218
+ describe "using ORM column size", :skip_mongoid => true do
219
+ it "should use the db column size for the maximum length" do
220
+ visit new_path(:model_name => "help_test")
221
+ find("#help_test_name_field .help-block").should have_content("Length up to 50.")
222
+ end
223
+
224
+ it "should use the :minimum setting from the validation" do
225
+ HelpTest.class_eval do
226
+ validates_length_of :name, :minimum => 1
227
+ end
228
+ visit new_path(:model_name => "help_test")
229
+ find("#help_test_name_field .help-block").should have_content("Length of 1-50.")
230
+ end
231
+
232
+ it "should use the :maximum setting from the validation" do
233
+ HelpTest.class_eval do
234
+ validates_length_of :name, :maximum => 49
235
+ end
236
+ visit new_path(:model_name => "help_test")
237
+ find("#help_test_name_field .help-block").should have_content("Length up to 49.")
238
+ end
239
+
240
+ it "should use the minimum of db column size or :maximum setting from the validation" do
241
+ HelpTest.class_eval do
242
+ validates_length_of :name, :maximum => 51
243
+ end
244
+ visit new_path(:model_name => "help_test")
245
+ find("#help_test_name_field .help-block").should have_content("Length up to 50.")
246
+ end
247
+ end
248
+
249
+ it "should use the :minimum and :maximum from the validation" do
250
+ HelpTest.class_eval do
251
+ validates_length_of :name, :minimum => 1, :maximum => 49
252
+ end
253
+ visit new_path(:model_name => "help_test")
254
+ find("#help_test_name_field .help-block").should have_content("Length of 1-49.")
255
+ end
256
+
257
+ it "should use the range from the validation" do
258
+ HelpTest.class_eval do
259
+ validates_length_of :name, :in => 1..49
260
+ end
261
+ visit new_path(:model_name => "help_test")
262
+ find("#help_test_name_field .help-block").should have_content("Length of 1-49.")
263
+ end
264
+
265
+ end
266
+
267
+ it "should have accessor for its fields" do
268
+ RailsAdmin.config Team do
269
+ edit do
270
+ group :default do
271
+ field :name
272
+ field :logo_url
273
+ end
274
+ group :belongs_to_associations do
275
+ label "Belong's to associations"
276
+ field :division
277
+ end
278
+ group :basic_info do
279
+ field :manager
280
+ end
281
+ end
282
+ end
283
+ visit new_path(:model_name => "team")
284
+ should have_selector("legend", :text => "Basic info")
285
+ all("legend", :text => "Basic info").tap do |nodes|
286
+ nodes.count.should == 2
287
+ nodes.first.visible?.should be_false
288
+ nodes.last.visible?.should be_true
289
+ end
290
+ should have_selector("legend", :text => "Belong's to associations")
291
+ should have_selector("label", :text => "Name")
292
+ should have_selector("label", :text => "Logo url")
293
+ should have_selector("label", :text => "Division")
294
+ should have_selector(".control-group", :count => 4)
295
+ end
296
+
297
+ it "should have accessor for its fields by type" do
298
+ RailsAdmin.config Team do
299
+ edit do
300
+ group :default do
301
+ field :name
302
+ field :logo_url
303
+ end
304
+ group :other do
305
+ field :division_id
306
+ field :manager
307
+ field :ballpark
308
+ fields_of_type :string do
309
+ label { "#{label} (STRING)" }
310
+ end
311
+ end
312
+ end
313
+ end
314
+ visit new_path(:model_name => "team")
315
+ should have_selector("label", :text => "Name")
316
+ should have_selector("label", :text => "Logo url")
317
+ should have_selector("label", :text => "Division")
318
+ should have_selector("label", :text => "Manager (STRING)")
319
+ should have_selector("label", :text => "Ballpark (STRING)")
320
+ end
321
+ end
322
+
323
+ describe "items' fields" do
324
+
325
+ it "should show all by default" do
326
+ visit new_path(:model_name => "team")
327
+ should have_selector("select#team_division_id")
328
+ should have_selector("input#team_name")
329
+ should have_selector("input#team_logo_url")
330
+ should have_selector("input#team_manager")
331
+ should have_selector("input#team_ballpark")
332
+ should have_selector("input#team_mascot")
333
+ should have_selector("input#team_founded")
334
+ should have_selector("input#team_wins")
335
+ should have_selector("input#team_losses")
336
+ should have_selector("input#team_win_percentage")
337
+ should have_selector("input#team_revenue")
338
+ should have_selector("select#team_player_ids")
339
+ should have_selector("select#team_fan_ids")
340
+ end
341
+
342
+ it "should appear in order defined" do
343
+ RailsAdmin.config Team do
344
+ edit do
345
+ field :manager
346
+ field :division
347
+ field :name
348
+ end
349
+ end
350
+ visit new_path(:model_name => "team")
351
+ should have_selector(:xpath, "//*[contains(@class, 'field')][1]//*[@id='team_manager']")
352
+ should have_selector(:xpath, "//*[contains(@class, 'field')][2]//*[@id='team_division_id']")
353
+ should have_selector(:xpath, "//*[contains(@class, 'field')][3]//*[@id='team_name']")
354
+ end
355
+
356
+ it "should only show the defined fields if some fields are defined" do
357
+ RailsAdmin.config Team do
358
+ edit do
359
+ field :division
360
+ field :name
361
+ end
362
+ end
363
+ visit new_path(:model_name => "team")
364
+ should have_selector("label", :text => "Division")
365
+ should have_selector("label", :text => "Name")
366
+ should have_selector(".control-group", :count => 2)
367
+ end
368
+
369
+ it "should delegates the label option to the ActiveModel API and memoize I18n awarly" do
370
+ RailsAdmin.config Team do
371
+ edit do
372
+ field :manager
373
+ field :fans
374
+ end
375
+ end
376
+ visit new_path(:model_name => "team")
377
+ should have_selector("label", :text => "Team Manager")
378
+ should have_selector("label", :text => "Some Fans")
379
+ I18n.locale = :fr
380
+ visit new_path(:model_name => "team")
381
+ should have_selector("label", :text => "Manager de l'équipe")
382
+ should have_selector("label", :text => "Quelques fans")
383
+ I18n.locale = :en
384
+ end
385
+
386
+ it "should be renameable" do
387
+ RailsAdmin.config Team do
388
+ edit do
389
+ field :manager do
390
+ label "Renamed field"
391
+ end
392
+ field :division
393
+ field :name
394
+ end
395
+ end
396
+ visit new_path(:model_name => "team")
397
+ should have_selector("label", :text => "Renamed field")
398
+ should have_selector("label", :text => "Division")
399
+ should have_selector("label", :text => "Name")
400
+ end
401
+
402
+ it "should be renameable by type" do
403
+ RailsAdmin.config Team do
404
+ edit do
405
+ fields_of_type :string do
406
+ label { "#{label} (STRING)" }
407
+ end
408
+ end
409
+ end
410
+ visit new_path(:model_name => "team")
411
+ should have_selector("label", :text => "Division")
412
+ should have_selector("label", :text => "Name (STRING)")
413
+ should have_selector("label", :text => "Logo url (STRING)")
414
+ should have_selector("label", :text => "Manager (STRING)")
415
+ should have_selector("label", :text => "Ballpark (STRING)")
416
+ should have_selector("label", :text => "Mascot (STRING)")
417
+ should have_selector("label", :text => "Founded")
418
+ should have_selector("label", :text => "Wins")
419
+ should have_selector("label", :text => "Losses")
420
+ should have_selector("label", :text => "Win percentage")
421
+ should have_selector("label", :text => "Revenue")
422
+ should have_selector("label", :text => "Players")
423
+ should have_selector("label", :text => "Fans")
424
+ end
425
+
426
+ it "should be globally renameable by type" do
427
+ RailsAdmin::Config.models do
428
+ edit do
429
+ fields_of_type :string do
430
+ label { "#{label} (STRING)" }
431
+ end
432
+ end
433
+ end
434
+ visit new_path(:model_name => "team")
435
+ should have_selector("label", :text => "Division")
436
+ should have_selector("label", :text => "Name (STRING)")
437
+ should have_selector("label", :text => "Logo url (STRING)")
438
+ should have_selector("label", :text => "Manager (STRING)")
439
+ should have_selector("label", :text => "Ballpark (STRING)")
440
+ should have_selector("label", :text => "Mascot (STRING)")
441
+ should have_selector("label", :text => "Founded")
442
+ should have_selector("label", :text => "Wins")
443
+ should have_selector("label", :text => "Losses")
444
+ should have_selector("label", :text => "Win percentage")
445
+ should have_selector("label", :text => "Revenue")
446
+ should have_selector("label", :text => "Players")
447
+ should have_selector("label", :text => "Fans")
448
+ end
449
+
450
+ it "should be flaggable as read only and be configurable with formatted_value" do
451
+ RailsAdmin.config Team do
452
+ edit do
453
+ field :name do
454
+ read_only true
455
+ formatted_value do
456
+ "I'm outputed in the form"
457
+ end
458
+ end
459
+ end
460
+ end
461
+ visit new_path(:model_name => "team")
462
+ should have_content("I'm outputed in the form")
463
+ end
464
+
465
+ it "should be hideable" do
466
+ RailsAdmin.config Team do
467
+ edit do
468
+ field :manager do
469
+ hide
470
+ end
471
+ field :division
472
+ field :name
473
+ end
474
+ end
475
+ visit new_path(:model_name => "team")
476
+ should have_no_selector("#team_manager")
477
+ should have_selector("#team_division_id")
478
+ should have_selector("#team_name")
479
+ end
480
+
481
+ it "should be hideable by type" do
482
+ RailsAdmin.config Team do
483
+ edit do
484
+ fields_of_type :string do
485
+ hide
486
+ end
487
+ end
488
+ end
489
+ visit new_path(:model_name => "team")
490
+ should have_selector("label", :text => "Division")
491
+ should have_no_selector("label", :text => "Name")
492
+ should have_no_selector("label", :text => "Logo url")
493
+ should have_no_selector("label", :text => "Manager")
494
+ should have_no_selector("label", :text => "Ballpark")
495
+ should have_no_selector("label", :text => "Mascot")
496
+ should have_selector("label", :text => "Founded")
497
+ should have_selector("label", :text => "Wins")
498
+ should have_selector("label", :text => "Losses")
499
+ should have_selector("label", :text => "Win percentage")
500
+ should have_selector("label", :text => "Revenue")
501
+ should have_selector("label", :text => "Players")
502
+ should have_selector("label", :text => "Fans")
503
+ end
504
+
505
+ it "should be globally hideable by type" do
506
+ RailsAdmin::Config.models do
507
+ edit do
508
+ fields_of_type :string do
509
+ hide
510
+ end
511
+ end
512
+ end
513
+ visit new_path(:model_name => "team")
514
+ should have_selector("label", :text => "Division")
515
+ should have_no_selector("label", :text => "Name")
516
+ should have_no_selector("label", :text => "Logo url")
517
+ should have_no_selector("label", :text => "Manager")
518
+ should have_no_selector("label", :text => "Ballpark")
519
+ should have_no_selector("label", :text => "Mascot")
520
+ should have_selector("label", :text => "Founded")
521
+ should have_selector("label", :text => "Wins")
522
+ should have_selector("label", :text => "Losses")
523
+ should have_selector("label", :text => "Win percentage")
524
+ should have_selector("label", :text => "Revenue")
525
+ should have_selector("label", :text => "Players")
526
+ should have_selector("label", :text => "Fans")
527
+ end
528
+
529
+ it "should have option to customize the help text" do
530
+ RailsAdmin.config Team do
531
+ edit do
532
+ field :manager do
533
+ help "#{help} Additional help text for manager field."
534
+ end
535
+ field :division
536
+ field :name
537
+ end
538
+ end
539
+ visit new_path(:model_name => "team")
540
+ find("#team_manager_field .help-block").should have_content("Required. Length up to 100. Additional help text for manager field.")
541
+ find("#team_division_id_field .help-block").should have_content("Required")
542
+ find("#team_name_field .help-block").should_not have_content("Additional help text")
543
+ end
544
+
545
+ it "should have option to override required status" do
546
+ RailsAdmin.config Team do
547
+ edit do
548
+ field :manager do
549
+ optional true
550
+ end
551
+ field :division do
552
+ optional true
553
+ end
554
+ field :name do
555
+ required true
556
+ end
557
+ end
558
+ end
559
+ visit new_path(:model_name => "team")
560
+ find("#team_manager_field .help-block").should have_content("Optional")
561
+ find("#team_division_id_field .help-block").should have_content("Optional")
562
+ find("#team_name_field .help-block").should have_content("Required")
563
+ end
564
+ end
565
+
566
+ describe "input format of" do
567
+
568
+ before(:each) do
569
+ @time = ::Time.now.getutc
570
+ end
571
+
572
+ after(:each) do
573
+ Time.zone = 'UTC'
574
+ end
575
+
576
+ describe "a datetime field" do
577
+
578
+ it "should default to %B %d, %Y %H:%M" do
579
+ visit new_path(:model_name => "field_test")
580
+ fill_in "field_test[datetime_field]", :with => @time.strftime("%B %d, %Y %H:%M")
581
+ click_button "Save"
582
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
583
+ @record.datetime_field.strftime("%Y-%m-%d %H:%M").should eql(@time.strftime("%Y-%m-%d %H:%M"))
584
+ end
585
+
586
+ it "should have a simple customization option" do
587
+ RailsAdmin.config FieldTest do
588
+ edit do
589
+ field :datetime_field do
590
+ date_format :default
591
+ end
592
+ end
593
+ end
594
+ visit new_path(:model_name => "field_test")
595
+ fill_in "field_test[datetime_field]", :with => @time.strftime("%a, %d %b %Y %H:%M:%S")
596
+ click_button "Save"
597
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
598
+ @record.datetime_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
599
+ end
600
+
601
+ it "should have a customization option" do
602
+ RailsAdmin.config FieldTest do
603
+ list do
604
+ field :datetime_field do
605
+ strftime_format "%Y-%m-%d %H:%M:%S"
606
+ end
607
+ end
608
+ end
609
+ visit new_path(:model_name => "field_test")
610
+ fill_in "field_test[datetime_field]", :with => @time.strftime("%Y-%m-%d %H:%M:%S")
611
+ click_button "Save"
612
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
613
+ @record.datetime_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
614
+ end
615
+ end
616
+
617
+ describe "a timestamp field", :active_record => true do
618
+
619
+ it "should default to %B %d, %Y %H:%M" do
620
+ visit new_path(:model_name => "field_test")
621
+ fill_in "field_test[timestamp_field]", :with => @time.strftime("%B %d, %Y %H:%M")
622
+ click_button "Save"
623
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
624
+ @record.timestamp_field.strftime("%Y-%m-%d %H:%M").should eql(@time.strftime("%Y-%m-%d %H:%M"))
625
+ end
626
+
627
+ it "should have a simple customization option" do
628
+ RailsAdmin.config FieldTest do
629
+ edit do
630
+ field :timestamp_field do
631
+ date_format :default
632
+ end
633
+ end
634
+ end
635
+ visit new_path(:model_name => "field_test")
636
+ fill_in "field_test[timestamp_field]", :with => @time.strftime("%a, %d %b %Y %H:%M:%S")
637
+ click_button "Save"
638
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
639
+ @record.timestamp_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
640
+ end
641
+
642
+ it "should have a customization option" do
643
+ RailsAdmin.config FieldTest do
644
+ edit do
645
+ field :timestamp_field do
646
+ strftime_format "%Y-%m-%d %H:%M:%S"
647
+ end
648
+ end
649
+ end
650
+ visit new_path(:model_name => "field_test")
651
+ fill_in "field_test[timestamp_field]", :with => @time.strftime("%Y-%m-%d %H:%M:%S")
652
+ click_button "Save"
653
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
654
+ @record.timestamp_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
655
+ end
656
+ end
657
+
658
+ describe " a field with 'format' as a name (Kernel function)" do
659
+
660
+ it "should be updatable without any error" do
661
+ RailsAdmin.config FieldTest do
662
+ edit do
663
+ field :format
664
+ end
665
+ end
666
+ visit new_path(:model_name => "field_test")
667
+ fill_in "field_test[format]", :with => "test for format"
668
+ click_button "Save"
669
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
670
+ @record.format.should eql("test for format")
671
+ end
672
+ end
673
+
674
+
675
+ describe "a time field" do
676
+
677
+ it "should default to %H:%M" do
678
+ visit new_path(:model_name => "field_test")
679
+ fill_in "field_test[time_field]", :with => @time.strftime("%H:%M")
680
+ click_button "Save"
681
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
682
+ @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
683
+ end
684
+
685
+ it "should interpret time value as UTC when timezone is specified" do
686
+ Time.zone = 'Eastern Time (US & Canada)' # -05:00
687
+
688
+ visit new_path(:model_name => "field_test")
689
+ fill_in "field_test[time_field]", :with => @time.strftime("%H:%M")
690
+ click_button "Save"
691
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
692
+ @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
693
+ end
694
+
695
+ it "should have a customization option" do
696
+ RailsAdmin.config FieldTest do
697
+ edit do
698
+ field :time_field do
699
+ strftime_format "%I:%M %p"
700
+ end
701
+ end
702
+ end
703
+ visit new_path(:model_name => "field_test")
704
+ fill_in "field_test[time_field]", :with => @time.strftime("%I:%M %p")
705
+ click_button "Save"
706
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
707
+ @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
708
+ end
709
+ end
710
+
711
+ describe "a date field" do
712
+
713
+ it "should default to %B %d, %Y" do
714
+ visit new_path(:model_name => "field_test")
715
+ fill_in "field_test[date_field]", :with => @time.strftime("%B %d, %Y")
716
+ click_button "Save"
717
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
718
+ @record.date_field.should eql(::Date.parse(@time.to_s))
719
+ end
720
+
721
+ it "should cover a timezone lag even if in UTC+n:00 timezone." do
722
+ Time.zone = 'Tokyo' # +09:00
723
+
724
+ visit new_path(:model_name => "field_test")
725
+ fill_in "field_test[date_field]", :with => @time.strftime("%B %d, %Y")
726
+ click_button "Save"
727
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
728
+ @record.date_field.should eql(::Date.parse(@time.to_s))
729
+ end
730
+
731
+ it "should have a simple customization option" do
732
+ RailsAdmin.config FieldTest do
733
+ edit do
734
+ field :date_field do
735
+ date_format :default
736
+ end
737
+ end
738
+ end
739
+ visit new_path(:model_name => "field_test")
740
+ fill_in "field_test[date_field]", :with => @time.strftime("%Y-%m-%d")
741
+ click_button "Save"
742
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
743
+ @record.date_field.should eql(::Date.parse(@time.to_s))
744
+ end
745
+
746
+ it "should have a customization option" do
747
+ RailsAdmin.config FieldTest do
748
+ edit do
749
+ field :date_field do
750
+ strftime_format "%Y-%m-%d"
751
+ end
752
+ end
753
+ end
754
+ visit new_path(:model_name => "field_test")
755
+ fill_in "field_test[date_field]", :with => @time.strftime("%Y-%m-%d")
756
+ click_button "Save"
757
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
758
+ @record.date_field.should eql(::Date.parse(@time.to_s))
759
+ end
760
+ end
761
+ end
762
+
763
+ describe 'bindings' do
764
+ it 'should be present at creation time' do
765
+ RailsAdmin.config do |config|
766
+ config.excluded_models = []
767
+ end
768
+ RailsAdmin.config Category do
769
+ field :parent_category do
770
+ visible do
771
+ !bindings[:object].new_record?
772
+ end
773
+ end
774
+ end
775
+
776
+ visit new_path(:model_name => 'category')
777
+ should have_no_css('#category_parent_category_id')
778
+ click_button 'Save'
779
+ visit edit_path(:model_name => 'category', :id => Category.first)
780
+ should have_css('#category_parent_category_id')
781
+ click_button 'Save'
782
+ should have_content('Category successfully updated')
783
+ end
784
+ end
785
+
786
+ describe 'nested form' do
787
+ it 'should work' do
788
+ visit new_path(:model_name => "field_test")
789
+ fill_in "field_test_comment_attributes_content", :with => 'nested comment content'
790
+ click_button "Save"
791
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
792
+ @record.comment.content.should == 'nested comment content'
793
+ @record.nested_field_tests = [NestedFieldTest.create!(:title => 'title 1'), NestedFieldTest.create!(:title => 'title 2')]
794
+ visit edit_path(:model_name => "field_test", :id => @record.id)
795
+ fill_in "field_test_nested_field_tests_attributes_0_title", :with => 'nested field test title 1 edited'
796
+ page.find('#field_test_nested_field_tests_attributes_1__destroy').set('true')
797
+ click_button "Save"
798
+ @record.reload
799
+ @record.nested_field_tests.length.should == 1
800
+ @record.nested_field_tests[0].title.should == 'nested field test title 1 edited'
801
+ end
802
+
803
+ it 'should set bindings[:object] to nested object' do
804
+ RailsAdmin.config(NestedFieldTest) do
805
+ nested do
806
+ field :title do
807
+ label do
808
+ bindings[:object].class.name
809
+ end
810
+ end
811
+ end
812
+ end
813
+ @record = FieldTest.create
814
+ @record.nested_field_tests << NestedFieldTest.create!(:title => 'title 1')
815
+ visit edit_path(:model_name => "field_test", :id => @record.id)
816
+ find('#field_test_nested_field_tests_attributes_0_title_field').should have_content('NestedFieldTest')
817
+ end
818
+
819
+ it 'should be desactivable' do
820
+ visit new_path(:model_name => "field_test")
821
+ should have_selector('#field_test_nested_field_tests_attributes_field .add_nested_fields')
822
+ RailsAdmin.config(FieldTest) do
823
+ configure :nested_field_tests do
824
+ nested_form false
825
+ end
826
+ end
827
+ visit new_path(:model_name => "field_test")
828
+ should have_no_selector('#field_test_nested_field_tests_attributes_field .add_nested_fields')
829
+ end
830
+
831
+ describe "with nested_attributes_options given" do
832
+ before do
833
+ FieldTest.nested_attributes_options.stub(:[]).with(any_args()).
834
+ and_return({:allow_destroy=>true, :update_only=>false})
835
+ end
836
+
837
+ it 'should not show add button when :update_only is true' do
838
+ FieldTest.nested_attributes_options.stub(:[]).with(:nested_field_tests).
839
+ and_return({:allow_destroy=>true, :update_only=>true})
840
+ visit new_path(:model_name => "field_test")
841
+ should have_selector('.toggler')
842
+ should_not have_selector('#field_test_nested_field_tests_attributes_field .add_nested_fields')
843
+ end
844
+
845
+ it 'should not show destroy button except for newly created when :allow_destroy is false' do
846
+ @record = FieldTest.create
847
+ @record.nested_field_tests << NestedFieldTest.create!(:title => 'nested title 1')
848
+ FieldTest.nested_attributes_options.stub(:[]).with(:nested_field_tests).
849
+ and_return({:allow_destroy=>false, :update_only=>false})
850
+ visit edit_path(:model_name => "field_test", :id => @record.id)
851
+ find('#field_test_nested_field_tests_attributes_0_title').value.should == 'nested title 1'
852
+ should_not have_selector('form .remove_nested_fields')
853
+ should have_selector('.fields_blueprint .remove_nested_fields')
854
+ end
855
+ end
856
+ end
857
+
858
+ describe 'embedded model', :mongoid => true do
859
+ it 'should work' do
860
+ @record = FactoryGirl.create :field_test
861
+ 2.times.each{|i| @record.embeds.create :name => "embed #{i}"}
862
+ visit edit_path(:model_name => "field_test", :id => @record.id)
863
+ fill_in "field_test_embeds_attributes_0_name", :with => 'embed 1 edited'
864
+ page.find('#field_test_embeds_attributes_1__destroy').set('true')
865
+ click_button "Save"
866
+ @record.reload
867
+ @record.embeds.length.should == 1
868
+ @record.embeds[0].name.should == 'embed 1 edited'
869
+ end
870
+ end
871
+
872
+
873
+ describe "fields which are nullable and have AR validations", :active_record => true do
874
+
875
+ it "should be required" do
876
+ # draft.notes is nullable and has no validation
877
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :notes}
878
+ field.properties[:nullable?].should be true
879
+ field.required?.should be false
880
+
881
+ # draft.date is nullable in the schema but has an AR
882
+ # validates_presence_of validation that makes it required
883
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :date}
884
+ field.properties[:nullable?].should be true
885
+ field.required?.should be true
886
+
887
+ # draft.round is nullable in the schema but has an AR
888
+ # validates_numericality_of validation that makes it required
889
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :round}
890
+ field.properties[:nullable?].should be true
891
+ field.required?.should be true
892
+
893
+ # team.revenue is nullable in the schema but has an AR
894
+ # validates_numericality_of validation that allows nil
895
+ field = RailsAdmin::config("Team").edit.fields.find{|f| f.name == :revenue}
896
+ field.properties[:nullable?].should be true
897
+ field.required?.should be false
898
+ end
899
+ end
900
+
901
+ describe "CKEditor Support" do
902
+
903
+ it "should start with CKEditor disabled" do
904
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :notes}
905
+ field.ckeditor.should be false
906
+ end
907
+
908
+ it "should add Javascript to enable CKEditor" do
909
+ RailsAdmin.config Draft do
910
+ edit do
911
+ field :notes do
912
+ ckeditor true
913
+ end
914
+ end
915
+ end
916
+ visit new_path(:model_name => "draft")
917
+ should have_selector('textarea#draft_notes[data-richtext="ckeditor"]')
918
+ end
919
+ end
920
+
921
+ describe "Paperclip Support" do
922
+
923
+ it "should show a file upload field" do
924
+ RailsAdmin.config User do
925
+ edit do
926
+ field :avatar
927
+ end
928
+ end
929
+ visit new_path(:model_name => "user")
930
+ should have_selector("input#user_avatar")
931
+ end
932
+ end
933
+
934
+ describe "Enum field support" do
935
+ it "should auto-detect enumeration when object responds to '\#{method}_enum'" do
936
+ Team.class_eval do
937
+ def color_enum
938
+ ["blue", "green", "red"]
939
+ end
940
+ end
941
+ RailsAdmin.config Team do
942
+ edit do
943
+ field :color
944
+ end
945
+ end
946
+ visit new_path(:model_name => "team")
947
+ should have_selector(".enum_type select")
948
+ should have_content("green")
949
+ Team.send(:remove_method, :color_enum) # Reset
950
+ end
951
+
952
+ it "should auto-detect enumeration when class responds to '::{method}_enum'" do
953
+ Team.instance_eval do
954
+ def color_enum
955
+ ["blue", "green", "red"]
956
+ end
957
+ end
958
+ RailsAdmin.config Team do
959
+ edit do
960
+ field :color
961
+ end
962
+ end
963
+ visit new_path(:model_name => "team")
964
+ should have_selector(".enum_type select")
965
+ should have_content("green")
966
+ Team.instance_eval { undef :color_enum } # Reset
967
+ end
968
+
969
+ it "should allow configuration of the enum method" do
970
+ Team.class_eval do
971
+ def color_list
972
+ ["blue", "green", "red"]
973
+ end
974
+ end
975
+ RailsAdmin.config Team do
976
+ edit do
977
+ field :color, :enum do
978
+ enum_method :color_list
979
+ end
980
+ end
981
+ end
982
+ visit new_path(:model_name => "team")
983
+ should have_selector(".enum_type select")
984
+ should have_content("green")
985
+ Team.send(:remove_method, :color_list) # Reset
986
+ end
987
+
988
+ it "should allow configuration of the enum class method" do
989
+ Team.instance_eval do
990
+ def color_list
991
+ ["blue", "green", "red"]
992
+ end
993
+ end
994
+ RailsAdmin.config Team do
995
+ edit do
996
+ field :color, :enum do
997
+ enum_method :color_list
998
+ end
999
+ end
1000
+ end
1001
+ visit new_path(:model_name => "team")
1002
+ should have_selector(".enum_type select")
1003
+ should have_content("green")
1004
+ Team.instance_eval { undef :color_list } # Reset
1005
+ end
1006
+
1007
+ it "should allow direct listing of enumeration options and override enum method" do
1008
+ Team.class_eval do
1009
+ def color_list
1010
+ ["blue", "green", "red"]
1011
+ end
1012
+ end
1013
+ RailsAdmin.config Team do
1014
+ edit do
1015
+ field :color, :enum do
1016
+ enum_method :color_list
1017
+ enum do
1018
+ ["yellow", "black"]
1019
+ end
1020
+ end
1021
+ end
1022
+ end
1023
+ visit new_path(:model_name => "team")
1024
+ should have_selector(".enum_type select")
1025
+ should have_no_content("green")
1026
+ should have_content("yellow")
1027
+ Team.send(:remove_method, :color_list) # Reset
1028
+ end
1029
+
1030
+ end
1031
+
1032
+ describe "ColorPicker Support" do
1033
+ it "should show input with class color" do
1034
+ RailsAdmin.config Team do
1035
+ edit do
1036
+ field :color, :color
1037
+ end
1038
+ end
1039
+ visit new_path(:model_name => "team")
1040
+ should have_selector(".color_type input")
1041
+ end
1042
+ end
1043
+ end