saulolso-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 +32 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.rdoc +76 -0
- data/Gemfile +26 -0
- data/LICENSE +25 -0
- data/README.rdoc +450 -0
- data/Rakefile +100 -0
- data/activeadmin.gemspec +28 -0
- data/cucumber.yml +2 -0
- data/features/comments/commenting.feature +99 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +26 -0
- data/features/edit_page.feature +77 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/format_as_csv.feature +45 -0
- data/features/index/formats.feature +10 -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 +79 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +23 -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 +60 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +67 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +15 -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 +28 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +34 -0
- data/features/step_definitions/index_scope_steps.rb +20 -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 +11 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +20 -0
- data/features/step_definitions/web_steps.rb +219 -0
- data/features/sti_resource.feature +49 -0
- data/features/support/env.rb +92 -0
- data/features/support/paths.rb +48 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/action_items.rb +37 -0
- data/lib/active_admin/application.rb +204 -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 +8 -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/arbre.rb +23 -0
- data/lib/active_admin/asset_registration.rb +34 -0
- data/lib/active_admin/callbacks.rb +87 -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/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments.rb +88 -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/dashboard_controller.rb +47 -0
- data/lib/active_admin/dashboards/section.rb +34 -0
- data/lib/active_admin/dashboards.rb +48 -0
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +215 -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/iconic/icons.rb +142 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/locales/da.yml +26 -0
- data/lib/active_admin/locales/en.yml +34 -0
- data/lib/active_admin/locales/es.yml +34 -0
- data/lib/active_admin/locales/pt.yml +34 -0
- data/lib/active_admin/menu.rb +42 -0
- data/lib/active_admin/menu_item.rb +73 -0
- data/lib/active_admin/namespace.rb +198 -0
- data/lib/active_admin/page_config.rb +15 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource.rb +229 -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 +38 -0
- data/lib/active_admin/resource_controller.rb +119 -0
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/scope.rb +17 -0
- data/lib/active_admin/sidebar.rb +43 -0
- data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
- data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
- data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
- data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
- data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
- data/lib/active_admin/stylesheets/active_admin.scss +429 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +21 -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 +185 -0
- data/lib/active_admin/view_helpers/form_helper.rb +12 -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/table_helper.rb +12 -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/view_helpers.rb +23 -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/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 +30 -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 +37 -0
- data/lib/active_admin/views/index_as_block.rb +24 -0
- data/lib/active_admin/views/index_as_blog.rb +89 -0
- data/lib/active_admin/views/index_as_grid.rb +49 -0
- data/lib/active_admin/views/index_as_table.rb +75 -0
- data/lib/active_admin/views/pages/base.rb +144 -0
- data/lib/active_admin/views/pages/dashboard.rb +59 -0
- data/lib/active_admin/views/pages/edit.rb +27 -0
- data/lib/active_admin/views/pages/index.rb +66 -0
- data/lib/active_admin/views/pages/new.rb +27 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +58 -0
- data/lib/active_admin/views/templates/active_admin/dashboard/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
- data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
- data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
- data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
- data/lib/active_admin/views/templates/active_admin/resource/edit.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/index.csv.erb +20 -0
- data/lib/active_admin/views/templates/active_admin/resource/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/new.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/show.html.arb +1 -0
- data/lib/active_admin/views/templates/layouts/active_admin.html.erb +39 -0
- data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +71 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.js +51 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +78 -0
- data/lib/generators/active_admin/install/templates/active_admin_vendor.js +382 -0
- data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
- data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
- data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/orderable.png +0 -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/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/spec_helper.rb +156 -0
- data/spec/support/integration_example_group.rb +33 -0
- data/spec/support/rails_template.rb +32 -0
- data/spec/support/rails_template_with_data.rb +32 -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/action_items_spec.rb +27 -0
- data/spec/unit/application_spec.rb +67 -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/components/attributes_table_spec.rb +100 -0
- data/spec/unit/components/columns_spec.rb +75 -0
- data/spec/unit/components/panel_spec.rb +31 -0
- data/spec/unit/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/components/status_tag_spec.rb +81 -0
- data/spec/unit/components/table_for_spec.rb +130 -0
- data/spec/unit/controller_filters_spec.rb +27 -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 +179 -0
- data/spec/unit/form_builder_spec.rb +238 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +53 -0
- data/spec/unit/namespace_spec.rb +203 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/registration_spec.rb +76 -0
- data/spec/unit/renderer_spec.rb +108 -0
- data/spec/unit/resource_controller/collection_spec.rb +34 -0
- data/spec/unit/resource_controller_spec.rb +147 -0
- data/spec/unit/resource_spec.rb +290 -0
- data/spec/unit/routing_spec.rb +88 -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 +16 -0
- metadata +482 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module MockRegistration
|
|
4
|
+
extend ActiveAdmin::AssetRegistration
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
describe ActiveAdmin::AssetRegistration do
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
MockRegistration.clear_stylesheets!
|
|
11
|
+
MockRegistration.clear_javascripts!
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should register a stylesheet file" do
|
|
15
|
+
MockRegistration.register_stylesheet "active_admin.css"
|
|
16
|
+
MockRegistration.stylesheets.should == ["active_admin.css"]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should clear all existing stylesheets" do
|
|
20
|
+
MockRegistration.register_stylesheet "active_admin.css"
|
|
21
|
+
MockRegistration.stylesheets.should == ["active_admin.css"]
|
|
22
|
+
MockRegistration.clear_stylesheets!
|
|
23
|
+
MockRegistration.stylesheets.should == []
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should register a javascript file" do
|
|
27
|
+
MockRegistration.register_javascript "active_admin.js"
|
|
28
|
+
MockRegistration.javascripts.should == ["active_admin.js"]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should clear all existing javascripts" do
|
|
32
|
+
MockRegistration.register_javascript "active_admin.js"
|
|
33
|
+
MockRegistration.javascripts.should == ["active_admin.js"]
|
|
34
|
+
MockRegistration.clear_javascripts!
|
|
35
|
+
MockRegistration.javascripts.should == []
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class AutoLinkMockResource
|
|
4
|
+
attr_accessor :namespace
|
|
5
|
+
def initialize(namespace)
|
|
6
|
+
@namespace = namespace
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "auto linking resources" do
|
|
11
|
+
include ActiveAdmin::ViewHelpers::ActiveAdminApplicationHelper
|
|
12
|
+
include ActiveAdmin::ViewHelpers::AutoLinkHelper
|
|
13
|
+
include ActiveAdmin::ViewHelpers::DisplayHelper
|
|
14
|
+
|
|
15
|
+
let(:active_admin_config) { AutoLinkMockResource.new(namespace) }
|
|
16
|
+
let(:namespace){ ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin) }
|
|
17
|
+
let(:post){ Post.create! :title => "Hello World" }
|
|
18
|
+
|
|
19
|
+
def admin_post_path(post)
|
|
20
|
+
"/admin/posts/#{post.id}"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "when the resource is not registered" do
|
|
24
|
+
it "should return the display name of the object" do
|
|
25
|
+
auto_link(post).should == "Hello World"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context "when the resource is registered" do
|
|
30
|
+
before do
|
|
31
|
+
namespace.register Post
|
|
32
|
+
end
|
|
33
|
+
it "should return a link with the display name of the object" do
|
|
34
|
+
self.should_receive(:link_to).with("Hello World", admin_post_path(post))
|
|
35
|
+
auto_link(post)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
class Resource
|
|
5
|
+
describe BelongsTo do
|
|
6
|
+
|
|
7
|
+
let(:application){ ActiveAdmin::Application.new }
|
|
8
|
+
let(:namespace){ Namespace.new(application, :admin) }
|
|
9
|
+
let(:post){ namespace.register(Post) }
|
|
10
|
+
let(:belongs_to){ BelongsTo.new(post, :user) }
|
|
11
|
+
|
|
12
|
+
it "should have an owner" do
|
|
13
|
+
belongs_to.owner.should == post
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should have a namespace" do
|
|
17
|
+
belongs_to.namespace.should == namespace
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "finding the target" do
|
|
21
|
+
context "when the resource has been registered" do
|
|
22
|
+
let(:user){ namespace.register(User) }
|
|
23
|
+
before { user } # Ensure user is registered
|
|
24
|
+
|
|
25
|
+
it "should return the target resource" do
|
|
26
|
+
belongs_to.target.should == user
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context "when the resource has not been registered" do
|
|
31
|
+
it "should raise a ActiveAdmin::BelongsTo::TargetNotFound" do
|
|
32
|
+
lambda {
|
|
33
|
+
belongs_to.target
|
|
34
|
+
}.should raise_error(ActiveAdmin::Resource::BelongsTo::TargetNotFound)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should be optional" do
|
|
40
|
+
belongs_to = BelongsTo.new post, :user, :optional => true
|
|
41
|
+
belongs_to.should be_optional
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Breadcrumbs" do
|
|
4
|
+
|
|
5
|
+
include ActiveAdmin::ViewHelpers
|
|
6
|
+
|
|
7
|
+
describe "generating a trail from paths" do
|
|
8
|
+
|
|
9
|
+
# Mock our params
|
|
10
|
+
def params; {}; end
|
|
11
|
+
# Mock link to and return a hash
|
|
12
|
+
def link_to(name, url); {:name => name, :path => url}; end
|
|
13
|
+
|
|
14
|
+
let(:trail) { breadcrumb_links(path) }
|
|
15
|
+
|
|
16
|
+
context "when request '/admin'" do
|
|
17
|
+
let(:path){ "/admin" }
|
|
18
|
+
|
|
19
|
+
it "should not have any items" do
|
|
20
|
+
trail.size.should == 0
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "when path '/admin/posts'" do
|
|
25
|
+
let(:path) { "/admin/posts" }
|
|
26
|
+
|
|
27
|
+
it "should have one item" do
|
|
28
|
+
trail.size.should == 1
|
|
29
|
+
end
|
|
30
|
+
it "should have a link to /admin" do
|
|
31
|
+
trail[0][:name].should == "Admin"
|
|
32
|
+
trail[0][:path].should == "/admin"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
context "when path '/admin/posts/1'" do
|
|
37
|
+
let(:path) { "/admin/posts/1" }
|
|
38
|
+
|
|
39
|
+
it "should have 2 items" do
|
|
40
|
+
trail.size.should == 2
|
|
41
|
+
end
|
|
42
|
+
it "should have a link to /admin" do
|
|
43
|
+
trail[0][:name].should == "Admin"
|
|
44
|
+
trail[0][:path].should == "/admin"
|
|
45
|
+
end
|
|
46
|
+
it "should have a link to /admin/posts" do
|
|
47
|
+
trail[1][:name].should == "Posts"
|
|
48
|
+
trail[1][:path].should == "/admin/posts"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "when path '/admin/posts/1/comments'" do
|
|
53
|
+
let(:path) { "/admin/posts/1/comments" }
|
|
54
|
+
|
|
55
|
+
it "should have 3 items" do
|
|
56
|
+
trail.size.should == 3
|
|
57
|
+
end
|
|
58
|
+
it "should have a link to /admin" do
|
|
59
|
+
trail[0][:name].should == "Admin"
|
|
60
|
+
trail[0][:path].should == "/admin"
|
|
61
|
+
end
|
|
62
|
+
it "should have a link to /admin/posts" do
|
|
63
|
+
trail[1][:name].should == "Posts"
|
|
64
|
+
trail[1][:path].should == "/admin/posts"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "when Post.find(1) doesn't exist" do
|
|
68
|
+
it "should have a link to /admin/posts/1" do
|
|
69
|
+
trail[2][:name].should == "1"
|
|
70
|
+
trail[2][:path].should == "/admin/posts/1"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
context "when Post.find(1) does exist" do
|
|
75
|
+
before do
|
|
76
|
+
Post.stub!(:find).and_return{ mock(:display_name => "Hello World") }
|
|
77
|
+
end
|
|
78
|
+
it "should have a link to /admin/posts/1 using display name" do
|
|
79
|
+
trail[2][:name].should == "Hello World"
|
|
80
|
+
trail[2][:path].should == "/admin/posts/1"
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context "when path '/admin/posts/1/coments/1'" do
|
|
86
|
+
let(:path) { "/admin/posts/1/comments/1" }
|
|
87
|
+
|
|
88
|
+
it "should have 4 items" do
|
|
89
|
+
trail.size.should == 4
|
|
90
|
+
end
|
|
91
|
+
it "should have a link to /admin" do
|
|
92
|
+
trail[0][:name].should == "Admin"
|
|
93
|
+
trail[0][:path].should == "/admin"
|
|
94
|
+
end
|
|
95
|
+
it "should have a link to /admin/posts" do
|
|
96
|
+
trail[1][:name].should == "Posts"
|
|
97
|
+
trail[1][:path].should == "/admin/posts"
|
|
98
|
+
end
|
|
99
|
+
it "should have a link to /admin/posts/1" do
|
|
100
|
+
trail[2][:name].should == "1"
|
|
101
|
+
trail[2][:path].should == "/admin/posts/1"
|
|
102
|
+
end
|
|
103
|
+
it "should have a link to /admin/posts/1/comments" do
|
|
104
|
+
trail[3][:name].should == "Comments"
|
|
105
|
+
trail[3][:path].should == "/admin/posts/1/comments"
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Comments" do
|
|
4
|
+
let(:application){ ActiveAdmin::Application.new }
|
|
5
|
+
|
|
6
|
+
describe "Configuration" do
|
|
7
|
+
it "should have an array of namespaces which allow comments" do
|
|
8
|
+
application.allow_comments_in.should be_an_instance_of(Array)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should allow comments in the default namespace by default" do
|
|
12
|
+
application.allow_comments_in.should include(application.default_namespace)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe ActiveAdmin::Comment do
|
|
17
|
+
describe "Associations and Validations" do
|
|
18
|
+
it { should belong_to :resource }
|
|
19
|
+
it { should belong_to :author }
|
|
20
|
+
|
|
21
|
+
it { should validate_presence_of :resource_id }
|
|
22
|
+
it { should validate_presence_of :resource_type }
|
|
23
|
+
it { should validate_presence_of :body }
|
|
24
|
+
it { should validate_presence_of :namespace }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe ActiveAdmin::Comments::NamespaceHelper do
|
|
29
|
+
describe "#comments?" do
|
|
30
|
+
it "should have comments if the namespace is in the settings" do
|
|
31
|
+
ns = ActiveAdmin::Namespace.new(application, :admin)
|
|
32
|
+
ns.comments?.should be_true
|
|
33
|
+
end
|
|
34
|
+
it "should not have comments if the namespace is not in the settings" do
|
|
35
|
+
ns = ActiveAdmin::Namespace.new(application, :not_in_comments)
|
|
36
|
+
ns.comments?.should be_false
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe ActiveAdmin::Comments::ResourceHelper do
|
|
42
|
+
it "should add an attr_accessor :comments to ActiveAdmin::Resource" do
|
|
43
|
+
ns = ActiveAdmin::Namespace.new(application, :admin)
|
|
44
|
+
resource = ActiveAdmin::Resource.new(ns, Post)
|
|
45
|
+
resource.comments.should be_nil
|
|
46
|
+
resource.comments = true
|
|
47
|
+
resource.comments.should be_true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should not have comment if set to false by in allow_comments_in" do
|
|
51
|
+
ns = ActiveAdmin::Namespace.new(application, application.default_namespace)
|
|
52
|
+
resource = ActiveAdmin::Resource.new(ns, Post)
|
|
53
|
+
resource.comments = false
|
|
54
|
+
resource.comments?.should be_false
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class MockComponentClass < ActiveAdmin::Component; end
|
|
4
|
+
|
|
5
|
+
describe ActiveAdmin::Component do
|
|
6
|
+
|
|
7
|
+
let(:component_class){ MockComponentClass }
|
|
8
|
+
let(:component){ component_class.new }
|
|
9
|
+
|
|
10
|
+
it "should be a subclass of an html div" do
|
|
11
|
+
ActiveAdmin::Component.ancestors.should include(Arbre::HTML::Div)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should render to a div, even as a subclass" do
|
|
15
|
+
component.tag_name.should == 'div'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::AttributesTable do
|
|
4
|
+
include Arbre::HTML
|
|
5
|
+
let(:assigns){ {} }
|
|
6
|
+
|
|
7
|
+
describe "creating with the dsl" do
|
|
8
|
+
let(:helpers) { action_view }
|
|
9
|
+
|
|
10
|
+
let(:post) do
|
|
11
|
+
post = Post.new :title => "Hello World", :body => nil
|
|
12
|
+
post.stub!(:id){ 1 }
|
|
13
|
+
post.stub!(:new_record?){ false }
|
|
14
|
+
post
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# Loop through a few different ways to make the same table
|
|
19
|
+
# and ensure that they produce the same results
|
|
20
|
+
{
|
|
21
|
+
"when attributes are passed in to the builder methods" => proc {
|
|
22
|
+
attributes_table_for post, :id, :title, :body
|
|
23
|
+
},
|
|
24
|
+
"when attributes are built using the block" => proc {
|
|
25
|
+
attributes_table_for post do
|
|
26
|
+
rows :id, :title, :body
|
|
27
|
+
end
|
|
28
|
+
},
|
|
29
|
+
"when each attribute is passed in by itself" => proc {
|
|
30
|
+
attributes_table_for post do
|
|
31
|
+
row :id
|
|
32
|
+
row :title
|
|
33
|
+
row :body
|
|
34
|
+
end
|
|
35
|
+
},
|
|
36
|
+
"when you create each row with a custom block" => proc {
|
|
37
|
+
attributes_table_for post do
|
|
38
|
+
row("Id") { post.id }
|
|
39
|
+
row("Title"){ post.title }
|
|
40
|
+
row("Body") { post.body }
|
|
41
|
+
end
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
}.each do |context_title, table_decleration|
|
|
45
|
+
context context_title do
|
|
46
|
+
let(:table) { instance_eval &table_decleration }
|
|
47
|
+
|
|
48
|
+
it "should render a div wrapper with the class '.attributes_table'" do
|
|
49
|
+
table.tag_name.should == 'div'
|
|
50
|
+
table.attr(:class).should include('attributes_table')
|
|
51
|
+
end
|
|
52
|
+
it "should add id and type class" do
|
|
53
|
+
table.class_names.should include("post")
|
|
54
|
+
table.id.should == "attributes_table_post_1"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should render 3 rows" do
|
|
58
|
+
table.find_by_tag("tr").size.should == 3
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "rendering the rows" do
|
|
62
|
+
[
|
|
63
|
+
["Id" , "2"],
|
|
64
|
+
["Title" , "Hello World"],
|
|
65
|
+
["Body" , "<span class=\"empty\">Empty</span>"]
|
|
66
|
+
].each_with_index do |set, i|
|
|
67
|
+
let(:title){ set[0] }
|
|
68
|
+
let(:content){ set[1] }
|
|
69
|
+
let(:current_row){ table.find_by_tag("tr")[i] }
|
|
70
|
+
|
|
71
|
+
describe "for #{set[0]}" do
|
|
72
|
+
it "should have the title '#{set[0]}'" do
|
|
73
|
+
current_row.find_by_tag("th").first.content.should == title
|
|
74
|
+
end
|
|
75
|
+
it "should have the content '#{set[1]}'" do
|
|
76
|
+
current_row.find_by_tag("td").first.content.chomp.strip.should == content
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end # describe rendering rows
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
end # describe dsl styles
|
|
84
|
+
|
|
85
|
+
it "should allow html content inside the attributes table" do
|
|
86
|
+
table = attributes_table_for(post) do
|
|
87
|
+
row("ID"){ span(post.id, :class => 'id') }
|
|
88
|
+
end
|
|
89
|
+
table.find_by_tag("td").first.content.chomp.strip.should == "<span class=\"id\">1</span>"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should check if an association exists when an attribute has id in it" do
|
|
93
|
+
post.author = User.new(:username => "john_doe")
|
|
94
|
+
table = attributes_table_for post, :author_id
|
|
95
|
+
table.find_by_tag("td").first.content.should == "john_doe"
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::Columns do
|
|
4
|
+
include Arbre::HTML
|
|
5
|
+
let(:assigns){ {} }
|
|
6
|
+
|
|
7
|
+
describe "Rendering one column" do
|
|
8
|
+
let(:cols) do
|
|
9
|
+
columns do
|
|
10
|
+
column { span "Hello World" }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should have the class .columns" do
|
|
15
|
+
cols.class_list.should include("columns")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should have one column" do
|
|
19
|
+
cols.children.size.should == 1
|
|
20
|
+
cols.children.first.class_list.should include("column")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should have one column with the width 100%" do
|
|
24
|
+
cols.children.first.attr(:style).should include("width: 100%")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "Rendering two columns" do
|
|
29
|
+
let(:cols) do
|
|
30
|
+
columns do
|
|
31
|
+
column { span "Hello World" }
|
|
32
|
+
column { span "Hello World" }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should have two columns" do
|
|
37
|
+
cols.children.size.should == 2
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should have a first column with width 49% and margin 2%" do
|
|
41
|
+
cols.children.first.attr(:style).should == "width: 49%; margin-right: 2%;"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should have a second column with width 49% and no right margin" do
|
|
45
|
+
cols.children.last.attr(:style).should == "width: 49%;"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "Rendering four columns" do
|
|
50
|
+
let(:cols) do
|
|
51
|
+
columns do
|
|
52
|
+
column { span "Hello World" }
|
|
53
|
+
column { span "Hello World" }
|
|
54
|
+
column { span "Hello World" }
|
|
55
|
+
column { span "Hello World" }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should have four columns" do
|
|
60
|
+
cols.children.size.should == 4
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
(0..2).to_a.each do |index|
|
|
65
|
+
it "should have column #{index + 1} with width 49% and margin 2%" do
|
|
66
|
+
cols.children[index].attr(:style).should == "width: 23.5%; margin-right: 2%;"
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should have column 4 with width 49% and no margin" do
|
|
71
|
+
cols.children[3].attr(:style).should == "width: 23.5%;"
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::Panel do
|
|
4
|
+
include Arbre::HTML
|
|
5
|
+
let(:assigns){ {} }
|
|
6
|
+
|
|
7
|
+
let(:helpers) { action_view }
|
|
8
|
+
|
|
9
|
+
let(:the_panel) do
|
|
10
|
+
panel "My Title" do
|
|
11
|
+
span("Hello World")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should have a title h3" do
|
|
16
|
+
the_panel.find_by_tag("h3").first.content.should == "My Title"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should have a contents div" do
|
|
20
|
+
the_panel.find_by_tag("div").first.class_list.should include("panel_contents")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should add children to the contents div" do
|
|
24
|
+
the_panel.find_by_tag("span").first.parent.should == the_panel.find_by_tag("div").first
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should set the icon" do
|
|
28
|
+
panel("Title", :icon => :arrow_down).find_by_tag("h3").first.content.should include("span class=\"icon")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::SidebarSection do
|
|
4
|
+
include Arbre::HTML
|
|
5
|
+
let(:assigns){ {} }
|
|
6
|
+
|
|
7
|
+
let(:section) do
|
|
8
|
+
ActiveAdmin::Sidebar::Section.new(:help) do
|
|
9
|
+
span "Help Me"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
let(:html) do
|
|
14
|
+
sidebar_section(section)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should have a title h3" do
|
|
18
|
+
html.find_by_tag("h3").first.content.should == "Help"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should have the class of 'sidebar_section'" do
|
|
22
|
+
html.class_list.should include("sidebar_section")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should have an id based on the title" do
|
|
26
|
+
html.id.should == "help_sidebar_section"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should have a contents div" do
|
|
30
|
+
html.find_by_tag("div").first.class_list.should include("panel_contents")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should add children to the contents div" do
|
|
34
|
+
html.find_by_tag("span").first.parent.should == html.find_by_tag("div").first
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::StatusTag do
|
|
4
|
+
include Arbre::HTML
|
|
5
|
+
let(:assigns) { {} }
|
|
6
|
+
|
|
7
|
+
let(:helpers) { action_view }
|
|
8
|
+
|
|
9
|
+
describe "#status_tag" do
|
|
10
|
+
subject { status_tag(nil) }
|
|
11
|
+
|
|
12
|
+
its(:tag_name) { should == 'span' }
|
|
13
|
+
its(:class_list) { should include('status') }
|
|
14
|
+
|
|
15
|
+
context "when status is 'completed'" do
|
|
16
|
+
subject { status_tag('completed') }
|
|
17
|
+
|
|
18
|
+
its(:tag_name) { should == 'span' }
|
|
19
|
+
its(:class_list) { should include('status') }
|
|
20
|
+
its(:class_list) { should include('completed') }
|
|
21
|
+
its(:content) { should == 'Completed' }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "when status is 'in_progress'" do
|
|
25
|
+
subject { status_tag('in_progress') }
|
|
26
|
+
|
|
27
|
+
its(:class_list) { should include('in_progress') }
|
|
28
|
+
its(:content) { should == 'In Progress' }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when status is 'In progress'" do
|
|
32
|
+
subject { status_tag('In progress') }
|
|
33
|
+
|
|
34
|
+
its(:class_list) { should include('in_progress') }
|
|
35
|
+
its(:content) { should == 'In Progress' }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "when status is an empty string" do
|
|
39
|
+
subject { status_tag('') }
|
|
40
|
+
|
|
41
|
+
its(:class_list) { should include('status') }
|
|
42
|
+
its(:content) { should == '' }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context "when status is nil" do
|
|
46
|
+
subject { status_tag(nil) }
|
|
47
|
+
|
|
48
|
+
its(:class_list) { should include('status') }
|
|
49
|
+
its(:content) { should == '' }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "when status is 'Active' and type is :ok" do
|
|
53
|
+
subject { status_tag('Active', :ok) }
|
|
54
|
+
|
|
55
|
+
its(:class_list) { should include('status') }
|
|
56
|
+
its(:class_list) { should include('active') }
|
|
57
|
+
its(:class_list) { should include('ok') }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
context "when status is 'Active' and class is 'ok'" do
|
|
61
|
+
subject { status_tag('Active', :class => 'ok') }
|
|
62
|
+
|
|
63
|
+
its(:class_list) { should include('status') }
|
|
64
|
+
its(:class_list) { should include('active') }
|
|
65
|
+
its(:class_list) { should include('ok') }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context "when status is 'So useless', type is :ok, class is 'woot awesome' and id is 'useless'" do
|
|
69
|
+
subject { status_tag('So useless', :ok, :class => 'woot awesome', :id => 'useless') }
|
|
70
|
+
|
|
71
|
+
its(:content) { should == 'So Useless' }
|
|
72
|
+
its(:class_list) { should include('status') }
|
|
73
|
+
its(:class_list) { should include('ok') }
|
|
74
|
+
its(:class_list) { should include('so_useless') }
|
|
75
|
+
its(:class_list) { should include('woot') }
|
|
76
|
+
its(:class_list) { should include('awesome') }
|
|
77
|
+
its(:id) { should == 'useless' }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end # describe "#status_tag"
|
|
81
|
+
end
|