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.
- data/Gemfile +74 -0
- data/LICENSE.md +20 -0
- data/README.md +162 -0
- data/Rakefile +19 -0
- data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/icon_sprite.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/progress_bar.gif +0 -0
- data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/rails_admin/bullet_black.png +0 -0
- data/app/assets/images/rails_admin/bullet_white.png +0 -0
- data/app/assets/images/rails_admin/calendar.png +0 -0
- data/app/assets/images/rails_admin/clock.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/select2.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
- data/app/assets/images/rails_admin/logo.png +0 -0
- data/app/assets/images/rails_admin/magnifier.png +0 -0
- data/app/assets/images/rails_admin/multiselect/icon_sprite.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-light.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
- data/app/assets/javascripts/rails_admin/custom/ui.js +12 -0
- data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +484 -0
- data/app/assets/javascripts/rails_admin/jquery.pjax.js +543 -0
- data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1371 -0
- data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +67 -0
- data/app/assets/javascripts/rails_admin/ra.filter-box.js +129 -0
- data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +280 -0
- data/app/assets/javascripts/rails_admin/ra.filtering-select.js +181 -0
- data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +41 -0
- data/app/assets/javascripts/rails_admin/ra.remote-form.js +152 -0
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee +135 -0
- data/app/assets/javascripts/rails_admin/rails_admin.js.erb +27 -0
- data/app/assets/javascripts/rails_admin/themes/cerulean/ui.js +0 -0
- data/app/assets/javascripts/rails_admin/themes/default/ui.js +12 -0
- data/app/assets/javascripts/rails_admin/ui.js.coffee +65 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +733 -0
- data/app/assets/stylesheets/rails_admin/base/README +2 -0
- data/app/assets/stylesheets/rails_admin/base/mixins.css.scss +1 -0
- data/app/assets/stylesheets/rails_admin/base/theming.css.scss +270 -0
- data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
- data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +12 -0
- data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
- data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +15 -0
- data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +78 -0
- data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +180 -0
- data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +69 -0
- data/app/assets/stylesheets/rails_admin/ra.calendar-additions.css.scss +25 -0
- data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +85 -0
- data/app/assets/stylesheets/rails_admin/rails_admin.css +4 -0
- data/app/assets/stylesheets/rails_admin/themes/cerulean/mixins.css.scss +0 -0
- data/app/assets/stylesheets/rails_admin/themes/cerulean/theming.css.scss +97 -0
- data/app/assets/stylesheets/rails_admin/themes/cerulean/variables.css.scss +168 -0
- data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +8 -0
- data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +11 -0
- data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +12 -0
- data/app/controllers/rails_admin/application_controller.rb +82 -0
- data/app/controllers/rails_admin/main_controller.rb +155 -0
- data/app/helpers/rails_admin/application_helper.rb +125 -0
- data/app/helpers/rails_admin/form_builder.rb +113 -0
- data/app/helpers/rails_admin/main_helper.rb +36 -0
- data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
- data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
- data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
- data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
- data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +12 -0
- data/app/views/layouts/rails_admin/application.html.haml +26 -0
- data/app/views/layouts/rails_admin/pjax.html.haml +20 -0
- data/app/views/rails_admin/main/_dashboard_history.html.haml +10 -0
- data/app/views/rails_admin/main/_delete_notice.html.haml +18 -0
- data/app/views/rails_admin/main/_form_colorpicker.html.haml +1 -0
- data/app/views/rails_admin/main/_form_datetime.html.haml +1 -0
- data/app/views/rails_admin/main/_form_enumeration.html.haml +1 -0
- data/app/views/rails_admin/main/_form_field.html.haml +1 -0
- data/app/views/rails_admin/main/_form_file_upload.html.haml +13 -0
- data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +47 -0
- data/app/views/rails_admin/main/_form_filtering_select.html.haml +37 -0
- data/app/views/rails_admin/main/_form_nested_many.html.haml +14 -0
- data/app/views/rails_admin/main/_form_nested_one.html.haml +10 -0
- data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +10 -0
- data/app/views/rails_admin/main/_form_text.html.haml +15 -0
- data/app/views/rails_admin/main/_submit_buttons.html.haml +15 -0
- data/app/views/rails_admin/main/bulk_delete.html.haml +11 -0
- data/app/views/rails_admin/main/dashboard.html.haml +31 -0
- data/app/views/rails_admin/main/delete.html.haml +18 -0
- data/app/views/rails_admin/main/edit.html.haml +2 -0
- data/app/views/rails_admin/main/export.html.haml +75 -0
- data/app/views/rails_admin/main/history.html.haml +42 -0
- data/app/views/rails_admin/main/index.html.haml +140 -0
- data/app/views/rails_admin/main/new.html.haml +2 -0
- data/app/views/rails_admin/main/show.html.haml +14 -0
- data/config/initializers/active_record_extensions.rb +19 -0
- data/config/initializers/devise_patch.rb +9 -0
- data/config/initializers/haml.rb +2 -0
- data/config/initializers/mongoid_extensions.rb +5 -0
- data/config/locales/fr.yml +24 -0
- data/config/locales/rails_admin.en.yml +130 -0
- data/config/routes.rb +12 -0
- data/lib/generators/rails_admin/install_generator.rb +84 -0
- data/lib/generators/rails_admin/templates/drop.rb +18 -0
- data/lib/generators/rails_admin/templates/initializer.erb +101 -0
- data/lib/generators/rails_admin/templates/migration.rb +18 -0
- data/lib/generators/rails_admin/uninstall_generator.rb +22 -0
- data/lib/generators/rails_admin/utils.rb +30 -0
- data/lib/rails_admin.rb +34 -0
- data/lib/rails_admin/abstract_model.rb +108 -0
- data/lib/rails_admin/adapters/active_record.rb +255 -0
- data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
- data/lib/rails_admin/adapters/mongoid.rb +390 -0
- data/lib/rails_admin/adapters/mongoid/abstract_object.rb +48 -0
- data/lib/rails_admin/adapters/mongoid/extension.rb +48 -0
- data/lib/rails_admin/config.rb +323 -0
- data/lib/rails_admin/config/actions.rb +121 -0
- data/lib/rails_admin/config/actions/base.rb +117 -0
- data/lib/rails_admin/config/actions/bulk_delete.rb +55 -0
- data/lib/rails_admin/config/actions/dashboard.rb +46 -0
- data/lib/rails_admin/config/actions/delete.rb +53 -0
- data/lib/rails_admin/config/actions/edit.rb +60 -0
- data/lib/rails_admin/config/actions/export.rb +40 -0
- data/lib/rails_admin/config/actions/history_index.rb +38 -0
- data/lib/rails_admin/config/actions/history_show.rb +38 -0
- data/lib/rails_admin/config/actions/index.rb +85 -0
- data/lib/rails_admin/config/actions/new.rb +64 -0
- data/lib/rails_admin/config/actions/show.rb +32 -0
- data/lib/rails_admin/config/actions/show_in_app.rb +28 -0
- data/lib/rails_admin/config/configurable.rb +92 -0
- data/lib/rails_admin/config/fields.rb +88 -0
- data/lib/rails_admin/config/fields/association.rb +108 -0
- data/lib/rails_admin/config/fields/base.rb +298 -0
- data/lib/rails_admin/config/fields/factories/association.rb +32 -0
- data/lib/rails_admin/config/fields/factories/carrierwave.rb +31 -0
- data/lib/rails_admin/config/fields/factories/devise.rb +27 -0
- data/lib/rails_admin/config/fields/factories/dragonfly.rb +27 -0
- data/lib/rails_admin/config/fields/factories/enum.rb +11 -0
- data/lib/rails_admin/config/fields/factories/paperclip.rb +26 -0
- data/lib/rails_admin/config/fields/factories/password.rb +17 -0
- data/lib/rails_admin/config/fields/factories/serialized.rb +17 -0
- data/lib/rails_admin/config/fields/group.rb +78 -0
- data/lib/rails_admin/config/fields/types.rb +27 -0
- data/lib/rails_admin/config/fields/types/all.rb +25 -0
- data/lib/rails_admin/config/fields/types/belongs_to_association.rb +41 -0
- data/lib/rails_admin/config/fields/types/boolean.rb +31 -0
- data/lib/rails_admin/config/fields/types/bson_object_id.rb +42 -0
- data/lib/rails_admin/config/fields/types/carrierwave.rb +31 -0
- data/lib/rails_admin/config/fields/types/color.rb +37 -0
- data/lib/rails_admin/config/fields/types/date.rb +24 -0
- data/lib/rails_admin/config/fields/types/datetime.rb +163 -0
- data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
- data/lib/rails_admin/config/fields/types/dragonfly.rb +41 -0
- data/lib/rails_admin/config/fields/types/enum.rb +35 -0
- data/lib/rails_admin/config/fields/types/file_upload.rb +61 -0
- data/lib/rails_admin/config/fields/types/float.rb +14 -0
- data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
- data/lib/rails_admin/config/fields/types/has_many_association.rb +32 -0
- data/lib/rails_admin/config/fields/types/has_one_association.rb +39 -0
- data/lib/rails_admin/config/fields/types/hidden.rb +21 -0
- data/lib/rails_admin/config/fields/types/integer.rb +22 -0
- data/lib/rails_admin/config/fields/types/paperclip.rb +28 -0
- data/lib/rails_admin/config/fields/types/password.rb +39 -0
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +76 -0
- data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
- data/lib/rails_admin/config/fields/types/string.rb +41 -0
- data/lib/rails_admin/config/fields/types/text.rb +36 -0
- data/lib/rails_admin/config/fields/types/time.rb +36 -0
- data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
- data/lib/rails_admin/config/groupable.rb +18 -0
- data/lib/rails_admin/config/has_fields.rb +135 -0
- data/lib/rails_admin/config/has_groups.rb +23 -0
- data/lib/rails_admin/config/hideable.rb +28 -0
- data/lib/rails_admin/config/model.rb +88 -0
- data/lib/rails_admin/config/proxyable.rb +12 -0
- data/lib/rails_admin/config/proxyable/proxy.rb +43 -0
- data/lib/rails_admin/config/sections.rb +39 -0
- data/lib/rails_admin/config/sections/base.rb +29 -0
- data/lib/rails_admin/config/sections/create.rb +11 -0
- data/lib/rails_admin/config/sections/edit.rb +11 -0
- data/lib/rails_admin/config/sections/export.rb +11 -0
- data/lib/rails_admin/config/sections/list.rb +27 -0
- data/lib/rails_admin/config/sections/modal.rb +10 -0
- data/lib/rails_admin/config/sections/nested.rb +10 -0
- data/lib/rails_admin/config/sections/show.rb +10 -0
- data/lib/rails_admin/config/sections/update.rb +10 -0
- data/lib/rails_admin/engine.rb +22 -0
- data/lib/rails_admin/extension.rb +29 -0
- data/lib/rails_admin/extensions/cancan.rb +5 -0
- data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +59 -0
- data/lib/rails_admin/extensions/history.rb +5 -0
- data/lib/rails_admin/extensions/history/auditing_adapter.rb +37 -0
- data/lib/rails_admin/extensions/history/history.rb +70 -0
- data/lib/rails_admin/extensions/paper_trail.rb +5 -0
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +92 -0
- data/lib/rails_admin/i18n_support.rb +43 -0
- data/lib/rails_admin/support/core_extensions.rb +44 -0
- data/lib/rails_admin/support/csv_converter.rb +109 -0
- data/lib/rails_admin/version.rb +3 -0
- data/lib/tasks/prepare_ci_env.rake +27 -0
- data/lib/tasks/rails_admin.rake +18 -0
- data/spec/ci.sh +2 -0
- data/spec/controllers/application_controller_spec.rb +30 -0
- data/spec/controllers/main_controller_spec.rb +179 -0
- data/spec/dummy_app/Gemfile +71 -0
- data/spec/dummy_app/Gemfile.lock +205 -0
- data/spec/dummy_app/Rakefile +7 -0
- data/spec/dummy_app/app/active_record/abstract.rb +5 -0
- data/spec/dummy_app/app/active_record/ball.rb +9 -0
- data/spec/dummy_app/app/active_record/carrierwave_uploader.rb +53 -0
- data/spec/dummy_app/app/active_record/category.rb +5 -0
- data/spec/dummy_app/app/active_record/cms.rb +5 -0
- data/spec/dummy_app/app/active_record/cms/basic_page.rb +9 -0
- data/spec/dummy_app/app/active_record/cms/unscoped_page.rb +3 -0
- data/spec/dummy_app/app/active_record/comment.rb +5 -0
- data/spec/dummy_app/app/active_record/division.rb +15 -0
- data/spec/dummy_app/app/active_record/draft.rb +13 -0
- data/spec/dummy_app/app/active_record/fan.rb +7 -0
- data/spec/dummy_app/app/active_record/field_test.rb +20 -0
- data/spec/dummy_app/app/active_record/hardball.rb +2 -0
- data/spec/dummy_app/app/active_record/league.rb +12 -0
- data/spec/dummy_app/app/active_record/nested_field_test.rb +7 -0
- data/spec/dummy_app/app/active_record/player.rb +23 -0
- data/spec/dummy_app/app/active_record/team.rb +27 -0
- data/spec/dummy_app/app/active_record/user.rb +21 -0
- data/spec/dummy_app/app/assets/images/rails.png +0 -0
- data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
- data/spec/dummy_app/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
- data/spec/dummy_app/app/controllers/players_controller.rb +5 -0
- data/spec/dummy_app/app/locales/models.en.yml +20 -0
- data/spec/dummy_app/app/mongoid/ball.rb +14 -0
- data/spec/dummy_app/app/mongoid/carrierwave_uploader.rb +53 -0
- data/spec/dummy_app/app/mongoid/category.rb +7 -0
- data/spec/dummy_app/app/mongoid/cms.rb +5 -0
- data/spec/dummy_app/app/mongoid/cms/basic_page.rb +12 -0
- data/spec/dummy_app/app/mongoid/cms/unscoped_page.rb +5 -0
- data/spec/dummy_app/app/mongoid/comment.rb +9 -0
- data/spec/dummy_app/app/mongoid/division.rb +14 -0
- data/spec/dummy_app/app/mongoid/draft.rb +22 -0
- data/spec/dummy_app/app/mongoid/embed.rb +6 -0
- data/spec/dummy_app/app/mongoid/fan.rb +12 -0
- data/spec/dummy_app/app/mongoid/field_test.rb +56 -0
- data/spec/dummy_app/app/mongoid/hardball.rb +2 -0
- data/spec/dummy_app/app/mongoid/league.rb +16 -0
- data/spec/dummy_app/app/mongoid/nested_field_test.rb +12 -0
- data/spec/dummy_app/app/mongoid/player.rb +37 -0
- data/spec/dummy_app/app/mongoid/team.rb +47 -0
- data/spec/dummy_app/app/mongoid/user.rb +61 -0
- data/spec/dummy_app/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy_app/app/views/players/show.html.haml +1 -0
- data/spec/dummy_app/config.ru +4 -0
- data/spec/dummy_app/config/application.rb +69 -0
- data/spec/dummy_app/config/boot.rb +9 -0
- data/spec/dummy_app/config/database.yml +25 -0
- data/spec/dummy_app/config/environment.rb +5 -0
- data/spec/dummy_app/config/environments/development.rb +37 -0
- data/spec/dummy_app/config/environments/production.rb +67 -0
- data/spec/dummy_app/config/environments/test.rb +37 -0
- data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy_app/config/initializers/devise.rb +223 -0
- data/spec/dummy_app/config/initializers/dragonfly.rb +14 -0
- data/spec/dummy_app/config/initializers/inflections.rb +15 -0
- data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
- data/spec/dummy_app/config/initializers/rails_admin.rb +8 -0
- data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
- data/spec/dummy_app/config/initializers/session_patch.rb +16 -0
- data/spec/dummy_app/config/initializers/session_store.rb +8 -0
- data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy_app/config/mongoid.yml +11 -0
- data/spec/dummy_app/config/routes.rb +10 -0
- data/spec/dummy_app/db/development.sqlite3 +0 -0
- data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
- data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
- data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
- data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
- data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
- data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +49 -0
- data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
- data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
- data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
- data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
- data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
- data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
- data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
- data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
- data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
- data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
- data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
- data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
- data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
- data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
- data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
- data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
- data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
- data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
- data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
- data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
- data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
- data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
- data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
- data/spec/dummy_app/db/migrate/20111115041025_add_type_to_balls.rb +5 -0
- data/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +10 -0
- data/spec/dummy_app/db/migrate/20111130075338_add_dragonfly_asset_name_to_field_tests.rb +5 -0
- data/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +8 -0
- data/spec/dummy_app/db/migrate/20120117151733_add_custom_field_to_teams.rb +5 -0
- data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +7 -0
- data/spec/dummy_app/db/migrate/20120319041705_drop_rel_tests.rb +15 -0
- data/spec/dummy_app/db/schema.rb +188 -0
- data/spec/dummy_app/db/seeds.rb +29 -0
- data/spec/dummy_app/db/test.sqlite3 +0 -0
- data/spec/dummy_app/doc/README_FOR_APP +2 -0
- data/spec/dummy_app/log/development.log +865 -0
- data/spec/dummy_app/log/test.log +36651 -0
- data/spec/dummy_app/public/404.html +26 -0
- data/spec/dummy_app/public/422.html +26 -0
- data/spec/dummy_app/public/500.html +25 -0
- data/spec/dummy_app/public/favicon.ico +0 -0
- data/spec/dummy_app/public/robots.txt +5 -0
- data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg +0 -0
- data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg.meta +1 -0
- data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg +0 -0
- data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg.meta +1 -0
- data/spec/dummy_app/public/system/paperclip_assets/1/original/Boston City Flow.jpg +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/1/thumb/Boston City Flow.jpg +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/3/original/Costa Rican Frog.jpg +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/3/thumb/Costa Rican Frog.jpg +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/6/original/liste-electorale.pdf +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/6/thumb/liste-electorale.pdf +148 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/Boston_City_Flow.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/thumb_Boston_City_Flow.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/Costa_Rican_Frog.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/thumb_Costa_Rican_Frog.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/Pensive_Parakeet.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/thumb_Pensive_Parakeet.jpg +0 -0
- data/spec/dummy_app/script/rails +6 -0
- data/spec/dummy_app/tmp/cache/assets/BE5/B00/sprockets%2F47892969925432da563a88e366309859 +1833 -0
- data/spec/dummy_app/tmp/cache/assets/C1C/C90/sprockets%2F4c1f0504074864b8b21792c77391e206 +0 -0
- data/spec/dummy_app/tmp/cache/assets/C29/F50/sprockets%2F6d087f33314fd5091b1270969287268b +0 -0
- data/spec/dummy_app/tmp/cache/assets/C2C/130/sprockets%2F2d09a75917207f5a55929639226b4b48 +26 -0
- data/spec/dummy_app/tmp/cache/assets/C49/FD0/sprockets%2F07901b5391110eea9648d5c25d481327 +0 -0
- data/spec/dummy_app/tmp/cache/assets/C63/BF0/sprockets%2F600472e1a4718315162a7cb0f285a02b +547 -0
- data/spec/dummy_app/tmp/cache/assets/C66/0B0/sprockets%2F2560ef2871b489690ff209e164d86665 +635 -0
- data/spec/dummy_app/tmp/cache/assets/C68/560/sprockets%2F5996692771c33962a9a2c72790ddd754 +0 -0
- data/spec/dummy_app/tmp/cache/assets/C83/F90/sprockets%2Fa580b424c36c26dd59f660078d541755 +0 -0
- data/spec/dummy_app/tmp/cache/assets/C86/C30/sprockets%2F23ca33803f8248991f3fa8d2104e9961 +0 -0
- data/spec/dummy_app/tmp/cache/assets/C88/790/sprockets%2F538d9562b05167d03d26b0e5e9f78830 +5 -0
- data/spec/dummy_app/tmp/cache/assets/C89/3B0/sprockets%2F503f729e1bc985e17b730122c7176f97 +0 -0
- data/spec/dummy_app/tmp/cache/assets/C95/A00/sprockets%2F458c72992a558902c05a9d6d99339af2 +4 -0
- data/spec/dummy_app/tmp/cache/assets/C97/4C0/sprockets%2F97a81a953151b41a100165fb83dfa023 +133 -0
- data/spec/dummy_app/tmp/cache/assets/C9A/C90/sprockets%2F400271d29a3bb9124a286ba761c3f254 +0 -0
- data/spec/dummy_app/tmp/cache/assets/C9D/BA0/sprockets%2F1bfd091b2034980851caa077c0892c40 +490 -0
- data/spec/dummy_app/tmp/cache/assets/CA2/FA0/sprockets%2F0c3f1c8708606aa0440c866138d1e9a2 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CA7/480/sprockets%2F23a375f496616605e4144a21fb4dc83a +4 -0
- data/spec/dummy_app/tmp/cache/assets/CB1/8A0/sprockets%2F25c2eb1d72087ed5e863f217109b6069 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CB3/B50/sprockets%2F03a7c1f7144eb79946ceb8e151772127 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CC4/220/sprockets%2F8d947b008798f16134b7d576fa456ce4 +285 -0
- data/spec/dummy_app/tmp/cache/assets/CC7/F70/sprockets%2F1a1af5b2c6473f104b2f0b252a729338 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CD1/C70/sprockets%2F75b65e7751a3f030d43c1cf6827cc100 +133 -0
- data/spec/dummy_app/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CD8/430/sprockets%2Fc89f860631079a34d3c0d662aac0d256 +635 -0
- data/spec/dummy_app/tmp/cache/assets/CD8/AF0/sprockets%2Ffa2b25b3f4c05f51086482175c970ca7 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CD9/590/sprockets%2F6882cdc2e05726d5172e2b9b334ec007 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CD9/E00/sprockets%2F233f366461a5722d7dfb7a0ecd064087 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CDA/880/sprockets%2Fa1e3e4ae81b451c8b4b798061148a358 +275 -0
- data/spec/dummy_app/tmp/cache/assets/CE2/490/sprockets%2Fab26cd4524240da60a93659780f9ae78 +0 -0
- data/spec/dummy_app/tmp/cache/assets/CEC/270/sprockets%2Fb531a7fa499c7953ab753fa911a61799 +328 -0
- data/spec/dummy_app/tmp/cache/assets/CFD/D70/sprockets%2F79acf34495d5196bd47278685b4ee68b +237 -0
- data/spec/dummy_app/tmp/cache/assets/CFE/060/sprockets%2Fd97e1e070419bcfe35c7000d1a70427b +303 -0
- data/spec/dummy_app/tmp/cache/assets/D02/8B0/sprockets%2F0c493e35ea651c55155b2a383bf2d34d +0 -0
- data/spec/dummy_app/tmp/cache/assets/D04/A20/sprockets%2Fa264585296de2351212f1063ebcccd9b +1092 -0
- data/spec/dummy_app/tmp/cache/assets/D0F/EA0/sprockets%2F4a754f04f5d1c8995a01927bbd074fa4 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D11/470/sprockets%2F67d64aa5490686515e07cdb8ae05b4c6 +9 -0
- data/spec/dummy_app/tmp/cache/assets/D12/F60/sprockets%2F6ac89a4a48bf0e3bb6364925661da565 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D15/3D0/sprockets%2F7ef98ea43116410c4c50ffff444428c8 +1376 -0
- data/spec/dummy_app/tmp/cache/assets/D17/9B0/sprockets%2F3154059ed98209719dc1a7c493cb0fff +381 -0
- data/spec/dummy_app/tmp/cache/assets/D20/9E0/sprockets%2F9e5560466ce41eac747392c97eef4c51 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D24/B30/sprockets%2F69d62273002dffc74f5368f55dfb97f3 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D2D/840/sprockets%2F6f3b681ef8ba260acc705e3b262425a0 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D2F/7C0/sprockets%2F99f6619fe89012fb9908a47ebb9b92a8 +7 -0
- data/spec/dummy_app/tmp/cache/assets/D2F/D60/sprockets%2Fa0cb0b3d7d775c4707c42a58fb0d2615 +9409 -0
- data/spec/dummy_app/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D3A/260/sprockets%2F35a5b51d1927651a39e3edca8c483dd1 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D3B/F80/sprockets%2F304efb1d2d219915606f3fd96b3bf5c2 +9409 -0
- data/spec/dummy_app/tmp/cache/assets/D3C/7C0/sprockets%2F6a50cb4a5d265838f510fc8e6178bae1 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D3D/0A0/sprockets%2Fa92066280edcd6b188dc38e35361dd3b +0 -0
- data/spec/dummy_app/tmp/cache/assets/D40/9B0/sprockets%2F704cfd791b468a6fba4fb820ec128941 +237 -0
- data/spec/dummy_app/tmp/cache/assets/D40/E10/sprockets%2F97d56619e64ca8c9c514a3aa2a4b339c +0 -0
- data/spec/dummy_app/tmp/cache/assets/D42/1F0/sprockets%2Fcaf59e1c6d22bae908a06e476b752791 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D43/E30/sprockets%2Fece324b9d4dc935a92333fd0149bf773 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D47/520/sprockets%2Ff142cf9478904f9e3ebb31ecc8c50913 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D4B/390/sprockets%2Feb90dbdd2a6275f48086881f7b74ee32 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D4B/6D0/sprockets%2F760ec9c344d334cfe919a55cf7f6a165 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D53/5C0/sprockets%2Fa93098db097c86d1e33dc86dece09991 +1092 -0
- data/spec/dummy_app/tmp/cache/assets/D56/F00/sprockets%2F48f6039e6745b557cbe83957abc8df2d +303 -0
- data/spec/dummy_app/tmp/cache/assets/D58/940/sprockets%2F0c3d05522ea3be49ba23372222fdcde7 +328 -0
- data/spec/dummy_app/tmp/cache/assets/D58/950/sprockets%2F6ade11e1b9d3ac4736b05aaf039c0804 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D5C/D10/sprockets%2F3fddf4c16115fad562082a5d4f1bd520 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D5D/950/sprockets%2F9ed4c3b788618998fefb569a0a58da80 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D5F/F30/sprockets%2Fc93672decbf5fb650336d1a67001fba0 +547 -0
- data/spec/dummy_app/tmp/cache/assets/D62/4A0/sprockets%2F47b7cb361e1f2e2ce081ea52fe32f640 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D65/140/sprockets%2F5cc4a9317d68e31bb0c5b8d3f517a0e4 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D6C/170/sprockets%2Fdc1a668e0c34eb1206fc67cf526249cf +0 -0
- data/spec/dummy_app/tmp/cache/assets/D71/9B0/sprockets%2Fc98bb1ca9b745d615b0f2f0d963c44d8 +5 -0
- data/spec/dummy_app/tmp/cache/assets/D74/020/sprockets%2Fd99999af4693dfa5998fdaf5b68276e6 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D74/050/sprockets%2Fab9217b6ce5c3c8969791adc819b2a2b +0 -0
- data/spec/dummy_app/tmp/cache/assets/D7A/410/sprockets%2Fd1decdae4824f395df114687f262e78a +381 -0
- data/spec/dummy_app/tmp/cache/assets/D7C/630/sprockets%2Fff49f6b45a167453dabfa743e588dd16 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D85/CC0/sprockets%2F09f7b34bbc050700a3bcbf6c6c5c1b45 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D8F/DD0/sprockets%2F7bd51d74d575ec0bfad624acc81a6040 +0 -0
- data/spec/dummy_app/tmp/cache/assets/D93/C20/sprockets%2F2f48ab1ea8216fd918beb173c2a4f04d +0 -0
- data/spec/dummy_app/tmp/cache/assets/D9B/920/sprockets%2F4a02c68d7d2e9a072b8cdd5f715ab7c4 +26 -0
- data/spec/dummy_app/tmp/cache/assets/D9D/720/sprockets%2Fc7c311fcebe12a3cf86631a4a47f849f +490 -0
- data/spec/dummy_app/tmp/cache/assets/D9F/F20/sprockets%2F32f6c0bcea62f9ab09385db3217ee7e8 +0 -0
- data/spec/dummy_app/tmp/cache/assets/DA0/8A0/sprockets%2F9aff0ec8777da07337a51280eacd3f4e +768 -0
- data/spec/dummy_app/tmp/cache/assets/DA2/DB0/sprockets%2Fa6cfbef08a491ac3397e006bed885b38 +275 -0
- data/spec/dummy_app/tmp/cache/assets/DA4/010/sprockets%2F9663c5eebc07fdb49dd221cf84804c6b +0 -0
- data/spec/dummy_app/tmp/cache/assets/DA5/FE0/sprockets%2Fc5d487522471a6ab39cac1bf8e7e9b9b +0 -0
- data/spec/dummy_app/tmp/cache/assets/DA6/0A0/sprockets%2Fae11a6ff426fe2d094a5cde67159f94d +0 -0
- data/spec/dummy_app/tmp/cache/assets/DA9/170/sprockets%2F88a844719bb0fc081d9cfafc0e76ca96 +0 -0
- data/spec/dummy_app/tmp/cache/assets/DC2/720/sprockets%2F6a32e6f352ddd183d19dcac10cfc456b +0 -0
- data/spec/dummy_app/tmp/cache/assets/DCA/070/sprockets%2F8ec1ae13cf7ba342507cbb8f877a6dd1 +768 -0
- data/spec/dummy_app/tmp/cache/assets/DCB/120/sprockets%2Fc29be206ce74d90a4ad1f9a3d9d20f7d +0 -0
- data/spec/dummy_app/tmp/cache/assets/DD6/9B0/sprockets%2Fb92fb5cec0493bfdbe8248cd5673f71b +0 -0
- data/spec/dummy_app/tmp/cache/assets/DD7/5C0/sprockets%2Fe0912ed75a6ed23afdf293deed66871c +1376 -0
- data/spec/dummy_app/tmp/cache/assets/DD8/110/sprockets%2F8dfc7ac2667a017ee469f4cd443cfa8c +0 -0
- data/spec/dummy_app/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +21 -0
- data/spec/dummy_app/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +21 -0
- data/spec/dummy_app/tmp/cache/assets/E05/140/sprockets%2F41bf6f07f45b76cd2eef60ed2ffbb908 +0 -0
- data/spec/dummy_app/tmp/cache/assets/E09/FE0/sprockets%2Fc5df928b0e066c9e19ee3f2be8f6dbd0 +0 -0
- data/spec/dummy_app/tmp/cache/assets/E30/BF0/sprockets%2Fd35aca629e1763dd5a9deeb6caa78b6c +285 -0
- data/spec/dummy_app/tmp/cache/assets/E42/8C0/sprockets%2Faff1c93e2a43b887cbdebf8f9df9087b +0 -0
- data/spec/dummy_app/tmp/cache/assets/E61/F10/sprockets%2Fe616dbbacda8602fc9c589aefaf4c34f +1833 -0
- data/spec/dummy_app/tmp/cache/assets/E87/8F0/sprockets%2Ff90a7f08fcd06d0faf133fed3edbfa6a +0 -0
- data/spec/dummy_app/tmp/cache/sass/0591c977016a0bb372763f6f1cfb8002d44de3b2/mixins.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/0591c977016a0bb372763f6f1cfb8002d44de3b2/theming.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/0591c977016a0bb372763f6f1cfb8002d44de3b2/variables.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/10238403c134661921596d094764445b02e815fe/mixins.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/10238403c134661921596d094764445b02e815fe/theming.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/10238403c134661921596d094764445b02e815fe/variables.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/imports.css.scss.erbc +0 -0
- data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/jquery.colorpicker.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/jquery.ui.timepicker.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/ra.calendar-additions.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/59e0a00e930df996e5ae01d3215f486bd084d24f/ra.filtering-multiselect.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_accordion.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_alerts.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_breadcrumbs.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_button-groups.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_buttons.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_carousel.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_close.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_code.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_component-animations.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_dropdowns.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_forms.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_grid.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_hero-unit.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_labels.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_layouts.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_mixins.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_modals.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_navbar.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_navs.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_pager.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_pagination.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_popovers.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_progress-bars.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_reset.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_scaffolding.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_sprites.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_tables.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_thumbnails.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_tooltip.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_type.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_utilities.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_variables.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/e49dad041ec24255ebe09b15ccd7ea91f1ab56bd/_wells.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/ea17b334a44bfc0f3681b2e3e4202c941da9ee82/jquery-ui-1.8.7.custom.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/fb68f840f6ad0344d3dcaecafd4b6ac4e35ca8fe/mixins.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/fb68f840f6ad0344d3dcaecafd4b6ac4e35ca8fe/theming.css.scssc +0 -0
- data/spec/dummy_app/tmp/cache/sass/fb68f840f6ad0344d3dcaecafd4b6ac4e35ca8fe/variables.css.scssc +0 -0
- data/spec/dummy_app/tmp/dragonfly/cache/body/67/c49ea211b51fee9c0ccde26af73f27446aa071 +1 -0
- data/spec/dummy_app/tmp/dragonfly/cache/body/da/39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
- data/spec/dummy_app/tmp/dragonfly/cache/body/e7/536a0250f5395f318c24bee30dbbb0a2a28714 +24 -0
- data/spec/dummy_app/tmp/dragonfly/cache/body/f0/76846cb5891d588ad63ea7f6451e26b4f48c3d +19 -0
- data/spec/dummy_app/tmp/dragonfly/cache/meta/26/1464d915347774c08b1ddf6d305783e3acfadb +0 -0
- data/spec/dummy_app/tmp/dragonfly/cache/meta/7f/29e62b90d2b255e74d7e1a8ee8ed509c3f0406 +0 -0
- data/spec/dummy_app/tmp/dragonfly/cache/meta/c1/0f5c4fe64b3d3cffe2793ad7a8e51aeb4f3eec +0 -0
- data/spec/dummy_app/tmp/dragonfly/cache/meta/fe/97fd48b64023fee9cc7d8a12f0f1e9097058da +0 -0
- data/spec/factories.rb +71 -0
- data/spec/helpers/application_helper_spec.rb +277 -0
- data/spec/integration/authorization/cancan_spec.rb +358 -0
- data/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
- data/spec/integration/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +42 -0
- data/spec/integration/basic/create/rails_admin_basic_create_spec.rb +141 -0
- data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +23 -0
- data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +27 -0
- data/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +56 -0
- data/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +109 -0
- data/spec/integration/basic/export/rails_admin_basic_export_spec.rb +106 -0
- data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +400 -0
- data/spec/integration/basic/new/rails_admin_basic_new_spec.rb +74 -0
- data/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
- data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +91 -0
- data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +223 -0
- data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +1043 -0
- data/spec/integration/config/list/rails_admin_config_list_spec.rb +521 -0
- data/spec/integration/config/show/rails_admin_config_show_spec.rb +312 -0
- data/spec/integration/history/rails_admin_history_spec.rb +65 -0
- data/spec/integration/rails_admin_spec.rb +113 -0
- data/spec/integration/relation_spec.rb +35 -0
- data/spec/orm/active_record.rb +42 -0
- data/spec/orm/mongoid.rb +19 -0
- data/spec/spec_helper.rb +79 -0
- data/spec/unit/abstract_model_spec.rb +45 -0
- data/spec/unit/adapters/active_record/abstract_object_spec.rb +132 -0
- data/spec/unit/adapters/active_record_spec.rb +373 -0
- data/spec/unit/adapters/mongoid/abstract_object_spec.rb +31 -0
- data/spec/unit/adapters/mongoid_spec.rb +686 -0
- data/spec/unit/config/actions_spec.rb +181 -0
- data/spec/unit/config/fields/base_spec.rb +339 -0
- data/spec/unit/config/model_spec.rb +75 -0
- data/spec/unit/config/sections_spec.rb +123 -0
- data/spec/unit/config_spec.rb +278 -0
- 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
|