activeadmin 0.3.4 → 0.4.0
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/.gitignore +1 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.md +164 -5
- data/CONTRIBUTING.md +113 -0
- data/Gemfile +7 -9
- data/LICENSE +1 -1
- data/README.rdoc +19 -20
- data/activeadmin.gemspec +4 -2
- data/app/assets/javascripts/active_admin/application.js +9 -0
- data/app/assets/javascripts/active_admin/base.js +4 -12
- data/app/assets/stylesheets/active_admin/_base.css.scss +17 -341
- data/app/assets/stylesheets/active_admin/_forms.css.scss +13 -7
- data/app/assets/stylesheets/active_admin/_header.css.scss +23 -4
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +2 -0
- data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +101 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +43 -2
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +2 -1
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +50 -13
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +9 -1
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +7 -5
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +9 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/pages/_dashboard.scss +5 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +26 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +44 -0
- 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/sessions/new.html.erb +1 -1
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
- data/cucumber.yml +3 -2
- data/docs/1-general-configuration.md +46 -10
- data/docs/6-show-screens.md +7 -0
- data/docs/8-custom-actions.md +12 -2
- data/docs/9-custom-pages.md +84 -0
- data/features/belongs_to.feature +27 -0
- data/features/comments/commenting.feature +3 -2
- data/features/dashboard.feature +18 -0
- data/features/development_reloading.feature +43 -0
- data/features/index/filter_with_check_boxes.feature +25 -0
- data/features/index/index_as_table.feature +14 -0
- data/features/index/index_scopes.feature +59 -0
- data/features/index/pagination.feature +19 -1
- data/features/menu.feature +22 -2
- data/features/registering_assets.feature +2 -2
- data/features/registering_pages.feature +66 -0
- data/features/specifying_actions.feature +5 -0
- data/features/step_definitions/action_item_steps.rb +2 -6
- data/features/step_definitions/action_link_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +11 -3
- data/features/step_definitions/asset_steps.rb +5 -1
- data/features/step_definitions/breadcrumb_steps.rb +5 -0
- data/features/step_definitions/comment_steps.rb +3 -3
- data/features/step_definitions/configuration_steps.rb +69 -13
- data/features/step_definitions/dashboard_steps.rb +7 -3
- data/features/step_definitions/factory_steps.rb +9 -2
- data/features/step_definitions/flash_steps.rb +9 -1
- data/features/step_definitions/format_steps.rb +9 -1
- data/features/step_definitions/index_scope_steps.rb +18 -6
- data/features/step_definitions/member_link_steps.rb +7 -0
- data/features/step_definitions/pagination_steps.rb +2 -2
- data/features/step_definitions/site_title_steps.rb +15 -0
- data/features/step_definitions/tab_steps.rb +1 -1
- data/features/step_definitions/user_steps.rb +1 -1
- data/features/step_definitions/web_steps.rb +4 -4
- data/features/support/paths.rb +6 -0
- data/features/users/logging_out.feature +11 -0
- data/lib/active_admin.rb +26 -10
- data/lib/active_admin/application.rb +64 -22
- data/lib/active_admin/arbre.rb +0 -1
- data/lib/active_admin/arbre/builder.rb +8 -5
- data/lib/active_admin/arbre/context.rb +1 -1
- data/lib/active_admin/arbre/html/attributes.rb +1 -1
- data/lib/active_admin/arbre/html/class_list.rb +0 -4
- data/lib/active_admin/arbre/html/collection.rb +2 -2
- data/lib/active_admin/arbre/html/document.rb +1 -1
- data/lib/active_admin/arbre/html/element.rb +19 -9
- data/lib/active_admin/arbre/html/tag.rb +3 -3
- data/lib/active_admin/arbre/html/text_node.rb +2 -2
- data/lib/active_admin/asset_registration.rb +15 -2
- data/lib/active_admin/base_controller.rb +61 -0
- data/lib/active_admin/{resource_controller → base_controller}/menu.rb +1 -1
- data/lib/active_admin/callbacks.rb +16 -18
- data/lib/active_admin/comments.rb +48 -54
- data/lib/active_admin/comments/comment.rb +13 -2
- data/lib/active_admin/comments/namespace_helper.rb +1 -1
- data/lib/active_admin/comments/views/active_admin_comments.rb +7 -3
- data/lib/active_admin/dashboards.rb +4 -0
- data/lib/active_admin/dashboards/dashboard_controller.rb +21 -5
- data/lib/active_admin/dsl.rb +6 -159
- data/lib/active_admin/event.rb +5 -3
- data/lib/active_admin/filter_form_builder.rb +53 -0
- data/lib/active_admin/form_builder.rb +25 -19
- data/lib/active_admin/helpers/settings.rb +6 -10
- data/lib/active_admin/inputs.rb +14 -0
- data/lib/active_admin/inputs/datepicker_input.rb +11 -0
- data/lib/active_admin/inputs/filter_base.rb +46 -0
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +40 -0
- data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
- data/lib/active_admin/inputs/filter_numeric_input.rb +55 -0
- data/lib/active_admin/inputs/filter_select_input.rb +23 -0
- data/lib/active_admin/inputs/filter_string_input.rb +22 -0
- data/lib/active_admin/locales/ca.yml +44 -0
- data/lib/active_admin/locales/cs.yml +14 -10
- data/lib/active_admin/locales/de.yml +44 -0
- data/lib/active_admin/locales/en.yml +5 -0
- data/lib/active_admin/locales/hr.yml +40 -0
- data/lib/active_admin/locales/hu.yml +45 -0
- data/lib/active_admin/locales/it.yml +11 -6
- data/lib/active_admin/locales/ko.yml +40 -0
- data/lib/active_admin/locales/lv.yml +43 -0
- data/lib/active_admin/locales/nl.yml +40 -0
- data/lib/active_admin/locales/no-NB.yml +40 -0
- data/lib/active_admin/locales/pl.yml +7 -1
- data/lib/active_admin/locales/pt-BR.yml +6 -2
- data/lib/active_admin/menu_item.rb +25 -17
- data/lib/active_admin/namespace.rb +48 -33
- data/lib/active_admin/page.rb +65 -0
- data/lib/active_admin/page_controller.rb +15 -0
- data/lib/active_admin/page_dsl.rb +21 -0
- data/lib/active_admin/page_presenter.rb +30 -0
- data/lib/active_admin/reloader.rb +109 -42
- data/lib/active_admin/resource.rb +38 -44
- data/lib/active_admin/resource/action_items.rb +5 -0
- data/lib/active_admin/resource/belongs_to.rb +4 -2
- data/lib/active_admin/resource/controllers.rb +35 -0
- data/lib/active_admin/resource/menu.rb +1 -2
- data/lib/active_admin/resource/naming.rb +53 -31
- data/lib/active_admin/resource/page_presenters.rb +28 -0
- data/lib/active_admin/resource/scopes.rb +16 -3
- data/lib/active_admin/resource/sidebars.rb +4 -0
- data/lib/active_admin/resource_collection.rb +88 -0
- data/lib/active_admin/resource_controller.rb +18 -54
- data/lib/active_admin/resource_controller/action_builder.rb +1 -1
- data/lib/active_admin/resource_controller/actions.rb +8 -8
- data/lib/active_admin/resource_controller/callbacks.rb +1 -1
- data/lib/active_admin/resource_controller/collection.rb +8 -4
- data/lib/active_admin/resource_controller/filters.rb +1 -1
- data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_controller/sidebars.rb +1 -1
- data/lib/active_admin/resource_dsl.rb +157 -0
- data/lib/active_admin/router.rb +21 -14
- data/lib/active_admin/scope.rb +15 -3
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +4 -3
- data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -10
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +25 -21
- data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -150
- data/lib/active_admin/views/components/attributes_table.rb +1 -1
- data/lib/active_admin/views/components/columns.rb +4 -4
- data/lib/active_admin/views/components/paginated_collection.rb +42 -13
- data/lib/active_admin/views/components/panel.rb +8 -0
- data/lib/active_admin/views/components/scopes.rb +24 -18
- data/lib/active_admin/views/components/status_tag.rb +6 -5
- data/lib/active_admin/views/components/table_for.rb +6 -2
- data/lib/active_admin/views/header_renderer.rb +31 -12
- data/lib/active_admin/views/index_as_block.rb +2 -2
- data/lib/active_admin/views/index_as_blog.rb +3 -3
- data/lib/active_admin/views/index_as_grid.rb +4 -4
- data/lib/active_admin/views/index_as_table.rb +13 -6
- data/lib/active_admin/views/pages/base.rb +4 -4
- data/lib/active_admin/views/pages/form.rb +49 -0
- data/lib/active_admin/views/pages/index.rb +18 -6
- data/lib/active_admin/views/pages/page.rb +24 -0
- data/lib/active_admin/views/pages/show.rb +1 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +19 -1
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -12
- data/lib/generators/active_admin/install/templates/dashboards.rb +6 -0
- data/script/use_rails +14 -7
- data/spec/spec_helper.rb +9 -14
- data/spec/spec_helper_without_rails.rb +10 -0
- data/spec/support/detect_rails_version.rb +22 -3
- data/spec/support/integration_example_group.rb +5 -7
- data/spec/support/rails_template.rb +11 -0
- data/spec/support/rails_template_with_data.rb +25 -0
- data/spec/support/templates/cucumber_with_reloading.rb +5 -0
- data/spec/unit/active_admin_spec.rb +8 -0
- data/spec/unit/application_spec.rb +48 -2
- data/spec/unit/arbre/context_spec.rb +1 -1
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +58 -2
- data/spec/unit/arbre/html/element_spec.rb +18 -5
- data/spec/unit/arbre/html/tag_attributes_spec.rb +3 -3
- data/spec/unit/arbre/html/tag_spec.rb +1 -1
- data/spec/unit/arbre/html_spec.rb +32 -22
- data/spec/unit/asset_registration_spec.rb +9 -3
- data/spec/unit/auto_link_spec.rb +2 -2
- data/spec/unit/base_controller_shared_examples.rb +28 -0
- data/spec/unit/base_controller_spec.rb +8 -0
- data/spec/unit/belongs_to_spec.rb +30 -33
- data/spec/unit/comments_spec.rb +45 -15
- data/spec/unit/config_shared_examples.rb +119 -0
- data/spec/unit/dashboard_controller_spec.rb +44 -0
- data/spec/unit/event_spec.rb +6 -0
- data/spec/unit/filter_form_builder_spec.rb +9 -0
- data/spec/unit/form_builder_spec.rb +8 -14
- data/spec/unit/menu_item_spec.rb +25 -20
- data/spec/unit/namespace/register_page_spec.rb +102 -0
- data/spec/unit/namespace/register_resource_spec.rb +188 -0
- data/spec/unit/namespace_spec.rb +11 -183
- data/spec/unit/page_controller_spec.rb +8 -0
- data/spec/unit/page_spec.rb +60 -0
- data/spec/unit/reloader_spec.rb +82 -38
- data/spec/unit/resource/menu_spec.rb +1 -51
- data/spec/unit/resource/naming_spec.rb +25 -20
- data/spec/unit/resource/page_presenters_spec.rb +32 -0
- data/spec/unit/resource/scopes_spec.rb +13 -0
- data/spec/unit/resource_collection_spec.rb +101 -0
- data/spec/unit/resource_controller_spec.rb +40 -32
- data/spec/unit/{registration_spec.rb → resource_registration_spec.rb} +0 -0
- data/spec/unit/resource_spec.rb +8 -24
- data/spec/unit/routing_spec.rb +50 -1
- data/spec/unit/scope_spec.rb +18 -4
- data/spec/unit/views/components/paginated_collection_spec.rb +163 -0
- data/spec/unit/views/components/panel_spec.rb +9 -0
- data/spec/unit/views/components/status_tag_spec.rb +9 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +2 -1
- data/tasks/test.rake +44 -26
- metadata +176 -69
- data/app/assets/javascripts/active_admin/vendor.js +0 -382
- data/lib/active_admin/arbre/core_extensions.rb +0 -5
- data/lib/active_admin/comments/configuration.rb +0 -18
- data/lib/active_admin/page_config.rb +0 -15
- data/lib/active_admin/resource_controller/form.rb +0 -42
- data/lib/active_admin/resource_controller/page_configurations.rb +0 -53
- data/lib/active_admin/views/pages/edit.rb +0 -28
- data/lib/active_admin/views/pages/new.rb +0 -28
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -427
- data/spec/integration/belongs_to_spec.rb +0 -42
|
@@ -34,5 +34,11 @@ ActiveAdmin::Dashboards.build do
|
|
|
34
34
|
# section "Recent User", :priority => 1
|
|
35
35
|
#
|
|
36
36
|
# Will render the "Recent Users" then the "Recent Posts" sections on the dashboard.
|
|
37
|
+
|
|
38
|
+
# == Conditionally Display
|
|
39
|
+
# Provide a method name or Proc object to conditionally render a section at run time.
|
|
40
|
+
#
|
|
41
|
+
# section "Membership Summary", :if => :memberships_enabled?
|
|
42
|
+
# section "Membership Summary", :if => Proc.new { current_admin_user.account.memberships.any? }
|
|
37
43
|
|
|
38
44
|
end
|
data/script/use_rails
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
# Switches the development environment to use the given
|
|
4
4
|
# version of rails. Caches the Gemfile.locks so that
|
|
5
5
|
# switching it very fast.
|
|
6
|
+
#
|
|
7
|
+
require File.expand_path("../../spec/support/detect_rails_version", __FILE__)
|
|
6
8
|
|
|
7
9
|
def cmd(command)
|
|
8
10
|
puts command
|
|
@@ -34,13 +36,18 @@ if File.exists?(gem_lock_file) && ARGV.include?('--clobber')
|
|
|
34
36
|
cmd "rm #{gem_lock_file}"
|
|
35
37
|
end
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
write_rails_version(version)
|
|
40
|
+
|
|
41
|
+
# Ensure that bundler installs
|
|
42
|
+
ENV['RUBYOPT'] = ''
|
|
43
|
+
|
|
44
|
+
if File.exists?(gem_lock_file)
|
|
45
|
+
cmd("rm Gemfile.lock") if file_or_symlink?("Gemfile.lock")
|
|
46
|
+
cmd("ln -s #{gem_lock_file} Gemfile.lock")
|
|
47
|
+
cmd("bundle")
|
|
48
|
+
else
|
|
39
49
|
cmd "rm Gemfile.lock" if file_or_symlink?("Gemfile.lock")
|
|
40
|
-
cmd "
|
|
50
|
+
cmd "bundle install"
|
|
41
51
|
cmd "mv Gemfile.lock #{gem_lock_file}"
|
|
52
|
+
cmd("ln -s #{gem_lock_file} Gemfile.lock")
|
|
42
53
|
end
|
|
43
|
-
|
|
44
|
-
cmd("rm Gemfile.lock") if file_or_symlink?("Gemfile.lock")
|
|
45
|
-
cmd("ln -s #{gem_lock_file} Gemfile.lock")
|
|
46
|
-
cmd("bundle")
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
$LOAD_PATH << File.expand_path('../support', __FILE__)
|
|
3
|
-
|
|
4
|
-
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
|
|
5
|
-
|
|
6
|
-
require 'detect_rails_version'
|
|
7
|
-
ENV['RAILS'] = detect_rails_version
|
|
8
|
-
|
|
9
|
-
require "bundler"
|
|
10
|
-
Bundler.setup
|
|
11
|
-
|
|
12
|
-
require 'shoulda/active_record'
|
|
13
|
-
include Shoulda::ActiveRecord::Macros
|
|
1
|
+
require File.expand_path("../spec_helper_without_rails", __FILE__)
|
|
14
2
|
|
|
15
3
|
module ActiveAdminIntegrationSpecHelper
|
|
16
4
|
extend self
|
|
@@ -90,10 +78,17 @@ module ActiveAdminIntegrationSpecHelper
|
|
|
90
78
|
end
|
|
91
79
|
alias_method :action_view, :mock_action_view
|
|
92
80
|
|
|
81
|
+
# A mock resource to register
|
|
82
|
+
class MockResource
|
|
83
|
+
end
|
|
84
|
+
|
|
93
85
|
end
|
|
94
86
|
|
|
95
87
|
ENV['RAILS_ENV'] = 'test'
|
|
96
|
-
|
|
88
|
+
|
|
89
|
+
require 'detect_rails_version'
|
|
90
|
+
rails_version = detect_rails_version
|
|
91
|
+
ENV['RAILS_ROOT'] = File.expand_path("../rails/rails-#{rails_version}", __FILE__)
|
|
97
92
|
|
|
98
93
|
# Create the test app if it doesn't exists
|
|
99
94
|
unless File.exists?(ENV['RAILS_ROOT'])
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
2
|
+
$LOAD_PATH << File.expand_path('../support', __FILE__)
|
|
3
|
+
|
|
4
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
|
|
5
|
+
|
|
6
|
+
require 'detect_rails_version'
|
|
7
|
+
ENV['RAILS'] = detect_rails_version
|
|
8
|
+
|
|
9
|
+
require "bundler"
|
|
10
|
+
Bundler.setup
|
|
@@ -2,9 +2,28 @@
|
|
|
2
2
|
#
|
|
3
3
|
# You can pass it in as an ENV variable or it will use
|
|
4
4
|
# the current Gemfile.lock to find it
|
|
5
|
+
|
|
6
|
+
unless defined?(RAILS_VERSION_FILE)
|
|
7
|
+
RAILS_VERSION_FILE = File.expand_path("../../../.rails-version", __FILE__)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
unless defined?(DEFAULT_RAILS_VERSION)
|
|
11
|
+
DEFAULT_RAILS_VERSION = "3.2.0"
|
|
12
|
+
end
|
|
13
|
+
|
|
5
14
|
def detect_rails_version
|
|
6
|
-
|
|
15
|
+
detected_version = if File.exists?(RAILS_VERSION_FILE)
|
|
16
|
+
version = File.read(RAILS_VERSION_FILE).chomp.strip
|
|
17
|
+
version != "" ? version : DEFAULT_RAILS_VERSION
|
|
18
|
+
else
|
|
19
|
+
DEFAULT_RAILS_VERSION
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
puts "Detected Rails: #{detected_version}" if ENV['DEBUG']
|
|
23
|
+
|
|
24
|
+
detected_version
|
|
25
|
+
end
|
|
7
26
|
|
|
8
|
-
|
|
9
|
-
|
|
27
|
+
def write_rails_version(version)
|
|
28
|
+
File.open(RAILS_VERSION_FILE, "w+"){|f| f << version }
|
|
10
29
|
end
|
|
@@ -13,14 +13,12 @@ module RSpec
|
|
|
13
13
|
include Capybara::DSL
|
|
14
14
|
include RSpec::Matchers
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
16
|
+
def app
|
|
17
|
+
::Rails.application
|
|
18
|
+
end
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
end
|
|
20
|
+
def last_response
|
|
21
|
+
page
|
|
24
22
|
end
|
|
25
23
|
|
|
26
24
|
included do
|
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
# Create a cucumber database and environment
|
|
4
4
|
copy_file File.expand_path('../templates/cucumber.rb', __FILE__), "config/environments/cucumber.rb"
|
|
5
|
+
copy_file File.expand_path('../templates/cucumber_with_reloading.rb', __FILE__), "config/environments/cucumber_with_reloading.rb"
|
|
6
|
+
|
|
5
7
|
gsub_file 'config/database.yml', /^test:.*\n/, "test: &test\n"
|
|
6
8
|
gsub_file 'config/database.yml', /\z/, "\ncucumber:\n <<: *test\n database: db/cucumber.sqlite3"
|
|
9
|
+
gsub_file 'config/database.yml', /\z/, "\ncucumber_with_reloading:\n <<: *test\n database: db/cucumber.sqlite3"
|
|
7
10
|
|
|
8
11
|
# Generate some test models
|
|
9
12
|
generate :model, "post title:string body:text published_at:datetime author_id:integer category_id:integer"
|
|
@@ -22,6 +25,14 @@ run "rm -r test"
|
|
|
22
25
|
run "rm -r spec"
|
|
23
26
|
|
|
24
27
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
28
|
+
|
|
29
|
+
# we need this routing path, named "logout_path", for testing
|
|
30
|
+
route <<-EOS
|
|
31
|
+
devise_scope :user do
|
|
32
|
+
match '/admin/logout' => 'active_admin/devise/sessions#destroy', :as => :logout
|
|
33
|
+
end
|
|
34
|
+
EOS
|
|
35
|
+
|
|
25
36
|
generate :'active_admin:install'
|
|
26
37
|
|
|
27
38
|
# Setup a root path for devise
|
|
@@ -6,6 +6,27 @@ apply File.expand_path("../rails_template.rb", __FILE__)
|
|
|
6
6
|
generate :'active_admin:resource', type
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
scopes = <<-EOF
|
|
10
|
+
scope :all, :default => true
|
|
11
|
+
|
|
12
|
+
scope :drafts do |posts|
|
|
13
|
+
posts.where(["published_at IS NULL"])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
scope :scheduled do |posts|
|
|
17
|
+
posts.where(["posts.published_at IS NOT NULL AND posts.published_at > ?", Time.now.utc])
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
scope :published do |posts|
|
|
21
|
+
posts.where(["posts.published_at IS NOT NULL AND posts.published_at < ?", Time.now.utc])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
scope :my_posts do |posts|
|
|
25
|
+
posts.where(:author_id => current_admin_user.id)
|
|
26
|
+
end
|
|
27
|
+
EOF
|
|
28
|
+
inject_into_file 'app/admin/posts.rb', scopes , :after => "ActiveAdmin.register Post do\n"
|
|
29
|
+
|
|
9
30
|
# Setup some default data
|
|
10
31
|
append_file "db/seeds.rb", <<-EOF
|
|
11
32
|
users = ["Jimi Hendrix", "Jimmy Page", "Yngwie Malmsteen", "Eric Clapton", "Kirk Hammett"].collect do |name|
|
|
@@ -20,12 +41,16 @@ append_file "db/seeds.rb", <<-EOF
|
|
|
20
41
|
Category.create! :name => name
|
|
21
42
|
end
|
|
22
43
|
|
|
44
|
+
published_at_values = [Time.now.utc - 5.days, Time.now.utc - 1.day, nil, Time.now.utc + 3.days]
|
|
45
|
+
|
|
23
46
|
1_000.times do |i|
|
|
24
47
|
user = users[i % users.size]
|
|
25
48
|
cat = categories[i % categories.size]
|
|
49
|
+
published_at = published_at_values[i % published_at_values.size]
|
|
26
50
|
Post.create :title => "Blog Post \#{i}",
|
|
27
51
|
:body => "Blog post \#{i} is written by \#{user.username} about \#{cat.name}",
|
|
28
52
|
:category => cat,
|
|
53
|
+
:published_at => published_at,
|
|
29
54
|
:author => user
|
|
30
55
|
end
|
|
31
56
|
EOF
|
|
@@ -14,4 +14,12 @@ describe ActiveAdmin do
|
|
|
14
14
|
ActiveAdmin.default_namespace
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
|
+
|
|
18
|
+
%w(register register_page unload! load! routes).each do |method|
|
|
19
|
+
it "delegates ##{method} to application" do
|
|
20
|
+
ActiveAdmin.application.should_receive(method)
|
|
21
|
+
|
|
22
|
+
ActiveAdmin.send(method)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
17
25
|
end
|
|
@@ -39,6 +39,15 @@ describe ActiveAdmin::Application do
|
|
|
39
39
|
application.site_title_link = "http://www.mygreatsite.com"
|
|
40
40
|
application.site_title_link.should == "http://www.mygreatsite.com"
|
|
41
41
|
end
|
|
42
|
+
|
|
43
|
+
it "should store the site's title image" do
|
|
44
|
+
application.site_title_image.should == ""
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should set the site's title image" do
|
|
48
|
+
application.site_title_image = "http://railscasts.com/assets/episodes/stills/284-active-admin.png?1316476106"
|
|
49
|
+
application.site_title_image.should == "http://railscasts.com/assets/episodes/stills/284-active-admin.png?1316476106"
|
|
50
|
+
end
|
|
42
51
|
|
|
43
52
|
it "should have a view factory" do
|
|
44
53
|
application.view_factory.should be_an_instance_of(ActiveAdmin::ViewFactory)
|
|
@@ -48,8 +57,8 @@ describe ActiveAdmin::Application do
|
|
|
48
57
|
application.admin_notes.should be_nil
|
|
49
58
|
end
|
|
50
59
|
|
|
51
|
-
it "should
|
|
52
|
-
application.
|
|
60
|
+
it "should allow comments by default" do
|
|
61
|
+
application.allow_comments.should == true
|
|
53
62
|
end
|
|
54
63
|
|
|
55
64
|
describe "authentication settings" do
|
|
@@ -84,4 +93,41 @@ describe ActiveAdmin::Application do
|
|
|
84
93
|
end
|
|
85
94
|
end
|
|
86
95
|
|
|
96
|
+
describe "adding an inheritable setting" do
|
|
97
|
+
|
|
98
|
+
it "should add a setting to Application and Namespace" do
|
|
99
|
+
ActiveAdmin::Application.inheritable_setting :inheritable_setting, "inheritable_setting"
|
|
100
|
+
app = ActiveAdmin::Application.new
|
|
101
|
+
app.inheritable_setting.should == "inheritable_setting"
|
|
102
|
+
ns = ActiveAdmin::Namespace.new(app, :admin)
|
|
103
|
+
ns.inheritable_setting.should == "inheritable_setting"
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe "#namespace" do
|
|
109
|
+
it "should yield a new namespace" do
|
|
110
|
+
application.namespace :new_namespace do |ns|
|
|
111
|
+
ns.name.should == :new_namespace
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "should return an instantiated namespace" do
|
|
116
|
+
admin = application.find_or_create_namespace :admin
|
|
117
|
+
application.namespace :admin do |ns|
|
|
118
|
+
ns.should == admin
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
describe "#register_page" do
|
|
124
|
+
it "finds or create the namespace and register the page to it" do
|
|
125
|
+
namespace = mock
|
|
126
|
+
application.should_receive(:find_or_create_namespace).with("public").and_return namespace
|
|
127
|
+
namespace.should_receive(:register_page).with("My Page", {:namespace => "public"})
|
|
128
|
+
|
|
129
|
+
application.register_page("My Page", :namespace => "public")
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
87
133
|
end
|
|
@@ -27,7 +27,7 @@ describe Arbre::Context do
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
it "should use a cached version of the HTML for method delegation" do
|
|
30
|
-
current_dom_context.should_receive(:
|
|
30
|
+
current_dom_context.should_receive(:to_s).once.and_return("<h1>札幌市北区</h1>")
|
|
31
31
|
current_dom_context.index('<').should == 0
|
|
32
32
|
current_dom_context.index('<').should == 0
|
|
33
33
|
end
|
|
@@ -49,6 +49,62 @@ describe Arbre::HTML::Element, "Finder Methods" do
|
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
describe "finding an element by id"
|
|
53
|
-
|
|
52
|
+
#TODO: describe "finding an element by id"
|
|
53
|
+
|
|
54
|
+
describe "finding an element by a class name" do
|
|
55
|
+
it "should return 0 when no elements exist" do
|
|
56
|
+
div.get_elements_by_class_name("my_class").size.should == 0
|
|
57
|
+
end
|
|
58
|
+
it "should return a child element" do
|
|
59
|
+
html = div do
|
|
60
|
+
div :class => "some_class"
|
|
61
|
+
div :class => "my_class"
|
|
62
|
+
end
|
|
63
|
+
elements = html.get_elements_by_class_name("my_class")
|
|
64
|
+
elements.size.should == 1
|
|
65
|
+
elements[0].should be_instance_of(Arbre::HTML::Div)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should return multple child elements" do
|
|
69
|
+
html = div do
|
|
70
|
+
div :class => "some_class"
|
|
71
|
+
div :class => "my_class"
|
|
72
|
+
div :class => "my_class"
|
|
73
|
+
end
|
|
74
|
+
elements = html.get_elements_by_class_name("my_class")
|
|
75
|
+
elements.size.should == 2
|
|
76
|
+
elements[0].should be_instance_of(Arbre::HTML::Div)
|
|
77
|
+
elements[1].should be_instance_of(Arbre::HTML::Div)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should return elements that match one of several classes" do
|
|
81
|
+
html = div do
|
|
82
|
+
div :class => "some_class this_class"
|
|
83
|
+
div :class => "some_class"
|
|
84
|
+
div :class => "other_class"
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
elements = html.get_elements_by_class_name("this_class")
|
|
88
|
+
elements.size.should == 1
|
|
89
|
+
elements[0].should be_instance_of(Arbre::HTML::Div)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
#TODO: find children's children by class name
|
|
93
|
+
|
|
94
|
+
#it "should return elements that are nested" do
|
|
95
|
+
# html = div do
|
|
96
|
+
# div :class => "my_class"
|
|
97
|
+
# div :class => "some_class" do
|
|
98
|
+
# ul :class => "other_class" do
|
|
99
|
+
# li :class => "special_awesome_class"
|
|
100
|
+
# end
|
|
101
|
+
# end
|
|
102
|
+
# end
|
|
103
|
+
#
|
|
104
|
+
# elements = html.get_elements_by_class_name("special_awesome_class")
|
|
105
|
+
#
|
|
106
|
+
# elements.size.should == 1
|
|
107
|
+
# elements[0].should be_instance_of(Arbre::HTML::Li)
|
|
108
|
+
#end
|
|
109
|
+
end
|
|
54
110
|
end
|
|
@@ -73,11 +73,24 @@ describe Arbre::HTML::Element do
|
|
|
73
73
|
let(:child){ "Hello World" }
|
|
74
74
|
it "should add as a TextNode" do
|
|
75
75
|
element.children.first.should be_instance_of(Arbre::HTML::TextNode)
|
|
76
|
-
element.children.first.
|
|
76
|
+
element.children.first.to_s.should == "Hello World"
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
+
describe "#children?" do
|
|
82
|
+
|
|
83
|
+
it "returns true when a child has been added" do
|
|
84
|
+
element.add_child Arbre::HTML::Element.new
|
|
85
|
+
element.children?.should == true
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "returns false when no children" do
|
|
89
|
+
element.children?.should == false
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
81
94
|
describe "setting the content" do
|
|
82
95
|
|
|
83
96
|
context "when a string" do
|
|
@@ -90,13 +103,13 @@ describe Arbre::HTML::Element do
|
|
|
90
103
|
end
|
|
91
104
|
|
|
92
105
|
it "should add the string as a child" do
|
|
93
|
-
element.children.first.
|
|
106
|
+
element.children.first.to_s.should == "Goodbye"
|
|
94
107
|
end
|
|
95
108
|
|
|
96
109
|
it "should html escape the string" do
|
|
97
110
|
string = "Goodbye <br />"
|
|
98
111
|
element.content = string
|
|
99
|
-
element.
|
|
112
|
+
element.to_s.should == "Goodbye <br />"
|
|
100
113
|
end
|
|
101
114
|
end
|
|
102
115
|
|
|
@@ -146,8 +159,8 @@ describe Arbre::HTML::Element do
|
|
|
146
159
|
|
|
147
160
|
describe "rendering to html" do
|
|
148
161
|
it "should render the children collection" do
|
|
149
|
-
element.children.should_receive(:
|
|
150
|
-
element.
|
|
162
|
+
element.children.should_receive(:to_s).and_return("content")
|
|
163
|
+
element.to_s.should == "content"
|
|
151
164
|
end
|
|
152
165
|
end
|
|
153
166
|
|
|
@@ -14,7 +14,7 @@ describe Arbre::HTML::Tag, "Attributes" do
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
it "should render the attributes to html" do
|
|
17
|
-
tag.
|
|
17
|
+
tag.to_s.should == <<-HTML
|
|
18
18
|
<tag id="my_id"></tag>
|
|
19
19
|
HTML
|
|
20
20
|
end
|
|
@@ -47,13 +47,13 @@ HTML
|
|
|
47
47
|
describe "rendering attributes" do
|
|
48
48
|
it "should html safe the attribute values" do
|
|
49
49
|
tag.set_attribute(:class, "\">bad things!")
|
|
50
|
-
tag.
|
|
50
|
+
tag.to_s.should == <<-HTML
|
|
51
51
|
<tag class="">bad things!"></tag>
|
|
52
52
|
HTML
|
|
53
53
|
end
|
|
54
54
|
it "should should escape the attribute names" do
|
|
55
55
|
tag.set_attribute(">bad", "things")
|
|
56
|
-
tag.
|
|
56
|
+
tag.to_s.should == <<-HTML
|
|
57
57
|
<tag >bad="things"></tag>
|
|
58
58
|
HTML
|
|
59
59
|
end
|