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,87 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Renderer
|
|
3
|
+
|
|
4
|
+
include ::ActiveAdmin::ViewHelpers::RendererHelper
|
|
5
|
+
include Arbre::Builder
|
|
6
|
+
|
|
7
|
+
attr_accessor :view, :assigns
|
|
8
|
+
|
|
9
|
+
# For use in html
|
|
10
|
+
alias_method :helpers, :view
|
|
11
|
+
|
|
12
|
+
def initialize(view_or_renderer)
|
|
13
|
+
@view = view_or_renderer.is_a?(Renderer) ? view_or_renderer.view : view_or_renderer
|
|
14
|
+
|
|
15
|
+
if view.respond_to?(:assigns)
|
|
16
|
+
@assigns = view.assigns.each { |key, value| instance_variable_set("@#{key}", value) }
|
|
17
|
+
else
|
|
18
|
+
@assigns = {}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def method_missing(name,*args, &block)
|
|
23
|
+
if view.respond_to?(name)
|
|
24
|
+
view.send(name, *args, &block)
|
|
25
|
+
else
|
|
26
|
+
super
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_html(*args)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def to_s(*args)
|
|
34
|
+
to_html(*args)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def haml(template)
|
|
38
|
+
begin
|
|
39
|
+
require 'haml' unless defined?(Haml)
|
|
40
|
+
rescue LoadError
|
|
41
|
+
raise LoadError, "Please install the HAML gem to use the HAML method with ActiveAdmin"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Find the first non whitespace character in the template
|
|
45
|
+
indent = template.index(/\S/)
|
|
46
|
+
|
|
47
|
+
# Remove the indent if its greater than 0
|
|
48
|
+
if indent > 0
|
|
49
|
+
template = template.split("\n").collect do |line|
|
|
50
|
+
line[indent..-1]
|
|
51
|
+
end.join("\n")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Render it baby
|
|
55
|
+
Haml::Engine.new(template).render(self)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
protected
|
|
59
|
+
|
|
60
|
+
# Although we make a copy of all the instance variables on the way in, it
|
|
61
|
+
# doesn't mean that we can set new instance variables that are stored in
|
|
62
|
+
# the context of the view. This method allows you to do that. It can be useful
|
|
63
|
+
# when trying to share variables with a layout.
|
|
64
|
+
def set_ivar_on_view(name, value)
|
|
65
|
+
view.instance_variable_set(name, value)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Many times throughout the views we want to either call a method on an object
|
|
69
|
+
# or instance_exec a proc passing in the object as the first parameter. This
|
|
70
|
+
# method takes care of this functionality.
|
|
71
|
+
#
|
|
72
|
+
# call_method_or_proc_on(@my_obj, :size) same as @my_obj.size
|
|
73
|
+
# OR
|
|
74
|
+
# proc = Proc.new{|s| s.size }
|
|
75
|
+
# call_method_or_proc_on(@my_obj, proc)
|
|
76
|
+
#
|
|
77
|
+
def call_method_or_proc_on(obj, symbol_or_proc)
|
|
78
|
+
case symbol_or_proc
|
|
79
|
+
when Symbol, String
|
|
80
|
+
obj.send(symbol_or_proc.to_sym)
|
|
81
|
+
when Proc
|
|
82
|
+
instance_exec(obj, &symbol_or_proc)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
require 'active_admin/resource/action_items'
|
|
2
|
+
require 'active_admin/resource/menu'
|
|
3
|
+
require 'active_admin/resource/naming'
|
|
4
|
+
require 'active_admin/resource/scopes'
|
|
5
|
+
require 'active_admin/resource/sidebars'
|
|
6
|
+
|
|
7
|
+
module ActiveAdmin
|
|
8
|
+
|
|
9
|
+
# Resource is the primary data storage for resource configuration in Active Admin
|
|
10
|
+
#
|
|
11
|
+
# When you register a resource (ActiveAdmin.register Post) you are actually creating
|
|
12
|
+
# a new Resource instance within the given Namespace.
|
|
13
|
+
#
|
|
14
|
+
# The instance of the current resource is available in ResourceController and views
|
|
15
|
+
# by calling the #active_admin_config method.
|
|
16
|
+
#
|
|
17
|
+
class Resource
|
|
18
|
+
|
|
19
|
+
# Event dispatched when a new resource is registered
|
|
20
|
+
RegisterEvent = 'active_admin.resource.register'.freeze
|
|
21
|
+
|
|
22
|
+
autoload :BelongsTo, 'active_admin/resource/belongs_to'
|
|
23
|
+
|
|
24
|
+
# The namespace this resource belongs to
|
|
25
|
+
attr_reader :namespace
|
|
26
|
+
|
|
27
|
+
# The class this resource wraps. If you register the Post model, Resource#resource
|
|
28
|
+
# will point to the Post class
|
|
29
|
+
attr_reader :resource
|
|
30
|
+
|
|
31
|
+
# A hash of page configurations for the controller indexed by action name
|
|
32
|
+
attr_reader :page_configs
|
|
33
|
+
|
|
34
|
+
# An array of member actions defined for this resource
|
|
35
|
+
attr_reader :member_actions
|
|
36
|
+
|
|
37
|
+
# An array of collection actions defined for this resource
|
|
38
|
+
attr_reader :collection_actions
|
|
39
|
+
|
|
40
|
+
# The default sort order to use in the controller
|
|
41
|
+
attr_accessor :sort_order
|
|
42
|
+
|
|
43
|
+
# Scope this resource to an association in the controller
|
|
44
|
+
attr_accessor :scope_to
|
|
45
|
+
|
|
46
|
+
# If we're scoping resources, use this method on the parent to return the collection
|
|
47
|
+
attr_accessor :scope_to_association_method
|
|
48
|
+
|
|
49
|
+
# Set to false to turn off admin notes
|
|
50
|
+
attr_accessor :admin_notes
|
|
51
|
+
|
|
52
|
+
# Set the configuration for the CSV
|
|
53
|
+
attr_writer :csv_builder
|
|
54
|
+
|
|
55
|
+
module Base
|
|
56
|
+
def initialize(namespace, resource, options = {})
|
|
57
|
+
@namespace = namespace
|
|
58
|
+
@resource = resource
|
|
59
|
+
@options = default_options.merge(options)
|
|
60
|
+
@sort_order = @options[:sort_order]
|
|
61
|
+
@page_configs = {}
|
|
62
|
+
@member_actions, @collection_actions = [], []
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
include Base
|
|
67
|
+
include ActionItems
|
|
68
|
+
include Menu
|
|
69
|
+
include Naming
|
|
70
|
+
include Scopes
|
|
71
|
+
include Sidebars
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def resource_table_name
|
|
75
|
+
resource.quoted_table_name
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Returns a properly formatted controller name for this
|
|
79
|
+
# resource within its namespace
|
|
80
|
+
def controller_name
|
|
81
|
+
[namespace.module_name, camelized_resource_name.pluralize + "Controller"].compact.join('::')
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Returns the controller for this resource
|
|
85
|
+
def controller
|
|
86
|
+
@controller ||= controller_name.constantize
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Returns the routes prefix for this resource
|
|
90
|
+
def route_prefix
|
|
91
|
+
namespace.module_name.try(:underscore)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Returns a symbol for the route to use to get to the
|
|
95
|
+
# collection of this resource
|
|
96
|
+
def route_collection_path
|
|
97
|
+
route = [route_prefix, controller.resources_configuration[:self][:route_collection_name]]
|
|
98
|
+
|
|
99
|
+
if controller.resources_configuration[:self][:route_collection_name] ==
|
|
100
|
+
controller.resources_configuration[:self][:route_instance_name]
|
|
101
|
+
route << "index"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
route << 'path'
|
|
105
|
+
route.compact.join('_').to_sym
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Returns the named route for an instance of this resource
|
|
109
|
+
def route_instance_path
|
|
110
|
+
[route_prefix, controller.resources_configuration[:self][:route_instance_name], 'path'].compact.join('_').to_sym
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Clears all the member actions this resource knows about
|
|
114
|
+
def clear_member_actions!
|
|
115
|
+
@member_actions = []
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def clear_collection_actions!
|
|
119
|
+
@collection_actions = []
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Are admin notes turned on for this resource
|
|
123
|
+
def admin_notes?
|
|
124
|
+
admin_notes.nil? ? ActiveAdmin.admin_notes : admin_notes
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def belongs_to(target, options = {})
|
|
128
|
+
@belongs_to = Resource::BelongsTo.new(self, target, options)
|
|
129
|
+
controller.belongs_to(target, options.dup)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def belongs_to_config
|
|
133
|
+
@belongs_to
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Do we belong to another resource
|
|
137
|
+
def belongs_to?
|
|
138
|
+
!belongs_to_config.nil?
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# The csv builder for this resource
|
|
142
|
+
def csv_builder
|
|
143
|
+
@csv_builder || default_csv_builder
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
private
|
|
147
|
+
|
|
148
|
+
def default_options
|
|
149
|
+
{
|
|
150
|
+
:namespace => ActiveAdmin.application.default_namespace,
|
|
151
|
+
:sort_order => "#{resource.respond_to?(:primary_key) ? resource.primary_key : 'id'}_desc"
|
|
152
|
+
}
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def default_csv_builder
|
|
156
|
+
@default_csv_builder ||= CSVBuilder.default_for_resource(resource)
|
|
157
|
+
end
|
|
158
|
+
end # class Resource
|
|
159
|
+
end # module ActiveAdmin
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'active_admin/helpers/optional_display'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
|
|
5
|
+
class Resource
|
|
6
|
+
module ActionItems
|
|
7
|
+
|
|
8
|
+
# Add the default action items to a resource when it's
|
|
9
|
+
# initialized
|
|
10
|
+
def initialize(*args)
|
|
11
|
+
super
|
|
12
|
+
add_default_action_items
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @return [Array] The set of action items for this resource
|
|
16
|
+
def action_items
|
|
17
|
+
@action_items ||= []
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Add a new action item to a resource
|
|
21
|
+
#
|
|
22
|
+
# @param [Hash] options valid keys include:
|
|
23
|
+
# :only: A single or array of controller actions to display
|
|
24
|
+
# this action item on.
|
|
25
|
+
# :except: A single or array of controller actions not to
|
|
26
|
+
# display this action item on.
|
|
27
|
+
def add_action_item(options = {}, &block)
|
|
28
|
+
self.action_items << ActiveAdmin::ActionItem.new(options, &block)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Returns a set of action items to display for a specific controller action
|
|
32
|
+
#
|
|
33
|
+
# @param [String, Symbol] action the action to retrieve action items for
|
|
34
|
+
#
|
|
35
|
+
# @return [Array] Array of ActionItems for the controller actions
|
|
36
|
+
def action_items_for(action)
|
|
37
|
+
action_items.select{|item| item.display_on?(action) }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Clears all the existing action items for this resource
|
|
41
|
+
def clear_action_items!
|
|
42
|
+
@action_items = []
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
# Adds the default action items to each resource
|
|
48
|
+
def add_default_action_items
|
|
49
|
+
# New Link on all actions except :new and :show
|
|
50
|
+
add_action_item :except => [:new, :show] do
|
|
51
|
+
if controller.action_methods.include?('new')
|
|
52
|
+
link_to(I18n.t('active_admin.new_model', :model => active_admin_config.resource_name), new_resource_path)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Edit link on show
|
|
57
|
+
add_action_item :only => :show do
|
|
58
|
+
if controller.action_methods.include?('edit')
|
|
59
|
+
link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.resource_name), edit_resource_path(resource))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Destroy link on show
|
|
64
|
+
add_action_item :only => :show do
|
|
65
|
+
if controller.action_methods.include?("destroy")
|
|
66
|
+
link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.resource_name),
|
|
67
|
+
resource_path(resource),
|
|
68
|
+
:method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'))
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Model class to store the data for ActionItems
|
|
77
|
+
class ActionItem
|
|
78
|
+
include ActiveAdmin::OptionalDisplay
|
|
79
|
+
|
|
80
|
+
attr_accessor :block
|
|
81
|
+
|
|
82
|
+
def initialize(options = {}, &block)
|
|
83
|
+
@options, @block = options, block
|
|
84
|
+
normalize_display_options!
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
class BelongsTo
|
|
4
|
+
|
|
5
|
+
class TargetNotFound < StandardError; end
|
|
6
|
+
|
|
7
|
+
# The resource which initiated this relationship
|
|
8
|
+
attr_reader :owner
|
|
9
|
+
|
|
10
|
+
def initialize(owner_resource, target_name, options = {})
|
|
11
|
+
@owner, @target_name = owner_resource, target_name
|
|
12
|
+
@options = options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Returns the target resource class or raises an exception if it doesn't exist
|
|
16
|
+
def target
|
|
17
|
+
namespace.resources[@target_name.to_s.camelize] or
|
|
18
|
+
raise TargetNotFound, "Could not find registered resource #{@target_name} in #{namespace.name} with #{namespace.resources.keys.inspect}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def namespace
|
|
22
|
+
@owner.namespace
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def optional?
|
|
26
|
+
@options[:optional]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
module Menu
|
|
4
|
+
|
|
5
|
+
# Set the menu options. To not add this resource to the menu, just
|
|
6
|
+
# call #menu(false)
|
|
7
|
+
def menu(options = {})
|
|
8
|
+
options = options == false ? { :display => false } : options
|
|
9
|
+
@menu_options = options
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# The options to use for the menu
|
|
13
|
+
def menu_options
|
|
14
|
+
@menu_options ||= {}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Returns the name to put this resource under in the menu
|
|
18
|
+
def parent_menu_item_name
|
|
19
|
+
menu_options[:parent]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Returns the name to be displayed in the menu for this resource
|
|
23
|
+
def menu_item_name
|
|
24
|
+
menu_options[:label] || plural_resource_name
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Returns the items priority for altering the default sort order
|
|
28
|
+
def menu_item_priority
|
|
29
|
+
menu_options[:priority] || 10
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Returns a proc for deciding whether to display the menu item or not in the view
|
|
33
|
+
def menu_item_display_if
|
|
34
|
+
menu_options[:if] || proc { true }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Should this resource be added to the menu system?
|
|
38
|
+
def include_in_menu?
|
|
39
|
+
return false if menu_options[:display] == false
|
|
40
|
+
!(belongs_to? && !belongs_to_config.optional?)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
module Naming
|
|
4
|
+
|
|
5
|
+
# An underscored safe representation internally for this resource
|
|
6
|
+
def underscored_resource_name
|
|
7
|
+
@underscored_resource_name ||= if @options[:as]
|
|
8
|
+
@options[:as].gsub(' ', '').underscore.singularize
|
|
9
|
+
else
|
|
10
|
+
resource.name.gsub('::','').underscore
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# A camelized safe representation for this resource
|
|
15
|
+
def camelized_resource_name
|
|
16
|
+
underscored_resource_name.camelize
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Returns the name to call this resource.
|
|
20
|
+
# By default will use resource.model_name.human
|
|
21
|
+
def resource_name
|
|
22
|
+
@resource_name ||= if @options[:as] || !resource.respond_to?(:model_name)
|
|
23
|
+
underscored_resource_name.titleize
|
|
24
|
+
else
|
|
25
|
+
resource.model_name.human.titleize
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Returns the plural version of this resource
|
|
30
|
+
def plural_resource_name
|
|
31
|
+
@plural_resource_name ||= if @options[:as] || !resource.respond_to?(:model_name)
|
|
32
|
+
resource_name.pluralize
|
|
33
|
+
else
|
|
34
|
+
# Check if we have a translation available otherwise pluralize
|
|
35
|
+
begin
|
|
36
|
+
I18n.translate!("activerecord.models.#{resource.model_name.underscore}")
|
|
37
|
+
resource.model_name.human(:count => 3)
|
|
38
|
+
rescue I18n::MissingTranslationData
|
|
39
|
+
resource_name.pluralize
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Returns the plural and underscored version of this resource. Useful for element id's.
|
|
45
|
+
def plural_underscored_resource_name
|
|
46
|
+
plural_resource_name.underscore.gsub(/\s/, '_')
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|