elucid-rails_admin 0.0.1
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 +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,18 @@
|
|
|
1
|
+
require 'rails_admin/config/base'
|
|
2
|
+
require 'rails_admin/config/hideable'
|
|
3
|
+
|
|
4
|
+
module RailsAdmin
|
|
5
|
+
module Config
|
|
6
|
+
module Sections
|
|
7
|
+
# Configuration of the navigation view
|
|
8
|
+
class Export < RailsAdmin::Config::Base
|
|
9
|
+
include RailsAdmin::Config::HasFields
|
|
10
|
+
|
|
11
|
+
def initialize(parent)
|
|
12
|
+
super(parent)
|
|
13
|
+
@fields = RailsAdmin::Config::Fields.factory(self)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'rails_admin/config/base'
|
|
2
|
+
require 'rails_admin/config/hideable'
|
|
3
|
+
require 'rails_admin/config/fields'
|
|
4
|
+
require 'rails_admin/config/has_fields'
|
|
5
|
+
|
|
6
|
+
module RailsAdmin
|
|
7
|
+
module Config
|
|
8
|
+
module Sections
|
|
9
|
+
# Configuration of the list view
|
|
10
|
+
class List < RailsAdmin::Config::Base
|
|
11
|
+
include RailsAdmin::Config::HasFields
|
|
12
|
+
|
|
13
|
+
def initialize(parent)
|
|
14
|
+
super(parent)
|
|
15
|
+
# Populate @fields instance variable with model's properties
|
|
16
|
+
@fields = RailsAdmin::Config::Fields.factory(self)
|
|
17
|
+
@fields.each do |f|
|
|
18
|
+
if f.association? && !f.kind_of?(RailsAdmin::Config::Fields::Types::BelongsToAssociation)
|
|
19
|
+
f.visible false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.default_items_per_page
|
|
25
|
+
ActiveSupport::Deprecation.warn("'#{self.name}.default_items_per_page' is deprecated, use 'RailsAdmin::Config.default_items_per_page' instead", caller)
|
|
26
|
+
RailsAdmin::Config.default_items_per_page
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.default_items_per_page=(value)
|
|
30
|
+
ActiveSupport::Deprecation.warn("'#{self.name}.default_items_per_page=' is deprecated, use 'RailsAdmin.config{|c| c.default_items_per_page = #{value}}' instead", caller)
|
|
31
|
+
RailsAdmin.config do |config|
|
|
32
|
+
config.default_items_per_page = value
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
register_instance_option :filters do
|
|
37
|
+
[]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Number of items listed per page
|
|
41
|
+
register_instance_option(:items_per_page) do
|
|
42
|
+
RailsAdmin::Config.default_items_per_page
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
register_instance_option(:sort_by) do
|
|
46
|
+
parent.abstract_model.model.primary_key
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
register_instance_option(:sort_reverse?) do
|
|
50
|
+
true # By default show latest first
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'rails_admin/config/base'
|
|
2
|
+
require 'rails_admin/config/hideable'
|
|
3
|
+
|
|
4
|
+
module RailsAdmin
|
|
5
|
+
module Config
|
|
6
|
+
module Sections
|
|
7
|
+
# Configuration of the navigation view
|
|
8
|
+
class Navigation < RailsAdmin::Config::Base
|
|
9
|
+
# Defines the number of tabs to be renderer in the main navigation.
|
|
10
|
+
# Rest of the links will be rendered to a drop down menu.
|
|
11
|
+
# NOTE: "max_visible_tabs" is deprecated
|
|
12
|
+
# FIXME: remove this after giving people an appropriate time
|
|
13
|
+
# to change their code.
|
|
14
|
+
register_class_option(:max_visible_tabs) do
|
|
15
|
+
ActiveSupport::Deprecation.warn("Navigation.max_visible_tabs configuration option is deprecated", caller)
|
|
16
|
+
5
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'rails_admin/config/base'
|
|
2
|
+
require 'rails_admin/config/hideable'
|
|
3
|
+
require 'rails_admin/config/fields'
|
|
4
|
+
require 'rails_admin/config/has_fields'
|
|
5
|
+
require 'rails_admin/config/has_groups'
|
|
6
|
+
require 'rails_admin/config/fields/group'
|
|
7
|
+
|
|
8
|
+
module RailsAdmin
|
|
9
|
+
module Config
|
|
10
|
+
module Sections
|
|
11
|
+
# Configuration of the show view for a new object
|
|
12
|
+
class Show < RailsAdmin::Config::Base
|
|
13
|
+
include RailsAdmin::Config::HasFields
|
|
14
|
+
include RailsAdmin::Config::HasGroups
|
|
15
|
+
|
|
16
|
+
def self.default_hidden_fields
|
|
17
|
+
ActiveSupport::Deprecation.warn("'#{self.name}.default_hidden_fields' is deprecated, use 'RailsAdmin::Config.default_hidden_fields' instead", caller)
|
|
18
|
+
RailsAdmin::Config.default_hidden_fields
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.default_hidden_fields=(value)
|
|
22
|
+
ActiveSupport::Deprecation.warn("'#{self.name}.default_hidden_fields=' is deprecated, use 'RailsAdmin.config{|c| c.default_hidden_fields = #{value}}' instead", caller)
|
|
23
|
+
RailsAdmin.config do |config|
|
|
24
|
+
config.default_hidden_fields = value
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def initialize(parent)
|
|
29
|
+
super(parent)
|
|
30
|
+
# Populate @fields instance variable with model's properties
|
|
31
|
+
@groups = [ RailsAdmin::Config::Fields::Group.new(self, :default) ]
|
|
32
|
+
@groups.first.label do
|
|
33
|
+
I18n.translate("admin.new.basic_info")
|
|
34
|
+
end
|
|
35
|
+
@fields = RailsAdmin::Config::Fields.factory(self)
|
|
36
|
+
@fields.each do |f|
|
|
37
|
+
if f.association? && f.type != :belongs_to_association
|
|
38
|
+
f.group f.label.to_sym
|
|
39
|
+
else
|
|
40
|
+
f.group :default
|
|
41
|
+
end
|
|
42
|
+
if f.serial? || RailsAdmin::Config.default_hidden_fields.include?(f.name)
|
|
43
|
+
f.hide
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rails'
|
|
2
|
+
require 'jquery-rails'
|
|
3
|
+
require 'remotipart'
|
|
4
|
+
require 'bootstrap-sass'
|
|
5
|
+
require 'kaminari'
|
|
6
|
+
require 'rails_admin'
|
|
7
|
+
|
|
8
|
+
module RailsAdmin
|
|
9
|
+
class Engine < Rails::Engine
|
|
10
|
+
isolate_namespace RailsAdmin
|
|
11
|
+
initializer "RailsAdmin precompile hook" do |app|
|
|
12
|
+
app.config.assets.precompile += ['rails_admin/rails_admin.js', 'rails_admin/rails_admin.css', 'rails_admin/jquery.colorpicker.js', 'rails_admin/jquery.colorpicker.css']
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module RailsAdmin
|
|
2
|
+
EXTENSIONS = []
|
|
3
|
+
AUTHORIZATION_ADAPTERS = {}
|
|
4
|
+
CONFIGURATION_ADAPTERS = {}
|
|
5
|
+
|
|
6
|
+
# Extend RailsAdmin
|
|
7
|
+
#
|
|
8
|
+
# The extension may define various adapters (e.g., for authorization) and
|
|
9
|
+
# register those via the options hash.
|
|
10
|
+
def self.add_extension(extension_key, extension_definition, options = {})
|
|
11
|
+
options.assert_valid_keys(:authorization, :configuration)
|
|
12
|
+
|
|
13
|
+
EXTENSIONS << extension_key
|
|
14
|
+
|
|
15
|
+
if(authorization = options[:authorization])
|
|
16
|
+
AUTHORIZATION_ADAPTERS[extension_key] = extension_definition::AuthorizationAdapter
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
if(configuration = options[:configuration])
|
|
20
|
+
CONFIGURATION_ADAPTERS[extension_key] = extension_definition::ConfigurationAdapter
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module RailsAdmin
|
|
2
|
+
module Extensions
|
|
3
|
+
module CanCan
|
|
4
|
+
# This adapter is for the CanCan[https://github.com/ryanb/cancan] authorization library.
|
|
5
|
+
# You can create another adapter for different authorization behavior, just be certain it
|
|
6
|
+
# responds to each of the public methods here.
|
|
7
|
+
class AuthorizationAdapter
|
|
8
|
+
# See the +authorize_with+ config method for where the initialization happens.
|
|
9
|
+
def initialize(controller)
|
|
10
|
+
@controller = controller
|
|
11
|
+
@controller.extend ControllerExtension
|
|
12
|
+
@controller.current_ability.authorize! :access, :rails_admin
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# This method is called in every controller action and should raise an exception
|
|
16
|
+
# when the authorization fails. The first argument is the name of the controller
|
|
17
|
+
# action as a symbol (:create, :bulk_delete, etc.). The second argument is the
|
|
18
|
+
# AbstractModel instance that applies. The third argument is the actual model
|
|
19
|
+
# instance if it is available.
|
|
20
|
+
def authorize(action, abstract_model = nil, model_object = nil)
|
|
21
|
+
action = translate_action(action)
|
|
22
|
+
@controller.current_ability.authorize!(action, model_object || abstract_model && abstract_model.model) if action
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# This method is called primarily from the view to determine whether the given user
|
|
26
|
+
# has access to perform the action on a given model. It should return true when authorized.
|
|
27
|
+
# This takes the same arguments as +authorize+. The difference is that this will
|
|
28
|
+
# return a boolean whereas +authorize+ will raise an exception when not authorized.
|
|
29
|
+
def authorized?(action, abstract_model = nil, model_object = nil)
|
|
30
|
+
action = translate_action(action)
|
|
31
|
+
@controller.current_ability.can?(action, model_object || abstract_model && abstract_model.model) if action
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# This is called when needing to scope a database query. It is called within the list
|
|
35
|
+
# and bulk_delete/destroy actions and should return a scope which limits the records
|
|
36
|
+
# to those which the user can perform the given action on.
|
|
37
|
+
def query(action, abstract_model)
|
|
38
|
+
action = translate_action(action)
|
|
39
|
+
abstract_model.model.accessible_by(@controller.current_ability, action)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# This is called in the new/create actions to determine the initial attributes for new
|
|
43
|
+
# records. It should return a hash of attributes which match what the user
|
|
44
|
+
# is authorized to create.
|
|
45
|
+
def attributes_for(action, abstract_model)
|
|
46
|
+
action = translate_action(action)
|
|
47
|
+
@controller.current_ability.attributes_for(action, abstract_model && abstract_model.model)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
# Change the action into something that fits better with CanCan's conventions
|
|
53
|
+
def translate_action(action)
|
|
54
|
+
case action
|
|
55
|
+
when :list, :bulk_action then :index
|
|
56
|
+
when :delete, :bulk_destroy, :bulk_delete then :destroy
|
|
57
|
+
else action
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
module ControllerExtension
|
|
62
|
+
def current_ability
|
|
63
|
+
# use _current_user instead of default current_user so it works with
|
|
64
|
+
# whatever current user method is defined with RailsAdmin
|
|
65
|
+
@current_ability ||= ::Ability.new(_current_user)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
|
2
|
+
module RailsAdmin
|
|
3
|
+
class AbstractModel
|
|
4
|
+
module GenericSupport
|
|
5
|
+
def to_param
|
|
6
|
+
parts = model.to_s.split("::")
|
|
7
|
+
parts.map{|x| x == parts.last ? x.underscore.pluralize : x.underscore}.join("~")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def pretty_name
|
|
11
|
+
model.model_name.human
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'i18n'
|
|
2
|
+
|
|
3
|
+
module RailsAdmin
|
|
4
|
+
module I18nSupport
|
|
5
|
+
def abbr_day_names
|
|
6
|
+
begin
|
|
7
|
+
I18n.t('date.abbr_day_names', :raise => true)
|
|
8
|
+
rescue I18n::ArgumentError
|
|
9
|
+
I18n.t('date.abbr_day_names', :locale => :en)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def abbr_month_names
|
|
14
|
+
begin
|
|
15
|
+
names = I18n.t('date.abbr_month_names', :raise => true)
|
|
16
|
+
rescue I18n::ArgumentError
|
|
17
|
+
names = I18n.t('date.abbr_month_names', :locale => :en)
|
|
18
|
+
end
|
|
19
|
+
names[1..-1]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def date_format
|
|
23
|
+
I18n.t('date.formats.default', :default => I18n.t('date.formats.default', :locale => :en))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def day_names
|
|
27
|
+
begin
|
|
28
|
+
I18n.t('date.day_names', :raise => true)
|
|
29
|
+
rescue I18n::ArgumentError
|
|
30
|
+
I18n.t('date.day_names', :locale => :en)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def month_names
|
|
35
|
+
begin
|
|
36
|
+
names = I18n.t('date.month_names', :raise => true)
|
|
37
|
+
rescue I18n::ArgumentError
|
|
38
|
+
names = I18n.t('date.month_names', :locale => :en)
|
|
39
|
+
end
|
|
40
|
+
names[1..-1]
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class Hash
|
|
2
|
+
|
|
3
|
+
def symbolize
|
|
4
|
+
Hash.symbolize_hash(self)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def self.symbolize_hash(obj)
|
|
8
|
+
case obj
|
|
9
|
+
when Array
|
|
10
|
+
obj.inject([]){|res, val|
|
|
11
|
+
res << case val
|
|
12
|
+
when Hash, Array
|
|
13
|
+
symbolize_hash(val)
|
|
14
|
+
when String
|
|
15
|
+
val.to_sym
|
|
16
|
+
else
|
|
17
|
+
val
|
|
18
|
+
end
|
|
19
|
+
res
|
|
20
|
+
}
|
|
21
|
+
when Hash
|
|
22
|
+
obj.inject({}){|res, (key, val)|
|
|
23
|
+
nkey = case key
|
|
24
|
+
when String
|
|
25
|
+
key.to_sym
|
|
26
|
+
else
|
|
27
|
+
key
|
|
28
|
+
end
|
|
29
|
+
nval = case val
|
|
30
|
+
when Hash, Array
|
|
31
|
+
symbolize_hash(val)
|
|
32
|
+
when String
|
|
33
|
+
val.to_sym
|
|
34
|
+
else
|
|
35
|
+
val
|
|
36
|
+
end
|
|
37
|
+
res[nkey] = nval
|
|
38
|
+
res
|
|
39
|
+
}
|
|
40
|
+
else
|
|
41
|
+
obj
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require RUBY_VERSION < '1.9' ? 'fastercsv' : 'csv'
|
|
3
|
+
|
|
4
|
+
module RailsAdmin
|
|
5
|
+
|
|
6
|
+
CSVClass = RUBY_VERSION < '1.9' ? ::FasterCSV : ::CSV
|
|
7
|
+
NON_ASCII_ENCODINGS = /(UTF\-16)|(UTF\-32)|(ISO\-2022\-JP)|(Big5\-HKSCS)|(UTF\-7)/
|
|
8
|
+
|
|
9
|
+
class CSVConverter
|
|
10
|
+
|
|
11
|
+
def initialize(objects = [], schema = {})
|
|
12
|
+
return self if (@objects = objects).blank?
|
|
13
|
+
|
|
14
|
+
@model = objects.first.class
|
|
15
|
+
@abstract_model = RailsAdmin::AbstractModel.new(@model)
|
|
16
|
+
@model_config = RailsAdmin.config(@abstract_model)
|
|
17
|
+
@methods = [(schema[:only] || []) + (schema[:methods] || [])].flatten.compact
|
|
18
|
+
@fields = @model_config.export.fields.select{|f| @methods.include? f.name }
|
|
19
|
+
@empty = ::I18n.t('admin.export.empty_value_for_associated_objects')
|
|
20
|
+
@associations = {}
|
|
21
|
+
|
|
22
|
+
(schema.delete(:include) || {}).each do |key, values|
|
|
23
|
+
association = @abstract_model.associations.find{ |association| association[:name] == key }
|
|
24
|
+
model = association[:type] == :belongs_to ? association[:parent_model] : association[:child_model]
|
|
25
|
+
abstract_model = RailsAdmin::AbstractModel.new(model)
|
|
26
|
+
model_config = RailsAdmin.config(abstract_model)
|
|
27
|
+
methods = [(values[:only] || []) + (values[:methods] || [])].flatten.compact
|
|
28
|
+
fields = model_config.export.fields.select{|f| methods.include? f.name }
|
|
29
|
+
|
|
30
|
+
@associations[key] = {
|
|
31
|
+
:association => association,
|
|
32
|
+
:model => model,
|
|
33
|
+
:abstract_model => abstract_model,
|
|
34
|
+
:model_config => model_config,
|
|
35
|
+
:fields => fields
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def to_csv(options)
|
|
41
|
+
options ||= {}
|
|
42
|
+
return '' if @objects.blank?
|
|
43
|
+
|
|
44
|
+
# encoding shenanigans first
|
|
45
|
+
@encoding_from = if [nil, '', 'utf8', 'utf-8', 'UTF8', 'UTF-8'].include?(encoding = Rails.configuration.database_configuration[Rails.env]['encoding'])
|
|
46
|
+
'UTF-8'
|
|
47
|
+
else
|
|
48
|
+
encoding
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
unless options[:encoding_to].blank?
|
|
52
|
+
@encoding_to = options[:encoding_to]
|
|
53
|
+
unless @encoding_to == @encoding_from
|
|
54
|
+
require 'iconv'
|
|
55
|
+
@iconv = (Iconv.new("#{@encoding_to}//TRANSLIT//IGNORE", @encoding_from) rescue (Rails.logger.error("Iconv cannot convert to #{@encoding_to}: #{$!}\nNo conversion will take place"); nil))
|
|
56
|
+
end
|
|
57
|
+
else
|
|
58
|
+
@encoding_to = @encoding_from
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
csv_string = CSVClass.generate(options[:generator] ? options[:generator].symbolize_keys.delete_if {|key, value| value.blank? } : {}) do |csv|
|
|
62
|
+
unless options[:skip_header]
|
|
63
|
+
csv << @fields.map do |field|
|
|
64
|
+
output(::I18n.t('admin.export.csv.header_for_root_methods', :name => field.label, :model => @abstract_model.pretty_name))
|
|
65
|
+
end +
|
|
66
|
+
@associations.map do |association_name, option_hash|
|
|
67
|
+
option_hash[:fields].map do |field|
|
|
68
|
+
output(::I18n.t('admin.export.csv.header_for_association_methods', :name => field.label, :association => @model_config.export.fields.find{|f| f.name == association_name }.label))
|
|
69
|
+
end
|
|
70
|
+
end.flatten
|
|
71
|
+
end
|
|
72
|
+
@objects.each do |o|
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
csv << @fields.map do |field|
|
|
76
|
+
output(field.with(:object => o).export_value)
|
|
77
|
+
end +
|
|
78
|
+
@associations.map do |association_name, option_hash|
|
|
79
|
+
|
|
80
|
+
associated_objects = [o.send(association_name)].flatten.compact
|
|
81
|
+
option_hash[:fields].map do |field|
|
|
82
|
+
output(associated_objects.map{ |ao| field.with(:object => ao).export_value.presence || @empty }.join(','))
|
|
83
|
+
end
|
|
84
|
+
end.flatten
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Add a BOM for utf8 encodings, helps with utf8 auto-detect for some versions of Excel.
|
|
89
|
+
# Don't add if utf8 but user don't want to touch input encoding:
|
|
90
|
+
# If user chooses utf8, he will open it in utf8 and BOM will disappear at reading.
|
|
91
|
+
# But that way "English" users who don't bother and chooses to let utf8 by default won't get BOM added
|
|
92
|
+
# and will not see it if Excel opens the file with a different encoding.
|
|
93
|
+
csv_string = "\xEF\xBB\xBF#{csv_string.respond_to?(:force_encoding) ? csv_string.force_encoding('UTF-8') : csv_string}" if options[:encoding_to] == 'UTF-8'
|
|
94
|
+
csv_string = ((@iconv ? @iconv.iconv(csv_string) : csv_string) rescue str) if @encoding_to =~ NON_ASCII_ENCODINGS # global conversion for non ASCII encodings
|
|
95
|
+
[!options[:skip_header], @encoding_to, csv_string]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
private
|
|
99
|
+
|
|
100
|
+
def output(str)
|
|
101
|
+
unless @encoding_to =~ NON_ASCII_ENCODINGS # can't use the csv generator with encodings that are no supersets of ASCII-7
|
|
102
|
+
(@iconv ? @iconv.iconv(str.to_s) : str.to_s) rescue str.to_s # convert piece by piece
|
|
103
|
+
else
|
|
104
|
+
str.to_s
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|