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,85 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
module Config
|
3
|
+
module Actions
|
4
|
+
class Index < RailsAdmin::Config::Actions::Base
|
5
|
+
RailsAdmin::Config::Actions.register(self)
|
6
|
+
|
7
|
+
register_instance_option :collection do
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
register_instance_option :http_methods do
|
12
|
+
[:get, :post]
|
13
|
+
end
|
14
|
+
|
15
|
+
register_instance_option :route_fragment do
|
16
|
+
''
|
17
|
+
end
|
18
|
+
|
19
|
+
register_instance_option :breadcrumb_parent do
|
20
|
+
parent_model = bindings[:abstract_model].try(:config).try(:parent)
|
21
|
+
if am = parent_model && RailsAdmin.config(parent_model).try(:abstract_model)
|
22
|
+
[:index, am]
|
23
|
+
else
|
24
|
+
[:dashboard]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
register_instance_option :controller do
|
29
|
+
Proc.new do
|
30
|
+
@objects ||= list_entries
|
31
|
+
|
32
|
+
respond_to do |format|
|
33
|
+
|
34
|
+
format.html do
|
35
|
+
render @action.template_name, :status => (flash[:error].present? ? :not_found : 200)
|
36
|
+
end
|
37
|
+
|
38
|
+
format.json do
|
39
|
+
output = if params[:compact]
|
40
|
+
primary_key_method = @association ? @association.associated_primary_key : @model_config.abstract_model.primary_key
|
41
|
+
label_method = @model_config.object_label_method
|
42
|
+
@objects.map{ |o| { :id => o.send(primary_key_method).to_s, :label => o.send(label_method).to_s } }
|
43
|
+
else
|
44
|
+
@objects.to_json(@schema)
|
45
|
+
end
|
46
|
+
if params[:send_data]
|
47
|
+
send_data output, :filename => "#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.json"
|
48
|
+
else
|
49
|
+
render :json => output
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
format.xml do
|
54
|
+
output = @objects.to_xml(@schema)
|
55
|
+
if params[:send_data]
|
56
|
+
send_data output, :filename => "#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.xml"
|
57
|
+
else
|
58
|
+
render :xml => output
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
format.csv do
|
63
|
+
header, encoding, output = CSVConverter.new(@objects, @schema).to_csv(params[:csv_options])
|
64
|
+
if params[:send_data]
|
65
|
+
send_data output,
|
66
|
+
:type => "text/csv; charset=#{encoding}; #{"header=present" if header}",
|
67
|
+
:disposition => "attachment; filename=#{params[:model_name]}_#{DateTime.now.strftime("%Y-%m-%d_%Hh%Mm%S")}.csv"
|
68
|
+
else
|
69
|
+
render :text => output
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
register_instance_option :link_icon do
|
80
|
+
'icon-th-list'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
module Config
|
3
|
+
module Actions
|
4
|
+
class New < RailsAdmin::Config::Actions::Base
|
5
|
+
RailsAdmin::Config::Actions.register(self)
|
6
|
+
|
7
|
+
register_instance_option :collection do
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
register_instance_option :http_methods do
|
12
|
+
[:get, :post] # NEW / CREATE
|
13
|
+
end
|
14
|
+
|
15
|
+
register_instance_option :controller do
|
16
|
+
|
17
|
+
Proc.new do
|
18
|
+
|
19
|
+
if request.get? # NEW
|
20
|
+
|
21
|
+
@object = @abstract_model.new
|
22
|
+
@authorization_adapter && @authorization_adapter.attributes_for(:new, @abstract_model).each do |name, value|
|
23
|
+
@object.send("#{name}=", value)
|
24
|
+
end
|
25
|
+
if object_params = params[@abstract_model.to_param]
|
26
|
+
@object.set_attributes(@object.attributes.merge(object_params), _attr_accessible_role)
|
27
|
+
end
|
28
|
+
respond_to do |format|
|
29
|
+
format.html { render @action.template_name }
|
30
|
+
format.js { render @action.template_name, :layout => false }
|
31
|
+
end
|
32
|
+
|
33
|
+
elsif request.post? # CREATE
|
34
|
+
|
35
|
+
@modified_assoc = []
|
36
|
+
@object = @abstract_model.new
|
37
|
+
satisfy_strong_params!
|
38
|
+
sanitize_params_for!(request.xhr? ? :modal : :create)
|
39
|
+
|
40
|
+
@object.set_attributes(params[@abstract_model.param_key], _attr_accessible_role)
|
41
|
+
@authorization_adapter && @authorization_adapter.attributes_for(:create, @abstract_model).each do |name, value|
|
42
|
+
@object.send("#{name}=", value)
|
43
|
+
end
|
44
|
+
|
45
|
+
if @object.save
|
46
|
+
@auditing_adapter && @auditing_adapter.create_object(@object, @abstract_model, _current_user)
|
47
|
+
respond_to do |format|
|
48
|
+
format.html { redirect_to_on_success }
|
49
|
+
format.js { render :json => { :id => @object.id.to_s, :label => @model_config.with(:object => @object).object_label } }
|
50
|
+
end
|
51
|
+
else
|
52
|
+
handle_save_error
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
register_instance_option :link_icon do
|
60
|
+
'icon-plus'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
module Config
|
3
|
+
module Actions
|
4
|
+
class Show < RailsAdmin::Config::Actions::Base
|
5
|
+
RailsAdmin::Config::Actions.register(self)
|
6
|
+
|
7
|
+
register_instance_option :member do
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
register_instance_option :route_fragment do
|
12
|
+
''
|
13
|
+
end
|
14
|
+
|
15
|
+
register_instance_option :breadcrumb_parent do
|
16
|
+
[:index, bindings[:abstract_model]]
|
17
|
+
end
|
18
|
+
|
19
|
+
register_instance_option :controller do
|
20
|
+
Proc.new do
|
21
|
+
respond_to do |format|
|
22
|
+
format.json { render :json => @object }
|
23
|
+
format.html { render @action.template_name }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
register_instance_option :link_icon do
|
29
|
+
'icon-info-sign'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
module Config
|
3
|
+
module Actions
|
4
|
+
class ShowInApp < RailsAdmin::Config::Actions::Base
|
5
|
+
RailsAdmin::Config::Actions.register(self)
|
6
|
+
|
7
|
+
register_instance_option :member do
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
register_instance_option :visible? do
|
12
|
+
authorized? && (bindings[:controller].main_app.url_for(bindings[:object]) rescue false)
|
13
|
+
end
|
14
|
+
|
15
|
+
register_instance_option :controller do
|
16
|
+
Proc.new do
|
17
|
+
redirect_to main_app.url_for(@object)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
register_instance_option :link_icon do
|
22
|
+
'icon-eye-open'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
module Config
|
3
|
+
# A module for all configurables.
|
4
|
+
|
5
|
+
module Configurable
|
6
|
+
def self.included(base)
|
7
|
+
base.send :extend, ClassMethods
|
8
|
+
end
|
9
|
+
|
10
|
+
def has_option?(name)
|
11
|
+
options = self.class.instance_variable_get("@config_options")
|
12
|
+
options && options.has_key?(name)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Register an instance option for this object only
|
16
|
+
def register_instance_option(option_name, &default)
|
17
|
+
scope = class << self; self; end;
|
18
|
+
self.class.register_instance_option(option_name, scope, &default)
|
19
|
+
end
|
20
|
+
|
21
|
+
def register_deprecated_instance_option(option_name, replacement_option_name)
|
22
|
+
scope = class << self; self; end;
|
23
|
+
self.class.register_deprecated_instance_option(option_name, replacement_option_name, scope)
|
24
|
+
end
|
25
|
+
|
26
|
+
module ClassMethods
|
27
|
+
# Register an instance option. Instance option is a configuration
|
28
|
+
# option that stores its value within an instance variable and is
|
29
|
+
# accessed by an instance method. Both go by the name of the option.
|
30
|
+
def register_instance_option(option_name, scope = self, &default)
|
31
|
+
unless options = scope.instance_variable_get("@config_options")
|
32
|
+
options = scope.instance_variable_set("@config_options", {})
|
33
|
+
end
|
34
|
+
|
35
|
+
option_name = option_name.to_s
|
36
|
+
|
37
|
+
options[option_name] = nil
|
38
|
+
|
39
|
+
# If it's a boolean create an alias for it and remove question mark
|
40
|
+
if "?" == option_name[-1, 1]
|
41
|
+
scope.send(:define_method, "#{option_name.chop!}?") do
|
42
|
+
send(option_name)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Define getter/setter by the option name
|
47
|
+
scope.send(:define_method, option_name) do |*args, &block|
|
48
|
+
if !args[0].nil? || block
|
49
|
+
# Invocation with args --> This is the declaration of the option, i.e. setter
|
50
|
+
instance_variable_set("@#{option_name}_registered", args[0].nil? ? block : args[0])
|
51
|
+
else
|
52
|
+
# Invocation without args nor block --> It's the use of the option, i.e. getter
|
53
|
+
value = instance_variable_get("@#{option_name}_registered")
|
54
|
+
case value
|
55
|
+
when Proc
|
56
|
+
# Track recursive invocation with an instance variable. This prevents run-away recursion
|
57
|
+
# and allows configurations such as
|
58
|
+
# label { "#{label}".upcase }
|
59
|
+
# This will use the default definition when called recursively.
|
60
|
+
if instance_variable_get("@#{option_name}_recurring")
|
61
|
+
value = instance_eval &default
|
62
|
+
else
|
63
|
+
instance_variable_set("@#{option_name}_recurring", true)
|
64
|
+
value = instance_eval &value
|
65
|
+
instance_variable_set("@#{option_name}_recurring", false)
|
66
|
+
end
|
67
|
+
when nil
|
68
|
+
value = instance_eval &default
|
69
|
+
end
|
70
|
+
value
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def register_deprecated_instance_option(option_name, replacement_option_name, scope = self)
|
76
|
+
scope.send(:define_method, option_name) do |*args, &block|
|
77
|
+
ActiveSupport::Deprecation.warn("The #{option_name} configuration option is deprecated, please use #{replacement_option_name}.")
|
78
|
+
send(replacement_option_name, *args, &block)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Register a class option. Class option is a configuration
|
83
|
+
# option that stores it's value within a class object's instance variable
|
84
|
+
# and is accessed by a class method. Both go by the name of the option.
|
85
|
+
def register_class_option(option_name, &default)
|
86
|
+
scope = class << self; self; end;
|
87
|
+
self.register_instance_option(option_name, scope, &default)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
module Config
|
3
|
+
module Fields
|
4
|
+
# Default field factory loads fields based on their property type or
|
5
|
+
# association type.
|
6
|
+
#
|
7
|
+
# @see RailsAdmin::Config::Fields.registry
|
8
|
+
mattr_reader :default_factory
|
9
|
+
@@default_factory = lambda do |parent, properties, fields|
|
10
|
+
# If it's an association
|
11
|
+
if properties.has_key?(:model_proc)
|
12
|
+
association = parent.abstract_model.associations.find {|a| a[:name].to_s == properties[:name].to_s}
|
13
|
+
field = RailsAdmin::Config::Fields::Types.load("#{association[:polymorphic] ? :polymorphic : properties[:type]}_association").new(parent, properties[:name], association)
|
14
|
+
else
|
15
|
+
field = RailsAdmin::Config::Fields::Types.load(properties[:type]).new(parent, properties[:name], properties)
|
16
|
+
end
|
17
|
+
fields << field
|
18
|
+
field
|
19
|
+
end
|
20
|
+
|
21
|
+
# Registry of field factories.
|
22
|
+
#
|
23
|
+
# Field factory is an anonymous function that recieves the parent object,
|
24
|
+
# an array of field properties and an array of fields already instantiated.
|
25
|
+
#
|
26
|
+
# If the factory returns true then that property will not be run through
|
27
|
+
# the rest of the registered factories. If it returns false then the
|
28
|
+
# arguments will be passed to the next factory.
|
29
|
+
#
|
30
|
+
# By default a basic factory is registered which loads fields by their
|
31
|
+
# database column type. Also a password factory is registered which
|
32
|
+
# loads fields if their name is password. Third default factory is a
|
33
|
+
# devise specific factory which loads fields for devise user models.
|
34
|
+
#
|
35
|
+
# @see RailsAdmin::Config::Fields.register_factory
|
36
|
+
# @see rails_admin/config/fields/factories/password.rb
|
37
|
+
# @see rails_admin/config/fields/factories/devise.rb
|
38
|
+
@@registry = [@@default_factory]
|
39
|
+
|
40
|
+
# Build an array of fields by the provided parent object's abstract_model's
|
41
|
+
# property and association information. Each property and association is
|
42
|
+
# passed to the registered field factories which will populate the fields
|
43
|
+
# array that will be returned.
|
44
|
+
#
|
45
|
+
# @see RailsAdmin::Config::Fields.registry
|
46
|
+
def self.factory(parent)
|
47
|
+
fields = []
|
48
|
+
# Load fields for all properties (columns)
|
49
|
+
|
50
|
+
parent.abstract_model.properties.each do |properties|
|
51
|
+
# Unless a previous factory has already loaded current field as well
|
52
|
+
unless fields.find {|f| f.name == properties[:name] }
|
53
|
+
# Loop through factories until one returns true
|
54
|
+
@@registry.find {|factory| factory.call(parent, properties, fields) }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
# Load fields for all associations (relations)
|
58
|
+
parent.abstract_model.associations.select{|a| a[:type] != :belongs_to }.each do |association| # :belongs_to are created by factory for belongs_to fields
|
59
|
+
# Unless a previous factory has already loaded current field as well
|
60
|
+
unless fields.find {|f| f.name == association[:name] }
|
61
|
+
# Loop through factories until one returns true
|
62
|
+
@@registry.find {|factory| factory.call(parent, association, fields) }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
fields
|
66
|
+
end
|
67
|
+
|
68
|
+
# Register a field factory to be included in the factory stack.
|
69
|
+
#
|
70
|
+
# Factories are invoked lifo (last in first out).
|
71
|
+
#
|
72
|
+
# @see RailsAdmin::Config::Fields.registry
|
73
|
+
def self.register_factory(&block)
|
74
|
+
@@registry.unshift(block)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
require 'rails_admin/config/fields/types'
|
81
|
+
require 'rails_admin/config/fields/factories/password'
|
82
|
+
require 'rails_admin/config/fields/factories/enum'
|
83
|
+
require 'rails_admin/config/fields/factories/devise'
|
84
|
+
require 'rails_admin/config/fields/factories/paperclip'
|
85
|
+
require 'rails_admin/config/fields/factories/dragonfly'
|
86
|
+
require 'rails_admin/config/fields/factories/carrierwave'
|
87
|
+
require 'rails_admin/config/fields/factories/association'
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'rails_admin/config'
|
2
|
+
require 'rails_admin/config/fields/base'
|
3
|
+
|
4
|
+
module RailsAdmin
|
5
|
+
module Config
|
6
|
+
module Fields
|
7
|
+
class Association < RailsAdmin::Config::Fields::Base
|
8
|
+
|
9
|
+
def self.inherited(klass)
|
10
|
+
super(klass)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Reader for the association information hash
|
14
|
+
def association
|
15
|
+
@properties
|
16
|
+
end
|
17
|
+
|
18
|
+
register_instance_option :pretty_value do
|
19
|
+
v = bindings[:view]
|
20
|
+
[value].flatten.select(&:present?).map do |associated|
|
21
|
+
amc = polymorphic? ? RailsAdmin.config(associated) : associated_model_config # perf optimization for non-polymorphic associations
|
22
|
+
am = amc.abstract_model
|
23
|
+
wording = associated.send(amc.object_label_method)
|
24
|
+
can_see = !am.embedded? && (show_action = v.action(:show, am, associated))
|
25
|
+
can_see ? v.link_to(wording, v.url_for(:action => show_action.action_name, :model_name => am.to_param, :id => associated.id), :class => 'pjax') : wording
|
26
|
+
end.to_sentence.html_safe
|
27
|
+
end
|
28
|
+
|
29
|
+
# Accessor whether association is visible or not. By default
|
30
|
+
# association checks whether the child model is excluded in
|
31
|
+
# configuration or not.
|
32
|
+
register_instance_option :visible? do
|
33
|
+
@visible ||= !self.associated_model_config.excluded?
|
34
|
+
end
|
35
|
+
|
36
|
+
# use the association name as a key, not the association key anymore!
|
37
|
+
register_instance_option :label do
|
38
|
+
(@label ||= {})[::I18n.locale] ||= abstract_model.model.human_attribute_name association[:name]
|
39
|
+
end
|
40
|
+
|
41
|
+
# scope for possible associable records
|
42
|
+
register_instance_option :associated_collection_scope do
|
43
|
+
# bindings[:object] & bindings[:controller] available
|
44
|
+
associated_collection_scope_limit = (self.associated_collection_cache_all ? nil : 30)
|
45
|
+
Proc.new do |scope|
|
46
|
+
scope.limit(associated_collection_scope_limit)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# inverse relationship
|
51
|
+
register_instance_option :inverse_of do
|
52
|
+
association[:inverse_of]
|
53
|
+
end
|
54
|
+
|
55
|
+
# preload entire associated collection (per associated_collection_scope) on load
|
56
|
+
# Be sure to set limit in associated_collection_scope if set is large
|
57
|
+
register_instance_option :associated_collection_cache_all do
|
58
|
+
@associated_collection_cache_all ||= (associated_model_config.abstract_model.count < 100)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Reader for the association's child model's configuration
|
62
|
+
def associated_model_config
|
63
|
+
@associated_model_config ||= RailsAdmin.config(association[:model_proc].call)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Reader for the association's child model object's label method
|
67
|
+
def associated_object_label_method
|
68
|
+
@associated_object_label_method ||= associated_model_config.object_label_method
|
69
|
+
end
|
70
|
+
|
71
|
+
# Reader for associated primary key
|
72
|
+
def associated_primary_key
|
73
|
+
@associated_primary_key ||= association[:primary_key_proc].call
|
74
|
+
end
|
75
|
+
|
76
|
+
# Reader for the association's key
|
77
|
+
def foreign_key
|
78
|
+
association[:foreign_key]
|
79
|
+
end
|
80
|
+
|
81
|
+
# Reader whether this is a polymorphic association
|
82
|
+
def polymorphic?
|
83
|
+
association[:polymorphic]
|
84
|
+
end
|
85
|
+
|
86
|
+
# Reader for nested attributes
|
87
|
+
register_instance_option :nested_form do
|
88
|
+
association[:nested_form]
|
89
|
+
end
|
90
|
+
|
91
|
+
# Reader for the association's value unformatted
|
92
|
+
def value
|
93
|
+
bindings[:object].safe_send(association[:name])
|
94
|
+
end
|
95
|
+
|
96
|
+
# has many?
|
97
|
+
def multiple?
|
98
|
+
true
|
99
|
+
end
|
100
|
+
|
101
|
+
def virtual?
|
102
|
+
true
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|