nsm-activeadmin 0.2.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/.document +5 -0
- data/.gitignore +34 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.rdoc +76 -0
- data/Gemfile +39 -0
- data/LICENSE +25 -0
- data/README.rdoc +487 -0
- data/Rakefile +27 -0
- data/activeadmin.gemspec +28 -0
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js +12 -0
- data/app/assets/javascripts/active_admin/vendor.js +382 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +400 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +256 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +110 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +40 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +8 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
- data/app/views/active_admin/devise/shared/_links.erb +20 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +20 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
- data/cucumber.yml +2 -0
- data/docs/1-general-configuration.md +52 -0
- data/docs/2-resource-customization.md +35 -0
- data/docs/3-index-pages.md +55 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +74 -0
- data/docs/4-csv-format.md +14 -0
- data/docs/5-forms.md +39 -0
- data/docs/6-show-screens.md +22 -0
- data/docs/7-sidebars.md +35 -0
- data/docs/8-custom-actions.md +123 -0
- data/features/comments/commenting.feature +112 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +26 -0
- data/features/edit_page.feature +106 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/format_as_csv.feature +46 -0
- data/features/index/formats.feature +12 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +50 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +81 -0
- data/features/index/index_blank_slate.feature +55 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +17 -0
- data/features/menu.feature +26 -0
- data/features/new_page.feature +75 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_resources.feature +33 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +33 -0
- data/features/sidebar_sections.feature +127 -0
- data/features/specifying_actions.feature +87 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +77 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +13 -0
- data/features/step_definitions/comment_steps.rb +8 -0
- data/features/step_definitions/configuration_steps.rb +31 -0
- data/features/step_definitions/dashboard_steps.rb +11 -0
- data/features/step_definitions/factory_steps.rb +29 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +35 -0
- data/features/step_definitions/index_scope_steps.rb +20 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/menu_steps.rb +7 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +7 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +26 -0
- data/features/step_definitions/web_steps.rb +211 -0
- data/features/sti_resource.feature +61 -0
- data/features/support/env.rb +90 -0
- data/features/support/paths.rb +50 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin.rb +74 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +228 -0
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/attributes.rb +20 -0
- data/lib/active_admin/arbre/class_list.rb +28 -0
- data/lib/active_admin/arbre/collection.rb +27 -0
- data/lib/active_admin/arbre/context.rb +14 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/document.rb +42 -0
- data/lib/active_admin/arbre/element.rb +151 -0
- data/lib/active_admin/arbre/html.rb +84 -0
- data/lib/active_admin/arbre/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/tag.rb +137 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/asset_registration.rb +34 -0
- data/lib/active_admin/callbacks.rb +89 -0
- data/lib/active_admin/comments.rb +88 -0
- data/lib/active_admin/comments/comment.rb +21 -0
- data/lib/active_admin/comments/configuration.rb +18 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards.rb +48 -0
- data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
- data/lib/active_admin/dashboards/section.rb +34 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +224 -0
- data/lib/active_admin/engine.rb +4 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +109 -0
- data/lib/active_admin/helpers/optional_display.rb +34 -0
- data/lib/active_admin/helpers/settings.rb +63 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/locales/da.yml +28 -0
- data/lib/active_admin/locales/en.yml +40 -0
- data/lib/active_admin/locales/es.yml +39 -0
- data/lib/active_admin/locales/it.yml +39 -0
- data/lib/active_admin/locales/pt-BR.yml +36 -0
- data/lib/active_admin/locales/ru.yml +40 -0
- data/lib/active_admin/locales/zh_cn.yml +40 -0
- data/lib/active_admin/menu.rb +42 -0
- data/lib/active_admin/menu_item.rb +73 -0
- data/lib/active_admin/namespace.rb +206 -0
- data/lib/active_admin/page_config.rb +15 -0
- data/lib/active_admin/reloader.rb +30 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource.rb +151 -0
- data/lib/active_admin/resource/action_items.rb +88 -0
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource/menu.rb +45 -0
- data/lib/active_admin/resource/naming.rb +36 -0
- data/lib/active_admin/resource/scopes.rb +33 -0
- data/lib/active_admin/resource/sidebars.rb +36 -0
- data/lib/active_admin/resource_controller.rb +103 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +79 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +144 -0
- data/lib/active_admin/resource_controller/filters.rb +58 -0
- data/lib/active_admin/resource_controller/form.rb +42 -0
- data/lib/active_admin/resource_controller/menu.rb +29 -0
- data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
- data/lib/active_admin/resource_controller/scoping.rb +36 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/sass/active_admin.scss +3 -0
- data/lib/active_admin/sass/css_loader.rb +16 -0
- data/lib/active_admin/sass/helpers.rb +40 -0
- data/lib/active_admin/scope.rb +17 -0
- data/lib/active_admin/sidebar_section.rb +41 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +23 -0
- data/lib/active_admin/view_helpers.rb +22 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
- data/lib/active_admin/view_helpers/display_helper.rb +38 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
- data/lib/active_admin/view_helpers/form_helper.rb +13 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
- data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/attributes_table.rb +66 -0
- data/lib/active_admin/views/components/blank_slate.rb +33 -0
- data/lib/active_admin/views/components/columns.rb +47 -0
- data/lib/active_admin/views/components/paginated_collection.rb +92 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +70 -0
- data/lib/active_admin/views/components/sidebar_section.rb +28 -0
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +193 -0
- data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
- data/lib/active_admin/views/header_renderer.rb +53 -0
- data/lib/active_admin/views/index_as_block.rb +29 -0
- data/lib/active_admin/views/index_as_blog.rb +129 -0
- data/lib/active_admin/views/index_as_grid.rb +70 -0
- data/lib/active_admin/views/index_as_table.rb +148 -0
- data/lib/active_admin/views/pages/base.rb +155 -0
- data/lib/active_admin/views/pages/dashboard.rb +62 -0
- data/lib/active_admin/views/pages/edit.rb +28 -0
- data/lib/active_admin/views/pages/index.rb +74 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/new.rb +28 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +58 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
- data/lib/generators/active_admin/install/install_generator.rb +44 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +93 -0
- data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/script/local +44 -0
- data/script/use_rails +45 -0
- data/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/integration/default_namespace.rb +77 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +157 -0
- data/spec/support/detect_rails_version.rb +11 -0
- data/spec/support/integration_example_group.rb +33 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +32 -0
- data/spec/support/rails_template_with_data.rb +33 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +88 -0
- data/spec/unit/application_spec.rb +78 -0
- data/spec/unit/arbre/html/context_spec.rb +22 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +224 -0
- data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
- data/spec/unit/arbre/html/tag_spec.rb +63 -0
- data/spec/unit/arbre/html_spec.rb +210 -0
- data/spec/unit/asset_registration_spec.rb +37 -0
- data/spec/unit/auto_link_spec.rb +39 -0
- data/spec/unit/belongs_to_spec.rb +45 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +57 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/controller_filters_spec.rb +34 -0
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +56 -0
- data/spec/unit/dashboards_spec.rb +59 -0
- data/spec/unit/display_name_spec.rb +29 -0
- data/spec/unit/event_spec.rb +41 -0
- data/spec/unit/filter_form_builder_spec.rb +182 -0
- data/spec/unit/form_builder_spec.rb +239 -0
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +53 -0
- data/spec/unit/namespace_spec.rb +214 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/rails_spec.rb +43 -0
- data/spec/unit/registration_spec.rb +76 -0
- data/spec/unit/reloader_spec.rb +28 -0
- data/spec/unit/renderer_spec.rb +108 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +80 -0
- data/spec/unit/resource/naming_spec.rb +56 -0
- data/spec/unit/resource/scopes_spec.rb +30 -0
- data/spec/unit/resource/sidebars_spec.rb +50 -0
- data/spec/unit/resource_controller/collection_spec.rb +34 -0
- data/spec/unit/resource_controller_spec.rb +152 -0
- data/spec/unit/resource_spec.rb +260 -0
- data/spec/unit/routing_spec.rb +88 -0
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +85 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/views/components/attributes_table_spec.rb +100 -0
- data/spec/unit/views/components/blank_slate_spec.rb +31 -0
- data/spec/unit/views/components/columns_spec.rb +75 -0
- data/spec/unit/views/components/panel_spec.rb +31 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/status_tag_spec.rb +81 -0
- data/spec/unit/views/components/table_for_spec.rb +130 -0
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +49 -0
- data/tasks/yard.rake +6 -0
- metadata +510 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# The Active Admin DSL. This class is where all the registration blocks
|
|
5
|
+
# are instance eval'd. This is the central place for the API given to
|
|
6
|
+
# users of Active Admin
|
|
7
|
+
#
|
|
8
|
+
class DSL
|
|
9
|
+
|
|
10
|
+
# Runs the registration block inside this object
|
|
11
|
+
def run_registration_block(config, &block)
|
|
12
|
+
@config = config
|
|
13
|
+
instance_eval &block
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
# The instance of ActiveAdmin::Resource that's being registered
|
|
19
|
+
# currently. You can use this within your registration blocks to
|
|
20
|
+
# modify options:
|
|
21
|
+
#
|
|
22
|
+
# eg:
|
|
23
|
+
#
|
|
24
|
+
# ActiveAdmin.register Post do
|
|
25
|
+
# config.admin_notes = false
|
|
26
|
+
# end
|
|
27
|
+
#
|
|
28
|
+
def config
|
|
29
|
+
@config
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Returns the controller for this resource. If you pass a
|
|
33
|
+
# block, it will be eval'd in the controller
|
|
34
|
+
#
|
|
35
|
+
# Example:
|
|
36
|
+
#
|
|
37
|
+
# ActiveAdmin.register Post do
|
|
38
|
+
#
|
|
39
|
+
# controller do
|
|
40
|
+
# def some_method_on_controller
|
|
41
|
+
# # Method gets added to Admin::PostsController
|
|
42
|
+
# end
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
def controller(&block)
|
|
48
|
+
@config.controller.class_eval(&block) if block_given?
|
|
49
|
+
@config.controller
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def belongs_to(target, options = {})
|
|
53
|
+
config.belongs_to(target, options)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def menu(options = {})
|
|
57
|
+
config.menu(options)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Scope this controller to some object which has a relation
|
|
61
|
+
# to the resource. Can either accept a block or a symbol
|
|
62
|
+
# of a method to call.
|
|
63
|
+
#
|
|
64
|
+
# Eg:
|
|
65
|
+
#
|
|
66
|
+
# ActiveAdmin.register Post do
|
|
67
|
+
# scope_to :current_user
|
|
68
|
+
# end
|
|
69
|
+
#
|
|
70
|
+
# Then every time we instantiate and object, it would call
|
|
71
|
+
#
|
|
72
|
+
# current_user.posts.build
|
|
73
|
+
#
|
|
74
|
+
# By default Active Admin will use the resource name to build a
|
|
75
|
+
# method to call as the association. If its different, you can
|
|
76
|
+
# pass in the association_method as an option.
|
|
77
|
+
#
|
|
78
|
+
# scope_to :current_user, :association_method => :blog_posts
|
|
79
|
+
#
|
|
80
|
+
# will result in the following
|
|
81
|
+
#
|
|
82
|
+
# current_user.blog_posts.build
|
|
83
|
+
#
|
|
84
|
+
def scope_to(*args, &block)
|
|
85
|
+
options = args.extract_options!
|
|
86
|
+
method = args.first
|
|
87
|
+
|
|
88
|
+
config.scope_to = block_given? ? block : method
|
|
89
|
+
config.scope_to_association_method = options[:association_method]
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Create a scope
|
|
93
|
+
def scope(*args, &block)
|
|
94
|
+
config.scope(*args, &block)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Add a new action item to the resource
|
|
98
|
+
#
|
|
99
|
+
# @param [Hash] options valid keys include:
|
|
100
|
+
# :only: A single or array of controller actions to display
|
|
101
|
+
# this action item on.
|
|
102
|
+
# :except: A single or array of controller actions not to
|
|
103
|
+
# display this action item on.
|
|
104
|
+
def action_item(options = {}, &block)
|
|
105
|
+
config.add_action_item(options, &block)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Configure the index page for the resource
|
|
109
|
+
def index(options = {}, &block)
|
|
110
|
+
options[:as] ||= :table
|
|
111
|
+
controller.set_page_config :index, options, &block
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Configure the show page for the resource
|
|
115
|
+
def show(options = {}, &block)
|
|
116
|
+
# TODO: controller.set_page_config just sets page_configs on the Resource (config) obj
|
|
117
|
+
controller.set_page_config :show, options, &block
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def form(options = {}, &block)
|
|
121
|
+
options[:block] = block
|
|
122
|
+
controller.form_config = options
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def sidebar(name, options = {}, &block)
|
|
126
|
+
config.sidebar_sections << ActiveAdmin::SidebarSection.new(name, options, &block)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Configure the CSV format
|
|
130
|
+
#
|
|
131
|
+
# For example:
|
|
132
|
+
#
|
|
133
|
+
# csv do
|
|
134
|
+
# column :name
|
|
135
|
+
# column("Author") { |post| post.author.full_name }
|
|
136
|
+
# end
|
|
137
|
+
#
|
|
138
|
+
def csv(&block)
|
|
139
|
+
config.csv_builder = CSVBuilder.new(&block)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Member Actions give you the functionality of defining both the
|
|
143
|
+
# action and the route directly from your ActiveAdmin registration
|
|
144
|
+
# block.
|
|
145
|
+
#
|
|
146
|
+
# For example:
|
|
147
|
+
#
|
|
148
|
+
# ActiveAdmin.register Post do
|
|
149
|
+
# member_action :comments do
|
|
150
|
+
# @post = Post.find(params[:id]
|
|
151
|
+
# @comments = @post.comments
|
|
152
|
+
# end
|
|
153
|
+
# end
|
|
154
|
+
#
|
|
155
|
+
# Will create a new controller action comments and will hook it up to
|
|
156
|
+
# the named route (comments_admin_post_path) /admin/posts/:id/comments
|
|
157
|
+
#
|
|
158
|
+
# You can treat everything within the block as a standard Rails controller
|
|
159
|
+
# action.
|
|
160
|
+
#
|
|
161
|
+
def member_action(name, options = {}, &block)
|
|
162
|
+
config.member_actions << ControllerAction.new(name, options)
|
|
163
|
+
controller do
|
|
164
|
+
define_method(name, &block || Proc.new{})
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def collection_action(name, options = {}, &block)
|
|
169
|
+
config.collection_actions << ControllerAction.new(name, options)
|
|
170
|
+
controller do
|
|
171
|
+
define_method(name, &block || Proc.new{})
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Defined Callbacks
|
|
176
|
+
#
|
|
177
|
+
# == After Build
|
|
178
|
+
# Called after the resource is built in the new and create actions.
|
|
179
|
+
#
|
|
180
|
+
# ActiveAdmin.register Post do
|
|
181
|
+
# after_build do |post|
|
|
182
|
+
# post.author = current_user
|
|
183
|
+
# end
|
|
184
|
+
# end
|
|
185
|
+
#
|
|
186
|
+
# == Before / After Create
|
|
187
|
+
# Called before and after a resource is saved to the db on the create action.
|
|
188
|
+
#
|
|
189
|
+
# == Before / After Update
|
|
190
|
+
# Called before and after a resource is saved to the db on the update action.
|
|
191
|
+
#
|
|
192
|
+
# == Before / After Save
|
|
193
|
+
# Called before and after the object is saved in the create and update action.
|
|
194
|
+
# Note: Gets called after the create and update callbacks
|
|
195
|
+
#
|
|
196
|
+
# == Before / After Destroy
|
|
197
|
+
# Called before and after the object is destroyed from the database.
|
|
198
|
+
#
|
|
199
|
+
delegate :before_build, :after_build, :to => :controller
|
|
200
|
+
delegate :before_create, :after_create, :to => :controller
|
|
201
|
+
delegate :before_update, :after_update, :to => :controller
|
|
202
|
+
delegate :before_save, :after_save, :to => :controller
|
|
203
|
+
delegate :before_destroy, :after_destroy, :to => :controller
|
|
204
|
+
|
|
205
|
+
# Filters
|
|
206
|
+
delegate :filter, :to => :controller
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
# Standard rails filters
|
|
210
|
+
delegate :before_filter, :skip_before_filter, :after_filter, :around_filter, :to => :controller
|
|
211
|
+
|
|
212
|
+
# Specify which actions to create in the controller
|
|
213
|
+
#
|
|
214
|
+
# Eg:
|
|
215
|
+
#
|
|
216
|
+
# ActiveAdmin.register Post do
|
|
217
|
+
# actions :index, :show
|
|
218
|
+
# end
|
|
219
|
+
#
|
|
220
|
+
# Will only create the index and show actions (no create, update or delete)
|
|
221
|
+
delegate :actions, :to => :controller
|
|
222
|
+
|
|
223
|
+
end
|
|
224
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
class EventDispatcher
|
|
4
|
+
def initialize
|
|
5
|
+
@events = {}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def clear_all_subscribers!
|
|
9
|
+
@events = {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def subscribe(event, &block)
|
|
13
|
+
@events[event] ||= []
|
|
14
|
+
@events[event] << block
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def subscribers(event)
|
|
18
|
+
@events[event] || []
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def dispatch(event, *args)
|
|
22
|
+
subscribers(event).each do |subscriber|
|
|
23
|
+
subscriber.call(*args)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# ActiveAdmin::Event is set to a dispatcher
|
|
29
|
+
Event = EventDispatcher.new
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
require 'formtastic'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
class FormBuilder < ::Formtastic::SemanticFormBuilder
|
|
5
|
+
|
|
6
|
+
attr_reader :form_buffers
|
|
7
|
+
|
|
8
|
+
def initialize(*args)
|
|
9
|
+
@form_buffers = ["".html_safe]
|
|
10
|
+
super
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def inputs(*args, &block)
|
|
14
|
+
# Store that we are creating inputs without a block
|
|
15
|
+
@inputs_with_block = block_given? ? true : false
|
|
16
|
+
content = with_new_form_buffer { super }
|
|
17
|
+
form_buffers.last << content.html_safe
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# The input method returns a properly formatted string for
|
|
21
|
+
# its contents, so we want to skip the internal buffering
|
|
22
|
+
# while building up its contents
|
|
23
|
+
def input(*args)
|
|
24
|
+
content = with_new_form_buffer { super }
|
|
25
|
+
return content.html_safe unless @inputs_with_block
|
|
26
|
+
form_buffers.last << content.html_safe
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# The buttons method always needs to be wrapped in a new buffer
|
|
30
|
+
def buttons(*args, &block)
|
|
31
|
+
content = with_new_form_buffer do
|
|
32
|
+
block_given? ? super : super { commit_button_with_cancel_link }
|
|
33
|
+
end
|
|
34
|
+
form_buffers.last << content.html_safe
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def commit_button(*args)
|
|
38
|
+
content = with_new_form_buffer{ super }
|
|
39
|
+
form_buffers.last << content.html_safe
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def cancel_link(url = nil, html_options = {}, li_attributes = {})
|
|
43
|
+
li_attributes[:class] ||= "cancel"
|
|
44
|
+
url ||= {:action => "index"}
|
|
45
|
+
template.content_tag(:li, (template.link_to I18n.t('active_admin.cancel'), url, html_options), li_attributes)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def commit_button_with_cancel_link
|
|
49
|
+
content = commit_button
|
|
50
|
+
content << cancel_link
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def datepicker_input(method, options)
|
|
54
|
+
options = options.dup
|
|
55
|
+
options[:input_html] ||= {}
|
|
56
|
+
options[:input_html][:class] = [options[:input_html][:class], "datepicker"].compact.join(' ')
|
|
57
|
+
options[:input_html][:size] ||= "10"
|
|
58
|
+
string_input(method, options)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def has_many(association, options = {}, &block)
|
|
62
|
+
options = { :for => association }.merge(options)
|
|
63
|
+
options[:class] ||= ""
|
|
64
|
+
options[:class] << "inputs has_many_fields"
|
|
65
|
+
|
|
66
|
+
# Add Delete Links
|
|
67
|
+
form_block = proc do |has_many_form|
|
|
68
|
+
block.call(has_many_form) + if has_many_form.object.new_record?
|
|
69
|
+
template.content_tag :li do
|
|
70
|
+
template.link_to I18n.t('active_admin.has_many_delete'), "#", :onclick => "$(this).closest('.has_many_fields').remove(); return false;", :class => "button"
|
|
71
|
+
end
|
|
72
|
+
else
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
content = with_new_form_buffer do
|
|
77
|
+
template.content_tag :div, :class => "has_many #{association}" do
|
|
78
|
+
form_buffers.last << template.content_tag(:h3, association.to_s.titlecase)
|
|
79
|
+
inputs options, &form_block
|
|
80
|
+
|
|
81
|
+
# Capture the ADD JS
|
|
82
|
+
js = with_new_form_buffer do
|
|
83
|
+
inputs_for_nested_attributes :for => [association, object.class.reflect_on_association(association).klass.new],
|
|
84
|
+
:class => "inputs has_many_fields",
|
|
85
|
+
:for_options => {
|
|
86
|
+
:child_index => "NEW_RECORD"
|
|
87
|
+
}, &form_block
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
js = template.escape_javascript(js)
|
|
91
|
+
js = template.link_to I18n.t('active_admin.has_many_new', :model => association.to_s.singularize.titlecase), "#", :onclick => "$(this).before('#{js}'.replace(/NEW_RECORD/g, new Date().getTime())); return false;", :class => "button"
|
|
92
|
+
|
|
93
|
+
form_buffers.last << js.html_safe
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
form_buffers.last << content.html_safe
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
private
|
|
100
|
+
|
|
101
|
+
def with_new_form_buffer
|
|
102
|
+
form_buffers << "".html_safe
|
|
103
|
+
return_value = yield
|
|
104
|
+
form_buffers.pop
|
|
105
|
+
return_value
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
# Shareable module to give a #display_on?(action) method
|
|
4
|
+
# which returns true or false depending on an options hash.
|
|
5
|
+
#
|
|
6
|
+
# The options hash accepts:
|
|
7
|
+
#
|
|
8
|
+
# :only => :index
|
|
9
|
+
# :only => [:index, :show]
|
|
10
|
+
# :except => :index
|
|
11
|
+
# :except => [:index, :show]
|
|
12
|
+
#
|
|
13
|
+
# call #normalize_display_options! after @options has been set
|
|
14
|
+
# to ensure that the display options are setup correctly
|
|
15
|
+
|
|
16
|
+
module OptionalDisplay
|
|
17
|
+
def display_on?(action)
|
|
18
|
+
return @options[:only].include?(action.to_sym) if @options[:only]
|
|
19
|
+
return !@options[:except].include?(action.to_sym) if @options[:except]
|
|
20
|
+
true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def normalize_display_options!
|
|
26
|
+
if @options[:only]
|
|
27
|
+
@options[:only] = @options[:only].is_a?(Array) ? @options[:only] : [@options[:only]]
|
|
28
|
+
end
|
|
29
|
+
if @options[:except]
|
|
30
|
+
@options[:except] = @options[:except].is_a?(Array) ? @options[:except] : [@options[:except]]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
|
|
5
|
+
# Adds a class method to a class to create settings with default values.
|
|
6
|
+
#
|
|
7
|
+
# Example:
|
|
8
|
+
#
|
|
9
|
+
# class Configuration
|
|
10
|
+
# include ActiveAdmin::Settings
|
|
11
|
+
#
|
|
12
|
+
# setting :site_title, "Default Site Title"
|
|
13
|
+
#
|
|
14
|
+
# def initialize
|
|
15
|
+
# # You must call this method to initialize the defaults
|
|
16
|
+
# initialize_defaults!
|
|
17
|
+
# end
|
|
18
|
+
#
|
|
19
|
+
module Settings
|
|
20
|
+
extend ActiveSupport::Concern
|
|
21
|
+
|
|
22
|
+
module InstanceMethods
|
|
23
|
+
|
|
24
|
+
def default_settings
|
|
25
|
+
self.class.default_settings
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module ClassMethods
|
|
31
|
+
|
|
32
|
+
def setting(name, default)
|
|
33
|
+
default_settings[name] = default
|
|
34
|
+
attr_accessor(name)
|
|
35
|
+
|
|
36
|
+
# Create an accessor that grabs from the defaults
|
|
37
|
+
# if @name has not been set yet
|
|
38
|
+
class_eval <<-EOC, __FILE__, __LINE__ + 1
|
|
39
|
+
def #{name}
|
|
40
|
+
if instance_variable_defined? :@#{name}
|
|
41
|
+
@#{name}
|
|
42
|
+
else
|
|
43
|
+
default_settings[:#{name}]
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
EOC
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def deprecated_setting(name, default, message = nil)
|
|
50
|
+
message = message || "The #{name} setting is deprecated and will be removed."
|
|
51
|
+
setting(name, default)
|
|
52
|
+
|
|
53
|
+
ActiveAdmin::Deprecation.deprecate self, name, message
|
|
54
|
+
ActiveAdmin::Deprecation.deprecate self, :"#{name}=", message
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def default_settings
|
|
58
|
+
@default_settings ||= {}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|