elucid-rails_admin 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +54 -0
- data/LICENSE.md +20 -0
- data/README.md +1334 -0
- data/Rakefile +14 -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 +1 -0
- data/app/assets/javascripts/rails_admin/jquery-ui-1.8.16.custom.js +5019 -0
- data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +484 -0
- data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1219 -0
- data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +67 -0
- data/app/assets/javascripts/rails_admin/ra.filter-box.js +119 -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.remote-form.js +147 -0
- data/app/assets/javascripts/rails_admin/rails_admin.js.erb +17 -0
- data/app/assets/javascripts/rails_admin/themes/default/ui.js +1 -0
- data/app/assets/javascripts/rails_admin/ui.js.coffee +30 -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 +102 -0
- data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
- data/app/assets/stylesheets/rails_admin/custom/README +3 -0
- data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +9 -0
- data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +11 -0
- data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +11 -0
- data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +51 -0
- data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +180 -0
- data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +53 -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/README +11 -0
- data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +1 -0
- data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +1 -0
- data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +1 -0
- data/app/controllers/rails_admin/application_controller.rb +62 -0
- data/app/controllers/rails_admin/history_controller.rb +26 -0
- data/app/controllers/rails_admin/main_controller.rb +371 -0
- data/app/helpers/rails_admin/application_helper.rb +65 -0
- data/app/helpers/rails_admin/form_builder.rb +52 -0
- data/app/helpers/rails_admin/main_helper.rb +100 -0
- data/app/models/rails_admin/history.rb +64 -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/_navigation.html.haml +19 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +9 -0
- data/app/views/layouts/rails_admin/application.html.haml +41 -0
- data/app/views/rails_admin/history/_dashboard.html.haml +10 -0
- data/app/views/rails_admin/history/show.html.haml +42 -0
- data/app/views/rails_admin/main/_delete_notice.html.haml +19 -0
- data/app/views/rails_admin/main/_form_colorpicker.html.haml +26 -0
- data/app/views/rails_admin/main/_form_datetime.html.haml +7 -0
- data/app/views/rails_admin/main/_form_enumeration.html.haml +5 -0
- data/app/views/rails_admin/main/_form_field.html.haml +1 -0
- data/app/views/rails_admin/main/_form_file_upload.html.haml +19 -0
- data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +57 -0
- data/app/views/rails_admin/main/_form_filtering_select.html.haml +47 -0
- data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +36 -0
- data/app/views/rails_admin/main/_form_text.html.haml +13 -0
- data/app/views/rails_admin/main/_models_links.html.haml +31 -0
- data/app/views/rails_admin/main/_object_links.html.haml +23 -0
- data/app/views/rails_admin/main/_submit_buttons.html.haml +12 -0
- data/app/views/rails_admin/main/bulk_delete.html.haml +6 -0
- data/app/views/rails_admin/main/dashboard.html.haml +31 -0
- data/app/views/rails_admin/main/delete.html.haml +13 -0
- data/app/views/rails_admin/main/edit.html.haml +2 -0
- data/app/views/rails_admin/main/export.html.haml +70 -0
- data/app/views/rails_admin/main/index.html.haml +98 -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 +3 -0
- data/config/locales/devise.bg.yml +42 -0
- data/config/locales/devise.de.yml +39 -0
- data/config/locales/devise.en.yml +39 -0
- data/config/locales/devise.es.yml +39 -0
- data/config/locales/devise.fi.yml +39 -0
- data/config/locales/devise.fr.yml +78 -0
- data/config/locales/devise.hr.yml +49 -0
- data/config/locales/devise.it.yml +39 -0
- data/config/locales/devise.lt.yml +39 -0
- data/config/locales/devise.mn.yml +39 -0
- data/config/locales/devise.nb.yml +43 -0
- data/config/locales/devise.pt-BR.yml +39 -0
- data/config/locales/devise.pt-PT.yml +39 -0
- data/config/locales/devise.ro.yml +46 -0
- data/config/locales/devise.ru.yml +39 -0
- data/config/locales/devise.sv.yml +39 -0
- data/config/locales/devise.tr.yml +39 -0
- data/config/locales/devise.uk.yml +39 -0
- data/config/locales/devise.zh-CN.yml +39 -0
- data/config/locales/devise.zh_cn.yml +39 -0
- data/config/locales/rails_admin.bg.yml +104 -0
- data/config/locales/rails_admin.da.yml +99 -0
- data/config/locales/rails_admin.de.yml +110 -0
- data/config/locales/rails_admin.en.yml +114 -0
- data/config/locales/rails_admin.es.yml +112 -0
- data/config/locales/rails_admin.fi.yml +107 -0
- data/config/locales/rails_admin.fr.yml +110 -0
- data/config/locales/rails_admin.hr.yml +81 -0
- data/config/locales/rails_admin.it.yml +109 -0
- data/config/locales/rails_admin.ja.yml +110 -0
- data/config/locales/rails_admin.lt.yml +102 -0
- data/config/locales/rails_admin.lv.yml +100 -0
- data/config/locales/rails_admin.mn.yml +103 -0
- data/config/locales/rails_admin.nb.yml +110 -0
- data/config/locales/rails_admin.nl.yml +135 -0
- data/config/locales/rails_admin.pl.yml +111 -0
- data/config/locales/rails_admin.pt-BR.yml +109 -0
- data/config/locales/rails_admin.pt-PT.yml +109 -0
- data/config/locales/rails_admin.ro.yml +113 -0
- data/config/locales/rails_admin.ru.yml +109 -0
- data/config/locales/rails_admin.sv.yml +103 -0
- data/config/locales/rails_admin.tr.yml +103 -0
- data/config/locales/rails_admin.uk.yml +100 -0
- data/config/locales/rails_admin.zh-CN.yml +114 -0
- data/config/locales/rails_admin.zh_cn.yml +107 -0
- data/config/routes.rb +28 -0
- data/lib/generators/rails_admin/install_generator.rb +83 -0
- data/lib/generators/rails_admin/templates/drop.rb +18 -0
- data/lib/generators/rails_admin/templates/initializer.erb +150 -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 +57 -0
- data/lib/rails_admin/abstract_model.rb +73 -0
- data/lib/rails_admin/abstract_object.rb +28 -0
- data/lib/rails_admin/adapters/active_record.rb +359 -0
- data/lib/rails_admin/config.rb +287 -0
- data/lib/rails_admin/config/base.rb +111 -0
- data/lib/rails_admin/config/fields.rb +99 -0
- data/lib/rails_admin/config/fields/association.rb +101 -0
- data/lib/rails_admin/config/fields/base.rb +273 -0
- data/lib/rails_admin/config/fields/factories/carrierwave.rb +16 -0
- data/lib/rails_admin/config/fields/factories/devise.rb +31 -0
- data/lib/rails_admin/config/fields/factories/dragonfly.rb +20 -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 +63 -0
- data/lib/rails_admin/config/fields/groupable.rb +25 -0
- data/lib/rails_admin/config/fields/types.rb +26 -0
- data/lib/rails_admin/config/fields/types/all.rb +22 -0
- data/lib/rails_admin/config/fields/types/belongs_to_association.rb +51 -0
- data/lib/rails_admin/config/fields/types/boolean.rb +29 -0
- data/lib/rails_admin/config/fields/types/carrierwave.rb +32 -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 +160 -0
- data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
- data/lib/rails_admin/config/fields/types/dragonfly.rb +51 -0
- data/lib/rails_admin/config/fields/types/enum.rb +35 -0
- data/lib/rails_admin/config/fields/types/file_upload.rb +54 -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 +42 -0
- data/lib/rails_admin/config/fields/types/has_one_association.rb +31 -0
- data/lib/rails_admin/config/fields/types/integer.rb +24 -0
- data/lib/rails_admin/config/fields/types/paperclip.rb +38 -0
- data/lib/rails_admin/config/fields/types/password.rb +41 -0
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +78 -0
- data/lib/rails_admin/config/fields/types/string.rb +34 -0
- data/lib/rails_admin/config/fields/types/text.rb +39 -0
- data/lib/rails_admin/config/fields/types/time.rb +31 -0
- data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
- data/lib/rails_admin/config/has_fields.rb +112 -0
- data/lib/rails_admin/config/has_groups.rb +39 -0
- data/lib/rails_admin/config/hideable.rb +28 -0
- data/lib/rails_admin/config/model.rb +89 -0
- data/lib/rails_admin/config/proxy.rb +40 -0
- data/lib/rails_admin/config/sections.rb +51 -0
- data/lib/rails_admin/config/sections/create.rb +11 -0
- data/lib/rails_admin/config/sections/export.rb +18 -0
- data/lib/rails_admin/config/sections/list.rb +55 -0
- data/lib/rails_admin/config/sections/navigation.rb +21 -0
- data/lib/rails_admin/config/sections/show.rb +50 -0
- data/lib/rails_admin/config/sections/update.rb +11 -0
- data/lib/rails_admin/engine.rb +15 -0
- data/lib/rails_admin/extension.rb +23 -0
- data/lib/rails_admin/extensions/cancan.rb +5 -0
- data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +71 -0
- data/lib/rails_admin/generic_support.rb +15 -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 +6 -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 +86 -0
- data/spec/database_helpers.rb +15 -0
- data/spec/dummy_app/Gemfile +52 -0
- data/spec/dummy_app/README +256 -0
- data/spec/dummy_app/Rakefile +7 -0
- data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
- data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
- data/spec/dummy_app/app/locales/models.en.yml +8 -0
- data/spec/dummy_app/app/models/abstract.rb +5 -0
- data/spec/dummy_app/app/models/ball.rb +8 -0
- data/spec/dummy_app/app/models/cms.rb +5 -0
- data/spec/dummy_app/app/models/cms/basic_page.rb +7 -0
- data/spec/dummy_app/app/models/cms/unscoped_page.rb +3 -0
- data/spec/dummy_app/app/models/comment.rb +3 -0
- data/spec/dummy_app/app/models/division.rb +8 -0
- data/spec/dummy_app/app/models/draft.rb +11 -0
- data/spec/dummy_app/app/models/fan.rb +5 -0
- data/spec/dummy_app/app/models/field_test.rb +13 -0
- data/spec/dummy_app/app/models/league.rb +10 -0
- data/spec/dummy_app/app/models/player.rb +15 -0
- data/spec/dummy_app/app/models/rel_test.rb +6 -0
- data/spec/dummy_app/app/models/team.rb +25 -0
- data/spec/dummy_app/app/models/user.rb +21 -0
- data/spec/dummy_app/app/uploaders/carrierwave_uploader.rb +53 -0
- data/spec/dummy_app/app/views/layouts/application.html.erb +13 -0
- data/spec/dummy_app/config.ru +4 -0
- data/spec/dummy_app/config/application.rb +47 -0
- data/spec/dummy_app/config/boot.rb +6 -0
- data/spec/dummy_app/config/database.yml +22 -0
- data/spec/dummy_app/config/environment.rb +5 -0
- data/spec/dummy_app/config/environments/development.rb +27 -0
- data/spec/dummy_app/config/environments/production.rb +51 -0
- data/spec/dummy_app/config/environments/test.rb +39 -0
- data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy_app/config/initializers/devise.rb +142 -0
- data/spec/dummy_app/config/initializers/inflections.rb +10 -0
- data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
- data/spec/dummy_app/config/initializers/quiet_assets.rb +10 -0
- data/spec/dummy_app/config/initializers/rails_admin.rb +10 -0
- data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
- data/spec/dummy_app/config/initializers/session_store.rb +8 -0
- data/spec/dummy_app/config/routes.rb +8 -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 +19 -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/seeds.rb +18 -0
- data/spec/dummy_app/doc/README_FOR_APP +2 -0
- data/spec/dummy_app/public/404.html +0 -0
- data/spec/dummy_app/public/favicon.ico +0 -0
- data/spec/dummy_app/script/rails +6 -0
- data/spec/factories.rb +62 -0
- data/spec/generator_helpers.rb +30 -0
- data/spec/generators/install_generator_spec.rb +85 -0
- data/spec/generators/uninstall_generator_spec.rb +35 -0
- data/spec/lib/abstract_object_spec.rb +119 -0
- data/spec/lib/rails_admin_spec.rb +153 -0
- data/spec/requests/authorization/cancan_spec.rb +260 -0
- data/spec/requests/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
- data/spec/requests/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +55 -0
- data/spec/requests/basic/create/rails_admin_basic_create_spec.rb +143 -0
- data/spec/requests/basic/create/rails_admin_namespaced_model_create_spec.rb +24 -0
- data/spec/requests/basic/delete/rails_admin_basic_delete_spec.rb +35 -0
- data/spec/requests/basic/destroy/rails_admin_basic_destroy_spec.rb +56 -0
- data/spec/requests/basic/edit/rails_admin_basic_edit_spec.rb +98 -0
- data/spec/requests/basic/export/rails_admin_basic_export_spec.rb +84 -0
- data/spec/requests/basic/list/rails_admin_basic_list_spec.rb +401 -0
- data/spec/requests/basic/new/rails_admin_basic_new_spec.rb +74 -0
- data/spec/requests/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
- data/spec/requests/basic/show/rails_admin_basic_show_spec.rb +83 -0
- data/spec/requests/basic/update/rails_admin_basic_update_spec.rb +169 -0
- data/spec/requests/config/edit/rails_admin_config_edit_spec.rb +744 -0
- data/spec/requests/config/list/rails_admin_config_list_spec.rb +549 -0
- data/spec/requests/config/navigation/rails_admin_config_navigation_spec.rb +107 -0
- data/spec/requests/config/rails_admin_config_spec.rb +180 -0
- data/spec/requests/config/show/rails_admin_config_show_spec.rb +275 -0
- data/spec/requests/history/rails_admin_history_spec.rb +57 -0
- data/spec/requests/rails_admin_spec.rb +103 -0
- data/spec/requests/relation_spec.rb +26 -0
- data/spec/spec_helper.rb +88 -0
- metadata +717 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
.ra-multiselect {
|
2
|
+
|
3
|
+
.ra-multiselect-header {
|
4
|
+
margin-bottom: 5px;
|
5
|
+
clear: right;
|
6
|
+
.help {
|
7
|
+
float: left;
|
8
|
+
font-size: 10px;
|
9
|
+
}
|
10
|
+
.ui-icon {
|
11
|
+
position: relative;
|
12
|
+
top: 10px;
|
13
|
+
left: 3px;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
.ra-multiselect-search {
|
18
|
+
width: 180px;
|
19
|
+
}
|
20
|
+
|
21
|
+
.ra-multiselect-column {
|
22
|
+
width: 190px;
|
23
|
+
float: left;
|
24
|
+
}
|
25
|
+
|
26
|
+
.ra-multiselect-center {
|
27
|
+
width: 30px;
|
28
|
+
padding-top: 15px;
|
29
|
+
text-align: center;
|
30
|
+
.ui-icon {
|
31
|
+
margin: 5px auto;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
.ra-multiselect-collection, .ra-multiselect-selection {
|
35
|
+
height: 130px;
|
36
|
+
margin-bottom: 5px;
|
37
|
+
width: 100%;
|
38
|
+
}
|
39
|
+
|
40
|
+
span.ui-icon {
|
41
|
+
margin-right: 4px;
|
42
|
+
}
|
43
|
+
.ui-icon {
|
44
|
+
cursor: pointer;
|
45
|
+
display: inline-block;
|
46
|
+
vertical-align: top;
|
47
|
+
&.ui-icon-circle-triangle-e {
|
48
|
+
background-position: -16px -32px !important;
|
49
|
+
background-image: image-url("rails_admin/multiselect/icon_sprite.png");
|
50
|
+
}
|
51
|
+
&.ui-icon-circle-triangle-e:hover {
|
52
|
+
background-position: -16px -48px !important;
|
53
|
+
background-image: image-url('rails_admin/multiselect/icon_sprite.png');
|
54
|
+
}
|
55
|
+
&.ui-icon-circle-triangle-w {
|
56
|
+
background-position: 0px -32px !important;
|
57
|
+
background-image: image-url('rails_admin/multiselect/icon_sprite.png');
|
58
|
+
}
|
59
|
+
&.ui-icon-circle-triangle-w:hover {
|
60
|
+
background-position: 0px -48px !important;
|
61
|
+
background-image: image-url('rails_admin/multiselect/icon_sprite.png');
|
62
|
+
}
|
63
|
+
&.ui-icon-circle-triangle-n {
|
64
|
+
background-position: 0px 0px !important;
|
65
|
+
margin-left: 1px;
|
66
|
+
background-image: image-url('rails_admin/multiselect/ui-icon-circle-triangle-n-light.png');
|
67
|
+
}
|
68
|
+
&.ui-icon-circle-triangle-n:hover {
|
69
|
+
background-position: 0px 0px !important;
|
70
|
+
margin-left: 1px;
|
71
|
+
background-image: image-url('rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png');
|
72
|
+
}
|
73
|
+
&.ui-icon-circle-triangle-s {
|
74
|
+
background-position: 0px 0px !important;
|
75
|
+
margin-left: 1px;
|
76
|
+
background-image: image-url('rails_admin/multiselect/ui-icon-circle-triangle-s-light.png');
|
77
|
+
}
|
78
|
+
&.ui-icon-circle-triangle-s:hover {
|
79
|
+
background-position: 0px 0px !important;
|
80
|
+
margin-left: 1px;
|
81
|
+
background-image: image-url('rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png');
|
82
|
+
}
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
/* All sass mixins should be overriden/created here */
|
@@ -0,0 +1 @@
|
|
1
|
+
/* All real theming should happen here */
|
@@ -0,0 +1 @@
|
|
1
|
+
/* All sass variables should be overriden/created here */
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'rails_admin/abstract_model'
|
2
|
+
|
3
|
+
module RailsAdmin
|
4
|
+
class ApplicationController < ::ApplicationController
|
5
|
+
newrelic_ignore if defined?(NewRelic)
|
6
|
+
|
7
|
+
before_filter :_authenticate!
|
8
|
+
before_filter :_authorize!
|
9
|
+
|
10
|
+
helper_method :_current_user, :_attr_accessible_role, :_get_plugin_name
|
11
|
+
|
12
|
+
def get_model
|
13
|
+
model_name = to_model_name(params[:model_name])
|
14
|
+
@abstract_model = RailsAdmin::AbstractModel.new(model_name)
|
15
|
+
not_found unless @abstract_model
|
16
|
+
@model_config = RailsAdmin.config(@abstract_model)
|
17
|
+
not_found if @model_config.excluded?
|
18
|
+
@properties = @abstract_model.properties
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_model_name(param)
|
22
|
+
parts = param.split("~")
|
23
|
+
parts[-1] = parts.last.singularize
|
24
|
+
parts.map(&:camelize).join("::")
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_object
|
28
|
+
@object = @abstract_model.get(params[:id])
|
29
|
+
not_found unless @object
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
private
|
34
|
+
def _get_plugin_name
|
35
|
+
@plugin_name_array ||= [RailsAdmin.config.main_app_name.is_a?(Proc) ? instance_eval(&RailsAdmin.config.main_app_name) : RailsAdmin.config.main_app_name].flatten
|
36
|
+
end
|
37
|
+
|
38
|
+
def _authenticate!
|
39
|
+
instance_eval &RailsAdmin::Config.authenticate_with
|
40
|
+
end
|
41
|
+
|
42
|
+
def _authorize!
|
43
|
+
instance_eval &RailsAdmin::Config.authorize_with
|
44
|
+
end
|
45
|
+
|
46
|
+
def _current_user
|
47
|
+
instance_eval &RailsAdmin::Config.current_user_method
|
48
|
+
end
|
49
|
+
|
50
|
+
def _attr_accessible_role
|
51
|
+
instance_eval &RailsAdmin::Config.attr_accessible_role
|
52
|
+
end
|
53
|
+
|
54
|
+
def not_found
|
55
|
+
render :file => Rails.root.join('public', '404.html'), :layout => false, :status => :not_found
|
56
|
+
end
|
57
|
+
|
58
|
+
def rails_admin_controller?
|
59
|
+
true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
class HistoryController < RailsAdmin::ApplicationController
|
3
|
+
before_filter :get_model
|
4
|
+
before_filter :get_object, :except => :for_model
|
5
|
+
|
6
|
+
def for_model
|
7
|
+
@authorization_adapter.authorize(:history) if @authorization_adapter
|
8
|
+
@page_type = @abstract_model.pretty_name.downcase
|
9
|
+
@page_name = t("admin.history.page_name", :name => @model_config.label.downcase)
|
10
|
+
@general = true
|
11
|
+
@history = History.history_for_model(@abstract_model, params[:query], params[:sort], params[:sort_reverse], params[:all], params[:page])
|
12
|
+
|
13
|
+
render "show", :layout => request.xhr? ? false : 'rails_admin/application'
|
14
|
+
end
|
15
|
+
|
16
|
+
def for_object
|
17
|
+
@authorization_adapter.authorize(:history) if @authorization_adapter
|
18
|
+
@page_type = @abstract_model.pretty_name.downcase
|
19
|
+
@page_name = t("admin.history.page_name", :name => "#{@model_config.label.downcase} '#{@model_config.with(:object => @object).object_label}'")
|
20
|
+
@general = false
|
21
|
+
@history = History.history_for_object(@abstract_model, @object, params[:query], params[:sort], params[:sort_reverse], params[:all], params[:page])
|
22
|
+
|
23
|
+
render "show", :layout => request.xhr? ? false : 'rails_admin/application'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,371 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
|
3
|
+
class MainController < RailsAdmin::ApplicationController
|
4
|
+
include ActionView::Helpers::TextHelper
|
5
|
+
|
6
|
+
layout "rails_admin/application"
|
7
|
+
|
8
|
+
before_filter :get_model, :except => [:dashboard]
|
9
|
+
before_filter :get_object, :only => [:show, :edit, :update, :delete, :destroy]
|
10
|
+
before_filter :get_attributes, :only => [:create, :update]
|
11
|
+
before_filter :check_for_cancel, :only => [:create, :update, :destroy, :export, :bulk_destroy]
|
12
|
+
|
13
|
+
def dashboard
|
14
|
+
@page_name = t("admin.dashboard.pagename")
|
15
|
+
@page_type = "dashboard"
|
16
|
+
|
17
|
+
@history= History.all
|
18
|
+
@abstract_models = RailsAdmin::Config.visible_models.map(&:abstract_model)
|
19
|
+
|
20
|
+
@most_recent_changes = {}
|
21
|
+
@count = {}
|
22
|
+
@max = 0
|
23
|
+
@abstract_models.each do |t|
|
24
|
+
scope = @authorization_adapter && @authorization_adapter.query(:index, t)
|
25
|
+
current_count = t.count({}, scope)
|
26
|
+
@max = current_count > @max ? current_count : @max
|
27
|
+
@count[t.pretty_name] = current_count
|
28
|
+
@most_recent_changes[t.pretty_name] = t.model.order("updated_at desc").first.try(:updated_at) rescue nil
|
29
|
+
end
|
30
|
+
render :dashboard
|
31
|
+
end
|
32
|
+
|
33
|
+
def index
|
34
|
+
@authorization_adapter.authorize(:index, @abstract_model) if @authorization_adapter
|
35
|
+
|
36
|
+
@page_type = @abstract_model.pretty_name.downcase
|
37
|
+
@page_name = t("admin.index.select", :name => @model_config.label.downcase)
|
38
|
+
|
39
|
+
@objects = list_entries
|
40
|
+
|
41
|
+
@schema ||= { :only => @model_config.list.visible_fields.map { |f| f.name } }
|
42
|
+
|
43
|
+
respond_to do |format|
|
44
|
+
format.html { render :layout => !request.xhr? }
|
45
|
+
format.json do
|
46
|
+
output = if params[:compact]
|
47
|
+
@objects.map{ |o| { :id => o.id, :label => o.send(@model_config.object_label_method) } }
|
48
|
+
else
|
49
|
+
@objects.to_json(@schema)
|
50
|
+
end
|
51
|
+
if params[:send_data]
|
52
|
+
send_data output, :filename => "#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.json"
|
53
|
+
else
|
54
|
+
render :json => output
|
55
|
+
end
|
56
|
+
end
|
57
|
+
format.xml do
|
58
|
+
output = @objects.to_xml(@schema)
|
59
|
+
if params[:send_data]
|
60
|
+
send_data output, :filename => "#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.xml"
|
61
|
+
else
|
62
|
+
render :xml => output
|
63
|
+
end
|
64
|
+
end
|
65
|
+
format.csv do
|
66
|
+
header, encoding, output = CSVConverter.new(@objects, @schema).to_csv(params[:csv_options])
|
67
|
+
if params[:send_data]
|
68
|
+
send_data output,
|
69
|
+
:type => "text/csv; charset=#{encoding}; #{"header=present" if header}",
|
70
|
+
:disposition => "attachment; filename=#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.csv"
|
71
|
+
else
|
72
|
+
render :text => output
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def new
|
79
|
+
@object = @abstract_model.new
|
80
|
+
if @authorization_adapter
|
81
|
+
@authorization_adapter.attributes_for(:new, @abstract_model).each do |name, value|
|
82
|
+
@object.send("#{name}=", value)
|
83
|
+
end
|
84
|
+
@authorization_adapter.authorize(:new, @abstract_model, @object)
|
85
|
+
end
|
86
|
+
if object_params = params[@abstract_model.to_param]
|
87
|
+
@object.set_attributes(@object.attributes.merge(object_params), _attr_accessible_role)
|
88
|
+
end
|
89
|
+
@page_name = t("admin.actions.create").capitalize + " " + @model_config.label.downcase
|
90
|
+
@page_type = @abstract_model.pretty_name.downcase
|
91
|
+
respond_to do |format|
|
92
|
+
format.html
|
93
|
+
format.js { render :layout => false }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def create
|
98
|
+
@modified_assoc = []
|
99
|
+
@object = @abstract_model.new
|
100
|
+
@model_config.create.fields.each {|f| f.parse_input(@attributes) if f.respond_to?(:parse_input) }
|
101
|
+
if @authorization_adapter
|
102
|
+
@authorization_adapter.attributes_for(:create, @abstract_model).each do |name, value|
|
103
|
+
@object.send("#{name}=", value)
|
104
|
+
end
|
105
|
+
@authorization_adapter.authorize(:create, @abstract_model, @object)
|
106
|
+
end
|
107
|
+
@object.set_attributes(@attributes, _attr_accessible_role)
|
108
|
+
@page_name = t("admin.actions.create").capitalize + " " + @model_config.label.downcase
|
109
|
+
@page_type = @abstract_model.pretty_name.downcase
|
110
|
+
|
111
|
+
if @object.save
|
112
|
+
History.create_history_item("Created #{@model_config.with(:object => @object).object_label}", @object, @abstract_model, _current_user)
|
113
|
+
respond_to do |format|
|
114
|
+
format.html do
|
115
|
+
redirect_to_on_success
|
116
|
+
end
|
117
|
+
format.js do
|
118
|
+
render :json => {
|
119
|
+
:id => @object.id,
|
120
|
+
:label => @model_config.with(:object => @object).object_label,
|
121
|
+
}
|
122
|
+
end
|
123
|
+
end
|
124
|
+
else
|
125
|
+
handle_save_error
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def show
|
130
|
+
@authorization_adapter.authorize(:show, @abstract_model, @object) if @authorization_adapter
|
131
|
+
@page_name = t("admin.show.page_name", :name => "#{@model_config.label.downcase} '#{@object.send(@model_config.object_label_method)}'")
|
132
|
+
@page_type = @abstract_model.pretty_name.downcase
|
133
|
+
end
|
134
|
+
|
135
|
+
def edit
|
136
|
+
@authorization_adapter.authorize(:edit, @abstract_model, @object) if @authorization_adapter
|
137
|
+
@page_name = "#{t("admin.actions.update").capitalize} #{@model_config.label.downcase} '#{@object.send(@model_config.object_label_method)}'"
|
138
|
+
@page_type = @abstract_model.pretty_name.downcase
|
139
|
+
respond_to do |format|
|
140
|
+
format.html
|
141
|
+
format.js { render :layout => false }
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def update
|
146
|
+
@authorization_adapter.authorize(:update, @abstract_model, @object) if @authorization_adapter
|
147
|
+
|
148
|
+
@cached_assocations_hash = associations_hash
|
149
|
+
@modified_assoc = []
|
150
|
+
|
151
|
+
@page_name = "#{t("admin.actions.update").capitalize} #{@model_config.label.downcase} '#{@object.send(@model_config.object_label_method)}'"
|
152
|
+
@page_type = @abstract_model.pretty_name.downcase
|
153
|
+
|
154
|
+
@old_object = @object.dup
|
155
|
+
@model_config.update.fields.map {|f| f.parse_input(@attributes) if f.respond_to?(:parse_input) }
|
156
|
+
@object.set_attributes(@attributes, _attr_accessible_role)
|
157
|
+
|
158
|
+
if @object.save
|
159
|
+
History.create_update_history @abstract_model, @object, @cached_assocations_hash, associations_hash, @modified_assoc, @old_object, _current_user
|
160
|
+
respond_to do |format|
|
161
|
+
format.html do
|
162
|
+
redirect_to_on_success
|
163
|
+
end
|
164
|
+
format.js do
|
165
|
+
render :json => {
|
166
|
+
:id => @object.id,
|
167
|
+
:label => @model_config.with(:object => @object).object_label,
|
168
|
+
}
|
169
|
+
end
|
170
|
+
end
|
171
|
+
else
|
172
|
+
handle_save_error :edit
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def delete
|
177
|
+
@authorization_adapter.authorize(:delete, @abstract_model, @object) if @authorization_adapter
|
178
|
+
@page_name = "#{t("admin.actions.delete").capitalize} #{@model_config.label.downcase} '#{@object.send(@model_config.object_label_method)}'"
|
179
|
+
@page_type = @abstract_model.pretty_name.downcase
|
180
|
+
respond_to do |format|
|
181
|
+
format.html
|
182
|
+
format.js { render :layout => false }
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def destroy
|
187
|
+
@authorization_adapter.authorize(:destroy, @abstract_model, @object) if @authorization_adapter
|
188
|
+
|
189
|
+
if @abstract_model.destroy(@object)
|
190
|
+
History.create_history_item("Destroyed #{@model_config.with(:object => @object).object_label}", @object, @abstract_model, _current_user)
|
191
|
+
flash[:success] = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.deleted"))
|
192
|
+
else
|
193
|
+
flash[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.deleted"))
|
194
|
+
end
|
195
|
+
|
196
|
+
redirect_to index_path(:model_name => @abstract_model.to_param)
|
197
|
+
end
|
198
|
+
|
199
|
+
def export
|
200
|
+
# todo
|
201
|
+
# limitation: need to display at least one real attribute ('only') so that the full object doesn't get displayed, a way to fix this? maybe force :only => [""]
|
202
|
+
# use send_file instead of send_data to leverage the x-sendfile header set by rails 3 (generate and let the front server handle the rest)
|
203
|
+
# maybe
|
204
|
+
# n-levels (backend: possible with xml&json, frontend: not possible?)
|
205
|
+
@authorization_adapter.authorize(:export, @abstract_model) if @authorization_adapter
|
206
|
+
|
207
|
+
if format = params[:json] && :json || params[:csv] && :csv || params[:xml] && :xml
|
208
|
+
request.format = format
|
209
|
+
@schema = params[:schema].symbolize if params[:schema] # to_json and to_xml expect symbols for keys AND values.
|
210
|
+
index
|
211
|
+
else
|
212
|
+
@page_name = t("admin.actions.export").capitalize + " " + @model_config.label_plural.downcase
|
213
|
+
@page_type = @abstract_model.pretty_name.downcase
|
214
|
+
|
215
|
+
render :action => 'export'
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def bulk_action
|
220
|
+
redirect_to index_path, :flash => { :info => t("admin.flash.noaction") } and return if params[:bulk_ids].blank?
|
221
|
+
case params[:bulk_action]
|
222
|
+
when "delete" then bulk_delete
|
223
|
+
when "export" then export
|
224
|
+
else redirect_to(index_path(:model_name => @abstract_model.to_param), :flash => { :info => t("admin.flash.noaction") })
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def bulk_delete
|
229
|
+
@authorization_adapter.authorize(:bulk_delete, @abstract_model) if @authorization_adapter
|
230
|
+
@page_name = t("admin.actions.delete").capitalize + " " + @model_config.label.downcase
|
231
|
+
@page_type = @abstract_model.pretty_name.downcase
|
232
|
+
@objects = list_entries(@model_config, :destroy)
|
233
|
+
not_found and return if @objects.empty?
|
234
|
+
|
235
|
+
render :action => 'bulk_delete'
|
236
|
+
end
|
237
|
+
|
238
|
+
def bulk_destroy
|
239
|
+
@authorization_adapter.authorize(:bulk_destroy, @abstract_model) if @authorization_adapter
|
240
|
+
@objects = list_entries(@model_config, :destroy)
|
241
|
+
processed_objects = @abstract_model.destroy(@objects)
|
242
|
+
|
243
|
+
destroyed = processed_objects.select(&:destroyed?)
|
244
|
+
not_destroyed = processed_objects - destroyed
|
245
|
+
|
246
|
+
destroyed.each do |object|
|
247
|
+
message = "Destroyed #{@model_config.with(:object => object).object_label}"
|
248
|
+
History.create_history_item(message, object, @abstract_model, _current_user)
|
249
|
+
end
|
250
|
+
|
251
|
+
unless destroyed.empty?
|
252
|
+
flash[:success] = t("admin.flash.successful", :name => pluralize(destroyed.count, @model_config.label), :action => t("admin.actions.deleted"))
|
253
|
+
end
|
254
|
+
|
255
|
+
unless not_destroyed.empty?
|
256
|
+
flash[:error] = t("admin.flash.error", :name => pluralize(not_destroyed.count, @model_config.label), :action => t("admin.actions.deleted"))
|
257
|
+
end
|
258
|
+
|
259
|
+
redirect_to index_path
|
260
|
+
end
|
261
|
+
|
262
|
+
def list_entries(model_config = @model_config, auth_scope_key = :index, additional_scope = get_association_scope_from_params)
|
263
|
+
scope = @authorization_adapter && @authorization_adapter.query(auth_scope_key, model_config.abstract_model)
|
264
|
+
scope = model_config.abstract_model.scoped.merge(scope)
|
265
|
+
scope = scope.instance_eval(&additional_scope) if additional_scope
|
266
|
+
get_collection(model_config, scope)
|
267
|
+
end
|
268
|
+
|
269
|
+
private
|
270
|
+
|
271
|
+
def get_sort_hash(model_config)
|
272
|
+
abstract_model = model_config.abstract_model
|
273
|
+
params[:sort] = params[:sort_reverse] = nil unless model_config.list.with(:view => self, :object => abstract_model.model.new).visible_fields.map {|f| f.name.to_s}.include? params[:sort]
|
274
|
+
|
275
|
+
params[:sort] ||= model_config.list.sort_by.to_s
|
276
|
+
params[:sort_reverse] ||= 'false'
|
277
|
+
|
278
|
+
field = model_config.list.fields.find{ |f| f.name.to_s == params[:sort] }
|
279
|
+
|
280
|
+
column = if field.nil? || field.sortable == true # use params[:sort] on the base table
|
281
|
+
"#{abstract_model.model.table_name}.#{params[:sort]}"
|
282
|
+
elsif field.sortable == false # use default sort, asked field is not sortable
|
283
|
+
"#{abstract_model.model.table_name}.#{model_config.list.sort_by}"
|
284
|
+
elsif field.sortable.is_a?(String) && field.sortable.include?('.') # just provide sortable, don't do anything smart
|
285
|
+
field.sortable
|
286
|
+
elsif field.sortable.is_a?(Hash) # just join sortable hash, don't do anything smart
|
287
|
+
"#{field.sortable.keys.first}.#{field.sortable.values.first}"
|
288
|
+
elsif field.association? # use column on target table
|
289
|
+
"#{field.associated_model_config.abstract_model.model.table_name}.#{field.sortable}"
|
290
|
+
else # use described column in the field conf.
|
291
|
+
"#{abstract_model.model.table_name}.#{field.sortable}"
|
292
|
+
end
|
293
|
+
|
294
|
+
reversed_sort = (field ? field.sort_reverse? : model_config.list.sort_reverse?)
|
295
|
+
{:sort => column, :sort_reverse => (params[:sort_reverse] == reversed_sort.to_s)}
|
296
|
+
end
|
297
|
+
|
298
|
+
|
299
|
+
def get_attributes
|
300
|
+
@attributes = params[@abstract_model.to_param.singularize.gsub('~','_')] || {}
|
301
|
+
@attributes.each do |key, value|
|
302
|
+
# Deserialize the attribute if attribute is serialized
|
303
|
+
if @abstract_model.model.serialized_attributes.keys.include?(key) and value.is_a? String
|
304
|
+
@attributes[key] = YAML::load(value)
|
305
|
+
end
|
306
|
+
# Delete fields that are blank
|
307
|
+
@attributes[key] = nil if value.blank?
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
def redirect_to_on_success
|
312
|
+
notice = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.#{params[:action]}d"))
|
313
|
+
if params[:_add_another]
|
314
|
+
redirect_to new_path, :flash => { :success => notice }
|
315
|
+
elsif params[:_add_edit]
|
316
|
+
redirect_to edit_path(:id => @object.id), :flash => { :success => notice }
|
317
|
+
else
|
318
|
+
redirect_to index_path, :flash => { :success => notice }
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def handle_save_error whereto = :new
|
323
|
+
action = params[:action]
|
324
|
+
|
325
|
+
flash.now[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.#{action}d"))
|
326
|
+
flash.now[:error] += ". #{@object.errors[:base].to_sentence}" unless @object.errors[:base].blank?
|
327
|
+
|
328
|
+
respond_to do |format|
|
329
|
+
format.html { render whereto, :status => :not_acceptable }
|
330
|
+
format.js { render whereto, :layout => false, :status => :not_acceptable }
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
def check_for_cancel
|
335
|
+
redirect_to index_path, :flash => { :warning => t("admin.flash.noaction") } if params[:_continue]
|
336
|
+
end
|
337
|
+
|
338
|
+
def get_collection(model_config, scope)
|
339
|
+
associations = model_config.list.fields.select {|f| f.type == :belongs_to_association && !f.polymorphic? }.map {|f| f.association[:name] }
|
340
|
+
options = {}
|
341
|
+
options = options.merge(:page => (params[:page] || 1).to_i, :per => (params[:per] || model_config.list.items_per_page)) if params[:action] == 'index'
|
342
|
+
options = options.merge(:include => associations) unless associations.blank?
|
343
|
+
options = options.merge(get_sort_hash(model_config)) unless params[:associated_collection]
|
344
|
+
options = options.merge(model_config.abstract_model.get_conditions_hash(model_config, params[:query], params[:filters])) if params[:query] || params[:filters]
|
345
|
+
options = options.merge(:bulk_ids => params[:bulk_ids]) if params[:bulk_ids]
|
346
|
+
|
347
|
+
objects = model_config.abstract_model.all(options, scope)
|
348
|
+
end
|
349
|
+
|
350
|
+
def get_association_scope_from_params
|
351
|
+
return nil unless params[:associated_collection].present?
|
352
|
+
source_abstract_model = RailsAdmin::AbstractModel.new(to_model_name(params[:source_abstract_model]))
|
353
|
+
source_model_config = RailsAdmin.config(source_abstract_model)
|
354
|
+
source_object = source_abstract_model.get(params[:source_object_id])
|
355
|
+
action = params[:current_action].in?(['create', 'update']) ? params[:current_action] : 'edit'
|
356
|
+
association = source_model_config.send(action).fields.find{|f| f.name == params[:associated_collection].to_sym }.with(:controller => self, :object => source_object)
|
357
|
+
association.associated_collection_scope
|
358
|
+
end
|
359
|
+
|
360
|
+
def associations_hash
|
361
|
+
associations = {}
|
362
|
+
@abstract_model.associations.each do |association|
|
363
|
+
if [:has_many, :has_and_belongs_to_many].include?(association[:type])
|
364
|
+
records = Array(@object.send(association[:name]))
|
365
|
+
associations[association[:name]] = records.collect(&:id)
|
366
|
+
end
|
367
|
+
end
|
368
|
+
associations
|
369
|
+
end
|
370
|
+
end
|
371
|
+
end
|