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,30 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
describe Resource, "Scopes" do
|
|
5
|
+
|
|
6
|
+
before { load_defaults! }
|
|
7
|
+
|
|
8
|
+
let(:application){ ActiveAdmin::Application.new }
|
|
9
|
+
let(:namespace){ Namespace.new(application, :admin) }
|
|
10
|
+
|
|
11
|
+
def config(options = {})
|
|
12
|
+
@config ||= Resource.new(namespace, Category, options)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe "adding a scope" do
|
|
16
|
+
|
|
17
|
+
it "should add a scope" do
|
|
18
|
+
config.scope :published
|
|
19
|
+
config.scopes.first.should be_a(ActiveAdmin::Scope)
|
|
20
|
+
config.scopes.first.name.should == "Published"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should retrive a scope by its id" do
|
|
24
|
+
config.scope :published
|
|
25
|
+
config.get_scope_by_id(:published).name.should == "Published"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Resource::Sidebars do
|
|
4
|
+
|
|
5
|
+
let(:resource) do
|
|
6
|
+
namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
|
|
7
|
+
namespace.register(Post)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
let(:sidebar) { ActiveAdmin::SidebarSection.new(:help) }
|
|
11
|
+
|
|
12
|
+
describe "adding a new sidebar section" do
|
|
13
|
+
|
|
14
|
+
before do
|
|
15
|
+
resource.clear_sidebar_sections!
|
|
16
|
+
resource.sidebar_sections << sidebar
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should add a sidebar section" do
|
|
20
|
+
resource.should have(1).sidebar_sections
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "retrieving sections for a controller action" do
|
|
26
|
+
|
|
27
|
+
let(:only_index){ ActiveAdmin::SidebarSection.new(:help, :only => :index) }
|
|
28
|
+
let(:only_show){ ActiveAdmin::SidebarSection.new(:help, :only => :show) }
|
|
29
|
+
|
|
30
|
+
before do
|
|
31
|
+
resource.clear_sidebar_sections!
|
|
32
|
+
resource.sidebar_sections << only_index
|
|
33
|
+
resource.sidebar_sections << only_show
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should only return the relevant action items" do
|
|
37
|
+
resource.should have(2).sidebar_sections
|
|
38
|
+
resource.sidebar_sections_for("index").should == [only_index]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe "default sidebar sections" do
|
|
44
|
+
|
|
45
|
+
it "should have a filters section by default" do
|
|
46
|
+
resource.sidebar_sections.first.name.should == :filters
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::ResourceController::Collection do
|
|
4
|
+
let(:params) do
|
|
5
|
+
{}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
let(:controller) do
|
|
9
|
+
rc = Admin::PostsController.new
|
|
10
|
+
rc.stub!(:params) do
|
|
11
|
+
params
|
|
12
|
+
end
|
|
13
|
+
rc
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe ActiveAdmin::ResourceController::Collection::Search do
|
|
17
|
+
let(:params){ {:q => {} }}
|
|
18
|
+
it "should call the metasearch method" do
|
|
19
|
+
chain = mock("ChainObj")
|
|
20
|
+
chain.should_receive(:metasearch).with(params[:q]).once.and_return(Post.search)
|
|
21
|
+
controller.send :search, chain
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe ActiveAdmin::ResourceController::Collection::Sorting do
|
|
26
|
+
let(:params){ {:order => "id_asc" }}
|
|
27
|
+
it "should prepend the table name" do
|
|
28
|
+
chain = mock("ChainObj")
|
|
29
|
+
chain.should_receive(:order).with("\"posts\".id asc").once.and_return(Post.search)
|
|
30
|
+
controller.send :sort_order, chain
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::ResourceController do
|
|
4
|
+
|
|
5
|
+
[:index, :show].each do |page|
|
|
6
|
+
describe "#{page} config" do
|
|
7
|
+
before do
|
|
8
|
+
Admin::PostsController.send(:"reset_#{page}_config!")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should be set" do
|
|
12
|
+
Admin::PostsController.send(:set_page_config, page, {})
|
|
13
|
+
Admin::PostsController.send(:"#{page}_config").should be_an_instance_of(ActiveAdmin::PageConfig)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should store the block" do
|
|
17
|
+
block = Proc.new {}
|
|
18
|
+
Admin::PostsController.send(:set_page_config, page, {}, &block)
|
|
19
|
+
Admin::PostsController.send(:"#{page}_config").block.should == block
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should be reset" do
|
|
23
|
+
Admin::PostsController.send(:"reset_#{page}_config!")
|
|
24
|
+
Admin::PostsController.send(:"#{page}_config").should == nil
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe "setting the current tab" do
|
|
30
|
+
let(:controller) { ActiveAdmin::ResourceController.new }
|
|
31
|
+
before do
|
|
32
|
+
controller.stub!(:active_admin_config => resource, :parent? => true)
|
|
33
|
+
controller.send :set_current_tab # Run the before filter
|
|
34
|
+
end
|
|
35
|
+
subject{ controller.instance_variable_get(:@current_tab) }
|
|
36
|
+
|
|
37
|
+
context "when menu item name is 'Resources' without a parent menu item" do
|
|
38
|
+
let(:resource){ mock(:menu_item_name => "Resources", :parent_menu_item_name => nil, :belongs_to? => false) }
|
|
39
|
+
it { should == "Resources" }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context "when there is a parent menu item of 'Admin'" do
|
|
43
|
+
let(:resource){ mock(:parent_menu_item_name => "Admin", :menu_item_name => "Resources", :belongs_to? => false) }
|
|
44
|
+
it { should == "Admin/Resources" }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe "callbacks" do
|
|
49
|
+
let(:application){ ::ActiveAdmin::Application.new }
|
|
50
|
+
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
|
|
51
|
+
|
|
52
|
+
before :all do
|
|
53
|
+
namespace.register Post do
|
|
54
|
+
after_build :call_after_build
|
|
55
|
+
before_save :call_before_save
|
|
56
|
+
after_save :call_after_save
|
|
57
|
+
before_create :call_before_create
|
|
58
|
+
after_create :call_after_create
|
|
59
|
+
before_update :call_before_update
|
|
60
|
+
after_update :call_after_update
|
|
61
|
+
before_destroy :call_before_destroy
|
|
62
|
+
after_destroy :call_after_destroy
|
|
63
|
+
|
|
64
|
+
controller do
|
|
65
|
+
def call_after_build(obj); end
|
|
66
|
+
def call_before_save(obj); end
|
|
67
|
+
def call_after_save(obj); end
|
|
68
|
+
def call_before_create(obj); end
|
|
69
|
+
def call_after_create(obj); end
|
|
70
|
+
def call_before_update(obj); end
|
|
71
|
+
def call_after_update(obj); end
|
|
72
|
+
def call_before_destroy(obj); end
|
|
73
|
+
def call_after_destroy(obj); end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "performing create" do
|
|
79
|
+
let(:controller){ Admin::PostsController.new }
|
|
80
|
+
let(:resource){ mock("Resource", :save => true) }
|
|
81
|
+
|
|
82
|
+
before do
|
|
83
|
+
resource.should_receive(:save)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should call the before create callback" do
|
|
87
|
+
controller.should_receive(:call_before_create).with(resource)
|
|
88
|
+
controller.send :create_resource, resource
|
|
89
|
+
end
|
|
90
|
+
it "should call the before save callback" do
|
|
91
|
+
controller.should_receive(:call_before_save).with(resource)
|
|
92
|
+
controller.send :create_resource, resource
|
|
93
|
+
end
|
|
94
|
+
it "should call the after save callback" do
|
|
95
|
+
controller.should_receive(:call_after_save).with(resource)
|
|
96
|
+
controller.send :create_resource, resource
|
|
97
|
+
end
|
|
98
|
+
it "should call the after create callback" do
|
|
99
|
+
controller.should_receive(:call_after_create).with(resource)
|
|
100
|
+
controller.send :create_resource, resource
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
describe "performing update" do
|
|
105
|
+
let(:controller){ Admin::PostsController.new }
|
|
106
|
+
let(:resource){ mock("Resource", :attributes= => true, :save => true) }
|
|
107
|
+
let(:attributes){ {} }
|
|
108
|
+
|
|
109
|
+
before do
|
|
110
|
+
resource.should_receive(:attributes=).with(attributes)
|
|
111
|
+
resource.should_receive(:save)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should call the before update callback" do
|
|
115
|
+
controller.should_receive(:call_before_update).with(resource)
|
|
116
|
+
controller.send :update_resource, resource, attributes
|
|
117
|
+
end
|
|
118
|
+
it "should call the before save callback" do
|
|
119
|
+
controller.should_receive(:call_before_save).with(resource)
|
|
120
|
+
controller.send :update_resource, resource, attributes
|
|
121
|
+
end
|
|
122
|
+
it "should call the after save callback" do
|
|
123
|
+
controller.should_receive(:call_after_save).with(resource)
|
|
124
|
+
controller.send :update_resource, resource, attributes
|
|
125
|
+
end
|
|
126
|
+
it "should call the after create callback" do
|
|
127
|
+
controller.should_receive(:call_after_update).with(resource)
|
|
128
|
+
controller.send :update_resource, resource, attributes
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
describe "performing destroy" do
|
|
133
|
+
let(:controller){ Admin::PostsController.new }
|
|
134
|
+
let(:resource){ mock("Resource", :destroy => true) }
|
|
135
|
+
|
|
136
|
+
before do
|
|
137
|
+
resource.should_receive(:destroy)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "should call the before destroy callback" do
|
|
141
|
+
controller.should_receive(:call_before_destroy).with(resource)
|
|
142
|
+
controller.send :destroy_resource, resource
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "should call the after destroy callback" do
|
|
146
|
+
controller.should_receive(:call_after_destroy).with(resource)
|
|
147
|
+
controller.send :destroy_resource, resource
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
describe Resource do
|
|
5
|
+
|
|
6
|
+
before { load_defaults! }
|
|
7
|
+
|
|
8
|
+
let(:application){ ActiveAdmin::Application.new }
|
|
9
|
+
let(:namespace){ Namespace.new(application, :admin) }
|
|
10
|
+
|
|
11
|
+
def config(options = {})
|
|
12
|
+
@config ||= Resource.new(namespace, Category, options)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe "#resource_table_name" do
|
|
16
|
+
it "should return the resource's table name" do
|
|
17
|
+
config.resource_table_name.should == '"categories"'
|
|
18
|
+
end
|
|
19
|
+
context "when the :as option is given" do
|
|
20
|
+
it "should return the resource's table name" do
|
|
21
|
+
config(:as => "My Category").resource_table_name.should == '"categories"'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "namespace" do
|
|
27
|
+
it "should return the namespace" do
|
|
28
|
+
config.namespace.should == namespace
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "controller name" do
|
|
33
|
+
it "should return a namespaced controller name" do
|
|
34
|
+
config.controller_name.should == "Admin::CategoriesController"
|
|
35
|
+
end
|
|
36
|
+
context "when non namespaced controller" do
|
|
37
|
+
let(:namespace){ ActiveAdmin::Namespace.new(application, :root) }
|
|
38
|
+
it "should return a non namespaced controller name" do
|
|
39
|
+
config.controller_name.should == "CategoriesController"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "#include_in_menu?" do
|
|
45
|
+
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
|
|
46
|
+
subject{ resource }
|
|
47
|
+
|
|
48
|
+
context "when regular resource" do
|
|
49
|
+
let(:resource){ namespace.register(Post) }
|
|
50
|
+
it { should be_include_in_menu }
|
|
51
|
+
end
|
|
52
|
+
context "when belongs to" do
|
|
53
|
+
let(:resource){ namespace.register(Post){ belongs_to :author } }
|
|
54
|
+
it { should_not be_include_in_menu }
|
|
55
|
+
end
|
|
56
|
+
context "when belongs to optional" do
|
|
57
|
+
let(:resource){ namespace.register(Post){ belongs_to :author, :optional => true} }
|
|
58
|
+
it { should be_include_in_menu }
|
|
59
|
+
end
|
|
60
|
+
context "when menu set to false" do
|
|
61
|
+
let(:resource){ namespace.register(Post){ menu false } }
|
|
62
|
+
it { should_not be_include_in_menu }
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe "menu item name" do
|
|
67
|
+
it "should be the resource name when not set" do
|
|
68
|
+
config.menu_item_name.should == "Categories"
|
|
69
|
+
end
|
|
70
|
+
it "should be settable" do
|
|
71
|
+
config.menu :label => "My Label"
|
|
72
|
+
config.menu_item_name.should == "My Label"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "parent menu item name" do
|
|
77
|
+
it "should be nil when not set" do
|
|
78
|
+
config.parent_menu_item_name.should == nil
|
|
79
|
+
end
|
|
80
|
+
it "should return the name if set" do
|
|
81
|
+
config.tap do |c|
|
|
82
|
+
c.menu :parent => "Blog"
|
|
83
|
+
end.parent_menu_item_name.should == "Blog"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
describe "menu item priority" do
|
|
88
|
+
it "should be 10 when not set" do
|
|
89
|
+
config.menu_item_priority.should == 10
|
|
90
|
+
end
|
|
91
|
+
it "should be settable" do
|
|
92
|
+
config.menu :priority => 2
|
|
93
|
+
config.menu_item_priority.should == 2
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe "menu item display if" do
|
|
98
|
+
it "should be a proc always returning true if not set" do
|
|
99
|
+
config.menu_item_display_if.should be_instance_of(Proc)
|
|
100
|
+
config.menu_item_display_if.call.should == true
|
|
101
|
+
end
|
|
102
|
+
it "should be settable" do
|
|
103
|
+
config.menu :if => proc { false }
|
|
104
|
+
config.menu_item_display_if.call.should == false
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe "route names" do
|
|
109
|
+
let(:config){ application.register Category }
|
|
110
|
+
it "should return the route prefix" do
|
|
111
|
+
config.route_prefix.should == "admin"
|
|
112
|
+
end
|
|
113
|
+
it "should return the route collection path" do
|
|
114
|
+
config.route_collection_path.should == :admin_categories_path
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context "when in the root namespace" do
|
|
118
|
+
let(:config){ application.register Category, :namespace => false}
|
|
119
|
+
it "should have a nil route_prefix" do
|
|
120
|
+
config.route_prefix.should == nil
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
describe "page configs" do
|
|
126
|
+
context "when initialized" do
|
|
127
|
+
it "should be empty" do
|
|
128
|
+
config.page_configs.should == {}
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
it "should be set-able" do
|
|
132
|
+
config.page_configs[:index] = "hello world"
|
|
133
|
+
config.page_configs[:index].should == "hello world"
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
describe "scoping" do
|
|
138
|
+
context "when using a block" do
|
|
139
|
+
before do
|
|
140
|
+
@resource = application.register Category do
|
|
141
|
+
scope_to do
|
|
142
|
+
"scoped"
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
it "should call the proc for the begin of association chain" do
|
|
147
|
+
begin_of_association_chain = @resource.controller.new.send(:begin_of_association_chain)
|
|
148
|
+
begin_of_association_chain.should == "scoped"
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
context "when using a symbol" do
|
|
153
|
+
before do
|
|
154
|
+
@resource = application.register Category do
|
|
155
|
+
scope_to :current_user
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
it "should call the method for the begin of association chain" do
|
|
159
|
+
controller = @resource.controller.new
|
|
160
|
+
controller.should_receive(:current_user).and_return(true)
|
|
161
|
+
begin_of_association_chain = controller.send(:begin_of_association_chain)
|
|
162
|
+
begin_of_association_chain.should == true
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
context "when not using a block or symbol" do
|
|
167
|
+
before do
|
|
168
|
+
@resource = application.register Category do
|
|
169
|
+
scope_to "Some string"
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
it "should raise and exception" do
|
|
173
|
+
lambda {
|
|
174
|
+
@resource.controller.new.send(:begin_of_association_chain)
|
|
175
|
+
}.should raise_error(ArgumentError)
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
describe "getting the method for the association chain" do
|
|
180
|
+
context "when a simple registration" do
|
|
181
|
+
before do
|
|
182
|
+
@resource = application.register Category do
|
|
183
|
+
scope_to :current_user
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
it "should return the pluralized collection name" do
|
|
187
|
+
@resource.controller.new.send(:method_for_association_chain).should == :categories
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
context "when passing in the method as an option" do
|
|
191
|
+
before do
|
|
192
|
+
@resource = application.register Category do
|
|
193
|
+
scope_to :current_user, :association_method => :blog_categories
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
it "should return the method from the option" do
|
|
197
|
+
@resource.controller.new.send(:method_for_association_chain).should == :blog_categories
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
describe "sort order" do
|
|
205
|
+
|
|
206
|
+
context "when resource class responds to primary_key" do
|
|
207
|
+
it "should sort by primary key desc by default" do
|
|
208
|
+
mock_resource = mock
|
|
209
|
+
mock_resource.should_receive(:primary_key).and_return("pk")
|
|
210
|
+
config = Resource.new(namespace, mock_resource)
|
|
211
|
+
config.sort_order.should == "pk_desc"
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
context "when resource class does not respond to primary_key" do
|
|
216
|
+
it "should default to id" do
|
|
217
|
+
mock_resource = mock
|
|
218
|
+
config = Resource.new(namespace, mock_resource)
|
|
219
|
+
config.sort_order.should == "id_desc"
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "should be set-able" do
|
|
224
|
+
config.sort_order = "task_id_desc"
|
|
225
|
+
config.sort_order.should == "task_id_desc"
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
describe "adding a scope" do
|
|
231
|
+
|
|
232
|
+
it "should add a scope" do
|
|
233
|
+
config.scope :published
|
|
234
|
+
config.scopes.first.should be_a(ActiveAdmin::Scope)
|
|
235
|
+
config.scopes.first.name.should == "Published"
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "should retrive a scope by its id" do
|
|
239
|
+
config.scope :published
|
|
240
|
+
config.get_scope_by_id(:published).name.should == "Published"
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
describe "#csv_builder" do
|
|
245
|
+
context "when no csv builder set" do
|
|
246
|
+
it "should return a default column builder with id and content columns" do
|
|
247
|
+
config.csv_builder.columns.size.should == Category.content_columns.size + 1
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
context "when csv builder set" do
|
|
252
|
+
it "shuld return the csv_builder we set" do
|
|
253
|
+
csv_builder = CSVBuilder.new
|
|
254
|
+
config.csv_builder = csv_builder
|
|
255
|
+
config.csv_builder.should == csv_builder
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
end
|