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,16 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
if Rails.version[0..2] == '3.1'
|
|
5
|
+
describe "Installing in Rails 3.1" do
|
|
6
|
+
|
|
7
|
+
it "should add active_admin.css to app/assets/stylesheets/" do
|
|
8
|
+
File.exists?(Rails.root + "app/assets/stylesheets/active_admin.css.scss").should be_true
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should add active_admin.js to app/assets/javascripts" do
|
|
12
|
+
File.exists?(Rails.root + "app/assets/javascripts/active_admin.js").should be_true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'active_admin/helpers/settings'
|
|
3
|
+
|
|
4
|
+
describe ActiveAdmin::Settings do
|
|
5
|
+
|
|
6
|
+
# A Class with settings module included
|
|
7
|
+
let(:klass) do
|
|
8
|
+
Class.new do
|
|
9
|
+
include ActiveAdmin::Settings
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should add a new setting with a default" do
|
|
14
|
+
klass.setting :my_setting, "Hello World"
|
|
15
|
+
klass.default_settings[:my_setting].should == "Hello World"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should initialize the defaults" do
|
|
19
|
+
klass.setting :my_setting, "Hello World"
|
|
20
|
+
klass.new.my_setting.should == "Hello World"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should support settings of nil" do
|
|
24
|
+
klass.setting :my_setting, :some_val
|
|
25
|
+
inst = klass.new
|
|
26
|
+
inst.my_setting = nil
|
|
27
|
+
inst.my_setting.should == nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
describe MenuItem do
|
|
5
|
+
|
|
6
|
+
it "should have a name" do
|
|
7
|
+
item = MenuItem.new("Dashboard", "/admin")
|
|
8
|
+
item.name.should == "Dashboard"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should have a url" do
|
|
12
|
+
item = MenuItem.new("Dashboard", "/admin")
|
|
13
|
+
item.url.should == "/admin"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should have a priority of 10 by default" do
|
|
17
|
+
item = MenuItem.new("Dashboard", "/admin")
|
|
18
|
+
item.priority.should == 10
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should accept an optional options hash" do
|
|
22
|
+
item = MenuItem.new("Dashboard", "/admin", 10, :if => lambda{ logged_in? } )
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should have a display if block" do
|
|
26
|
+
block = lambda{ logged_in? }
|
|
27
|
+
item = MenuItem.new("Dashboard", "/admin", 10, :if => block )
|
|
28
|
+
item.display_if_block.should == block
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should have a default display if block always returning true" do
|
|
32
|
+
item = MenuItem.new("Dashboard", "/admin")
|
|
33
|
+
item.display_if_block.should be_instance_of(Proc)
|
|
34
|
+
item.display_if_block.call(self).should == true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "url generation and caching" do
|
|
38
|
+
it "should generate a url if it is a symbol" do
|
|
39
|
+
MenuItem.new("Posts", :admin_posts_path).url.should == "/admin/posts"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should generate a url if it is a string" do
|
|
43
|
+
MenuItem.new("Posts", "/admin/posts").url.should == "/admin/posts"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "with no children" do
|
|
48
|
+
it "should be empty" do
|
|
49
|
+
item = MenuItem.new("Blog", "/admin/blog")
|
|
50
|
+
item.children.should == []
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should accept new children" do
|
|
54
|
+
item = MenuItem.new("Blog", "/admin/blog")
|
|
55
|
+
item.add "Dashboard", "/admin"
|
|
56
|
+
item.children.first.should be_an_instance_of(MenuItem)
|
|
57
|
+
item.children.first.name.should == "Dashboard"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "with many children" do
|
|
62
|
+
let(:item) do
|
|
63
|
+
i = MenuItem.new("Dashboard", "/admin")
|
|
64
|
+
i.add "Blog", "/"
|
|
65
|
+
i.add "Cars", "/"
|
|
66
|
+
i.add "Users", "/", 1
|
|
67
|
+
i.add "Settings", "/", 2
|
|
68
|
+
i.add "Analytics", "/", 44
|
|
69
|
+
i
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should give access to the menu item as an array" do
|
|
73
|
+
item['Blog'].name.should == 'Blog'
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should sort items based on priority and name" do
|
|
77
|
+
item.children[0].name.should == 'Users'
|
|
78
|
+
item.children[1].name.should == 'Settings'
|
|
79
|
+
item.children[2].name.should == 'Blog'
|
|
80
|
+
item.children[3].name.should == 'Cars'
|
|
81
|
+
item.children[4].name.should == 'Analytics'
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "children should hold a reference to their parent" do
|
|
85
|
+
item["Blog"].parent.should == item
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
describe "building children using block syntax" do
|
|
90
|
+
let(:item) do
|
|
91
|
+
MenuItem.new("Blog", "/") do |blog|
|
|
92
|
+
blog.add "Create New", "/blog/new"
|
|
93
|
+
blog.add("Comments", "/blog/comments") do |comments|
|
|
94
|
+
comments.add "Approved", "/blog/comments?status=approved"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "should have 2 children" do
|
|
100
|
+
item.children.size.should == 2
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "should have sub-sub items" do
|
|
104
|
+
item["Comments"]["Approved"].name.should == 'Approved'
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe "accessing ancestory" do
|
|
109
|
+
let(:item){ MenuItem.new "Blog", "/blog" }
|
|
110
|
+
|
|
111
|
+
context "with no parent" do
|
|
112
|
+
it "should return an empty array" do
|
|
113
|
+
item.ancestors.should == []
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context "with one parent" do
|
|
118
|
+
let(:sub_item) do
|
|
119
|
+
item.add "Create New", "/blog/new"
|
|
120
|
+
item["Create New"]
|
|
121
|
+
end
|
|
122
|
+
it "should return an array with the parent" do
|
|
123
|
+
sub_item.ancestors.should == [item]
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
context "with many parents" do
|
|
128
|
+
before(:each) do
|
|
129
|
+
item.add "C1", "/c1" do |c1|
|
|
130
|
+
c1.add "C2", "/c2" do |c2|
|
|
131
|
+
c2.add "C3", "/c3"
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
let(:sub_item){ item["C1"]["C2"]["C3"] }
|
|
136
|
+
it "should return an array with the parents in reverse order" do
|
|
137
|
+
sub_item.ancestors.should == [item["C1"]["C2"], item["C1"], item]
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end # accessing ancestory
|
|
141
|
+
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Menu do
|
|
4
|
+
|
|
5
|
+
context "with no items" do
|
|
6
|
+
it "should be empty" do
|
|
7
|
+
ActiveAdmin::Menu.new.items.should == []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should accept new items" do
|
|
11
|
+
menu = ActiveAdmin::Menu.new
|
|
12
|
+
menu.add "Dashboard", "/admin"
|
|
13
|
+
menu.items.first.should be_an_instance_of(ActiveAdmin::MenuItem)
|
|
14
|
+
menu.items.first.name.should == "Dashboard"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should default new items to the priority of 10" do
|
|
18
|
+
menu = ActiveAdmin::Menu.new
|
|
19
|
+
menu.add "Dashboard", "/admin"
|
|
20
|
+
menu.items.first.priority.should == 10
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "with many item" do
|
|
25
|
+
let(:menu) do
|
|
26
|
+
ActiveAdmin::Menu.new do |m|
|
|
27
|
+
m.add "Dashboard", "/admin"
|
|
28
|
+
m.add "Blog", "/admin/blog"
|
|
29
|
+
m.add "Users", "/admin/users"
|
|
30
|
+
m.add "Settings", "/admin/settings" do |s|
|
|
31
|
+
s.add "Admin Settings", "/admin/settings/admin" do |as|
|
|
32
|
+
s.add "User Settings", "/admin/settings/users"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should give access to the menu item as an array" do
|
|
39
|
+
menu['Dashboard'].name.should == 'Dashboard'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should find the item by a url on the top level" do
|
|
43
|
+
menu.find_by_url("/admin").name.should == "Dashboard"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should find the item deep in the tree" do
|
|
47
|
+
menu.find_by_url("/admin/settings/users").name.should == "User Settings"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Namespace do
|
|
4
|
+
|
|
5
|
+
let(:application){ ActiveAdmin::Application.new }
|
|
6
|
+
|
|
7
|
+
context "when new" do
|
|
8
|
+
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
|
|
9
|
+
|
|
10
|
+
it "should have an application instance" do
|
|
11
|
+
namespace.application.should == application
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should have a name" do
|
|
15
|
+
namespace.name.should == :admin
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should have no resources" do
|
|
19
|
+
namespace.resources.should == {}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should have an empty menu" do
|
|
23
|
+
namespace.menu.items.should be_empty
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "registering a resource" do
|
|
28
|
+
|
|
29
|
+
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
|
|
30
|
+
|
|
31
|
+
context "with no configuration" do
|
|
32
|
+
before do
|
|
33
|
+
namespace.register Category
|
|
34
|
+
end
|
|
35
|
+
it "should store the namespaced registered configuration" do
|
|
36
|
+
namespace.resources.keys.should include('Category')
|
|
37
|
+
end
|
|
38
|
+
it "should create a new controller in the default namespace" do
|
|
39
|
+
defined?(Admin::CategoriesController).should be_true
|
|
40
|
+
end
|
|
41
|
+
it "should create the dashboard controller" do
|
|
42
|
+
defined?(Admin::DashboardController).should be_true
|
|
43
|
+
end
|
|
44
|
+
it "should create a menu item" do
|
|
45
|
+
namespace.load_menu!
|
|
46
|
+
namespace.menu["Categories"].should be_an_instance_of(ActiveAdmin::MenuItem)
|
|
47
|
+
namespace.menu["Categories"].url.should == "/admin/categories"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context "with a block configuration" do
|
|
52
|
+
it "should be evaluated in the dsl" do
|
|
53
|
+
lambda {
|
|
54
|
+
namespace.register Category do
|
|
55
|
+
raise "Hello World"
|
|
56
|
+
end
|
|
57
|
+
}.should raise_error
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "with a resource that's namespaced" do
|
|
62
|
+
|
|
63
|
+
before do
|
|
64
|
+
module ::Mock; class Resource; def self.has_many(arg1, arg2); end; end; end
|
|
65
|
+
namespace.register Mock::Resource
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should store the namespaced registered configuration" do
|
|
69
|
+
namespace.resources.keys.should include('MockResource')
|
|
70
|
+
end
|
|
71
|
+
it "should create a new controller in the default namespace" do
|
|
72
|
+
defined?(Admin::MockResourcesController).should be_true
|
|
73
|
+
end
|
|
74
|
+
it "should create a menu item" do
|
|
75
|
+
namespace.load_menu!
|
|
76
|
+
namespace.menu["Mock Resources"].should be_an_instance_of(ActiveAdmin::MenuItem)
|
|
77
|
+
end
|
|
78
|
+
it "should use the resource as the model in the controller" do
|
|
79
|
+
Admin::MockResourcesController.resource_class.should == Mock::Resource
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe "finding resource instances" do
|
|
85
|
+
|
|
86
|
+
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
|
|
87
|
+
|
|
88
|
+
it "should return the resource when its been registered" do
|
|
89
|
+
post = namespace.register Post
|
|
90
|
+
namespace.resource_for(Post).should == post
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it 'should return nil when the resource has not been registered' do
|
|
94
|
+
namespace.resource_for(Post).should == nil
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should return the parent when the parent class has been registered and the child has not" do
|
|
98
|
+
user = namespace.register User
|
|
99
|
+
namespace.resource_for(Publisher).should == user
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should return the resource if it and it's parent were registered" do
|
|
103
|
+
user = namespace.register User
|
|
104
|
+
publisher = namespace.register Publisher
|
|
105
|
+
namespace.resource_for(Publisher).should == publisher
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
describe "adding to the menu" do
|
|
111
|
+
|
|
112
|
+
describe "adding as a top level item" do
|
|
113
|
+
before do
|
|
114
|
+
namespace.register Category
|
|
115
|
+
namespace.load_menu!
|
|
116
|
+
end
|
|
117
|
+
it "should add a new menu item" do
|
|
118
|
+
namespace.menu['Categories'].should_not be_nil
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe "adding as a child" do
|
|
123
|
+
before do
|
|
124
|
+
namespace.register Category do
|
|
125
|
+
menu :parent => 'Blog'
|
|
126
|
+
end
|
|
127
|
+
namespace.load_menu!
|
|
128
|
+
end
|
|
129
|
+
it "should generate the parent menu item" do
|
|
130
|
+
namespace.menu['Blog'].should_not be_nil
|
|
131
|
+
end
|
|
132
|
+
it "should generate its own child item" do
|
|
133
|
+
namespace.menu['Blog']['Categories'].should_not be_nil
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
describe "disabling the menu" do
|
|
138
|
+
before do
|
|
139
|
+
namespace.register Category do
|
|
140
|
+
menu false
|
|
141
|
+
end
|
|
142
|
+
namespace.load_menu!
|
|
143
|
+
end
|
|
144
|
+
it "should not create a menu item" do
|
|
145
|
+
namespace.menu["Categories"].should be_nil
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
describe "setting menu priority" do
|
|
150
|
+
before do
|
|
151
|
+
namespace.register Category do
|
|
152
|
+
menu :priority => 2
|
|
153
|
+
end
|
|
154
|
+
namespace.load_menu!
|
|
155
|
+
end
|
|
156
|
+
it "should have a custom priority of 2" do
|
|
157
|
+
namespace.menu["Categories"].priority.should == 2
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
describe "setting a condition for displaying" do
|
|
162
|
+
before do
|
|
163
|
+
namespace.register Category do
|
|
164
|
+
menu :if => proc { false }
|
|
165
|
+
end
|
|
166
|
+
namespace.load_menu!
|
|
167
|
+
end
|
|
168
|
+
it "should have a proc returning false" do
|
|
169
|
+
namespace.menu["Categories"].display_if_block.should be_instance_of(Proc)
|
|
170
|
+
namespace.menu["Categories"].display_if_block.call.should == false
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
describe "adding as a belongs to" do
|
|
175
|
+
context "when not optional" do
|
|
176
|
+
before do
|
|
177
|
+
namespace.register Post do
|
|
178
|
+
belongs_to :author
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
it "should not show up in the menu" do
|
|
182
|
+
namespace.menu["Posts"].should be_nil
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
context "when optional" do
|
|
186
|
+
before do
|
|
187
|
+
namespace.register Post do
|
|
188
|
+
belongs_to :author, :optional => true
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
it "should show up in the menu" do
|
|
192
|
+
namespace.menu["Posts"].should_not be_nil
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
describe "dashboard controller name" do
|
|
199
|
+
context "when namespaced" do
|
|
200
|
+
it "should be namespaced" do
|
|
201
|
+
namespace = ActiveAdmin::Namespace.new(application, :admin)
|
|
202
|
+
namespace.dashboard_controller_name.should == "Admin::DashboardController"
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
context "when not namespaced" do
|
|
206
|
+
it "should not be namespaced" do
|
|
207
|
+
namespace = ActiveAdmin::Namespace.new(application, :root)
|
|
208
|
+
namespace.dashboard_controller_name.should == "DashboardController"
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
end
|
|
214
|
+
end
|