activeadmin 1.3.1 → 1.4.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +467 -0
- data/.gitignore +2 -5
- data/.rspec +1 -0
- data/.rspec_parallel +2 -0
- data/.rubocop.yml +25 -7
- data/.simplecov +4 -6
- data/CHANGELOG.md +175 -83
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +77 -40
- data/Gemfile +7 -55
- data/Gemfile.common +53 -0
- data/Gemfile.lock +431 -0
- data/README.md +39 -18
- data/Rakefile +1 -32
- data/app/assets/stylesheets/active_admin/_forms.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
- data/app/views/active_admin/devise/registrations/new.html.erb +1 -1
- data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/app/views/layouts/active_admin_logged_out.html.erb +1 -1
- data/bin/install_chromedriver.sh +17 -0
- data/config/locales/de.yml +10 -0
- data/config/locales/en.yml +19 -1
- data/config/locales/es.yml +20 -1
- data/config/locales/fi.yml +1 -1
- data/config/locales/it.yml +4 -0
- data/config/locales/nb.yml +15 -5
- data/config/locales/nl.yml +11 -0
- data/config/locales/pl.yml +71 -3
- data/config/locales/ru.yml +2 -0
- data/config/locales/tr.yml +9 -0
- data/config/locales/zh-CN.yml +33 -5
- data/config/mdl_style.rb +2 -0
- data/cucumber.yml +7 -3
- data/docs/.gitignore +1 -0
- data/docs/1-general-configuration.md +16 -1
- data/docs/10-custom-pages.md +14 -0
- data/docs/12-arbre-components.md +28 -1
- data/docs/13-authorization-adapter.md +36 -17
- data/docs/2-resource-customization.md +8 -3
- data/docs/3-index-pages.md +17 -0
- data/docs/3-index-pages/custom-index.md +1 -1
- data/docs/3-index-pages/index-as-blog.md +1 -1
- data/docs/3-index-pages/index-as-table.md +5 -5
- data/docs/5-forms.md +16 -2
- data/docs/8-custom-actions.md +11 -0
- data/docs/Gemfile +2 -0
- data/docs/Gemfile.lock +249 -0
- data/docs/_config.yml +1 -1
- data/docs/_includes/toc.html +1 -1
- data/docs/_includes/top-menu.html +9 -1
- data/docs/documentation.md +1 -1
- data/docs/images/tidelift.svg +14 -0
- data/docs/stylesheets/main.css +26 -2
- data/gemfiles/rails_42.gemfile +2 -2
- data/gemfiles/rails_42.gemfile.lock +410 -0
- data/gemfiles/rails_50.gemfile +2 -2
- data/gemfiles/rails_50.gemfile.lock +424 -0
- data/gemfiles/rails_51.gemfile +2 -2
- data/gemfiles/rails_51.gemfile.lock +423 -0
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +42 -142
- data/lib/active_admin/application_settings.rb +39 -0
- data/lib/active_admin/base_controller/authorization.rb +1 -2
- data/lib/active_admin/batch_actions/controller.rb +1 -1
- data/lib/active_admin/dependency.rb +8 -0
- data/lib/active_admin/deprecation.rb +0 -25
- data/lib/active_admin/dynamic_setting.rb +38 -0
- data/lib/active_admin/dynamic_settings_node.rb +28 -0
- data/lib/active_admin/engine.rb +5 -0
- data/lib/active_admin/filters/active_filter.rb +1 -1
- data/lib/active_admin/filters/resource_extension.rb +1 -1
- data/lib/active_admin/form_builder.rb +95 -60
- data/lib/active_admin/inputs/datepicker_input.rb +7 -0
- data/lib/active_admin/menu.rb +2 -8
- data/lib/active_admin/menu_item.rb +3 -31
- data/lib/active_admin/namespace.rb +18 -6
- data/lib/active_admin/namespace_settings.rb +107 -0
- data/lib/active_admin/orm/active_record/comments.rb +11 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +1 -1
- data/lib/active_admin/resource/action_items.rb +6 -1
- data/lib/active_admin/resource_controller/decorators.rb +3 -3
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/router.rb +89 -84
- data/lib/active_admin/scope.rb +5 -1
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +2 -3
- data/lib/active_admin/views/components/menu.rb +32 -0
- data/lib/active_admin/views/components/menu_item.rb +58 -0
- data/lib/active_admin/views/components/scopes.rb +11 -4
- data/lib/active_admin/views/components/sidebar.rb +13 -0
- data/lib/active_admin/views/components/site_title.rb +5 -6
- data/lib/active_admin/views/components/table_for.rb +1 -10
- data/lib/active_admin/views/components/tabs.rb +4 -1
- data/lib/active_admin/views/footer.rb +2 -6
- data/lib/active_admin/views/header.rb +3 -15
- data/lib/active_admin/views/index_as_blog.rb +1 -1
- data/lib/active_admin/views/index_as_grid.rb +25 -25
- data/lib/active_admin/views/index_as_table.rb +6 -6
- data/lib/active_admin/views/pages/base.rb +27 -53
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/bug_report_templates/active_admin_master.rb +2 -3
- data/tasks/application_generator.rb +48 -0
- data/tasks/gemfiles.rake +8 -0
- data/tasks/lint.rake +96 -7
- data/tasks/local.rake +10 -8
- data/tasks/test.rake +30 -16
- metadata +26 -440
- data/.travis.yml +0 -51
- data/features/action_item.feature +0 -73
- data/features/authorization.feature +0 -64
- data/features/authorization_cancan.feature +0 -52
- data/features/authorization_pundit.feature +0 -37
- data/features/belongs_to.feature +0 -124
- data/features/breadcrumb.feature +0 -75
- data/features/comments/commenting.feature +0 -178
- data/features/comments/viewing_index.feature +0 -19
- data/features/create_another.feature +0 -55
- data/features/dashboard.feature +0 -16
- data/features/decorators.feature +0 -43
- data/features/development_reloading.feature +0 -28
- data/features/edit_page.feature +0 -116
- data/features/favicon.feature +0 -20
- data/features/first_boot.feature +0 -16
- data/features/footer.feature +0 -28
- data/features/global_navigation.feature +0 -29
- data/features/i18n.feature +0 -55
- data/features/index/batch_actions.feature +0 -218
- data/features/index/filters.feature +0 -250
- data/features/index/format_as_csv.feature +0 -220
- data/features/index/formats.feature +0 -88
- data/features/index/index_as_block.feature +0 -15
- data/features/index/index_as_blog.feature +0 -69
- data/features/index/index_as_grid.feature +0 -45
- data/features/index/index_as_table.feature +0 -291
- data/features/index/index_blank_slate.feature +0 -83
- data/features/index/index_parameters.feature +0 -75
- data/features/index/index_scope_to.feature +0 -56
- data/features/index/index_scopes.feature +0 -285
- data/features/index/page_title.feature +0 -41
- data/features/index/pagination.feature +0 -63
- data/features/index/switch_index_view.feature +0 -73
- data/features/menu.feature +0 -72
- data/features/meta_tags.feature +0 -21
- data/features/new_page.feature +0 -136
- data/features/registering_assets.feature +0 -38
- data/features/registering_pages.feature +0 -237
- data/features/registering_resources.feature +0 -33
- data/features/renamed_resource.feature +0 -30
- data/features/root_to.feature +0 -17
- data/features/show/attributes_table_title.feature +0 -54
- data/features/show/columns.feature +0 -40
- data/features/show/default_content.feature +0 -44
- data/features/show/page_title.feature +0 -58
- data/features/show/tabs.feature +0 -33
- data/features/sidebar_sections.feature +0 -210
- data/features/site_title.feature +0 -47
- data/features/specifying_actions.feature +0 -118
- data/features/step_definitions/action_item_steps.rb +0 -7
- data/features/step_definitions/action_link_steps.rb +0 -19
- data/features/step_definitions/additional_web_steps.rb +0 -81
- data/features/step_definitions/asset_steps.rb +0 -15
- data/features/step_definitions/attribute_steps.rb +0 -18
- data/features/step_definitions/attributes_table_title_steps.rb +0 -11
- data/features/step_definitions/batch_action_steps.rb +0 -81
- data/features/step_definitions/blog_steps.rb +0 -3
- data/features/step_definitions/breadcrumb_steps.rb +0 -3
- data/features/step_definitions/column_steps.rb +0 -8
- data/features/step_definitions/comment_steps.rb +0 -32
- data/features/step_definitions/configuration_steps.rb +0 -100
- data/features/step_definitions/dashboard_steps.rb +0 -15
- data/features/step_definitions/factory_steps.rb +0 -35
- data/features/step_definitions/filter_steps.rb +0 -47
- data/features/step_definitions/flash_steps.rb +0 -11
- data/features/step_definitions/footer_steps.rb +0 -11
- data/features/step_definitions/format_steps.rb +0 -56
- data/features/step_definitions/i18n_steps.rb +0 -11
- data/features/step_definitions/index_scope_steps.rb +0 -29
- data/features/step_definitions/index_views_steps.rb +0 -3
- data/features/step_definitions/layout_steps.rb +0 -3
- data/features/step_definitions/member_link_steps.rb +0 -7
- data/features/step_definitions/menu_steps.rb +0 -11
- data/features/step_definitions/meta_tag_steps.rb +0 -3
- data/features/step_definitions/pagination_steps.rb +0 -15
- data/features/step_definitions/sidebar_steps.rb +0 -11
- data/features/step_definitions/site_title_steps.rb +0 -17
- data/features/step_definitions/tab_steps.rb +0 -8
- data/features/step_definitions/table_steps.rb +0 -116
- data/features/step_definitions/user_steps.rb +0 -52
- data/features/step_definitions/web_steps.rb +0 -86
- data/features/sti_resource.feature +0 -65
- data/features/strong_parameters.feature +0 -69
- data/features/support/env.rb +0 -122
- data/features/support/paths.rb +0 -73
- data/features/support/regular_env.rb +0 -7
- data/features/support/reload_env.rb +0 -7
- data/features/support/selectors.rb +0 -45
- data/features/users/logging_in.feature +0 -36
- data/features/users/logging_out.feature +0 -13
- data/features/users/resetting_password.feature +0 -34
- data/gemfiles/rails_52.gemfile +0 -11
- data/lib/active_admin/helpers/settings.rb +0 -114
- data/spec/bug_report_templates_spec.rb +0 -26
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
- data/spec/javascripts/fixtures/checkboxes.html +0 -9
- data/spec/javascripts/fixtures/flashes.html +0 -2
- data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
- data/spec/javascripts/helpers/SpecHelper.js +0 -3
- data/spec/javascripts/support/jasmine.yml +0 -74
- data/spec/javascripts/support/jasmine_runner.rb +0 -19
- data/spec/rails_helper.rb +0 -59
- data/spec/requests/default_namespace_spec.rb +0 -81
- data/spec/requests/memory_spec.rb +0 -25
- data/spec/requests/stylesheets_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -1
- data/spec/support/active_admin_integration_spec_helper.rb +0 -73
- data/spec/support/active_admin_request_helpers.rb +0 -39
- data/spec/support/rails_template.rb +0 -153
- data/spec/support/rails_template_with_data.rb +0 -327
- data/spec/support/templates/admin/stores.rb +0 -7
- data/spec/support/templates/en.yml +0 -8
- data/spec/support/templates/manifest.js +0 -3
- data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
- data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
- data/spec/support/templates/policies/admin_user_policy.rb +0 -11
- data/spec/support/templates/policies/application_policy.rb +0 -44
- data/spec/support/templates/policies/category_policy.rb +0 -7
- data/spec/support/templates/policies/post_policy.rb +0 -15
- data/spec/support/templates/policies/store_policy.rb +0 -11
- data/spec/support/templates/policies/user_policy.rb +0 -11
- data/spec/support/templates/post_decorator.rb +0 -24
- data/spec/unit/abstract_view_factory_spec.rb +0 -78
- data/spec/unit/action_builder_spec.rb +0 -158
- data/spec/unit/active_admin_spec.rb +0 -11
- data/spec/unit/application_spec.rb +0 -184
- data/spec/unit/asset_registration_spec.rb +0 -81
- data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
- data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
- data/spec/unit/authorization/index_overriding_spec.rb +0 -23
- data/spec/unit/auto_link_spec.rb +0 -93
- data/spec/unit/batch_actions/resource_spec.rb +0 -84
- data/spec/unit/batch_actions/settings_spec.rb +0 -61
- data/spec/unit/belongs_to_spec.rb +0 -76
- data/spec/unit/cancan_adapter_spec.rb +0 -43
- data/spec/unit/comments_spec.rb +0 -176
- data/spec/unit/component_spec.rb +0 -18
- data/spec/unit/config_shared_examples.rb +0 -59
- data/spec/unit/controller_filters_spec.rb +0 -41
- data/spec/unit/csv_builder_spec.rb +0 -313
- data/spec/unit/dependency_spec.rb +0 -135
- data/spec/unit/devise_spec.rb +0 -110
- data/spec/unit/dsl_spec.rb +0 -120
- data/spec/unit/filters/active_filter_spec.rb +0 -189
- data/spec/unit/filters/active_spec.rb +0 -24
- data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
- data/spec/unit/filters/resource_spec.rb +0 -128
- data/spec/unit/form_builder_spec.rb +0 -990
- data/spec/unit/generators/install_spec.rb +0 -31
- data/spec/unit/helpers/collection_spec.rb +0 -68
- data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
- data/spec/unit/helpers/scope_chain_spec.rb +0 -35
- data/spec/unit/helpers/settings_spec.rb +0 -30
- data/spec/unit/i18n_spec.rb +0 -29
- data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
- data/spec/unit/menu_collection_spec.rb +0 -62
- data/spec/unit/menu_item_spec.rb +0 -141
- data/spec/unit/menu_spec.rb +0 -71
- data/spec/unit/namespace/authorization_spec.rb +0 -27
- data/spec/unit/namespace/register_page_spec.rb +0 -99
- data/spec/unit/namespace/register_resource_spec.rb +0 -162
- data/spec/unit/namespace_spec.rb +0 -124
- data/spec/unit/order_clause_spec.rb +0 -81
- data/spec/unit/page_controller_spec.rb +0 -5
- data/spec/unit/page_spec.rb +0 -128
- data/spec/unit/pretty_format_spec.rb +0 -82
- data/spec/unit/pundit_adapter_spec.rb +0 -98
- data/spec/unit/resource/action_items_spec.rb +0 -69
- data/spec/unit/resource/attributes_spec.rb +0 -49
- data/spec/unit/resource/includes_spec.rb +0 -21
- data/spec/unit/resource/menu_spec.rb +0 -18
- data/spec/unit/resource/naming_spec.rb +0 -122
- data/spec/unit/resource/ordering_spec.rb +0 -35
- data/spec/unit/resource/page_presenters_spec.rb +0 -44
- data/spec/unit/resource/pagination_spec.rb +0 -38
- data/spec/unit/resource/routes_spec.rb +0 -125
- data/spec/unit/resource/scopes_spec.rb +0 -50
- data/spec/unit/resource/sidebars_spec.rb +0 -43
- data/spec/unit/resource_collection_spec.rb +0 -175
- data/spec/unit/resource_controller/data_access_spec.rb +0 -234
- data/spec/unit/resource_controller/decorators_spec.rb +0 -94
- data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
- data/spec/unit/resource_controller_spec.rb +0 -273
- data/spec/unit/resource_registration_spec.rb +0 -61
- data/spec/unit/resource_spec.rb +0 -320
- data/spec/unit/routing_spec.rb +0 -211
- data/spec/unit/scope_spec.rb +0 -209
- data/spec/unit/settings_spec.rb +0 -117
- data/spec/unit/view_factory_spec.rb +0 -19
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
- data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
- data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
- data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
- data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
- data/spec/unit/views/components/attributes_table_spec.rb +0 -271
- data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
- data/spec/unit/views/components/blank_slate_spec.rb +0 -27
- data/spec/unit/views/components/columns_spec.rb +0 -187
- data/spec/unit/views/components/index_list_spec.rb +0 -49
- data/spec/unit/views/components/index_table_for_spec.rb +0 -127
- data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
- data/spec/unit/views/components/panel_spec.rb +0 -58
- data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
- data/spec/unit/views/components/site_title_spec.rb +0 -76
- data/spec/unit/views/components/status_tag_spec.rb +0 -265
- data/spec/unit/views/components/table_for_spec.rb +0 -436
- data/spec/unit/views/components/tabs_spec.rb +0 -67
- data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
- data/spec/unit/views/index_as_blog_spec.rb +0 -76
- data/spec/unit/views/pages/form_spec.rb +0 -54
- data/spec/unit/views/pages/index_spec.rb +0 -60
- data/spec/unit/views/pages/layout_spec.rb +0 -59
- data/spec/unit/views/pages/show_spec.rb +0 -32
- data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
- data/tasks/parallel_tests.rake +0 -66
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.describe "AA installation" do
|
4
|
-
context "should create" do
|
5
|
-
|
6
|
-
it "active_admin.scss" do
|
7
|
-
path = Rails.root + "app/assets/stylesheets/active_admin.scss"
|
8
|
-
|
9
|
-
expect(File.exist?(path)).to eq true
|
10
|
-
end
|
11
|
-
|
12
|
-
it "active_admin.js.coffee" do
|
13
|
-
path = Rails.root + "app/assets/javascripts/active_admin.js.coffee"
|
14
|
-
|
15
|
-
expect(File.exist?(path)).to eq true
|
16
|
-
end
|
17
|
-
|
18
|
-
it "the dashboard" do
|
19
|
-
path = Rails.root + "app/admin/dashboard.rb"
|
20
|
-
|
21
|
-
expect(File.exist?(path)).to eq true
|
22
|
-
end
|
23
|
-
|
24
|
-
it "the initializer" do
|
25
|
-
path = Rails.root + "config/initializers/active_admin.rb"
|
26
|
-
|
27
|
-
expect(File.exist?(path)).to eq true
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActiveAdmin::Helpers::Collection do
|
4
|
-
|
5
|
-
include ActiveAdmin::Helpers::Collection
|
6
|
-
|
7
|
-
before do
|
8
|
-
Post.create!(title: "A post")
|
9
|
-
Post.create!(title: "A post")
|
10
|
-
Post.create!(title: "An other post")
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "#collection_size" do
|
14
|
-
it "should return the collection size for an ActiveRecord class" do
|
15
|
-
expect(collection_size(Post.where(nil))).to eq 3
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should return the collection size for an ActiveRecord::Relation" do
|
19
|
-
expect(collection_size(Post.where(title: "A post"))).to eq 2
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should return the collection size for a collection with group by" do
|
23
|
-
expect(collection_size(Post.group(:title))).to eq 2
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should return the collection size for a collection with group by, select and custom order" do
|
27
|
-
expect(collection_size(Post.select("title, count(*) as nb_posts").group(:title).order("nb_posts"))).to eq 2
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should return the collection size for an Array" do
|
31
|
-
expect(collection_size(Post.where(title: "A post").to_a)).to eq 2
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should take the defined collection by default" do
|
35
|
-
def collection; Post.where(nil); end
|
36
|
-
|
37
|
-
expect(collection_size).to eq 3
|
38
|
-
|
39
|
-
def collection; Post.where(title: "An other post"); end
|
40
|
-
|
41
|
-
expect(collection_size).to eq 1
|
42
|
-
|
43
|
-
def collection; Post.where(title: "A post").to_a end
|
44
|
-
|
45
|
-
expect(collection_size).to eq 2
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#collection_is_empty?" do
|
50
|
-
it "should return true when the collection is empty" do
|
51
|
-
expect(collection_is_empty?(Post.where(title: "Non existing post"))).to eq true
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should return false when the collection is not empty" do
|
55
|
-
expect(collection_is_empty?(Post.where(title: "A post"))).to eq false
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should take the defined collection by default" do
|
59
|
-
def collection; Post.where(nil); end
|
60
|
-
|
61
|
-
expect(collection_is_empty?).to eq false
|
62
|
-
|
63
|
-
def collection; Post.where(title: "Non existing post"); end
|
64
|
-
|
65
|
-
expect(collection_is_empty?).to eq true
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
# Adapted from Rails 5 to support Rails 4.
|
4
|
-
# https://github.com/rails/rails/blob/9c35bf2a6a27431c6aa283db781c19f61c5155be/actionview/test/template/output_safety_helper_test.rb
|
5
|
-
RSpec.describe ActiveAdmin::OutputSafetyHelper, type: :view do
|
6
|
-
include described_class
|
7
|
-
|
8
|
-
before do
|
9
|
-
@string = "hello"
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "to_sentence" do
|
13
|
-
it "escapes non-html_safe values" do
|
14
|
-
actual = to_sentence(%w(< > & ' "))
|
15
|
-
assert actual.html_safe?
|
16
|
-
assert_equal("<, >, &, ', and "", actual)
|
17
|
-
|
18
|
-
actual = to_sentence(%w(<script>))
|
19
|
-
assert actual.html_safe?
|
20
|
-
assert_equal("<script>", actual)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "does not double escape if single value is html_safe" do
|
24
|
-
assert_equal("<script>", to_sentence([ERB::Util.html_escape("<script>")]))
|
25
|
-
assert_equal("<script>", to_sentence(["<script>".html_safe]))
|
26
|
-
assert_equal("&lt;script&gt;", to_sentence(["<script>"]))
|
27
|
-
end
|
28
|
-
|
29
|
-
it "checks connector words for html safety" do
|
30
|
-
assert_equal "one & two, and three", to_sentence(["one", "two", "three"], words_connector: " & ".html_safe)
|
31
|
-
assert_equal "one & two", to_sentence(["one", "two"], two_words_connector: " & ".html_safe)
|
32
|
-
assert_equal "one, two <script>alert(1)</script> three", to_sentence(["one", "two", "three"], last_word_connector: " <script>alert(1)</script> ")
|
33
|
-
end
|
34
|
-
|
35
|
-
it "does not escape html_safe values" do
|
36
|
-
ptag = content_tag("p") do
|
37
|
-
safe_join(["<marquee>shady stuff</marquee>", tag("br")])
|
38
|
-
end
|
39
|
-
url = "https://example.com"
|
40
|
-
expected = %(<a href="#{url}">#{url}</a> and <p><marquee>shady stuff</marquee><br /></p>)
|
41
|
-
actual = to_sentence([link_to(url, url), ptag])
|
42
|
-
assert actual.html_safe?
|
43
|
-
assert_equal(expected, actual)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "handles blank strings" do
|
47
|
-
actual = to_sentence(["", "two", "three"])
|
48
|
-
assert actual.html_safe?
|
49
|
-
assert_equal ", two, and three", actual
|
50
|
-
end
|
51
|
-
|
52
|
-
it "handles nil values" do
|
53
|
-
actual = to_sentence([nil, "two", "three"])
|
54
|
-
assert actual.html_safe?
|
55
|
-
assert_equal ", two, and three", actual
|
56
|
-
end
|
57
|
-
|
58
|
-
it "still supports ActiveSupports Array#to_sentence arguments" do
|
59
|
-
assert_equal "one two, and three", to_sentence(["one", "two", "three"], words_connector: " ")
|
60
|
-
assert_equal "one & two, and three", to_sentence(["one", "two", "three"], words_connector: " & ".html_safe)
|
61
|
-
assert_equal "onetwo, and three", to_sentence(["one", "two", "three"], words_connector: nil)
|
62
|
-
assert_equal "one, two, and also three", to_sentence(["one", "two", "three"], last_word_connector: ", and also ")
|
63
|
-
assert_equal "one, twothree", to_sentence(["one", "two", "three"], last_word_connector: nil)
|
64
|
-
assert_equal "one, two three", to_sentence(["one", "two", "three"], last_word_connector: " ")
|
65
|
-
assert_equal "one, two and three", to_sentence(["one", "two", "three"], last_word_connector: " and ")
|
66
|
-
end
|
67
|
-
|
68
|
-
it "is not affected by $," do
|
69
|
-
separator_was = $,
|
70
|
-
$, = "|"
|
71
|
-
begin
|
72
|
-
assert_equal "one and two", to_sentence(["one", "two"])
|
73
|
-
assert_equal "one, two, and three", to_sentence(["one", "two", "three"])
|
74
|
-
ensure
|
75
|
-
$, = separator_was
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActiveAdmin::ScopeChain do
|
4
|
-
|
5
|
-
include ActiveAdmin::ScopeChain
|
6
|
-
|
7
|
-
describe "#scope_chain" do
|
8
|
-
let(:relation) { double }
|
9
|
-
|
10
|
-
context "when Scope has a scope method" do
|
11
|
-
let(:scope) { ActiveAdmin::Scope.new :published }
|
12
|
-
|
13
|
-
it "should call the method on the relation and return it" do
|
14
|
-
expect(relation).to receive(:published).and_return(:scoped_relation)
|
15
|
-
expect(scope_chain(scope, relation)).to eq :scoped_relation
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "when Scope has the scope method method ':all'" do
|
20
|
-
let(:scope) { ActiveAdmin::Scope.new :all }
|
21
|
-
|
22
|
-
it "should return the relation" do
|
23
|
-
expect(scope_chain(scope, relation)).to eq relation
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when Scope has a name and a scope block" do
|
28
|
-
let(:scope) { ActiveAdmin::Scope.new("My Scope"){|s| :scoped_relation } }
|
29
|
-
|
30
|
-
it "should instance_exec the block and return it" do
|
31
|
-
expect(scope_chain(scope, relation)).to eq :scoped_relation
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
require 'active_admin/helpers/settings'
|
3
|
-
|
4
|
-
RSpec.describe ActiveAdmin::Settings do
|
5
|
-
|
6
|
-
# A Class with settings module included
|
7
|
-
let(:klass) do
|
8
|
-
Class.new do
|
9
|
-
include ActiveAdmin::Settings
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should add a new setting with a default" do
|
14
|
-
klass.setting :my_setting, "Hello World"
|
15
|
-
expect(klass.default_settings[:my_setting]).to eq "Hello World"
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should initialize the defaults" do
|
19
|
-
klass.setting :my_setting, "Hello World"
|
20
|
-
expect(klass.new.my_setting).to eq "Hello World"
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should support settings of nil" do
|
24
|
-
klass.setting :my_setting, :some_val
|
25
|
-
inst = klass.new
|
26
|
-
inst.my_setting = nil
|
27
|
-
expect(inst.my_setting).to eq nil
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
data/spec/unit/i18n_spec.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
require 'i18n/tasks'
|
3
|
-
|
4
|
-
Dir.glob('config/locales/*.yml') do |locale_file|
|
5
|
-
RSpec.describe locale_file do
|
6
|
-
it { is_expected.to be_parseable }
|
7
|
-
it { is_expected.to have_one_top_level_namespace }
|
8
|
-
it { is_expected.to be_named_like_top_level_namespace }
|
9
|
-
it { is_expected.to_not have_legacy_interpolations }
|
10
|
-
it { is_expected.to have_a_valid_locale }
|
11
|
-
it { is_expected.to be_a_subset_of 'config/locales/en.yml' }
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
RSpec.describe 'I18n' do
|
16
|
-
let(:i18n) { I18n::Tasks::BaseTask.new }
|
17
|
-
let(:unused_keys) { i18n.unused_keys }
|
18
|
-
|
19
|
-
let(:failure_msg) do
|
20
|
-
<<-MSG.squish
|
21
|
-
#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to
|
22
|
-
show them
|
23
|
-
MSG
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'does not have unused keys' do
|
27
|
-
expect(unused_keys).to be_empty, failure_msg
|
28
|
-
end
|
29
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.shared_examples_for "ActiveAdmin::Localizers::ResourceLocalizer" do
|
4
|
-
it "should use proper translation" do
|
5
|
-
string = ActiveAdmin::Localizers::ResourceLocalizer.t(action, model: model, model_name: model_name)
|
6
|
-
expect(string).to eq translation
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should accessible via ActiveAdmin::Localizers" do
|
10
|
-
resource = double(resource_label: model, resource_name: double(i18n_key: model_name))
|
11
|
-
localizer = ActiveAdmin::Localizers.resource(resource)
|
12
|
-
expect(localizer.t(action)).to eq translation
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
RSpec.describe ActiveAdmin::Localizers::ResourceLocalizer do
|
17
|
-
let(:action) { 'new_model' }
|
18
|
-
let(:model) { 'Comment' }
|
19
|
-
let(:model_name) { 'comment' }
|
20
|
-
|
21
|
-
it_behaves_like "ActiveAdmin::Localizers::ResourceLocalizer" do
|
22
|
-
let(:translation) { 'New Comment' }
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "model action specified" do
|
26
|
-
around do |example|
|
27
|
-
with_translation active_admin: {resources: {comment: {new_model: 'Write comment'}}} do
|
28
|
-
example.call
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
it_behaves_like "ActiveAdmin::Localizers::ResourceLocalizer" do
|
33
|
-
let(:translation) { 'Write comment' }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActiveAdmin::MenuCollection do
|
4
|
-
|
5
|
-
let(:menus) { ActiveAdmin::MenuCollection.new }
|
6
|
-
|
7
|
-
describe "#add" do
|
8
|
-
|
9
|
-
it "should initialize a new menu when first item" do
|
10
|
-
menus.add :default, label: "Hello World"
|
11
|
-
|
12
|
-
expect(menus.fetch(:default).items.size).to eq 1
|
13
|
-
expect(menus.fetch(:default)["Hello World"]).to be_an_instance_of(ActiveAdmin::MenuItem)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should add items to an existing menu" do
|
17
|
-
menus.add :default, label: "Hello World"
|
18
|
-
menus.add :default, label: "Hello World Again"
|
19
|
-
|
20
|
-
expect(menus.fetch(:default).items.size).to eq 2
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#clear!" do
|
26
|
-
|
27
|
-
it "should remove all menus" do
|
28
|
-
menus.add :default, label: "Hello World"
|
29
|
-
|
30
|
-
menus.clear!
|
31
|
-
|
32
|
-
expect {
|
33
|
-
menus.fetch(:non_default_menu)
|
34
|
-
}.to raise_error(ActiveAdmin::NoMenuError)
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#on_build" do
|
41
|
-
|
42
|
-
it "runs a callback when fetching a menu" do
|
43
|
-
menus.on_build do |m|
|
44
|
-
m.add :default, label: "Hello World"
|
45
|
-
end
|
46
|
-
|
47
|
-
expect(menus.fetch(:default)["Hello World"]).to_not eq nil
|
48
|
-
end
|
49
|
-
|
50
|
-
it "re-runs the callbacks when the menu is cleared" do
|
51
|
-
menus.on_build do |m|
|
52
|
-
m.add :default, label: "Hello World"
|
53
|
-
end
|
54
|
-
|
55
|
-
expect(menus.fetch(:default)["Hello World"]).to_not eq nil
|
56
|
-
menus.clear!
|
57
|
-
expect(menus.fetch(:default)["Hello World"]).to_not eq nil
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
data/spec/unit/menu_item_spec.rb
DELETED
@@ -1,141 +0,0 @@
|
|
1
|
-
require 'active_admin/menu'
|
2
|
-
require 'active_admin/menu_item'
|
3
|
-
|
4
|
-
module ActiveAdmin
|
5
|
-
RSpec.describe MenuItem do
|
6
|
-
|
7
|
-
it "should have a label" do
|
8
|
-
item = MenuItem.new(label: "Dashboard")
|
9
|
-
expect(item.label).to eq "Dashboard"
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should have a url" do
|
13
|
-
item = MenuItem.new(url: "/admin")
|
14
|
-
expect(item.url).to eq "/admin"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should have a priority of 10 by default" do
|
18
|
-
item = MenuItem.new
|
19
|
-
expect(item.priority).to eq 10
|
20
|
-
end
|
21
|
-
|
22
|
-
context "conditional display" do
|
23
|
-
it "should store a Proc internally and evaluate it when requested" do
|
24
|
-
item = MenuItem.new
|
25
|
-
expect(item.instance_variable_get(:@should_display)).to be_a Proc
|
26
|
-
expect(item.display?).to_not be_a Proc
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should show the item by default" do
|
30
|
-
expect(MenuItem.new.display?).to eq true
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should hide the item" do
|
34
|
-
expect(MenuItem.new(if: proc{false}).display?).to eq false
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should default to an empty hash for html_options" do
|
39
|
-
item = MenuItem.new
|
40
|
-
expect(item.html_options).to be_empty
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should accept an options hash for link_to" do
|
44
|
-
item = MenuItem.new html_options: { target: :blank }
|
45
|
-
expect(item.html_options).to include(target: :blank)
|
46
|
-
end
|
47
|
-
|
48
|
-
context "with no items" do
|
49
|
-
it "should be empty" do
|
50
|
-
item = MenuItem.new
|
51
|
-
expect(item.items).to be_empty
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should accept new children" do
|
55
|
-
item = MenuItem.new label: "Dashboard"
|
56
|
-
item.add label: "My Child Dashboard"
|
57
|
-
expect(item.items.first).to be_a MenuItem
|
58
|
-
expect(item.items.first.label).to eq "My Child Dashboard"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context "with many children" do
|
63
|
-
let(:item) do
|
64
|
-
i = MenuItem.new(label: "Dashboard")
|
65
|
-
i.add label: "Blog"
|
66
|
-
i.add label: "Cars"
|
67
|
-
i.add label: "Users", priority: 1
|
68
|
-
i.add label: "Settings", priority: 2
|
69
|
-
i.add label: "Analytics", priority: 44
|
70
|
-
i
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should contain 5 submenu items" do
|
74
|
-
expect(item.items.count).to eq 5
|
75
|
-
end
|
76
|
-
|
77
|
-
it "should give access to the menu item as an array" do
|
78
|
-
expect(item['Blog'].label).to eq 'Blog'
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should sort items based on priority and name" do
|
82
|
-
expect(item.items[0].label).to eq 'Users'
|
83
|
-
expect(item.items[1].label).to eq 'Settings'
|
84
|
-
expect(item.items[2].label).to eq 'Blog'
|
85
|
-
expect(item.items[3].label).to eq 'Cars'
|
86
|
-
expect(item.items[4].label).to eq 'Analytics'
|
87
|
-
end
|
88
|
-
|
89
|
-
it "children should hold a reference to their parent" do
|
90
|
-
expect(item["Blog"].parent).to eq item
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe "accessing ancestory" do
|
95
|
-
let(:item){ MenuItem.new label: "Blog" }
|
96
|
-
|
97
|
-
context "with no parent" do
|
98
|
-
it "should return an empty array" do
|
99
|
-
expect(item.ancestors).to eq []
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
context "with one parent" do
|
104
|
-
let(:sub_item) do
|
105
|
-
item.add label: "Create New"
|
106
|
-
item["Create New"]
|
107
|
-
end
|
108
|
-
it "should return an array with the parent" do
|
109
|
-
expect(sub_item.ancestors).to eq [item]
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
context "with many parents" do
|
114
|
-
before(:each) do
|
115
|
-
c1 = {label: "C1"}
|
116
|
-
c2 = {label: "C2"}
|
117
|
-
c3 = {label: "C3"}
|
118
|
-
|
119
|
-
item.add(c1).add(c2).add(c3)
|
120
|
-
|
121
|
-
item
|
122
|
-
end
|
123
|
-
let(:sub_item){ item["C1"]["C2"]["C3"] }
|
124
|
-
it "should return an array with the parents in reverse order" do
|
125
|
-
expect(sub_item.ancestors).to eq [item["C1"]["C2"], item["C1"], item]
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end # accessing ancestory
|
129
|
-
|
130
|
-
describe "#id" do
|
131
|
-
it "should be normalized" do
|
132
|
-
expect(MenuItem.new(id: "Foo Bar").id).to eq "foo_bar"
|
133
|
-
end
|
134
|
-
|
135
|
-
it "should not accept Procs" do
|
136
|
-
expect{ MenuItem.new(id: proc{"Dynamic"}).id }.to raise_error TypeError
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
end
|