activeadmin 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +15 -1
- data/Gemfile +41 -11
- data/LICENSE +5 -0
- data/README.rdoc +202 -87
- data/Rakefile +51 -15
- data/activeadmin.gemspec +310 -131
- data/cucumber.yml +1 -0
- data/features/comments/commenting.feature +81 -0
- data/features/comments/viewing_index.feature +19 -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/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/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 +128 -0
- data/features/specifying_actions.feature +16 -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/factory_steps.rb +28 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +7 -0
- data/features/step_definitions/index_scope_steps.rb +20 -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/support/env.rb +88 -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.rb +155 -79
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/action_items.rb +4 -15
- 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 +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 +129 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/callbacks.rb +87 -0
- data/lib/active_admin/comments.rb +73 -0
- data/lib/active_admin/comments/comment.rb +15 -0
- data/lib/active_admin/comments/configuration.rb +16 -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/dashboards.rb +0 -2
- data/lib/active_admin/dashboards/dashboard_controller.rb +10 -5
- data/lib/active_admin/dashboards/section.rb +5 -14
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +202 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +68 -50
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/namespace.rb +102 -16
- data/lib/active_admin/renderer.rb +18 -3
- data/lib/active_admin/resource.rb +110 -9
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource_controller.rb +45 -260
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +53 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +142 -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/scope.rb +17 -0
- data/lib/active_admin/sidebar.rb +8 -47
- data/lib/active_admin/stylesheets/active_admin.scss +418 -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/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +21 -0
- data/lib/active_admin/view_helpers.rb +17 -100
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +41 -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 +174 -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/status_tag_helper.rb +13 -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/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/columns.rb +49 -0
- data/lib/active_admin/views/components/paginated_collection.rb +74 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +64 -0
- data/lib/active_admin/views/components/sidebar_section.rb +30 -0
- data/lib/active_admin/views/components/table_for.rb +174 -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 +73 -0
- data/lib/active_admin/views/pages/base.rb +138 -0
- data/lib/active_admin/views/pages/dashboard.rb +61 -0
- data/lib/active_admin/views/pages/edit.rb +27 -0
- data/lib/active_admin/views/pages/index.rb +64 -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 +52 -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_dashboard/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/edit.html.arb +1 -0
- data/lib/active_admin/views/{active_admin_default → templates/active_admin_default}/index.csv.erb +0 -0
- data/lib/active_admin/views/templates/active_admin_default/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/new.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/show.html.arb +1 -0
- data/lib/active_admin/views/{layouts → templates/layouts}/active_admin.html.erb +3 -4
- data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +45 -0
- data/lib/generators/active_admin/install/install_generator.rb +18 -3
- data/lib/generators/active_admin/install/templates/active_admin.js +41 -0
- data/lib/generators/active_admin/install/templates/{active_admin.rb → active_admin.rb.erb} +33 -3
- data/lib/generators/active_admin/install/templates/active_admin_vendor.js +1 -1
- data/lib/generators/active_admin/install/templates/dashboards.rb +3 -4
- 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/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/integration/index_as_table_spec.rb +0 -119
- data/spec/integration/layout_spec.rb +3 -37
- data/spec/spec_helper.rb +89 -50
- data/spec/support/integration_example_group.rb +37 -0
- data/spec/support/rails_template.rb +21 -9
- data/spec/support/rails_template_with_data.rb +32 -0
- data/spec/support/templates/cucumber.rb +28 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +19 -7
- data/spec/unit/action_items_spec.rb +16 -30
- data/spec/unit/active_admin_spec.rb +10 -22
- 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 +185 -0
- data/spec/unit/auto_link_spec.rb +38 -0
- data/spec/unit/belongs_to_spec.rb +44 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +53 -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/table_for_spec.rb +130 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +10 -17
- 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 +99 -77
- data/spec/unit/form_builder_spec.rb +69 -69
- data/spec/unit/namespace_spec.rb +61 -3
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/registration_spec.rb +40 -1
- data/spec/unit/renderer_spec.rb +8 -0
- data/spec/unit/resource_controller_spec.rb +105 -6
- data/spec/unit/resource_spec.rb +78 -11
- data/spec/unit/routing_spec.rb +82 -6
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +24 -2
- data/spec/unit/view_factory_spec.rb +16 -0
- metadata +268 -82
- data/.gitignore +0 -25
- data/active_admin.gemspec +0 -22
- data/lib/active_admin/action_builder.rb +0 -60
- data/lib/active_admin/breadcrumbs.rb +0 -26
- data/lib/active_admin/dashboards/renderer.rb +0 -45
- data/lib/active_admin/dashboards/section_renderer.rb +0 -28
- data/lib/active_admin/filters.rb +0 -189
- data/lib/active_admin/pages.rb +0 -11
- data/lib/active_admin/pages/base.rb +0 -92
- data/lib/active_admin/pages/edit.rb +0 -21
- data/lib/active_admin/pages/index.rb +0 -58
- data/lib/active_admin/pages/index/blog.rb +0 -65
- data/lib/active_admin/pages/index/table.rb +0 -48
- data/lib/active_admin/pages/index/thumbnails.rb +0 -40
- data/lib/active_admin/pages/new.rb +0 -21
- data/lib/active_admin/pages/show.rb +0 -54
- data/lib/active_admin/table_builder.rb +0 -162
- data/lib/active_admin/tabs_renderer.rb +0 -39
- data/lib/active_admin/views/active_admin_dashboard/index.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/edit.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/index.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/new.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/show.html.erb +0 -1
- data/lib/generators/active_admin/install/templates/active_admin.css +0 -325
- data/lib/generators/active_admin/install/templates/images/orderable.gif +0 -0
- data/spec/integration/index_as_blog_spec.rb +0 -65
- data/spec/integration/index_as_thumbnails_spec.rb +0 -43
- data/spec/integration/new_view_spec.rb +0 -52
- data/spec/integration/show_view_spec.rb +0 -91
- data/spec/unit/sidebar_spec.rb +0 -96
- data/spec/unit/table_builder_spec.rb +0 -162
@@ -0,0 +1,48 @@
|
|
1
|
+
module NavigationHelpers
|
2
|
+
# Maps a name to a path. Used by the
|
3
|
+
#
|
4
|
+
# When /^I go to (.+)$/ do |page_name|
|
5
|
+
#
|
6
|
+
# step definition in web_steps.rb
|
7
|
+
#
|
8
|
+
def path_to(page_name)
|
9
|
+
case page_name
|
10
|
+
|
11
|
+
when /the home\s?page/
|
12
|
+
'/'
|
13
|
+
when /the dashboard/
|
14
|
+
"/admin"
|
15
|
+
|
16
|
+
# the index page for posts in the root namespace
|
17
|
+
# the index page for posts in the user_admin namespace
|
18
|
+
when /^the index page for (.*) in the (.*) namespace$/
|
19
|
+
if $2 != 'root'
|
20
|
+
send(:"#{$2}_#{$1}_path")
|
21
|
+
else
|
22
|
+
send(:"#{$1}_path")
|
23
|
+
end
|
24
|
+
|
25
|
+
# same as above, except defaults to admin namespace
|
26
|
+
when /^the index page for (.*)$/
|
27
|
+
send(:"admin_#{$1}_path")
|
28
|
+
|
29
|
+
# Add more mappings here.
|
30
|
+
# Here is an example that pulls values out of the Regexp:
|
31
|
+
#
|
32
|
+
# when /^(.*)'s profile page$/i
|
33
|
+
# user_profile_path(User.find_by_login($1))
|
34
|
+
|
35
|
+
else
|
36
|
+
begin
|
37
|
+
page_name =~ /the (.*) page/
|
38
|
+
path_components = $1.split(/\s+/)
|
39
|
+
self.send(path_components.push('path').join('_').to_sym)
|
40
|
+
rescue Object => e
|
41
|
+
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
42
|
+
"Now, go and add a mapping in #{__FILE__}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
World(NavigationHelpers)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
Feature: User Logging In
|
2
|
+
|
3
|
+
Logging in to the system as an admin user
|
4
|
+
|
5
|
+
Background:
|
6
|
+
Given a configuration of:
|
7
|
+
"""
|
8
|
+
ActiveAdmin.register Post
|
9
|
+
"""
|
10
|
+
And I am logged out
|
11
|
+
And an admin user "admin@example.com" exists
|
12
|
+
When I go to the dashboard
|
13
|
+
|
14
|
+
Scenario: Logging in Successfully
|
15
|
+
When I fill in "Email" with "admin@example.com"
|
16
|
+
And I fill in "Password" with "password"
|
17
|
+
And I press "Login"
|
18
|
+
Then I should be on the the dashboard
|
19
|
+
And I should see "Logout"
|
20
|
+
And I should see "admin@example.com"
|
21
|
+
|
22
|
+
Scenario: Attempting to log in with an incorrent email address
|
23
|
+
When I fill in "Email" with "not-an-admin@example.com"
|
24
|
+
And I fill in "Password" with "not-my-password"
|
25
|
+
And I press "Login"
|
26
|
+
Then I should see "Login"
|
27
|
+
And I should see "Invalid email or password."
|
28
|
+
|
29
|
+
Scenario: Attempting to log in with an incorrect password
|
30
|
+
When I fill in "Email" with "admin@example.com"
|
31
|
+
And I fill in "Password" with "not-my-password"
|
32
|
+
And I press "Login"
|
33
|
+
Then I should see "Login"
|
34
|
+
And I should see "Invalid email or password."
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Feature: User Logging out
|
2
|
+
|
3
|
+
Logging out of the system as an admin user
|
4
|
+
|
5
|
+
Scenario: Logging out successfully
|
6
|
+
Given a configuration of:
|
7
|
+
"""
|
8
|
+
ActiveAdmin.register Post
|
9
|
+
"""
|
10
|
+
And I am logged in
|
11
|
+
When I go to the dashboard
|
12
|
+
And I follow "Logout"
|
13
|
+
Then I should see "Login"
|
data/lib/active_admin.rb
CHANGED
@@ -1,77 +1,105 @@
|
|
1
1
|
require 'meta_search'
|
2
|
+
require 'devise'
|
3
|
+
require 'will_paginate'
|
4
|
+
require 'sass'
|
5
|
+
require 'active_admin/arbre'
|
2
6
|
|
3
7
|
module ActiveAdmin
|
4
|
-
|
5
|
-
autoload :VERSION, 'active_admin/version'
|
6
|
-
autoload :Namespace, 'active_admin/namespace'
|
7
|
-
autoload :Resource, 'active_admin/resource'
|
8
|
-
autoload :ResourceController, 'active_admin/resource_controller'
|
9
|
-
autoload :Dashboards, 'active_admin/dashboards'
|
10
|
-
autoload :Renderer, 'active_admin/renderer'
|
11
|
-
autoload :TableBuilder, 'active_admin/table_builder'
|
12
|
-
autoload :FormBuilder, 'active_admin/form_builder'
|
13
|
-
autoload :TabsRenderer, 'active_admin/tabs_renderer'
|
14
|
-
autoload :ViewHelpers, 'active_admin/view_helpers'
|
15
|
-
autoload :Breadcrumbs, 'active_admin/breadcrumbs'
|
16
|
-
autoload :Filters, 'active_admin/filters'
|
17
|
-
autoload :PageConfig, 'active_admin/page_config'
|
18
|
-
autoload :Pages, 'active_admin/pages'
|
19
|
-
autoload :Sidebar, 'active_admin/sidebar'
|
20
|
-
autoload :ActionItems, 'active_admin/action_items'
|
21
|
-
autoload :AssetRegistration, 'active_admin/asset_registration'
|
22
|
-
autoload :Menu, 'active_admin/menu'
|
23
|
-
autoload :MenuItem, 'active_admin/menu_item'
|
24
|
-
autoload :ActionBuilder, 'active_admin/action_builder'
|
25
8
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
9
|
+
autoload :VERSION, 'active_admin/version'
|
10
|
+
autoload :ActionItems, 'active_admin/action_items'
|
11
|
+
autoload :AssetRegistration, 'active_admin/asset_registration'
|
12
|
+
autoload :Breadcrumbs, 'active_admin/breadcrumbs'
|
13
|
+
autoload :Callbacks, 'active_admin/callbacks'
|
14
|
+
autoload :Component, 'active_admin/component'
|
15
|
+
autoload :ControllerAction, 'active_admin/controller_action'
|
16
|
+
autoload :Dashboards, 'active_admin/dashboards'
|
17
|
+
autoload :Devise, 'active_admin/devise'
|
18
|
+
autoload :DSL, 'active_admin/dsl'
|
19
|
+
autoload :Event, 'active_admin/event'
|
20
|
+
autoload :FormBuilder, 'active_admin/form_builder'
|
21
|
+
autoload :Iconic, 'active_admin/iconic'
|
22
|
+
autoload :Menu, 'active_admin/menu'
|
23
|
+
autoload :MenuItem, 'active_admin/menu_item'
|
24
|
+
autoload :Namespace, 'active_admin/namespace'
|
25
|
+
autoload :PageConfig, 'active_admin/page_config'
|
26
|
+
autoload :Resource, 'active_admin/resource'
|
27
|
+
autoload :ResourceController, 'active_admin/resource_controller'
|
28
|
+
autoload :Renderer, 'active_admin/renderer'
|
29
|
+
autoload :Scope, 'active_admin/scope'
|
30
|
+
autoload :Sidebar, 'active_admin/sidebar'
|
31
|
+
autoload :TableBuilder, 'active_admin/table_builder'
|
32
|
+
autoload :ViewFactory, 'active_admin/view_factory'
|
33
|
+
autoload :ViewHelpers, 'active_admin/view_helpers'
|
34
|
+
autoload :Views, 'active_admin/views'
|
35
|
+
|
36
|
+
module Configuration
|
37
|
+
|
38
|
+
# The default namespace to put controllers and routes inside. Set this
|
39
|
+
# in config/initializers/active_admin.rb using:
|
40
|
+
#
|
41
|
+
# config.default_namespace = :super_admin
|
42
|
+
#
|
43
|
+
@@default_namespace = :admin
|
44
|
+
mattr_accessor :default_namespace
|
45
|
+
|
46
|
+
# The default number of resources to display on index pages
|
47
|
+
@@default_per_page = 30
|
48
|
+
mattr_accessor :default_per_page
|
49
|
+
|
50
|
+
# The default sort order for index pages
|
51
|
+
@@default_sort_order = 'id_desc'
|
52
|
+
mattr_accessor :default_sort_order
|
53
|
+
|
54
|
+
# A hash of all the registered namespaces
|
55
|
+
@@namespaces = {}
|
56
|
+
mattr_accessor :namespaces
|
57
|
+
|
58
|
+
# The title which get's displayed in the main layout
|
59
|
+
@@site_title = ""
|
60
|
+
mattr_accessor :site_title
|
61
|
+
|
62
|
+
# Load paths for admin configurations. Add folders to this load path
|
63
|
+
# to load up other resources for administration. External gems can
|
64
|
+
# include thier paths in this load path to provide active_admin UIs
|
65
|
+
@@load_paths = [File.expand_path('app/admin', Rails.root)]
|
66
|
+
mattr_accessor :load_paths
|
67
|
+
|
68
|
+
# The view factory to use to generate all the view classes. Take
|
69
|
+
# a look at ActiveAdmin::ViewFactory
|
70
|
+
@@view_factory = ActiveAdmin::ViewFactory.new
|
71
|
+
mattr_accessor :view_factory
|
72
|
+
|
73
|
+
# Whether or not to use admin comments
|
74
|
+
@@admin_notes = true
|
75
|
+
mattr_accessor :admin_notes
|
76
|
+
|
77
|
+
# The method to call in controllers to get the current user
|
78
|
+
@@current_user_method = :current_admin_user
|
79
|
+
mattr_accessor :current_user_method
|
80
|
+
|
81
|
+
# The method to call in the controllers to ensure that there
|
82
|
+
# is a currently authenticated admin user
|
83
|
+
@@authentication_method = :authenticate_admin_user!
|
84
|
+
mattr_accessor :authentication_method
|
85
|
+
|
86
|
+
# Active Admin makes educated guesses when displaying objects, this is
|
87
|
+
# the list of methods its tries calling in order
|
88
|
+
@@display_name_methods = [:display_name, :full_name, :name, :username, :login, :title, :email, :to_s]
|
89
|
+
mattr_accessor :display_name_methods
|
60
90
|
|
61
|
-
|
62
|
-
@@menus = {}
|
63
|
-
mattr_accessor :menus
|
91
|
+
end
|
64
92
|
|
65
|
-
|
66
|
-
|
67
|
-
mattr_accessor :tabs_renderer
|
93
|
+
extend Configuration
|
94
|
+
extend AssetRegistration
|
68
95
|
|
69
96
|
class << self
|
70
97
|
|
98
|
+
|
71
99
|
# Get's called within the initializer
|
72
100
|
def setup
|
73
101
|
# Register the default assets
|
74
|
-
register_stylesheet 'active_admin.css'
|
102
|
+
register_stylesheet 'admin/active_admin.css'
|
75
103
|
register_javascript 'active_admin_vendor.js'
|
76
104
|
register_javascript 'active_admin.js'
|
77
105
|
|
@@ -80,6 +108,9 @@ module ActiveAdmin
|
|
80
108
|
# If not, file nameing becomes very important and can cause clashes.
|
81
109
|
ActiveSupport::Dependencies.autoload_paths.reject!{|path| load_paths.include?(path) }
|
82
110
|
|
111
|
+
# Add the Active Admin view path to the rails view path
|
112
|
+
ActionController::Base.append_view_path File.expand_path('../active_admin/views/templates', __FILE__)
|
113
|
+
|
83
114
|
# Don't eagerload our configs, we'll deal with them ourselves
|
84
115
|
Rails.application.config.eager_load_paths = Rails.application.config.eager_load_paths.reject do |path|
|
85
116
|
load_paths.include?(path)
|
@@ -89,23 +120,36 @@ module ActiveAdmin
|
|
89
120
|
# and on every require in development mode
|
90
121
|
ActionDispatch::Callbacks.to_prepare :active_admin do
|
91
122
|
ActiveAdmin.unload!
|
92
|
-
# Because every time we load, the routes may have changed
|
93
|
-
# we must ensure to load the routes each request (in dev)
|
94
123
|
Rails.application.reload_routes!
|
95
124
|
end
|
96
125
|
|
97
126
|
yield self
|
127
|
+
|
128
|
+
# Setup SASS
|
129
|
+
require 'sass/plugin' # This must be required after initialization
|
130
|
+
Sass::Plugin.add_template_location(File.expand_path("../active_admin/stylesheets/", __FILE__), File.join(Rails.root, "public/stylesheets/admin"))
|
98
131
|
end
|
99
132
|
|
100
133
|
# Registers a brand new configuration for the given resource.
|
101
|
-
#
|
102
|
-
# TODO: Setup docs for registration options
|
103
134
|
def register(resource, options = {}, &block)
|
104
135
|
namespace_name = options[:namespace] == false ? :root : (options[:namespace] || default_namespace)
|
105
|
-
namespace =
|
136
|
+
namespace = find_or_create_namespace(namespace_name)
|
106
137
|
namespace.register(resource, options, &block)
|
107
138
|
end
|
108
139
|
|
140
|
+
# Creates a namespace for the given name
|
141
|
+
def find_or_create_namespace(name)
|
142
|
+
return namespaces[name] if namespaces[name]
|
143
|
+
namespace = Namespace.new(name)
|
144
|
+
ActiveAdmin::Event.dispatch ActiveAdmin::Namespace::RegisterEvent, namespace
|
145
|
+
namespaces[name] = namespace
|
146
|
+
namespace
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
# Stores if everything has been loaded or we need to reload
|
151
|
+
@@loaded = false
|
152
|
+
|
109
153
|
# Returns true if all the configuration files have been loaded.
|
110
154
|
def loaded?
|
111
155
|
@@loaded
|
@@ -118,6 +162,7 @@ module ActiveAdmin
|
|
118
162
|
# to allow for changes without having to restart the server.
|
119
163
|
def unload!
|
120
164
|
namespaces.values.each{|namespace| namespace.unload! }
|
165
|
+
self.namespaces = {}
|
121
166
|
@@loaded = false
|
122
167
|
end
|
123
168
|
|
@@ -129,14 +174,21 @@ module ActiveAdmin
|
|
129
174
|
# and they aren't marked for re-loading. To mark the files for re-loading
|
130
175
|
# you must first call ActiveAdmin.unload!
|
131
176
|
def load!
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
177
|
+
# No work to do if we've already loaded
|
178
|
+
return false if loaded?
|
179
|
+
|
180
|
+
# Load files
|
181
|
+
load_paths.flatten.compact.uniq.each do |path|
|
182
|
+
Dir["#{path}/*.rb"].each{|f| load f }
|
138
183
|
end
|
139
|
-
|
184
|
+
|
185
|
+
# If no configurations, let's make sure you can still login
|
186
|
+
load_default_namespace if namespaces.values.empty?
|
187
|
+
|
188
|
+
# Load Menus
|
189
|
+
namespaces.values.each{|namespace| namespace.load_menu! }
|
190
|
+
|
191
|
+
@@loaded = true
|
140
192
|
end
|
141
193
|
|
142
194
|
# Creates all the necessary routes for the ActiveAdmin configurations
|
@@ -190,17 +242,39 @@ module ActiveAdmin
|
|
190
242
|
end
|
191
243
|
end
|
192
244
|
|
193
|
-
if
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
245
|
+
# Add in the parent if it exists
|
246
|
+
if config.belongs_to?
|
247
|
+
routes_for_belongs_to = route_definition_block.dup
|
248
|
+
route_definition_block = Proc.new do
|
249
|
+
# If its optional, make the normal resource routes
|
250
|
+
instance_eval &routes_for_belongs_to if config.belongs_to_config.optional?
|
251
|
+
|
252
|
+
# Make the nested belongs_to routes
|
253
|
+
resources config.belongs_to_config.target.underscored_resource_name.pluralize do
|
254
|
+
instance_eval &routes_for_belongs_to
|
255
|
+
end
|
198
256
|
end
|
199
257
|
end
|
258
|
+
|
259
|
+
# Add on the namespace if required
|
260
|
+
if !config.namespace.root?
|
261
|
+
routes_in_namespace = route_definition_block.dup
|
262
|
+
route_definition_block = Proc.new do
|
263
|
+
namespace config.namespace.name do
|
264
|
+
instance_eval(&routes_in_namespace)
|
265
|
+
end
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
instance_eval &route_definition_block
|
200
270
|
end
|
201
271
|
end
|
202
272
|
end
|
203
273
|
|
274
|
+
def load_default_namespace
|
275
|
+
find_or_create_namespace(default_namespace)
|
276
|
+
end
|
277
|
+
|
204
278
|
#
|
205
279
|
# Add before, around and after filters to each registered resource.
|
206
280
|
#
|
@@ -227,3 +301,5 @@ module ActiveAdmin
|
|
227
301
|
|
228
302
|
end
|
229
303
|
end
|
304
|
+
|
305
|
+
require 'active_admin/comments'
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
class AbstractViewFactory
|
3
|
+
@@default_views = {}
|
4
|
+
|
5
|
+
def self.register(view_hash)
|
6
|
+
view_hash.each do |view_key, view_class|
|
7
|
+
@@default_views[view_key] = view_class
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@views = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
# Register a new view key with the view factory
|
16
|
+
#
|
17
|
+
# eg:
|
18
|
+
#
|
19
|
+
# factory = AbstractViewFactory.new
|
20
|
+
# factory.register :my_view => SomeViewClass
|
21
|
+
#
|
22
|
+
# You can setup many at the same time:
|
23
|
+
#
|
24
|
+
# factory.register :my_view => SomeClass,
|
25
|
+
# :another_view => OtherViewClass
|
26
|
+
#
|
27
|
+
def register(view_hash)
|
28
|
+
view_hash.each do |view_key, view_class|
|
29
|
+
@views[view_key] = view_class
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_for(key)
|
34
|
+
@@default_views[key.to_sym]
|
35
|
+
end
|
36
|
+
|
37
|
+
def has_key?(key)
|
38
|
+
@views.has_key?(key.to_sym) || @@default_views.has_key?(key.to_sym)
|
39
|
+
end
|
40
|
+
|
41
|
+
def [](key)
|
42
|
+
get_view_for_key(key)
|
43
|
+
end
|
44
|
+
|
45
|
+
def []=(key, value)
|
46
|
+
set_view_for_key(key, value)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Override respond to to include keys
|
50
|
+
def respond_to?(method)
|
51
|
+
key = key_from_method_name(method)
|
52
|
+
if has_key?(key)
|
53
|
+
true
|
54
|
+
else
|
55
|
+
super
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def method_missing(method, *args)
|
62
|
+
key = key_from_method_name(method)
|
63
|
+
if has_key?(key)
|
64
|
+
if method.to_s.include?('=')
|
65
|
+
self.class_eval <<-EOS
|
66
|
+
def #{key}=(value)
|
67
|
+
set_view_for_key(:#{key}, value)
|
68
|
+
end
|
69
|
+
EOS
|
70
|
+
else
|
71
|
+
self.class_eval <<-EOS
|
72
|
+
def #{key}
|
73
|
+
get_view_for_key(:#{key})
|
74
|
+
end
|
75
|
+
EOS
|
76
|
+
end
|
77
|
+
self.send(method, *args)
|
78
|
+
else
|
79
|
+
super
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def key_from_method_name(method)
|
84
|
+
method.to_s.gsub('=', '').to_sym
|
85
|
+
end
|
86
|
+
|
87
|
+
def get_view_for_key(key)
|
88
|
+
@views[key.to_sym] || @@default_views[key.to_sym]
|
89
|
+
end
|
90
|
+
|
91
|
+
def set_view_for_key(key, view)
|
92
|
+
@views[key.to_sym] = view
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|