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 @@
|
|
|
1
|
+
//= require active_admin/base
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
ActiveAdmin::Dashboards.build do
|
|
2
|
+
|
|
3
|
+
# Define your dashboard sections here. Each block will be
|
|
4
|
+
# rendered on the dashboard in the context of the view. So just
|
|
5
|
+
# return the content which you would like to display.
|
|
6
|
+
|
|
7
|
+
# == Simple Dashboard Section
|
|
8
|
+
# Here is an example of a simple dashboard section
|
|
9
|
+
#
|
|
10
|
+
# section "Recent Posts" do
|
|
11
|
+
# ul do
|
|
12
|
+
# Post.recent(5).collect do |post|
|
|
13
|
+
# li link_to(post.title, admin_post_path(post))
|
|
14
|
+
# end
|
|
15
|
+
# end
|
|
16
|
+
# end
|
|
17
|
+
|
|
18
|
+
# == Render Partial Section
|
|
19
|
+
# The block is rendererd within the context of the view, so you can
|
|
20
|
+
# easily render a partial rather than build content in ruby.
|
|
21
|
+
#
|
|
22
|
+
# section "Recent Posts" do
|
|
23
|
+
# render 'recent_posts' # => this will render /app/views/admin/dashboard/_recent_posts.html.erb
|
|
24
|
+
# end
|
|
25
|
+
|
|
26
|
+
# == Section Ordering
|
|
27
|
+
# The dashboard sections are ordered by a given priority from top left to
|
|
28
|
+
# bottom right. The default priority is 10. By giving a section numerically lower
|
|
29
|
+
# priority it will be sorted higher. For example:
|
|
30
|
+
#
|
|
31
|
+
# section "Recent Posts", :priority => 10
|
|
32
|
+
# section "Recent User", :priority => 1
|
|
33
|
+
#
|
|
34
|
+
# Will render the "Recent Users" then the "Recent Posts" sections on the dashboard.
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Generators
|
|
3
|
+
class DeviseGenerator < Rails::Generators::NamedBase
|
|
4
|
+
desc "Creates an admin user and uses Devise for authentication"
|
|
5
|
+
|
|
6
|
+
argument :name, :type => :string, :default => "AdminUser"
|
|
7
|
+
|
|
8
|
+
class_option :registerable, :type => :boolean, :default => false,
|
|
9
|
+
:desc => "Should the generated resource be registerable?"
|
|
10
|
+
|
|
11
|
+
def install_devise
|
|
12
|
+
require 'devise'
|
|
13
|
+
if File.exists?(File.join(destination_root, "config", "initializers", "devise.rb"))
|
|
14
|
+
log :generate, "No need to install devise, already done."
|
|
15
|
+
else
|
|
16
|
+
log :generate, "devise:install"
|
|
17
|
+
invoke "devise:install"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def create_admin_user
|
|
22
|
+
invoke "devise", [name]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def remove_registerable_from_model
|
|
26
|
+
unless options[:registerable]
|
|
27
|
+
model_file = File.join(destination_root, "app", "models", "#{file_path}.rb")
|
|
28
|
+
gsub_file model_file, /\:registerable([.]*,)?/, ""
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def set_namespace_for_path
|
|
33
|
+
routes_file = File.join(destination_root, "config", "routes.rb")
|
|
34
|
+
gsub_file routes_file, /devise_for :#{table_name}/, "devise_for :#{table_name}, ActiveAdmin::Devise.config"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def add_default_user_to_migration
|
|
38
|
+
# Don't assume that we have a migration!
|
|
39
|
+
devise_migrations = Dir["db/migrate/*_devise_create_#{table_name}.rb"]
|
|
40
|
+
if devise_migrations.size > 0
|
|
41
|
+
inject_into_file Dir["db/migrate/*_devise_create_#{table_name}.rb"].first,
|
|
42
|
+
"# Create a default user\n #{class_name}.create!(:email => 'admin@example.com', :password => 'password', :password_confirmation => 'password')\n\n ",
|
|
43
|
+
:before => "add_index :#{table_name}, :email"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Generators
|
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
|
4
|
+
desc "Installs Active Admin and generats the necessary migrations"
|
|
5
|
+
|
|
6
|
+
hook_for :users, :default => "devise", :desc => "Admin user generator to run. Skip with --skip-users"
|
|
7
|
+
|
|
8
|
+
include Rails::Generators::Migration
|
|
9
|
+
|
|
10
|
+
def self.source_root
|
|
11
|
+
@_active_admin_source_root ||= File.expand_path("../templates", __FILE__)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.next_migration_number(dirname)
|
|
15
|
+
Time.now.strftime("%Y%m%d%H%M%S")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def copy_initializer
|
|
19
|
+
template 'active_admin.rb.erb', 'config/initializers/active_admin.rb'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def setup_directory
|
|
23
|
+
empty_directory "app/admin"
|
|
24
|
+
template 'dashboards.rb', 'app/admin/dashboards.rb'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def setup_routes
|
|
28
|
+
route "ActiveAdmin.routes(self)"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def create_assets
|
|
32
|
+
generate "active_admin:assets"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def create_migrations
|
|
36
|
+
Dir["#{self.class.source_root}/migrations/*.rb"].sort.each do |filepath|
|
|
37
|
+
name = File.basename(filepath)
|
|
38
|
+
migration_template "migrations/#{name}", "db/migrate/#{name.gsub(/^\d+_/,'')}"
|
|
39
|
+
sleep 1
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
ActiveAdmin.setup do |config|
|
|
2
|
+
|
|
3
|
+
# == Site Title
|
|
4
|
+
#
|
|
5
|
+
# Set the title that is displayed on the main layout
|
|
6
|
+
# for each of the active admin pages.
|
|
7
|
+
#
|
|
8
|
+
config.site_title = "<%= Rails.application.class.name.split("::").first.titlecase %>"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# == Default Namespace
|
|
12
|
+
#
|
|
13
|
+
# Set the default namespace each administration resource
|
|
14
|
+
# will be added to.
|
|
15
|
+
#
|
|
16
|
+
# eg:
|
|
17
|
+
# config.default_namespace = :hello_world
|
|
18
|
+
#
|
|
19
|
+
# This will create resources in the HelloWorld module and
|
|
20
|
+
# will namespace routes to /hello_world/*
|
|
21
|
+
#
|
|
22
|
+
# To set no namespace by default, use:
|
|
23
|
+
# config.default_namespace = false
|
|
24
|
+
config.default_namespace = :admin
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# == User Authentication
|
|
28
|
+
#
|
|
29
|
+
# Active Admin will automatically call an authentication
|
|
30
|
+
# method in a before filter of all controller actions to
|
|
31
|
+
# ensure that there is a currently logged in admin user.
|
|
32
|
+
#
|
|
33
|
+
# This setting changes the method which Active Admin calls
|
|
34
|
+
# within the controller.
|
|
35
|
+
config.authentication_method = :authenticate_admin_user!
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# == Current User
|
|
39
|
+
#
|
|
40
|
+
# Active Admin will associate actions with the current
|
|
41
|
+
# user performing them.
|
|
42
|
+
#
|
|
43
|
+
# This setting changes the method which Active Admin calls
|
|
44
|
+
# to return the currently logged in user.
|
|
45
|
+
config.current_user_method = :current_admin_user
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# == Logging Out
|
|
49
|
+
#
|
|
50
|
+
# Active Admin displays a logout link on each screen. These
|
|
51
|
+
# settings configure the location and method used for the link.
|
|
52
|
+
#
|
|
53
|
+
# This setting changes the path where the link points to. If it's
|
|
54
|
+
# a string, the strings is used as the path. If it's a Symbol, we
|
|
55
|
+
# will call the method to return the path.
|
|
56
|
+
config.logout_link_path = :destroy_admin_user_session_path
|
|
57
|
+
|
|
58
|
+
# This setting changes the http method used when rendering the
|
|
59
|
+
# link. For example :get, :delete, :put, etc..
|
|
60
|
+
config.logout_link_method = :delete
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# == Admin Comments
|
|
64
|
+
#
|
|
65
|
+
# Admin comments allow you to add comments to any model for admin use
|
|
66
|
+
#
|
|
67
|
+
# Admin comments are enabled by default in the default
|
|
68
|
+
# namespace only. You can turn them on in a namesapce
|
|
69
|
+
# by adding them to the comments array.
|
|
70
|
+
#
|
|
71
|
+
# config.allow_comments_in = [:admin]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# == Controller Filters
|
|
75
|
+
#
|
|
76
|
+
# You can add before, after and around filters to all of your
|
|
77
|
+
# Active Admin resources from here.
|
|
78
|
+
#
|
|
79
|
+
# config.before_filter :do_something_awesome
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# == Register Stylesheets & Javascripts
|
|
83
|
+
#
|
|
84
|
+
# We recommend using the built in Active Admin layout and loading
|
|
85
|
+
# up your own stylesheets / javascripts to customize the look
|
|
86
|
+
# and feel.
|
|
87
|
+
#
|
|
88
|
+
# To load a stylesheet:
|
|
89
|
+
# config.register_stylesheet 'my_stylesheet.css'
|
|
90
|
+
#
|
|
91
|
+
# To load a javascript file:
|
|
92
|
+
# config.register_javascript 'my_javascript.js'
|
|
93
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
ActiveAdmin::Dashboards.build do
|
|
2
|
+
|
|
3
|
+
# Define your dashboard sections here. Each block will be
|
|
4
|
+
# rendered on the dashboard in the context of the view. So just
|
|
5
|
+
# return the content which you would like to display.
|
|
6
|
+
|
|
7
|
+
# == Simple Dashboard Section
|
|
8
|
+
# Here is an example of a simple dashboard section
|
|
9
|
+
#
|
|
10
|
+
# section "Recent Posts" do
|
|
11
|
+
# ul do
|
|
12
|
+
# Post.recent(5).collect do |post|
|
|
13
|
+
# li link_to(post.title, admin_post_path(post))
|
|
14
|
+
# end
|
|
15
|
+
# end
|
|
16
|
+
# end
|
|
17
|
+
|
|
18
|
+
# == Render Partial Section
|
|
19
|
+
# The block is rendered within the context of the view, so you can
|
|
20
|
+
# easily render a partial rather than build content in ruby.
|
|
21
|
+
#
|
|
22
|
+
# section "Recent Posts" do
|
|
23
|
+
# div do
|
|
24
|
+
# render 'recent_posts' # => this will render /app/views/admin/dashboard/_recent_posts.html.erb
|
|
25
|
+
# end
|
|
26
|
+
# end
|
|
27
|
+
|
|
28
|
+
# == Section Ordering
|
|
29
|
+
# The dashboard sections are ordered by a given priority from top left to
|
|
30
|
+
# bottom right. The default priority is 10. By giving a section numerically lower
|
|
31
|
+
# priority it will be sorted higher. For example:
|
|
32
|
+
#
|
|
33
|
+
# section "Recent Posts", :priority => 10
|
|
34
|
+
# section "Recent User", :priority => 1
|
|
35
|
+
#
|
|
36
|
+
# Will render the "Recent Users" then the "Recent Posts" sections on the dashboard.
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class CreateAdminNotes < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :admin_notes do |t|
|
|
4
|
+
t.references :resource, :polymorphic => true, :null => false
|
|
5
|
+
t.references :admin_user, :polymorphic => true
|
|
6
|
+
t.text :body
|
|
7
|
+
t.timestamps
|
|
8
|
+
end
|
|
9
|
+
add_index :admin_notes, [:resource_type, :resource_id]
|
|
10
|
+
add_index :admin_notes, [:admin_user_type, :admin_user_id]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.down
|
|
14
|
+
drop_table :admin_notes
|
|
15
|
+
end
|
|
16
|
+
end
|
data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class MoveAdminNotesToComments < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
remove_index :admin_notes, [:admin_user_type, :admin_user_id]
|
|
4
|
+
rename_table :admin_notes, :active_admin_comments
|
|
5
|
+
rename_column :active_admin_comments, :admin_user_type, :author_type
|
|
6
|
+
rename_column :active_admin_comments, :admin_user_id, :author_id
|
|
7
|
+
add_column :active_admin_comments, :namespace, :string
|
|
8
|
+
add_index :active_admin_comments, [:namespace]
|
|
9
|
+
add_index :active_admin_comments, [:author_type, :author_id]
|
|
10
|
+
|
|
11
|
+
# Update all the existing comments to the default namespace
|
|
12
|
+
say "Updating any existing comments to the #{ActiveAdmin.application.default_namespace} namespace."
|
|
13
|
+
execute "UPDATE active_admin_comments SET namespace='#{ActiveAdmin.application.default_namespace}'"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.down
|
|
17
|
+
remove_index :active_admin_comments, :column => [:author_type, :author_id]
|
|
18
|
+
remove_index :active_admin_comments, :column => [:namespace]
|
|
19
|
+
remove_column :active_admin_comments, :namespace
|
|
20
|
+
rename_column :active_admin_comments, :author_id, :admin_user_id
|
|
21
|
+
rename_column :active_admin_comments, :author_type, :admin_user_type
|
|
22
|
+
rename_table :active_admin_comments, :admin_notes
|
|
23
|
+
add_index :admin_notes, [:admin_user_type, :admin_user_id]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Generators
|
|
3
|
+
class ResourceGenerator < Rails::Generators::NamedBase
|
|
4
|
+
desc "Installs ActiveAdmin in a rails 3 application"
|
|
5
|
+
|
|
6
|
+
def self.source_root
|
|
7
|
+
@_active_admin_source_root ||= File.expand_path("../templates", __FILE__)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def generate_config_file
|
|
11
|
+
template "admin.rb", "app/admin/#{file_path.gsub('/', '_').pluralize}.rb"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
data/script/local
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require File.expand_path('../../spec/support/detect_rails_version', __FILE__)
|
|
4
|
+
|
|
5
|
+
unless ARGV[0]
|
|
6
|
+
puts <<-EOF
|
|
7
|
+
Usage: ./script/#{__FILE__} COMMAND [ARGS]
|
|
8
|
+
|
|
9
|
+
The command will be run in the context of the local rails
|
|
10
|
+
app stored in test-rails-app.
|
|
11
|
+
|
|
12
|
+
Examples:
|
|
13
|
+
|
|
14
|
+
./script/local server
|
|
15
|
+
./script/local c
|
|
16
|
+
./script/local rake db:migrate
|
|
17
|
+
EOF
|
|
18
|
+
exit(1)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Set up some variables
|
|
22
|
+
rails_version = detect_rails_version || '3.0.0'
|
|
23
|
+
|
|
24
|
+
test_app_dir = ".test-rails-apps"
|
|
25
|
+
test_app_path = "#{test_app_dir}/test-rails-app-#{rails_version}"
|
|
26
|
+
|
|
27
|
+
# Ensure .test-rails-apps is created
|
|
28
|
+
system "mkdir #{test_app_dir}" unless File.exists?(test_app_dir)
|
|
29
|
+
|
|
30
|
+
# Create the sample rails app if it doesn't already exist
|
|
31
|
+
unless File.exists? test_app_path
|
|
32
|
+
system "RAILS='#{rails_version}' bundle exec rails new #{test_app_path} -m spec/support/rails_template_with_data.rb"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Link this rails app
|
|
36
|
+
system "rm test-rails-app"
|
|
37
|
+
system "ln -s #{test_app_path} test-rails-app"
|
|
38
|
+
|
|
39
|
+
# If it's a rails command, auto add the rails script
|
|
40
|
+
RAILS_COMMANDS = %w{generate console server dbconsole g c s runner}
|
|
41
|
+
args = RAILS_COMMANDS.include?(ARGV[0]) ? ["rails", ARGV].flatten : ARGV
|
|
42
|
+
|
|
43
|
+
# Run the command
|
|
44
|
+
exec "cd test-rails-app && GEMFILE=../Gemfile bundle exec #{args.join(" ")}"
|
data/script/use_rails
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Switches the development environment to use the given
|
|
4
|
+
# version of rails. Caches the Gemfile.locks so that
|
|
5
|
+
# switching it very fast.
|
|
6
|
+
|
|
7
|
+
def cmd(command)
|
|
8
|
+
puts command
|
|
9
|
+
system command
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
version = ARGV[0]
|
|
13
|
+
|
|
14
|
+
unless version
|
|
15
|
+
puts "USAGE: ./script/#{__FILE__} VERSION [OPTIONS]"
|
|
16
|
+
puts
|
|
17
|
+
puts "Options:"
|
|
18
|
+
puts " --clobber Add this flag to remove the existing Gemfile.lock before running"
|
|
19
|
+
exit(1)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def file_or_symlink?(path)
|
|
23
|
+
File.exist?(path) || File.symlink?(path)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
gem_lock_dir = ".gemfile-locks"
|
|
27
|
+
gem_lock_file = "#{gem_lock_dir}/Gemfile-#{version}.lock"
|
|
28
|
+
|
|
29
|
+
# Ensure our lock dir is created
|
|
30
|
+
cmd "mkdir #{gem_lock_dir}" unless File.exists?(gem_lock_dir)
|
|
31
|
+
|
|
32
|
+
# --clobber passed in
|
|
33
|
+
if File.exists?(gem_lock_file) && ARGV.include?('--clobber')
|
|
34
|
+
cmd "rm #{gem_lock_file}"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
unless File.exists?(gem_lock_file)
|
|
38
|
+
# Generate it
|
|
39
|
+
cmd "rm Gemfile.lock" if file_or_symlink?("Gemfile.lock")
|
|
40
|
+
cmd "export RAILS=#{version} && bundle install"
|
|
41
|
+
cmd "mv Gemfile.lock #{gem_lock_file}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
cmd("rm Gemfile.lock") if file_or_symlink?("Gemfile.lock")
|
|
45
|
+
cmd("ln -s #{gem_lock_file} Gemfile.lock")
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe_with_capybara "Belongs To" do
|
|
4
|
+
|
|
5
|
+
let(:user){ User.create(:first_name => "John", :last_name => "Doe", :username => "johndoe") }
|
|
6
|
+
let(:post){ user.posts.create :title => "Hello World", :body => "woot!"}
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
# Make sure both are created
|
|
10
|
+
user
|
|
11
|
+
post
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "the index page" do
|
|
15
|
+
before do
|
|
16
|
+
visit admin_user_posts_path(user)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "the main content" do
|
|
20
|
+
it "should display the default table" do
|
|
21
|
+
page.should have_content(post.title)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "the breadcrumb" do
|
|
26
|
+
it "should have a link to the parent's index" do
|
|
27
|
+
page.body.should have_tag("a", "Users", :attributes => { :href => "/admin/users" })
|
|
28
|
+
end
|
|
29
|
+
it "should have a link to the parent" do
|
|
30
|
+
page.body.should have_tag("a", user.id.to_s, :attributes => { :href => "/admin/users/#{user.id}" })
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "the view links" do
|
|
35
|
+
it "should take you to the sub resource" do
|
|
36
|
+
click_link "View"
|
|
37
|
+
current_path.should == "/admin/users/#{user.id}/posts/#{post.id}"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|