andrewroth_activeadmin 0.3.4
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 +35 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +301 -0
- data/Gemfile +40 -0
- data/Guardfile +8 -0
- data/LICENSE +25 -0
- data/README.rdoc +113 -0
- data/Rakefile +18 -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 +363 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +259 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +121 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +102 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +125 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +68 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +10 -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/_utilities.scss +17 -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/0-installation.md +50 -0
- data/docs/1-general-configuration.md +43 -0
- data/docs/2-resource-customization.md +114 -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 +90 -0
- data/docs/4-csv-format.md +14 -0
- data/docs/5-forms.md +39 -0
- data/docs/6-show-screens.md +36 -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/filters.feature +35 -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 +56 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +17 -0
- data/features/menu.feature +37 -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 +96 -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 +82 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +231 -0
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/builder.rb +111 -0
- data/lib/active_admin/arbre/context.rb +45 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/html/attributes.rb +20 -0
- data/lib/active_admin/arbre/html/class_list.rb +28 -0
- data/lib/active_admin/arbre/html/collection.rb +27 -0
- data/lib/active_admin/arbre/html/document.rb +42 -0
- data/lib/active_admin/arbre/html/element.rb +151 -0
- data/lib/active_admin/arbre/html/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/html/tag.rb +137 -0
- data/lib/active_admin/arbre/html/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/dependency_checker.rb +30 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +54 -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 +118 -0
- data/lib/active_admin/helpers/optional_display.rb +34 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +70 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/locales/bg.yml +40 -0
- data/lib/active_admin/locales/cs.yml +34 -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 +40 -0
- data/lib/active_admin/locales/fr.yml +40 -0
- data/lib/active_admin/locales/it.yml +40 -0
- data/lib/active_admin/locales/ja.yml +40 -0
- data/lib/active_admin/locales/pl.yml +34 -0
- data/lib/active_admin/locales/pt-BR.yml +41 -0
- data/lib/active_admin/locales/ru.yml +40 -0
- data/lib/active_admin/locales/sv-SE.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 +64 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource.rb +159 -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 +50 -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 +105 -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 +138 -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 +45 -0
- data/lib/active_admin/scope.rb +31 -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 +17 -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 +69 -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 +57 -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 +164 -0
- data/lib/active_admin/views/pages/base.rb +167 -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 +91 -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/tabbed_navigation.rb +94 -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 +103 -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 +46 -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/memory_spec.rb +38 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +167 -0
- data/spec/support/detect_rails_version.rb +10 -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/active_admin_spec.rb +17 -0
- data/spec/unit/application_spec.rb +87 -0
- data/spec/unit/arbre/context_spec.rb +35 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +223 -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 +209 -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/devise_spec.rb +66 -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 +256 -0
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -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 +80 -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 +75 -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 +269 -0
- data/spec/unit/routing_spec.rb +88 -0
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +41 -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 +15 -0
- data/spec/unit/views/components/columns_spec.rb +75 -0
- data/spec/unit/views/components/panel_spec.rb +29 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/status_tag_spec.rb +79 -0
- data/spec/unit/views/components/table_for_spec.rb +131 -0
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +57 -0
- data/tasks/yard.rake +6 -0
- metadata +646 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Rails template to build the sample app for specs
|
|
2
|
+
|
|
3
|
+
# Create a cucumber database and environment
|
|
4
|
+
copy_file File.expand_path('../templates/cucumber.rb', __FILE__), "config/environments/cucumber.rb"
|
|
5
|
+
gsub_file 'config/database.yml', /^test:.*\n/, "test: &test\n"
|
|
6
|
+
gsub_file 'config/database.yml', /\z/, "\ncucumber:\n <<: *test\n database: db/cucumber.sqlite3"
|
|
7
|
+
|
|
8
|
+
# Generate some test models
|
|
9
|
+
generate :model, "post title:string body:text published_at:datetime author_id:integer category_id:integer"
|
|
10
|
+
inject_into_file 'app/models/post.rb', " belongs_to :author, :class_name => 'User'\n belongs_to :category\n accepts_nested_attributes_for :author\n", :after => "class Post < ActiveRecord::Base\n"
|
|
11
|
+
generate :model, "user type:string first_name:string last_name:string username:string age:integer"
|
|
12
|
+
inject_into_file 'app/models/user.rb', " has_many :posts, :foreign_key => 'author_id'\n", :after => "class User < ActiveRecord::Base\n"
|
|
13
|
+
generate :model, "publisher --migration=false --parent=User"
|
|
14
|
+
generate :model, 'category name:string description:text'
|
|
15
|
+
inject_into_file 'app/models/category.rb', " has_many :posts\n", :after => "class Category < ActiveRecord::Base\n"
|
|
16
|
+
|
|
17
|
+
# Add our local Active Admin to the load path
|
|
18
|
+
inject_into_file "config/environment.rb", "\n$LOAD_PATH.unshift('#{File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib'))}')\nrequire \"active_admin\"\n", :after => "require File.expand_path('../application', __FILE__)"
|
|
19
|
+
|
|
20
|
+
run "rm Gemfile"
|
|
21
|
+
run "rm -r test"
|
|
22
|
+
run "rm -r spec"
|
|
23
|
+
|
|
24
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
25
|
+
generate :'active_admin:install'
|
|
26
|
+
|
|
27
|
+
# Setup a root path for devise
|
|
28
|
+
route "root :to => 'admin/dashboard#index'"
|
|
29
|
+
|
|
30
|
+
rake "db:migrate"
|
|
31
|
+
rake "db:test:prepare"
|
|
32
|
+
run "/usr/bin/env RAILS_ENV=cucumber rake db:migrate"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Use the default
|
|
2
|
+
apply File.expand_path("../rails_template.rb", __FILE__)
|
|
3
|
+
|
|
4
|
+
# Register Active Admin controllers
|
|
5
|
+
%w{ Post User Category }.each do |type|
|
|
6
|
+
generate :'active_admin:resource', type
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Setup some default data
|
|
10
|
+
append_file "db/seeds.rb", <<-EOF
|
|
11
|
+
users = ["Jimi Hendrix", "Jimmy Page", "Yngwie Malmsteen", "Eric Clapton", "Kirk Hammett"].collect do |name|
|
|
12
|
+
first, last = name.split(" ")
|
|
13
|
+
User.create! :first_name => first,
|
|
14
|
+
:last_name => last,
|
|
15
|
+
:username => [first,last].join('-').downcase,
|
|
16
|
+
:age => rand(80)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
categories = ["Rock", "Pop Rock", "Alt-Country", "Blues", "Dub-Step"].collect do |name|
|
|
20
|
+
Category.create! :name => name
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
1_000.times do |i|
|
|
24
|
+
user = users[i % users.size]
|
|
25
|
+
cat = categories[i % categories.size]
|
|
26
|
+
Post.create :title => "Blog Post \#{i}",
|
|
27
|
+
:body => "Blog post \#{i} is written by \#{user.username} about \#{cat.name}",
|
|
28
|
+
:category => cat,
|
|
29
|
+
:author => user
|
|
30
|
+
end
|
|
31
|
+
EOF
|
|
32
|
+
|
|
33
|
+
rake 'db:seed'
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require File.expand_path('config/environments/test', Rails.root)
|
|
2
|
+
|
|
3
|
+
# rails/railties/lib/rails/test_help.rb aborts if the environment is not 'test'. (Rails 3.0.0.beta3)
|
|
4
|
+
# We can't run Cucumber/RSpec/Test_Unit tests in different environments then.
|
|
5
|
+
#
|
|
6
|
+
# For now, I patch StringInquirer so that Rails.env.test? returns true when Rails.env is 'test' or 'cucumber'
|
|
7
|
+
#
|
|
8
|
+
# https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4458-rails-should-allow-test-to-run-in-cucumber-environment
|
|
9
|
+
module ActiveSupport
|
|
10
|
+
class StringInquirer < String
|
|
11
|
+
def method_missing(method_name, *arguments)
|
|
12
|
+
if method_name.to_s[-1,1] == "?"
|
|
13
|
+
test_string = method_name.to_s[0..-2]
|
|
14
|
+
if test_string == 'test'
|
|
15
|
+
self == 'test' or self == 'cucumber'
|
|
16
|
+
else
|
|
17
|
+
self == test_string
|
|
18
|
+
end
|
|
19
|
+
else
|
|
20
|
+
super
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'active_admin/abstract_view_factory'
|
|
4
|
+
|
|
5
|
+
describe ActiveAdmin::AbstractViewFactory do
|
|
6
|
+
|
|
7
|
+
let(:view_factory){ ActiveAdmin::AbstractViewFactory.new }
|
|
8
|
+
let(:mock_view){ Class.new }
|
|
9
|
+
|
|
10
|
+
describe "registering a new view key" do
|
|
11
|
+
before do
|
|
12
|
+
view_factory.register :my_new_view_class => mock_view
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should respond to :my_new_view_class" do
|
|
16
|
+
view_factory.respond_to?(:my_new_view_class)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should respond to :my_new_view_class=" do
|
|
20
|
+
view_factory.respond_to?(:my_new_view_class=)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should generate a getter method" do
|
|
24
|
+
view_factory.my_new_view_class.should == mock_view
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should be settable view a setter method" do
|
|
28
|
+
view_factory.my_new_view_class = "Some Obj"
|
|
29
|
+
view_factory.my_new_view_class.should == "Some Obj"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "array syntax access" do
|
|
34
|
+
before do
|
|
35
|
+
view_factory.register :my_new_view_class => mock_view
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should be available through array syntax" do
|
|
39
|
+
view_factory[:my_new_view_class].should == mock_view
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should be settable through array syntax" do
|
|
43
|
+
view_factory[:my_new_view_class] = "My New View Class"
|
|
44
|
+
view_factory[:my_new_view_class].should == "My New View Class"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe "registering default views" do
|
|
49
|
+
before do
|
|
50
|
+
ActiveAdmin::AbstractViewFactory.register :my_default_view_class => mock_view
|
|
51
|
+
end
|
|
52
|
+
it "should generate a getter method" do
|
|
53
|
+
view_factory.my_default_view_class.should == mock_view
|
|
54
|
+
end
|
|
55
|
+
it "should be settable view a setter method and not change default" do
|
|
56
|
+
view_factory.my_default_view_class = "Some Obj"
|
|
57
|
+
view_factory.my_default_view_class.should == "Some Obj"
|
|
58
|
+
view_factory.default_for(:my_default_view_class).should == mock_view
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe "subclassing the ViewFactory" do
|
|
63
|
+
let(:subclass) do
|
|
64
|
+
ActiveAdmin::AbstractViewFactory.register :my_subclassed_view => "From Parent"
|
|
65
|
+
Class.new(ActiveAdmin::AbstractViewFactory) do
|
|
66
|
+
def my_subclassed_view
|
|
67
|
+
"From Subclass"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should use the subclass implementation" do
|
|
73
|
+
factory = subclass.new
|
|
74
|
+
factory.my_subclassed_view.should == "From Subclass"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'defining new actions from registration blocks' do
|
|
4
|
+
|
|
5
|
+
let(:controller){ Admin::PostsController }
|
|
6
|
+
|
|
7
|
+
describe "generating a new member action" do
|
|
8
|
+
before do
|
|
9
|
+
action!
|
|
10
|
+
reload_routes!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
after(:each) do
|
|
14
|
+
controller.clear_member_actions!
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context "with a block" do
|
|
18
|
+
let(:action!) do
|
|
19
|
+
ActiveAdmin.register Post do
|
|
20
|
+
member_action :comment do
|
|
21
|
+
# Do nothing
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should create a new public instance method" do
|
|
27
|
+
controller.public_instance_methods.collect(&:to_s).should include("comment")
|
|
28
|
+
end
|
|
29
|
+
it "should add itself to the member actions config" do
|
|
30
|
+
controller.active_admin_config.member_actions.size.should == 1
|
|
31
|
+
end
|
|
32
|
+
it "should create a new named route" do
|
|
33
|
+
Rails.application.routes.url_helpers.methods.collect(&:to_s).should include("comment_admin_post_path")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "without a block" do
|
|
38
|
+
let(:action!) do
|
|
39
|
+
ActiveAdmin.register Post do
|
|
40
|
+
member_action :comment
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
it "should still generate a new empty action" do
|
|
44
|
+
controller.public_instance_methods.collect(&:to_s).should include("comment")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "generate a new collection action" do
|
|
50
|
+
before do
|
|
51
|
+
action!
|
|
52
|
+
reload_routes!
|
|
53
|
+
end
|
|
54
|
+
after(:each) do
|
|
55
|
+
controller.clear_collection_actions!
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context "with a block" do
|
|
59
|
+
let(:action!) do
|
|
60
|
+
ActiveAdmin.register Post do
|
|
61
|
+
collection_action :comments do
|
|
62
|
+
# Do nothing
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
it "should create a new public instance method" do
|
|
67
|
+
controller.public_instance_methods.collect(&:to_s).should include("comments")
|
|
68
|
+
end
|
|
69
|
+
it "should add itself to the member actions config" do
|
|
70
|
+
controller.active_admin_config.collection_actions.size.should == 1
|
|
71
|
+
end
|
|
72
|
+
it "should create a new named route" do
|
|
73
|
+
Rails.application.routes.url_helpers.methods.collect(&:to_s).should include("comments_admin_posts_path")
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
context "without a block" do
|
|
77
|
+
let(:action!) do
|
|
78
|
+
ActiveAdmin.register Post do
|
|
79
|
+
collection_action :comments
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
it "should still generate a new empty action" do
|
|
83
|
+
controller.public_instance_methods.collect(&:to_s).should include("comments")
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin do
|
|
4
|
+
describe "#default_namespace" do
|
|
5
|
+
it "should delegate to ActiveAdmin.application" do
|
|
6
|
+
ActiveAdmin.application.should_receive(:default_namespace)
|
|
7
|
+
|
|
8
|
+
ActiveAdmin.default_namespace
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should be deprecated" do
|
|
12
|
+
ActiveAdmin::Deprecation.should_receive(:warn)
|
|
13
|
+
|
|
14
|
+
ActiveAdmin.default_namespace
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
|
|
4
|
+
describe ActiveAdmin::Application do
|
|
5
|
+
|
|
6
|
+
let(:application) do
|
|
7
|
+
ActiveAdmin::Application.new.tap do |app|
|
|
8
|
+
# Manually override the load paths becuase RSpec messes these up
|
|
9
|
+
app.load_paths = [File.expand_path('app/admin', Rails.root)]
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should have a default load path of ['app/admin']" do
|
|
14
|
+
application.load_paths.should == [File.expand_path('app/admin', Rails.root)]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should remove app/admin from the autoload path to remove the possibility of conflicts" do
|
|
18
|
+
ActiveSupport::Dependencies.autoload_paths.should_not include(File.join(Rails.root, "app/admin"))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should remove app/admin from the eager load paths (Active Admin deals with loading)" do
|
|
22
|
+
Rails.application.config.eager_load_paths.should_not include(File.join(Rails.root, "app/admin"))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should store the site's title" do
|
|
26
|
+
application.site_title.should == ""
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should set the site title" do
|
|
30
|
+
application.site_title = "New Title"
|
|
31
|
+
application.site_title.should == "New Title"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should store the site's title link" do
|
|
35
|
+
application.site_title_link.should == ""
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should set the site's title link" do
|
|
39
|
+
application.site_title_link = "http://www.mygreatsite.com"
|
|
40
|
+
application.site_title_link.should == "http://www.mygreatsite.com"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should have a view factory" do
|
|
44
|
+
application.view_factory.should be_an_instance_of(ActiveAdmin::ViewFactory)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should have deprecated admin notes by default" do
|
|
48
|
+
application.admin_notes.should be_nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should have admin notes in admin namespace by default" do
|
|
52
|
+
application.allow_comments_in.should == [:admin]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "authentication settings" do
|
|
56
|
+
|
|
57
|
+
it "should have no default current_user_method" do
|
|
58
|
+
application.current_user_method.should == false
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should have no default authentication method" do
|
|
62
|
+
application.authentication_method.should == false
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should have a logout link path (Devise's default)" do
|
|
66
|
+
application.logout_link_path.should == :destroy_admin_user_session_path
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should have a logout link method (Devise's default)" do
|
|
70
|
+
application.logout_link_method.should == :get
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "files in load path" do
|
|
75
|
+
it "should load files in the first level directory" do
|
|
76
|
+
application.files_in_load_path.should include(File.expand_path("app/admin/dashboards.rb", Rails.root))
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should load files from subdirectories" do
|
|
80
|
+
FileUtils.mkdir_p(File.expand_path("app/admin/public", Rails.root))
|
|
81
|
+
test_file = File.expand_path("app/admin/public/posts.rb", Rails.root)
|
|
82
|
+
FileUtils.touch(test_file)
|
|
83
|
+
application.files_in_load_path.should include(test_file)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe Arbre::Context do
|
|
5
|
+
|
|
6
|
+
setup_arbre_context!
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
h1 "札幌市北区" # Add some HTML to the context
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should not increment the indent_level" do
|
|
13
|
+
current_dom_context.indent_level.should == -1
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should return a bytesize" do
|
|
17
|
+
current_dom_context.bytesize.should == 25
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should return a length" do
|
|
21
|
+
current_dom_context.length.should == 25
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should delegate missing methods to the html string" do
|
|
25
|
+
current_dom_context.should respond_to(:index)
|
|
26
|
+
current_dom_context.index('<').should == 0
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should use a cached version of the HTML for method delegation" do
|
|
30
|
+
current_dom_context.should_receive(:to_html).once.and_return("<h1>札幌市北区</h1>")
|
|
31
|
+
current_dom_context.index('<').should == 0
|
|
32
|
+
current_dom_context.index('<').should == 0
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arbre::HTML::Element, "Finder Methods" do
|
|
4
|
+
|
|
5
|
+
setup_arbre_context!
|
|
6
|
+
|
|
7
|
+
describe "finding elements by tag name" do
|
|
8
|
+
|
|
9
|
+
it "should return 0 when no elements exist" do
|
|
10
|
+
div.get_elements_by_tag_name("li").size.should == 0
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should return a child element" do
|
|
14
|
+
html = div do
|
|
15
|
+
ul
|
|
16
|
+
li
|
|
17
|
+
ul
|
|
18
|
+
end
|
|
19
|
+
elements = html.get_elements_by_tag_name("li")
|
|
20
|
+
elements.size.should == 1
|
|
21
|
+
elements[0].should be_instance_of(Arbre::HTML::Li)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should return multple child elements" do
|
|
25
|
+
html = div do
|
|
26
|
+
ul
|
|
27
|
+
li
|
|
28
|
+
ul
|
|
29
|
+
li
|
|
30
|
+
end
|
|
31
|
+
elements = html.get_elements_by_tag_name("li")
|
|
32
|
+
elements.size.should == 2
|
|
33
|
+
elements[0].should be_instance_of(Arbre::HTML::Li)
|
|
34
|
+
elements[1].should be_instance_of(Arbre::HTML::Li)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should return children's child elements" do
|
|
38
|
+
html = div do
|
|
39
|
+
ul
|
|
40
|
+
li do
|
|
41
|
+
li
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
elements = html.get_elements_by_tag_name("li")
|
|
45
|
+
elements.size.should == 2
|
|
46
|
+
elements[0].should be_instance_of(Arbre::HTML::Li)
|
|
47
|
+
elements[1].should be_instance_of(Arbre::HTML::Li)
|
|
48
|
+
elements[1].parent.should == elements[0]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "finding an element by id"
|
|
53
|
+
describe "finding an element by a class name"
|
|
54
|
+
end
|