andrewroth_activeadmin 0.3.4
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 +35 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +301 -0
- data/Gemfile +40 -0
- data/Guardfile +8 -0
- data/LICENSE +25 -0
- data/README.rdoc +113 -0
- data/Rakefile +18 -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 +363 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +259 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +121 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +102 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +125 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +68 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +10 -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/_utilities.scss +17 -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/0-installation.md +50 -0
- data/docs/1-general-configuration.md +43 -0
- data/docs/2-resource-customization.md +114 -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 +90 -0
- data/docs/4-csv-format.md +14 -0
- data/docs/5-forms.md +39 -0
- data/docs/6-show-screens.md +36 -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/filters.feature +35 -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 +56 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +17 -0
- data/features/menu.feature +37 -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 +96 -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 +82 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +231 -0
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/builder.rb +111 -0
- data/lib/active_admin/arbre/context.rb +45 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/html/attributes.rb +20 -0
- data/lib/active_admin/arbre/html/class_list.rb +28 -0
- data/lib/active_admin/arbre/html/collection.rb +27 -0
- data/lib/active_admin/arbre/html/document.rb +42 -0
- data/lib/active_admin/arbre/html/element.rb +151 -0
- data/lib/active_admin/arbre/html/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/html/tag.rb +137 -0
- data/lib/active_admin/arbre/html/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/dependency_checker.rb +30 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +54 -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 +118 -0
- data/lib/active_admin/helpers/optional_display.rb +34 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +70 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/locales/bg.yml +40 -0
- data/lib/active_admin/locales/cs.yml +34 -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 +40 -0
- data/lib/active_admin/locales/fr.yml +40 -0
- data/lib/active_admin/locales/it.yml +40 -0
- data/lib/active_admin/locales/ja.yml +40 -0
- data/lib/active_admin/locales/pl.yml +34 -0
- data/lib/active_admin/locales/pt-BR.yml +41 -0
- data/lib/active_admin/locales/ru.yml +40 -0
- data/lib/active_admin/locales/sv-SE.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 +64 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource.rb +159 -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 +50 -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 +105 -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 +138 -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 +45 -0
- data/lib/active_admin/scope.rb +31 -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 +17 -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 +69 -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 +57 -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 +164 -0
- data/lib/active_admin/views/pages/base.rb +167 -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 +91 -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/tabbed_navigation.rb +94 -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 +103 -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 +46 -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/memory_spec.rb +38 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +167 -0
- data/spec/support/detect_rails_version.rb +10 -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/active_admin_spec.rb +17 -0
- data/spec/unit/application_spec.rb +87 -0
- data/spec/unit/arbre/context_spec.rb +35 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +223 -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 +209 -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/devise_spec.rb +66 -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 +256 -0
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -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 +80 -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 +75 -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 +269 -0
- data/spec/unit/routing_spec.rb +88 -0
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +41 -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 +15 -0
- data/spec/unit/views/components/columns_spec.rb +75 -0
- data/spec/unit/views/components/panel_spec.rb +29 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/status_tag_spec.rb +79 -0
- data/spec/unit/views/components/table_for_spec.rb +131 -0
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +57 -0
- data/tasks/yard.rake +6 -0
- metadata +646 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Callbacks
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
module InstanceMethods
|
|
6
|
+
protected
|
|
7
|
+
|
|
8
|
+
# Simple callback system. Implements before and after callbacks for
|
|
9
|
+
# use within the controllers.
|
|
10
|
+
#
|
|
11
|
+
# We didn't use the ActiveSupport callbacks becuase they do not support
|
|
12
|
+
# passing in any arbitrary object into the callback method (which we
|
|
13
|
+
# need to do)
|
|
14
|
+
|
|
15
|
+
def call_callback_with(method, *args)
|
|
16
|
+
case method
|
|
17
|
+
when Symbol
|
|
18
|
+
send(method, *args)
|
|
19
|
+
when Proc
|
|
20
|
+
instance_exec(*args, &method)
|
|
21
|
+
else
|
|
22
|
+
raise "Please register with callbacks using a symbol or a block/proc."
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module ClassMethods
|
|
28
|
+
|
|
29
|
+
# Define a new callback.
|
|
30
|
+
#
|
|
31
|
+
# Example:
|
|
32
|
+
#
|
|
33
|
+
# class MyClassWithCallbacks
|
|
34
|
+
# include ActiveAdmin::Callbacks
|
|
35
|
+
#
|
|
36
|
+
# define_active_admin_callbacks :save
|
|
37
|
+
#
|
|
38
|
+
# before_save do |arg1, arg2|
|
|
39
|
+
# # runs before save
|
|
40
|
+
# end
|
|
41
|
+
#
|
|
42
|
+
# after_save :call_after_save
|
|
43
|
+
#
|
|
44
|
+
# def save
|
|
45
|
+
# # Will run before, yield, then after
|
|
46
|
+
# run_save_callbacks :arg1, :arg2 do
|
|
47
|
+
# save!
|
|
48
|
+
# end
|
|
49
|
+
# end
|
|
50
|
+
#
|
|
51
|
+
# protected
|
|
52
|
+
#
|
|
53
|
+
# def call_after_save(arg1, arg2)
|
|
54
|
+
# # runs after save
|
|
55
|
+
# end
|
|
56
|
+
# end
|
|
57
|
+
#
|
|
58
|
+
def define_active_admin_callbacks(*names)
|
|
59
|
+
names.each do |name|
|
|
60
|
+
[:before, :after].each do |type|
|
|
61
|
+
|
|
62
|
+
# Define a method to set the callback
|
|
63
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
64
|
+
# def self.before_create_callbacks
|
|
65
|
+
def self.#{type}_#{name}_callbacks
|
|
66
|
+
@#{type}_#{name}_callbacks ||= []
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# def self.before_create
|
|
70
|
+
def self.#{type}_#{name}(method = nil, &block)
|
|
71
|
+
#{type}_#{name}_callbacks << (method || block)
|
|
72
|
+
end
|
|
73
|
+
EOS
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Define a method to run the callbacks
|
|
77
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
78
|
+
def run_#{name}_callbacks(*args)
|
|
79
|
+
self.class.before_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
|
|
80
|
+
value = yield if block_given?
|
|
81
|
+
self.class.after_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
|
|
82
|
+
return value
|
|
83
|
+
end
|
|
84
|
+
EOS
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'active_admin/comments/configuration'
|
|
2
|
+
require 'active_admin/comments/comment'
|
|
3
|
+
require 'active_admin/comments/views'
|
|
4
|
+
require 'active_admin/comments/show_page_helper'
|
|
5
|
+
require 'active_admin/comments/namespace_helper'
|
|
6
|
+
require 'active_admin/comments/resource_helper'
|
|
7
|
+
|
|
8
|
+
# Add the comments configuration
|
|
9
|
+
ActiveAdmin::Application.send :include, ActiveAdmin::Comments::Configuration
|
|
10
|
+
|
|
11
|
+
# Add the comments module to ActiveAdmin::Namespace
|
|
12
|
+
ActiveAdmin::Namespace.send :include, ActiveAdmin::Comments::NamespaceHelper
|
|
13
|
+
|
|
14
|
+
# Add the comments module to ActiveAdmin::Resource
|
|
15
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
|
|
16
|
+
|
|
17
|
+
# Add the module to the show page
|
|
18
|
+
ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comments::ShowPageHelper
|
|
19
|
+
|
|
20
|
+
# Generate a Comment resource when namespaces are registered
|
|
21
|
+
ActiveAdmin::Event.subscribe ActiveAdmin::Namespace::RegisterEvent do |namespace|
|
|
22
|
+
if namespace.comments?
|
|
23
|
+
namespace.register ActiveAdmin::Comment, :as => 'Comment' do
|
|
24
|
+
actions :index, :show, :create
|
|
25
|
+
|
|
26
|
+
# Don't display in the menu
|
|
27
|
+
menu false
|
|
28
|
+
|
|
29
|
+
# Don't allow comments on comments
|
|
30
|
+
config.comments = false
|
|
31
|
+
|
|
32
|
+
# Filter Comments by date
|
|
33
|
+
filter :resource_type
|
|
34
|
+
filter :body
|
|
35
|
+
filter :created_at
|
|
36
|
+
|
|
37
|
+
# Only view comments in this namespace
|
|
38
|
+
scope :all, :default => true do |comments|
|
|
39
|
+
comments.where(:namespace => active_admin_config.namespace.name.to_s)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Always redirect to the resource on show
|
|
43
|
+
before_filter :only => :show do
|
|
44
|
+
flash[:notice] = flash[:notice].dup if flash[:notice]
|
|
45
|
+
comment = ActiveAdmin::Comment.find(params[:id])
|
|
46
|
+
resource_config = active_admin_config.namespace.resource_for(comment.resource.class)
|
|
47
|
+
redirect_to send(resource_config.route_instance_path, comment.resource)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Store the author and namespace
|
|
51
|
+
before_save do |comment|
|
|
52
|
+
comment.namespace = active_admin_config.namespace.name
|
|
53
|
+
comment.author = current_active_admin_user
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Redirect to the resource show page when failing to add a comment
|
|
57
|
+
# TODO: Provide helpers to make such kind of customization much simpler
|
|
58
|
+
controller do
|
|
59
|
+
def create
|
|
60
|
+
create! do |success, failure|
|
|
61
|
+
failure.html do
|
|
62
|
+
resource_config = active_admin_config.namespace.resource_for(@comment.resource.class)
|
|
63
|
+
flash[:error] = "Comment wasn't saved, text was empty."
|
|
64
|
+
redirect_to send(resource_config.route_instance_path, @comment.resource)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# Display as a table
|
|
72
|
+
index do
|
|
73
|
+
column("Resource"){|comment| auto_link(comment.resource) }
|
|
74
|
+
column("Author"){|comment| auto_link(comment.author) }
|
|
75
|
+
column :body
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Register for comments when new resources are registered
|
|
82
|
+
ActiveAdmin::Event.subscribe ActiveAdmin::Resource::RegisterEvent do |resource|
|
|
83
|
+
if resource.comments?
|
|
84
|
+
resource.resource.has_many :active_admin_comments, :class_name => "ActiveAdmin::Comment",
|
|
85
|
+
:as => :resource,
|
|
86
|
+
:dependent => :destroy
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'kaminari/models/active_record_extension'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
|
|
5
|
+
# manually initialize kaminari for this model
|
|
6
|
+
::ActiveRecord::Base.send :include, Kaminari::ActiveRecordExtension
|
|
7
|
+
|
|
8
|
+
class Comment < ActiveRecord::Base
|
|
9
|
+
self.table_name = "active_admin_comments"
|
|
10
|
+
|
|
11
|
+
belongs_to :resource, :polymorphic => true
|
|
12
|
+
belongs_to :author, :polymorphic => true
|
|
13
|
+
|
|
14
|
+
validates_presence_of :resource_id
|
|
15
|
+
validates_presence_of :resource_type
|
|
16
|
+
validates_presence_of :body
|
|
17
|
+
validates_presence_of :namespace
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Comments
|
|
3
|
+
|
|
4
|
+
module Configuration
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
# Set the namespaces that can create and view comments
|
|
9
|
+
#
|
|
10
|
+
# config.allow_comments_in = [:admin, :root]
|
|
11
|
+
#
|
|
12
|
+
setting :allow_comments_in, [:admin]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Comments
|
|
3
|
+
|
|
4
|
+
# Adds #active_admin_comments to the show page for use
|
|
5
|
+
# and sets it up on the default main content
|
|
6
|
+
module ShowPageHelper
|
|
7
|
+
|
|
8
|
+
# Add admin comments to the main content if they are
|
|
9
|
+
# turned on for the current resource
|
|
10
|
+
def default_main_content
|
|
11
|
+
super
|
|
12
|
+
active_admin_comments if active_admin_config.comments?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Display the comments for the resource. Same as calling
|
|
16
|
+
# #active_admin_comments_for with the current resource
|
|
17
|
+
def active_admin_comments(*args, &block)
|
|
18
|
+
active_admin_comments_for(resource, *args, &block)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'active_admin/views'
|
|
2
|
+
require 'active_admin/views/components/panel'
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
module Comments
|
|
6
|
+
module Views
|
|
7
|
+
|
|
8
|
+
class Comments < ActiveAdmin::Views::Panel
|
|
9
|
+
builder_method :active_admin_comments_for
|
|
10
|
+
|
|
11
|
+
def build(record)
|
|
12
|
+
@record = record
|
|
13
|
+
super(title_content, :for => record)
|
|
14
|
+
build_comments
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
def title_content
|
|
20
|
+
"Comments (#{record_comments.count})"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def record_comments
|
|
24
|
+
@record_comments ||= @record.active_admin_comments.where(:namespace => active_admin_namespace.name.to_s)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def build_comments
|
|
28
|
+
if record_comments.count > 0
|
|
29
|
+
record_comments.each do |comment|
|
|
30
|
+
build_comment(comment)
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
build_empty_message
|
|
34
|
+
end
|
|
35
|
+
build_comment_form
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def build_comment(comment)
|
|
39
|
+
div :for => comment do
|
|
40
|
+
div :class => "active_admin_comment_meta" do
|
|
41
|
+
user_name = comment.author ? auto_link(comment.author) : "Anonymous"
|
|
42
|
+
h4(user_name, :class => "active_admin_comment_author")
|
|
43
|
+
span(pretty_format(comment.created_at))
|
|
44
|
+
end
|
|
45
|
+
div :class => "active_admin_comment_body" do
|
|
46
|
+
simple_format(comment.body)
|
|
47
|
+
end
|
|
48
|
+
div :style => "clear:both;"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def build_empty_message
|
|
53
|
+
span :class => "empty" do
|
|
54
|
+
"No comments yet."
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def comment_form_url
|
|
59
|
+
send(:"#{active_admin_namespace.name}_comments_path")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def build_comment_form
|
|
63
|
+
self << active_admin_form_for(ActiveAdmin::Comment.new, :url => comment_form_url, :html => {:class => "inline_form"}) do |form|
|
|
64
|
+
form.inputs do
|
|
65
|
+
form.input :resource_type, :value => @record.class.base_class.name.to_s, :as => :hidden
|
|
66
|
+
form.input :resource_id, :value => @record.id, :as => :hidden
|
|
67
|
+
form.input :body, :input_html => {:size => "80x8"}, :label => false
|
|
68
|
+
end
|
|
69
|
+
form.buttons do
|
|
70
|
+
form.commit_button 'Add Comment'
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def default_id_for_prefix
|
|
76
|
+
'active_admin_comments_for'
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Component < Arbre::HTML::Div
|
|
3
|
+
|
|
4
|
+
# By default components render a div
|
|
5
|
+
def tag_name
|
|
6
|
+
'div'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def initialize(*)
|
|
10
|
+
super
|
|
11
|
+
add_class default_class_name
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
# By default, add a css class named after the ruby class
|
|
17
|
+
def default_class_name
|
|
18
|
+
self.class.name.demodulize.underscore
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
# CSVBuilder stores CSV configuration
|
|
3
|
+
#
|
|
4
|
+
# Usage example:
|
|
5
|
+
#
|
|
6
|
+
# csv_builder = CSVBuilder.new
|
|
7
|
+
# csv_builder.column :id
|
|
8
|
+
# csv_builder.column("Name") { |resource| resource.full_name }
|
|
9
|
+
#
|
|
10
|
+
class CSVBuilder
|
|
11
|
+
|
|
12
|
+
# Return a default CSVBuilder for a resource
|
|
13
|
+
# The CSVBuilder's columns would be Id followed by this
|
|
14
|
+
# resource's content columns
|
|
15
|
+
def self.default_for_resource(resource)
|
|
16
|
+
new.tap do |csv_builder|
|
|
17
|
+
csv_builder.column(:id)
|
|
18
|
+
resource.content_columns.each do |content_column|
|
|
19
|
+
csv_builder.column(content_column.name.to_sym)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
attr_reader :columns
|
|
25
|
+
|
|
26
|
+
def initialize(&block)
|
|
27
|
+
@columns = []
|
|
28
|
+
instance_eval &block if block_given?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Add a column
|
|
32
|
+
def column(name, &block)
|
|
33
|
+
@columns << Column.new(name, block)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Column
|
|
37
|
+
attr_reader :name, :data
|
|
38
|
+
|
|
39
|
+
def initialize(name, block = nil)
|
|
40
|
+
@name = name.is_a?(Symbol) ? name.to_s.titleize : name
|
|
41
|
+
@data = block || name.to_sym
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|