rails_admin-lbgraham 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +51 -0
- data/LICENSE.md +20 -0
- data/README.md +175 -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 +743 -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 +142 -0
- data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +292 -0
- data/app/assets/javascripts/rails_admin/ra.filtering-select.js +190 -0
- data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +41 -0
- data/app/assets/javascripts/rails_admin/ra.remote-form.js +151 -0
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee +210 -0
- data/app/assets/javascripts/rails_admin/rails_admin.js.erb +28 -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 +66 -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.txt +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 +82 -0
- data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +182 -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 +90 -0
- data/app/assets/stylesheets/rails_admin/ra.widgets.css.scss +8 -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 +84 -0
- data/app/controllers/rails_admin/main_controller.rb +153 -0
- data/app/helpers/rails_admin/application_helper.rb +147 -0
- data/app/helpers/rails_admin/form_builder.rb +117 -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 +27 -0
- data/app/views/layouts/rails_admin/pjax.html.haml +16 -0
- data/app/views/rails_admin/main/_dashboard_history.html.haml +20 -0
- data/app/views/rails_admin/main/_delete_notice.html.haml +19 -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 +18 -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 +31 -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 +35 -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 +49 -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 +16 -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 +4 -0
- data/config/locales/rails_admin.en.yml +130 -0
- data/config/routes.rb +12 -0
- data/lib/generators/rails_admin/install_generator.rb +85 -0
- data/lib/generators/rails_admin/templates/drop.rb +18 -0
- data/lib/generators/rails_admin/templates/initializer.erb +100 -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 +128 -0
- data/lib/rails_admin/adapters/active_record.rb +296 -0
- data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
- data/lib/rails_admin/adapters/mongoid.rb +430 -0
- data/lib/rails_admin/adapters/mongoid/abstract_object.rb +43 -0
- data/lib/rails_admin/adapters/mongoid/extension.rb +45 -0
- data/lib/rails_admin/config.rb +333 -0
- data/lib/rails_admin/config/actions.rb +121 -0
- data/lib/rails_admin/config/actions/base.rb +132 -0
- data/lib/rails_admin/config/actions/bulk_delete.rb +55 -0
- data/lib/rails_admin/config/actions/dashboard.rb +52 -0
- data/lib/rails_admin/config/actions/delete.rb +56 -0
- data/lib/rails_admin/config/actions/edit.rb +55 -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 +65 -0
- data/lib/rails_admin/config/actions/show.rb +34 -0
- data/lib/rails_admin/config/actions/show_in_app.rb +27 -0
- data/lib/rails_admin/config/configurable.rb +92 -0
- data/lib/rails_admin/config/fields.rb +87 -0
- data/lib/rails_admin/config/fields/association.rb +107 -0
- data/lib/rails_admin/config/fields/base.rb +320 -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/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 +38 -0
- data/lib/rails_admin/config/fields/types/bson_object_id.rb +45 -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 +164 -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 +39 -0
- data/lib/rails_admin/config/fields/types/file_upload.rb +65 -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 +27 -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 +80 -0
- data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
- data/lib/rails_admin/config/fields/types/string.rb +43 -0
- data/lib/rails_admin/config/fields/types/text.rb +97 -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 +136 -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/lazy_model.rb +21 -0
- data/lib/rails_admin/config/model.rb +109 -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 +46 -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 +27 -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 +36 -0
- data/lib/rails_admin/extensions/paper_trail.rb +5 -0
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +93 -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 +105 -0
- data/lib/rails_admin/version.rb +18 -0
- data/lib/tasks/rails_admin.rake +48 -0
- data/spec/ci.sh +2 -0
- data/spec/controllers/rails_admin/application_controller_spec.rb +30 -0
- data/spec/controllers/rails_admin/main_controller_spec.rb +337 -0
- data/spec/dummy_app/Gemfile +48 -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/another_field_test.rb +4 -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/comment/confirmed.rb +3 -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 +19 -0
- data/spec/dummy_app/app/active_record/hardball.rb +2 -0
- data/spec/dummy_app/app/active_record/image.rb +6 -0
- data/spec/dummy_app/app/active_record/league.rb +12 -0
- data/spec/dummy_app/app/active_record/nested_field_test.rb +8 -0
- data/spec/dummy_app/app/active_record/player.rb +27 -0
- data/spec/dummy_app/app/active_record/team.rb +28 -0
- data/spec/dummy_app/app/active_record/user.rb +25 -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/another_field_test.rb +6 -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/comment/confirmed.rb +3 -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 +57 -0
- data/spec/dummy_app/app/mongoid/hardball.rb +2 -0
- data/spec/dummy_app/app/mongoid/image.rb +9 -0
- data/spec/dummy_app/app/mongoid/league.rb +16 -0
- data/spec/dummy_app/app/mongoid/nested_field_test.rb +13 -0
- data/spec/dummy_app/app/mongoid/player.rb +41 -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 +216 -0
- data/spec/dummy_app/config/initializers/dragonfly.rb +11 -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/strong_parameters.rb +2 -0
- data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy_app/config/locales/fr.yml +24 -0
- data/spec/dummy_app/config/mongoid.yml +22 -0
- data/spec/dummy_app/config/routes.rb +10 -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/migrate/20120720075608_create_another_field_tests.rb +8 -0
- data/spec/dummy_app/db/migrate/20120928075608_create_images.rb +8 -0
- data/spec/dummy_app/db/seeds.rb +29 -0
- data/spec/dummy_app/doc/README_FOR_APP +2 -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/factories.rb +75 -0
- data/spec/helpers/rails_admin/application_helper_spec.rb +353 -0
- data/spec/helpers/rails_admin/form_builder_spec.rb +17 -0
- data/spec/integration/authorization/cancan_spec.rb +366 -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 +53 -0
- data/spec/integration/basic/create/rails_admin_basic_create_spec.rb +140 -0
- data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +16 -0
- data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +64 -0
- data/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +84 -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 +444 -0
- data/spec/integration/basic/new/rails_admin_basic_new_spec.rb +73 -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 +82 -0
- data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +229 -0
- data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +1026 -0
- data/spec/integration/config/list/rails_admin_config_list_spec.rb +441 -0
- data/spec/integration/config/show/rails_admin_config_show_spec.rb +331 -0
- data/spec/integration/history/rails_admin_history_spec.rb +88 -0
- data/spec/integration/rails_admin_spec.rb +150 -0
- data/spec/integration/relation_spec.rb +35 -0
- data/spec/orm/active_record.rb +42 -0
- data/spec/orm/mongoid.rb +21 -0
- data/spec/rails_admin/abstract_model_spec.rb +75 -0
- data/spec/rails_admin/active_record_extension_spec.rb +16 -0
- data/spec/rails_admin/adapters/active_record/abstract_object_spec.rb +132 -0
- data/spec/rails_admin/adapters/active_record_spec.rb +409 -0
- data/spec/rails_admin/adapters/mongoid/abstract_object_spec.rb +31 -0
- data/spec/rails_admin/adapters/mongoid_spec.rb +776 -0
- data/spec/rails_admin/config/actions/base_spec.rb +32 -0
- data/spec/rails_admin/config/actions_spec.rb +180 -0
- data/spec/rails_admin/config/fields/base_spec.rb +421 -0
- data/spec/rails_admin/config/fields/date_spec.rb +74 -0
- data/spec/rails_admin/config/fields/datetime_spec.rb +55 -0
- data/spec/rails_admin/config/fields/file_upload_spec.rb +21 -0
- data/spec/rails_admin/config/fields/time_spec.rb +39 -0
- data/spec/rails_admin/config/fields/timestamp_spec.rb +20 -0
- data/spec/rails_admin/config/fields/types/datetime_spec.rb +18 -0
- data/spec/rails_admin/config/fields_spec.rb +15 -0
- data/spec/rails_admin/config/has_fields_spec.rb +30 -0
- data/spec/rails_admin/config/lazy_model_spec.rb +29 -0
- data/spec/rails_admin/config/model_spec.rb +75 -0
- data/spec/rails_admin/config/sections_spec.rb +123 -0
- data/spec/rails_admin/config_spec.rb +277 -0
- data/spec/rails_admin/support/csv_converter_spec.rb +16 -0
- data/spec/spec_helper.rb +84 -0
- metadata +868 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "RailsAdmin Namespaced Model Create" do
|
4
|
+
|
5
|
+
subject { page }
|
6
|
+
|
7
|
+
it "creates object with correct attributes" do
|
8
|
+
visit new_path(:model_name => "cms~basic_page")
|
9
|
+
|
10
|
+
fill_in "cms_basic_page[title]", :with => "Hello"
|
11
|
+
fill_in "cms_basic_page[content]", :with => "World"
|
12
|
+
expect {
|
13
|
+
click_button "Save" # first(:button, "Save").click
|
14
|
+
}.to change(Cms::BasicPage, :count).by(1)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "RailsAdmin Basic Delete" do
|
4
|
+
|
5
|
+
subject { page }
|
6
|
+
|
7
|
+
describe "delete" do
|
8
|
+
it "shows \"Delete model\"" do
|
9
|
+
@draft = FactoryGirl.create :draft
|
10
|
+
@player = @draft.player
|
11
|
+
@comment = @player.comments.create
|
12
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
13
|
+
should have_content("delete this player")
|
14
|
+
should have_link(@player.name, :href => "/admin/player/#{@player.id}")
|
15
|
+
should have_link("Draft ##{@draft.id}", :href => "/admin/draft/#{@draft.id}")
|
16
|
+
should have_link("Comment ##{@comment.id}", :href => "/admin/comment/#{@comment.id}")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "delete with missing object" do
|
21
|
+
before(:each) do
|
22
|
+
visit delete_path(:model_name => "player", :id => 1)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "raises NotFound" do
|
26
|
+
expect(page.driver.status_code).to eq(404)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "with show action disabled" do
|
31
|
+
before(:each) do
|
32
|
+
RailsAdmin.config.actions do
|
33
|
+
dashboard
|
34
|
+
index
|
35
|
+
delete
|
36
|
+
end
|
37
|
+
@draft = FactoryGirl.create :draft
|
38
|
+
@player = @draft.player
|
39
|
+
@comment = @player.comments.create
|
40
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "shows \"Delete model\"" do
|
44
|
+
should have_content("delete this player")
|
45
|
+
should_not have_selector("a[href=\"/admin/player/#{@player.id}\"]")
|
46
|
+
should_not have_selector("a[href=\"/admin/draft/#{@draft.id}\"]")
|
47
|
+
should_not have_selector("a[href=\"/admin/comment/#{@comment.id}\"]")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "delete of an object which has an associated item without id" do
|
52
|
+
before(:each) do
|
53
|
+
@player = FactoryGirl.create :player
|
54
|
+
Player.any_instance.stub(:draft).and_return(Draft.new)
|
55
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "shows \"Delete model\"" do
|
59
|
+
should_not have_content("Routing Error")
|
60
|
+
should have_content("delete this player")
|
61
|
+
should have_link(@player.name, :href => "/admin/player/#{@player.id}")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "RailsAdmin Basic Destroy" do
|
4
|
+
|
5
|
+
subject { page }
|
6
|
+
|
7
|
+
describe "destroy" do
|
8
|
+
before(:each) do
|
9
|
+
@player = FactoryGirl.create :player
|
10
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
11
|
+
click_button "Yes, I'm sure"
|
12
|
+
@player = RailsAdmin::AbstractModel.new("Player").first
|
13
|
+
end
|
14
|
+
|
15
|
+
it "destroys an object" do
|
16
|
+
expect(@player).to be_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it "shows success message" do
|
20
|
+
should have_content('Player successfully deleted')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "handle destroy errors" do
|
25
|
+
before(:each) do
|
26
|
+
Player.any_instance.stub(:destroy_hook).and_return false
|
27
|
+
@player = FactoryGirl.create :player
|
28
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
29
|
+
click_button "Yes, I'm sure"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "does not destroy an object" do
|
33
|
+
expect(@player.reload).to be
|
34
|
+
end
|
35
|
+
|
36
|
+
it "shows error message" do
|
37
|
+
should have_content('Player failed to be deleted')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "destroy" do
|
42
|
+
before(:each) do
|
43
|
+
@player = FactoryGirl.create :player
|
44
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
45
|
+
click_button "Cancel"
|
46
|
+
@player = RailsAdmin::AbstractModel.new("Player").first
|
47
|
+
end
|
48
|
+
|
49
|
+
it "does not destroy an object" do
|
50
|
+
expect(@player).to be
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "destroy with missing object" do
|
55
|
+
before(:each) do
|
56
|
+
delete delete_path(:model_name => "player", :id => 1)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "raises NotFound" do
|
60
|
+
expect(response.code).to eq("404")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "destroy from show page" do
|
65
|
+
it "redirects to the index instead of trying to show the deleted object" do
|
66
|
+
@player = FactoryGirl.create :player
|
67
|
+
visit show_path(:model_name => 'player', :id => @player.id)
|
68
|
+
click_link "Delete"
|
69
|
+
click_button "Yes, I'm sure"
|
70
|
+
|
71
|
+
expect(URI.parse(page.current_url).path).to eq(index_path(:model_name => 'player'))
|
72
|
+
end
|
73
|
+
|
74
|
+
it "redirects back to the object on error" do
|
75
|
+
Player.any_instance.stub(:destroy_hook).and_return false
|
76
|
+
@player = FactoryGirl.create :player
|
77
|
+
visit show_path(:model_name => 'player', :id => @player.id)
|
78
|
+
click_link "Delete"
|
79
|
+
click_button "Yes, I'm sure"
|
80
|
+
|
81
|
+
expect(URI.parse(page.current_url).path).to eq(show_path(:model_name => 'player', :id => @player.id))
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "RailsAdmin Basic Edit" do
|
4
|
+
|
5
|
+
subject { page }
|
6
|
+
|
7
|
+
describe "edit" do
|
8
|
+
before(:each) do
|
9
|
+
@player = FactoryGirl.create :player
|
10
|
+
visit edit_path(:model_name => "player", :id => @player.id)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "shows \"Edit model\"" do
|
14
|
+
should have_content("Edit Player")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "shows required fields as \"Required\"" do
|
18
|
+
should have_selector("div", :text => /Name\s*Required/)
|
19
|
+
should have_selector("div", :text => /Number\s*Required/)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "shows non-required fields as \"Optional\"" do
|
23
|
+
expect(find("#player_position_field .help-block")).to have_content("Optional")
|
24
|
+
expect(find("#player_born_on_field .help-block")).to have_content("Optional")
|
25
|
+
expect(find("#player_notes_field .help-block")).to have_content("Optional")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "association with inverse_of option" do
|
30
|
+
it "adds a related id to the belongs_to create team link" do
|
31
|
+
@player = FactoryGirl.create :player
|
32
|
+
visit edit_path(:model_name => "player", :id => @player.id)
|
33
|
+
should have_selector("a[data-link='/admin/team/new?associations%5Bplayers%5D=#{@player.id.to_s}&modal=true']")
|
34
|
+
end
|
35
|
+
|
36
|
+
it "adds a related id to the has_many create team link" do
|
37
|
+
@team = FactoryGirl.create :team
|
38
|
+
visit edit_path(:model_name => "team", :id => @team.id)
|
39
|
+
should have_selector("a[data-link='/admin/player/new?associations%5Bteam%5D=#{@team.id.to_s}&modal=true']")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "readonly associations" do
|
44
|
+
|
45
|
+
it "is not editable" do
|
46
|
+
@league = FactoryGirl.create :league
|
47
|
+
visit edit_path(:model_name => "league", :id => @league.id)
|
48
|
+
should_not have_selector('select#league_team_ids')
|
49
|
+
should have_selector('select#league_division_ids') # decoy, fails if naming scheme changes
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "edit with has-and-belongs-to-many association" do
|
54
|
+
before(:each) do
|
55
|
+
@teams = 3.times.map { FactoryGirl.create :team }
|
56
|
+
@fan = FactoryGirl.create :fan, :teams => [@teams[0]]
|
57
|
+
visit edit_path(:model_name => "fan", :id => @fan.id)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "shows associated objects" do
|
61
|
+
should have_selector "#fan_team_ids" do |select|
|
62
|
+
expect(select[0]).to have_selector 'option[selected="selected"]'
|
63
|
+
expect(select[1]).not_to have_selector 'option[selected="selected"]'
|
64
|
+
expect(select[2]).not_to have_selector 'option[selected="selected"]'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "edit with missing object" do
|
70
|
+
before(:each) do
|
71
|
+
visit edit_path(:model_name => "player", :id => 1)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "raises NotFound" do
|
75
|
+
expect(page.driver.status_code).to eq(404)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "edit with missing label", :given => ["a player exists", "three teams with no name exist"] do
|
80
|
+
before(:each) do
|
81
|
+
@player = FactoryGirl.create :player
|
82
|
+
@teams = 3.times.map { FactoryGirl.create :team, :name => "" }
|
83
|
+
visit edit_path(:model_name => "player", :id => @player.id)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "edit object with overridden to_param" do
|
88
|
+
before(:each) do
|
89
|
+
@ball = FactoryGirl.create :ball
|
90
|
+
visit edit_path(:model_name => "ball", :id => @ball.id)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "displays a link to the delete page" do
|
94
|
+
should have_selector "a[href='/admin/ball/#{@ball.id}/delete']"
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "clicking cancel when editing an object" do
|
100
|
+
|
101
|
+
it "sends back to previous URL" do
|
102
|
+
@ball = FactoryGirl.create :ball
|
103
|
+
visit '/admin/ball?sort=color'
|
104
|
+
click_link 'Edit'
|
105
|
+
click_button 'Cancel'
|
106
|
+
expect(page.current_url).to eq('http://www.example.com/admin/ball?sort=color')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'csv'
|
3
|
+
|
4
|
+
describe "RailsAdmin Export" do
|
5
|
+
|
6
|
+
subject { page }
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
Comment.all.map &:destroy # rspec bug => doesn't get destroyed with transaction
|
10
|
+
|
11
|
+
@players = 4.times.map { FactoryGirl.create :player }
|
12
|
+
@player = @players.first
|
13
|
+
@player.team = FactoryGirl.create :team
|
14
|
+
@player.draft = FactoryGirl.create :draft
|
15
|
+
@player.comments = (@comments = 2.times.map { FactoryGirl.create(:comment) })
|
16
|
+
@player.save
|
17
|
+
|
18
|
+
@abstract_model = RailsAdmin::AbstractModel.new(Player)
|
19
|
+
|
20
|
+
# removed schema=>only=>created_at
|
21
|
+
@non_default_schema = {
|
22
|
+
"only"=>[PK_COLUMN.to_s, "updated_at", "deleted_at", "name", "position", "number", "retired", "injured", "born_on", "notes", "suspended"],
|
23
|
+
"include"=>{
|
24
|
+
"team"=>{"only"=>[PK_COLUMN.to_s, "created_at", "updated_at", "name", "logo_url", "manager", "ballpark", "mascot", "founded", "wins", "losses", "win_percentage", "revenue", "color"]},
|
25
|
+
"draft"=>{"only"=>[PK_COLUMN.to_s, "created_at", "updated_at", "date", "round", "pick", "overall", "college", "notes"]},
|
26
|
+
"comments"=>{"only"=>[PK_COLUMN.to_s, "content", "created_at", "updated_at"]}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "POST /admin/players/export (prompt)" do
|
32
|
+
|
33
|
+
it "allows to export to CSV with associations and default schema, containing properly translated header and follow configuration" do
|
34
|
+
RailsAdmin.config do |c|
|
35
|
+
c.model Player do
|
36
|
+
include_all_fields
|
37
|
+
field :name do
|
38
|
+
export_value do
|
39
|
+
"#{value} exported"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
visit export_path(:model_name => 'player')
|
46
|
+
should have_content 'Select fields to export'
|
47
|
+
select "<comma> ','", :from => "csv_options_generator_col_sep"
|
48
|
+
click_button 'Export to csv'
|
49
|
+
csv = CSV.parse page.driver.response.body.force_encoding("utf-8") # comes through as us-ascii on some platforms
|
50
|
+
expect(csv[0]).to match_array ["Id", "Created at", "Updated at", "Deleted at", "Name", "Position",
|
51
|
+
"Number", "Retired", "Injured", "Born on", "Notes", "Suspended", "Id [Team]", "Created at [Team]",
|
52
|
+
"Updated at [Team]", "Name [Team]", "Logo url [Team]", "Team Manager [Team]", "Ballpark [Team]",
|
53
|
+
"Mascot [Team]", "Founded [Team]", "Wins [Team]", "Losses [Team]", "Win percentage [Team]",
|
54
|
+
"Revenue [Team]", "Color [Team]", "Custom field [Team]", "Id [Draft]", "Created at [Draft]",
|
55
|
+
"Updated at [Draft]", "Date [Draft]", "Round [Draft]", "Pick [Draft]", "Overall [Draft]",
|
56
|
+
"College [Draft]", "Notes [Draft]", "Id [Comments]", "Content [Comments]", "Created at [Comments]",
|
57
|
+
"Updated at [Comments]"]
|
58
|
+
expect(csv.flatten).to include(@player.name + " exported")
|
59
|
+
expect(csv.flatten).to include(@player.team.name)
|
60
|
+
expect(csv.flatten).to include(@player.draft.college)
|
61
|
+
|
62
|
+
expect(csv.flatten.join(' ')).to include(@player.comments.first.content.split("\n").first.strip)
|
63
|
+
expect(csv.flatten.join(' ')).to include(@player.comments.second.content.split("\n").first.strip)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "allows to export to JSON" do
|
67
|
+
visit export_path(:model_name => 'player')
|
68
|
+
click_button 'Export to json'
|
69
|
+
should have_content @player.team.name
|
70
|
+
end
|
71
|
+
|
72
|
+
it "allows to export to XML" do
|
73
|
+
visit export_path(:model_name => 'player')
|
74
|
+
click_button 'Export to xml'
|
75
|
+
|
76
|
+
# spec fails on non 1.9 mri rubies because of this https://github.com/rails/rails/pull/2076
|
77
|
+
# waiting for fix (rails-3.1.4?)
|
78
|
+
# and Mongoid with ActiveModel 3.1 does not support to_xml's :include options
|
79
|
+
# (due change of implementation in ActiveModel::Serializers between 3.1 and 3.2)
|
80
|
+
if RUBY_VERSION =~ /1\.9/ &&
|
81
|
+
(CI_ORM != :mongoid || (CI_ORM == :mongoid && ActiveModel::VERSION::STRING >= "3.2"))
|
82
|
+
should have_content @player.team.name
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
it "exports polymorphic fields the easy way for now" do
|
87
|
+
visit export_path(:model_name => 'comment')
|
88
|
+
select "<comma> ','", :from => "csv_options_generator_col_sep"
|
89
|
+
click_button 'Export to csv'
|
90
|
+
csv = CSV.parse page.driver.response.body
|
91
|
+
expect(csv[0]).to match_array ["Id", "Commentable", "Commentable type", "Content", "Created at", "Updated at"]
|
92
|
+
csv[1..-1].each do |line|
|
93
|
+
expect(line[csv[0].index('Commentable')]).to eq(@player.id.to_s)
|
94
|
+
expect(line[csv[0].index('Commentable type')]).to eq(@player.class.to_s)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "POST /admin/players/export :format => :csv" do
|
100
|
+
it "exports with modified schema" do
|
101
|
+
page.driver.post(export_path(:model_name => 'player', :schema => @non_default_schema, :csv => true, :all => true, :csv_options => { :generator => { :col_sep => "," } }))
|
102
|
+
csv = CSV.parse find('body').text
|
103
|
+
expect(csv[0]).not_to include('Created at')
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,444 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe "RailsAdmin Basic List" do
|
6
|
+
|
7
|
+
subject { page }
|
8
|
+
|
9
|
+
describe "GET /admin" do
|
10
|
+
it "responds successfully" do
|
11
|
+
visit dashboard_path
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "GET /admin/typo" do
|
16
|
+
it "redirects to dashboard and inform the user the model wasn't found" do
|
17
|
+
visit '/admin/whatever'
|
18
|
+
expect(page.driver.status_code).to eq(404)
|
19
|
+
expect(find('.alert-error')).to have_content("Model 'Whatever' could not be found")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "GET /admin/balls/545-typo" do
|
24
|
+
it "redirects to balls index and inform the user the id wasn't found" do
|
25
|
+
visit '/admin/ball/545-typo'
|
26
|
+
expect(page.driver.status_code).to eq(404)
|
27
|
+
expect(find('.alert-error')).to have_content("Ball with id '545-typo' could not be found")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "GET /admin/player as list" do
|
32
|
+
it "shows \"List of Models\", should show filters and should show column headers" do
|
33
|
+
RailsAdmin.config.default_items_per_page = 1
|
34
|
+
2.times { FactoryGirl.create :player } # two pages of players
|
35
|
+
visit index_path(:model_name => "player")
|
36
|
+
should have_content("List of Players")
|
37
|
+
should have_content("Created at")
|
38
|
+
should have_content("Updated at")
|
39
|
+
|
40
|
+
# it "shows the show, edit and delete links" do
|
41
|
+
should have_selector("li[title='Show'] a")
|
42
|
+
should have_selector("li[title='Edit'] a")
|
43
|
+
should have_selector("li[title='Delete'] a")
|
44
|
+
|
45
|
+
# it "has the search box with some prompt text" do
|
46
|
+
should have_selector("input[placeholder='Filter']")
|
47
|
+
|
48
|
+
# https://github.com/sferik/rails_admin/issues/362
|
49
|
+
# test that no link uses the "wildcard route" with the main
|
50
|
+
# controller and list method
|
51
|
+
# it "does not use the 'wildcard route'" do
|
52
|
+
should have_selector("a[href*='all=true']") # make sure we're fully testing pagination
|
53
|
+
should have_no_selector("a[href^='/rails_admin/main/list']")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "GET /admin/player" do
|
58
|
+
before do
|
59
|
+
@teams = 2.times.map do
|
60
|
+
FactoryGirl.create(:team)
|
61
|
+
end
|
62
|
+
@players = [
|
63
|
+
FactoryGirl.create(:player, :retired => true, :injured => true, :team => @teams[0]),
|
64
|
+
FactoryGirl.create(:player, :retired => true, :injured => false, :team => @teams[0]),
|
65
|
+
FactoryGirl.create(:player, :retired => false, :injured => true, :team => @teams[1]),
|
66
|
+
FactoryGirl.create(:player, :retired => false, :injured => false, :team => @teams[1]),
|
67
|
+
]
|
68
|
+
end
|
69
|
+
|
70
|
+
it "allows to query on any attribute" do
|
71
|
+
RailsAdmin.config Player do
|
72
|
+
list do
|
73
|
+
field :name
|
74
|
+
field :team
|
75
|
+
field :injured
|
76
|
+
field :retired
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
visit index_path(:model_name => "player", :query => @players[0].name)
|
81
|
+
should have_content(@players[0].name)
|
82
|
+
(1..3).each do |i|
|
83
|
+
should have_no_content(@players[i].name)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
it "allows to filter on one attribute" do
|
88
|
+
RailsAdmin.config Player do
|
89
|
+
list do
|
90
|
+
field :name
|
91
|
+
field :team
|
92
|
+
field :injured
|
93
|
+
field :retired
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
visit index_path(:model_name => "player", :f => {:injured => {"1" => {:v => "true"}}})
|
98
|
+
should have_content(@players[0].name)
|
99
|
+
should have_no_content(@players[1].name)
|
100
|
+
should have_content(@players[2].name)
|
101
|
+
should have_no_content(@players[3].name)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "allows to combine filters on two different attributes" do
|
105
|
+
RailsAdmin.config Player do
|
106
|
+
list do
|
107
|
+
field :name
|
108
|
+
field :team
|
109
|
+
field :injured
|
110
|
+
field :retired
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
visit index_path(:model_name => "player", :f => {:retired => {"1" => {:v => "true"}}, :injured => {"1" => {:v => "true"}}})
|
115
|
+
should have_content(@players[0].name)
|
116
|
+
(1..3).each do |i|
|
117
|
+
should have_no_content(@players[i].name)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
it "allows to filter on belongs_to relationships" do
|
122
|
+
RailsAdmin.config Player do
|
123
|
+
list do
|
124
|
+
field :name
|
125
|
+
field :team
|
126
|
+
field :injured
|
127
|
+
field :retired
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => { :v => @teams[0].name }}})
|
132
|
+
should have_content(@players[0].name)
|
133
|
+
should have_content(@players[1].name)
|
134
|
+
should have_no_content(@players[2].name)
|
135
|
+
should have_no_content(@players[3].name)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "allows to disable search on attributes" do
|
139
|
+
RailsAdmin.config Player do
|
140
|
+
list do
|
141
|
+
field :position
|
142
|
+
field :name do
|
143
|
+
searchable false
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
visit index_path(:model_name => "player", :query => @players[0].name)
|
148
|
+
should have_no_content(@players[0].name)
|
149
|
+
end
|
150
|
+
|
151
|
+
it "allows to search a belongs_to attribute over the base table" do
|
152
|
+
RailsAdmin.config Player do
|
153
|
+
list do
|
154
|
+
field PK_COLUMN
|
155
|
+
field :name
|
156
|
+
field :team do
|
157
|
+
searchable Player => :team_id
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.id}}})
|
162
|
+
should have_content(@players[0].name)
|
163
|
+
should have_content(@players[1].name)
|
164
|
+
should have_no_content(@players[2].name)
|
165
|
+
should have_no_content(@players[3].name)
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
it "allows to search a belongs_to attribute over the target table" do
|
170
|
+
RailsAdmin.config Player do
|
171
|
+
list do
|
172
|
+
field PK_COLUMN
|
173
|
+
field :name
|
174
|
+
field :team do
|
175
|
+
searchable Team => :name
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
|
180
|
+
should have_content(@players[0].name)
|
181
|
+
should have_content(@players[1].name)
|
182
|
+
should have_no_content(@players[2].name)
|
183
|
+
should have_no_content(@players[3].name)
|
184
|
+
end
|
185
|
+
|
186
|
+
it "allows to search a belongs_to attribute over the target table with a table name specified as a hash" do
|
187
|
+
RailsAdmin.config Player do
|
188
|
+
list do
|
189
|
+
field PK_COLUMN
|
190
|
+
field :name
|
191
|
+
field :team do
|
192
|
+
searchable :teams => :name
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
|
197
|
+
should have_content(@players[0].name)
|
198
|
+
should have_content(@players[1].name)
|
199
|
+
should have_no_content(@players[2].name)
|
200
|
+
should have_no_content(@players[3].name)
|
201
|
+
end
|
202
|
+
|
203
|
+
it "allows to search a belongs_to attribute over the target table with a table name specified as a string" do
|
204
|
+
RailsAdmin.config Player do
|
205
|
+
list do
|
206
|
+
field PK_COLUMN
|
207
|
+
field :name
|
208
|
+
field :team do
|
209
|
+
searchable 'teams.name'
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
|
214
|
+
should have_content(@players[0].name)
|
215
|
+
should have_content(@players[1].name)
|
216
|
+
should have_no_content(@players[2].name)
|
217
|
+
should have_no_content(@players[3].name)
|
218
|
+
end
|
219
|
+
|
220
|
+
it "allows to search a belongs_to attribute over the label method by default" do
|
221
|
+
RailsAdmin.config Player do
|
222
|
+
list do
|
223
|
+
field PK_COLUMN
|
224
|
+
field :name
|
225
|
+
field :team
|
226
|
+
end
|
227
|
+
end
|
228
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
|
229
|
+
should have_content(@players[0].name)
|
230
|
+
should have_content(@players[1].name)
|
231
|
+
should have_no_content(@players[2].name)
|
232
|
+
should have_no_content(@players[3].name)
|
233
|
+
end
|
234
|
+
|
235
|
+
it "allows to search a belongs_to attribute over the target table when an attribute is specified" do
|
236
|
+
RailsAdmin.config Player do
|
237
|
+
list do
|
238
|
+
field PK_COLUMN
|
239
|
+
field :name
|
240
|
+
field :team do
|
241
|
+
searchable :name
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}}})
|
246
|
+
should have_content(@players[0].name)
|
247
|
+
should have_content(@players[1].name)
|
248
|
+
should have_no_content(@players[2].name)
|
249
|
+
should have_no_content(@players[3].name)
|
250
|
+
end
|
251
|
+
|
252
|
+
it "allows to search over more than one attribute" do
|
253
|
+
RailsAdmin.config Player do
|
254
|
+
list do
|
255
|
+
field PK_COLUMN
|
256
|
+
field :name
|
257
|
+
field :team do
|
258
|
+
searchable [:name, {Player => :team_id}]
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}, "2" => {:v => @teams.first.id, :o => 'is'}}})
|
263
|
+
should have_content(@players[0].name)
|
264
|
+
should have_content(@players[1].name)
|
265
|
+
should have_no_content(@players[2].name)
|
266
|
+
should have_no_content(@players[3].name)
|
267
|
+
# same with a different id
|
268
|
+
visit index_path(:model_name => "player", :f => {:team => {"1" => {:v => @teams.first.name}, "2" => {:v => @teams.last.id, :o => 'is'}}})
|
269
|
+
should have_no_content(@players[0].name)
|
270
|
+
should have_no_content(@players[1].name)
|
271
|
+
should have_no_content(@players[2].name)
|
272
|
+
should have_no_content(@players[3].name)
|
273
|
+
end
|
274
|
+
|
275
|
+
it "displays base filters when no filters are present in the params" do
|
276
|
+
RailsAdmin.config Player do
|
277
|
+
list do
|
278
|
+
filters [:name, :team]
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
get index_path(:model_name => "player")
|
283
|
+
expect(response.body).to include(%{$.filters.append("Name", "name", "string", "", null, "", 1);})
|
284
|
+
expect(response.body).to include(%{$.filters.append("Team", "team", "belongs_to_association", "", null, "", 2);})
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
describe "GET /admin/player with 2 objects" do
|
289
|
+
before(:each) do
|
290
|
+
@players = 2.times.map { FactoryGirl.create :player }
|
291
|
+
visit index_path(:model_name => "player")
|
292
|
+
end
|
293
|
+
|
294
|
+
it "shows \"2 results\"" do
|
295
|
+
should have_content("2 players")
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
describe "GET /admin/player with 2 objects" do
|
300
|
+
before(:each) do
|
301
|
+
@players = 2.times.map { FactoryGirl.create :player }
|
302
|
+
visit index_path(:model_name => "player")
|
303
|
+
end
|
304
|
+
|
305
|
+
it "shows \"2 results\"" do
|
306
|
+
should have_content("2 players")
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
describe "GET /admin/player with 3 pages, page 2" do
|
311
|
+
before do
|
312
|
+
RailsAdmin.config.default_items_per_page = 1
|
313
|
+
items_per_page = RailsAdmin.config.default_items_per_page
|
314
|
+
(items_per_page * 3).times { FactoryGirl.create(:player) }
|
315
|
+
visit index_path(:model_name => "player", :page => 2)
|
316
|
+
end
|
317
|
+
|
318
|
+
it "paginates correctly" do
|
319
|
+
expect(find('.pagination ul li:first')).to have_content("« Prev")
|
320
|
+
expect(find('.pagination ul li:last')).to have_content("Next »")
|
321
|
+
expect(find('.pagination ul li.active')).to have_content("2")
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
describe "list with 3 pages, page 3" do
|
326
|
+
before(:each) do
|
327
|
+
items_per_page = RailsAdmin.config.default_items_per_page
|
328
|
+
@players = (items_per_page * 3).times.map { FactoryGirl.create(:player) }
|
329
|
+
visit index_path(:model_name => "player", :page => 3)
|
330
|
+
end
|
331
|
+
|
332
|
+
it "paginates correctly and contain the right item" do
|
333
|
+
expect(find('.pagination ul li:first')).to have_content("« Prev")
|
334
|
+
expect(find('.pagination ul li:last')).to have_content("Next »")
|
335
|
+
expect(find('.pagination ul li.active')).to have_content("3")
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
describe "GET /admin/player show all" do
|
340
|
+
it "responds successfully with a single model" do
|
341
|
+
FactoryGirl.create :player
|
342
|
+
visit index_path(:model_name => "player", :all => true)
|
343
|
+
expect(find('div.total-count')).to have_content("1 player")
|
344
|
+
expect(find('div.total-count')).not_to have_content("1 players")
|
345
|
+
end
|
346
|
+
|
347
|
+
it "responds successfully with multiple models" do
|
348
|
+
2.times.map { FactoryGirl.create :player }
|
349
|
+
visit index_path(:model_name => "player", :all => true)
|
350
|
+
expect(find('div.total-count')).to have_content("2 players")
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
describe "GET /admin/player show with pagination disabled by :associated_collection" do
|
355
|
+
it "responds successfully" do
|
356
|
+
@team = FactoryGirl.create :team
|
357
|
+
2.times.map { FactoryGirl.create :player, :team => @team }
|
358
|
+
visit index_path(:model_name => "player", :associated_collection => "players", :compact => true, :current_action => 'update', :source_abstract_model => 'team', :source_object_id => @team.id)
|
359
|
+
expect(find('div.total-count')).to have_content("2 players")
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
describe "list as compact json" do
|
364
|
+
it "has_content an array with 2 elements and contain an array of elements with keys id and label" do
|
365
|
+
2.times.map { FactoryGirl.create :player }
|
366
|
+
get index_path(:model_name => "player", :compact => true, :format => :json)
|
367
|
+
expect(ActiveSupport::JSON.decode(response.body).length).to eq(2)
|
368
|
+
ActiveSupport::JSON.decode(response.body).each do |object|
|
369
|
+
expect(object).to have_key("id")
|
370
|
+
expect(object).to have_key("label")
|
371
|
+
end
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
describe "search operator" do
|
376
|
+
let(:player) { FactoryGirl.create :player }
|
377
|
+
|
378
|
+
before do
|
379
|
+
expect(Player.count).to eq(0)
|
380
|
+
end
|
381
|
+
|
382
|
+
it "finds the player if the query matches the default search opeartor" do
|
383
|
+
RailsAdmin.config do |config|
|
384
|
+
config.default_search_operator = 'ends_with'
|
385
|
+
config.model Player do
|
386
|
+
list { field :name }
|
387
|
+
end
|
388
|
+
end
|
389
|
+
visit index_path(:model_name => "player", :query => player.name[2, -1])
|
390
|
+
should have_content(player.name)
|
391
|
+
end
|
392
|
+
|
393
|
+
it "does not find the player if the query does not match the default search opeartor" do
|
394
|
+
RailsAdmin.config do |config|
|
395
|
+
config.default_search_operator = 'ends_with'
|
396
|
+
config.model Player do
|
397
|
+
list { field :name }
|
398
|
+
end
|
399
|
+
end
|
400
|
+
visit index_path(:model_name => "player", :query => player.name[0, 2])
|
401
|
+
should have_no_content(player.name)
|
402
|
+
end
|
403
|
+
|
404
|
+
it "finds the player if the query matches the specified search operator" do
|
405
|
+
RailsAdmin.config Player do
|
406
|
+
list do
|
407
|
+
field :name do
|
408
|
+
search_operator 'starts_with'
|
409
|
+
end
|
410
|
+
end
|
411
|
+
end
|
412
|
+
visit index_path(:model_name => "player", :query => player.name[0, 2])
|
413
|
+
should have_content(player.name)
|
414
|
+
end
|
415
|
+
|
416
|
+
it "does not find the player if the query does not match the specified search operator" do
|
417
|
+
RailsAdmin.config Player do
|
418
|
+
list do
|
419
|
+
field :name do
|
420
|
+
search_operator 'starts_with'
|
421
|
+
end
|
422
|
+
end
|
423
|
+
end
|
424
|
+
visit index_path(:model_name => "player", :query => player.name[1..-1])
|
425
|
+
should have_no_content(player.name)
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
describe "list for objects with overridden to_param" do
|
430
|
+
before(:each) do
|
431
|
+
@ball = FactoryGirl.create :ball
|
432
|
+
|
433
|
+
visit index_path(:model_name => "ball")
|
434
|
+
end
|
435
|
+
|
436
|
+
it "shows the show, edit and delete links with valid url" do
|
437
|
+
should have_selector("td a[href='/admin/ball/#{@ball.id}']")
|
438
|
+
should have_selector("td a[href='/admin/ball/#{@ball.id}/edit']")
|
439
|
+
should have_selector("td a[href='/admin/ball/#{@ball.id}/delete']")
|
440
|
+
end
|
441
|
+
|
442
|
+
end
|
443
|
+
|
444
|
+
end
|