activeadmin 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +15 -1
- data/Gemfile +41 -11
- data/LICENSE +5 -0
- data/README.rdoc +202 -87
- data/Rakefile +51 -15
- data/activeadmin.gemspec +310 -131
- data/cucumber.yml +1 -0
- data/features/comments/commenting.feature +81 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/edit_page.feature +77 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/formats.feature +10 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +50 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +79 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +23 -0
- data/features/new_page.feature +75 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_resources.feature +33 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +33 -0
- data/features/sidebar_sections.feature +128 -0
- data/features/specifying_actions.feature +16 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +67 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +15 -0
- data/features/step_definitions/comment_steps.rb +8 -0
- data/features/step_definitions/configuration_steps.rb +31 -0
- data/features/step_definitions/factory_steps.rb +28 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +7 -0
- data/features/step_definitions/index_scope_steps.rb +20 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +11 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +20 -0
- data/features/step_definitions/web_steps.rb +219 -0
- data/features/support/env.rb +88 -0
- data/features/support/paths.rb +48 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin.rb +155 -79
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/action_items.rb +4 -15
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/attributes.rb +20 -0
- data/lib/active_admin/arbre/class_list.rb +28 -0
- data/lib/active_admin/arbre/collection.rb +27 -0
- data/lib/active_admin/arbre/context.rb +8 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/document.rb +42 -0
- data/lib/active_admin/arbre/element.rb +151 -0
- data/lib/active_admin/arbre/html.rb +84 -0
- data/lib/active_admin/arbre/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/tag.rb +129 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/callbacks.rb +87 -0
- data/lib/active_admin/comments.rb +73 -0
- data/lib/active_admin/comments/comment.rb +15 -0
- data/lib/active_admin/comments/configuration.rb +16 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/dashboards.rb +0 -2
- data/lib/active_admin/dashboards/dashboard_controller.rb +10 -5
- data/lib/active_admin/dashboards/section.rb +5 -14
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +202 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +68 -50
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/namespace.rb +102 -16
- data/lib/active_admin/renderer.rb +18 -3
- data/lib/active_admin/resource.rb +110 -9
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource_controller.rb +45 -260
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +53 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +142 -0
- data/lib/active_admin/resource_controller/filters.rb +58 -0
- data/lib/active_admin/resource_controller/form.rb +42 -0
- data/lib/active_admin/resource_controller/menu.rb +29 -0
- data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
- data/lib/active_admin/resource_controller/scoping.rb +36 -0
- data/lib/active_admin/resource_controller/sidebars.rb +38 -0
- data/lib/active_admin/scope.rb +17 -0
- data/lib/active_admin/sidebar.rb +8 -47
- data/lib/active_admin/stylesheets/active_admin.scss +418 -0
- data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
- data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
- data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
- data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
- data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +21 -0
- data/lib/active_admin/view_helpers.rb +17 -100
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +41 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
- data/lib/active_admin/view_helpers/display_helper.rb +38 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +174 -0
- data/lib/active_admin/view_helpers/form_helper.rb +12 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
- data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/status_tag_helper.rb +13 -0
- data/lib/active_admin/view_helpers/table_helper.rb +12 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/attributes_table.rb +66 -0
- data/lib/active_admin/views/components/columns.rb +49 -0
- data/lib/active_admin/views/components/paginated_collection.rb +74 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +64 -0
- data/lib/active_admin/views/components/sidebar_section.rb +30 -0
- data/lib/active_admin/views/components/table_for.rb +174 -0
- data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
- data/lib/active_admin/views/header_renderer.rb +37 -0
- data/lib/active_admin/views/index_as_block.rb +24 -0
- data/lib/active_admin/views/index_as_blog.rb +89 -0
- data/lib/active_admin/views/index_as_grid.rb +49 -0
- data/lib/active_admin/views/index_as_table.rb +73 -0
- data/lib/active_admin/views/pages/base.rb +138 -0
- data/lib/active_admin/views/pages/dashboard.rb +61 -0
- data/lib/active_admin/views/pages/edit.rb +27 -0
- data/lib/active_admin/views/pages/index.rb +64 -0
- data/lib/active_admin/views/pages/new.rb +27 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +52 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
- data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
- data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
- data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
- data/lib/active_admin/views/templates/active_admin_dashboard/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/edit.html.arb +1 -0
- data/lib/active_admin/views/{active_admin_default → templates/active_admin_default}/index.csv.erb +0 -0
- data/lib/active_admin/views/templates/active_admin_default/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/new.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/show.html.arb +1 -0
- data/lib/active_admin/views/{layouts → templates/layouts}/active_admin.html.erb +3 -4
- data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +45 -0
- data/lib/generators/active_admin/install/install_generator.rb +18 -3
- data/lib/generators/active_admin/install/templates/active_admin.js +41 -0
- data/lib/generators/active_admin/install/templates/{active_admin.rb → active_admin.rb.erb} +33 -3
- data/lib/generators/active_admin/install/templates/active_admin_vendor.js +1 -1
- data/lib/generators/active_admin/install/templates/dashboards.rb +3 -4
- data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
- data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/orderable.png +0 -0
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
- data/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/integration/index_as_table_spec.rb +0 -119
- data/spec/integration/layout_spec.rb +3 -37
- data/spec/spec_helper.rb +89 -50
- data/spec/support/integration_example_group.rb +37 -0
- data/spec/support/rails_template.rb +21 -9
- data/spec/support/rails_template_with_data.rb +32 -0
- data/spec/support/templates/cucumber.rb +28 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +19 -7
- data/spec/unit/action_items_spec.rb +16 -30
- data/spec/unit/active_admin_spec.rb +10 -22
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +224 -0
- data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
- data/spec/unit/arbre/html/tag_spec.rb +63 -0
- data/spec/unit/arbre/html_spec.rb +185 -0
- data/spec/unit/auto_link_spec.rb +38 -0
- data/spec/unit/belongs_to_spec.rb +44 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +53 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/components/attributes_table_spec.rb +100 -0
- data/spec/unit/components/columns_spec.rb +75 -0
- data/spec/unit/components/panel_spec.rb +31 -0
- data/spec/unit/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/components/table_for_spec.rb +130 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +10 -17
- data/spec/unit/display_name_spec.rb +29 -0
- data/spec/unit/event_spec.rb +41 -0
- data/spec/unit/filter_form_builder_spec.rb +99 -77
- data/spec/unit/form_builder_spec.rb +69 -69
- data/spec/unit/namespace_spec.rb +61 -3
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/registration_spec.rb +40 -1
- data/spec/unit/renderer_spec.rb +8 -0
- data/spec/unit/resource_controller_spec.rb +105 -6
- data/spec/unit/resource_spec.rb +78 -11
- data/spec/unit/routing_spec.rb +82 -6
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +24 -2
- data/spec/unit/view_factory_spec.rb +16 -0
- metadata +268 -82
- data/.gitignore +0 -25
- data/active_admin.gemspec +0 -22
- data/lib/active_admin/action_builder.rb +0 -60
- data/lib/active_admin/breadcrumbs.rb +0 -26
- data/lib/active_admin/dashboards/renderer.rb +0 -45
- data/lib/active_admin/dashboards/section_renderer.rb +0 -28
- data/lib/active_admin/filters.rb +0 -189
- data/lib/active_admin/pages.rb +0 -11
- data/lib/active_admin/pages/base.rb +0 -92
- data/lib/active_admin/pages/edit.rb +0 -21
- data/lib/active_admin/pages/index.rb +0 -58
- data/lib/active_admin/pages/index/blog.rb +0 -65
- data/lib/active_admin/pages/index/table.rb +0 -48
- data/lib/active_admin/pages/index/thumbnails.rb +0 -40
- data/lib/active_admin/pages/new.rb +0 -21
- data/lib/active_admin/pages/show.rb +0 -54
- data/lib/active_admin/table_builder.rb +0 -162
- data/lib/active_admin/tabs_renderer.rb +0 -39
- data/lib/active_admin/views/active_admin_dashboard/index.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/edit.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/index.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/new.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/show.html.erb +0 -1
- data/lib/generators/active_admin/install/templates/active_admin.css +0 -325
- data/lib/generators/active_admin/install/templates/images/orderable.gif +0 -0
- data/spec/integration/index_as_blog_spec.rb +0 -65
- data/spec/integration/index_as_thumbnails_spec.rb +0 -43
- data/spec/integration/new_view_spec.rb +0 -52
- data/spec/integration/show_view_spec.rb +0 -91
- data/spec/unit/sidebar_spec.rb +0 -96
- data/spec/unit/table_builder_spec.rb +0 -162
data/spec/spec_helper.rb
CHANGED
@@ -1,21 +1,34 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH << File.expand_path('../support', __FILE__)
|
3
|
+
|
2
4
|
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
|
3
5
|
|
4
6
|
require 'rubygems'
|
5
7
|
require "bundler"
|
6
8
|
Bundler.setup
|
7
9
|
|
10
|
+
require 'shoulda/active_record'
|
11
|
+
include Shoulda::ActiveRecord::Macros
|
12
|
+
|
8
13
|
# Setup autoloading of ActiveAdmin and the load path
|
9
14
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
10
15
|
autoload :ActiveAdmin, 'active_admin'
|
11
16
|
|
12
|
-
module ActiveAdminIntegrationSpecHelper
|
13
17
|
|
18
|
+
module ActiveAdminIntegrationSpecHelper
|
14
19
|
extend self
|
15
20
|
|
16
21
|
def load_defaults!
|
17
|
-
ActiveAdmin.
|
18
|
-
ActiveAdmin.
|
22
|
+
ActiveAdmin.unload!
|
23
|
+
ActiveAdmin.load!
|
24
|
+
ActiveAdmin.register(Category)
|
25
|
+
ActiveAdmin.register(User)
|
26
|
+
ActiveAdmin.register(Post){ belongs_to :user, :optional => true }
|
27
|
+
reload_menus!
|
28
|
+
end
|
29
|
+
|
30
|
+
def reload_menus!
|
31
|
+
ActiveAdmin.namespaces.values.each{|n| n.load_menu! }
|
19
32
|
end
|
20
33
|
|
21
34
|
# Sometimes we need to reload the routes within
|
@@ -24,6 +37,21 @@ module ActiveAdminIntegrationSpecHelper
|
|
24
37
|
Rails.application.reload_routes!
|
25
38
|
end
|
26
39
|
|
40
|
+
# Helper method to load resources and ensure that Active Admin is
|
41
|
+
# setup with the new configurations.
|
42
|
+
#
|
43
|
+
# Eg:
|
44
|
+
# load_resources do
|
45
|
+
# ActiveAdmin.regiser(Post)
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
def load_resources
|
49
|
+
ActiveAdmin.unload!
|
50
|
+
yield
|
51
|
+
reload_menus!
|
52
|
+
reload_routes!
|
53
|
+
end
|
54
|
+
|
27
55
|
# Sets up a describe block where you can render controller
|
28
56
|
# actions. Uses the Admin::PostsController as the subject
|
29
57
|
# for the describe block
|
@@ -31,7 +59,17 @@ module ActiveAdminIntegrationSpecHelper
|
|
31
59
|
describe *args do
|
32
60
|
include RSpec::Rails::ControllerExampleGroup
|
33
61
|
render_views
|
34
|
-
metadata[:behaviour][:describes] =
|
62
|
+
metadata[:behaviour][:describes] = ActiveAdmin.namespaces[:admin].resources['Post'].controller
|
63
|
+
module_eval &block
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Setup a describe block which uses capybara and rails integration
|
68
|
+
# test methods.
|
69
|
+
def describe_with_capybara(*args, &block)
|
70
|
+
require 'integration_example_group'
|
71
|
+
describe *args do
|
72
|
+
include RSpec::Rails::IntegrationExampleGroup
|
35
73
|
module_eval &block
|
36
74
|
end
|
37
75
|
end
|
@@ -41,6 +79,7 @@ module ActiveAdminIntegrationSpecHelper
|
|
41
79
|
controller = ActionView::TestCase::TestController.new
|
42
80
|
ActionView::Base.send :include, ActionView::Helpers
|
43
81
|
ActionView::Base.send :include, ActiveAdmin::ViewHelpers
|
82
|
+
ActionView::Base.send :include, Rails.application.routes.url_helpers
|
44
83
|
ActionView::Base.new(ActionController::Base.view_paths, assigns, controller)
|
45
84
|
end
|
46
85
|
alias_method :action_view, :mock_action_view
|
@@ -50,63 +89,63 @@ end
|
|
50
89
|
ENV['RAILS'] ||= '3.0.0'
|
51
90
|
ENV['RAILS_ENV'] = 'test'
|
52
91
|
|
53
|
-
|
54
|
-
ENV['RAILS_ROOT'] = File.expand_path('../rails/rails-3.0.0', __FILE__)
|
92
|
+
ENV['RAILS_ROOT'] = File.expand_path("../rails/rails-#{ENV["RAILS"]}", __FILE__)
|
55
93
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
94
|
+
# Create the test app if it doesn't exists
|
95
|
+
unless File.exists?(ENV['RAILS_ROOT'])
|
96
|
+
system 'rake setup'
|
97
|
+
end
|
60
98
|
|
61
|
-
|
62
|
-
|
99
|
+
require ENV['RAILS_ROOT'] + '/config/environment'
|
100
|
+
require 'rspec/rails'
|
63
101
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
102
|
+
# Setup Some Admin stuff for us to play with
|
103
|
+
include ActiveAdminIntegrationSpecHelper
|
104
|
+
load_defaults!
|
105
|
+
reload_routes!
|
68
106
|
|
69
|
-
|
70
|
-
|
71
|
-
|
107
|
+
# Disabling authentication in specs so that we don't have to worry about
|
108
|
+
# it allover the place
|
109
|
+
ActiveAdmin.authentication_method = false
|
110
|
+
ActiveAdmin.current_user_method = false
|
72
111
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
end
|
112
|
+
# Don't add asset cache timestamps. Makes it easy to integration
|
113
|
+
# test for the presence of an asset file
|
114
|
+
ENV["RAILS_ASSET_ID"] = ''
|
77
115
|
|
78
|
-
|
79
|
-
|
116
|
+
Rspec.configure do |config|
|
117
|
+
config.use_transactional_fixtures = true
|
118
|
+
config.use_instantiated_fixtures = false
|
119
|
+
end
|
120
|
+
|
121
|
+
# Ensure this is defined for Ruby 1.8
|
122
|
+
module MiniTest; class Assertion < Exception; end; end
|
80
123
|
|
81
|
-
|
124
|
+
Rspec::Matchers.define :have_tag do |*args|
|
82
125
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
126
|
+
match_unless_raises Test::Unit::AssertionFailedError do |response|
|
127
|
+
tag = args.shift
|
128
|
+
content = args.first.is_a?(Hash) ? nil : args.shift
|
129
|
+
|
130
|
+
options = {
|
131
|
+
:tag => tag.to_s
|
132
|
+
}.merge(args[0] || {})
|
133
|
+
|
134
|
+
options[:content] = content if content
|
92
135
|
|
136
|
+
begin
|
93
137
|
begin
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
assert tag, "expected tag, but no tag found matching #{options.inspect} in:\n#{response.inspect}"
|
101
|
-
end
|
102
|
-
# In Ruby 1.9, MiniTest::Assertion get's raised, so we'll
|
103
|
-
# handle raising a Test::Unit::AssertionFailedError
|
104
|
-
rescue MiniTest::Assertion => e
|
105
|
-
raise Test::Unit::AssertionFailedError, e.message
|
138
|
+
assert_tag(options)
|
139
|
+
rescue NoMethodError
|
140
|
+
# We are not in a controller, so let's do the checking ourselves
|
141
|
+
doc = HTML::Document.new(response, false, false)
|
142
|
+
tag = doc.find(options)
|
143
|
+
assert tag, "expected tag, but no tag found matching #{options.inspect} in:\n#{response.inspect}"
|
106
144
|
end
|
145
|
+
# In Ruby 1.9, MiniTest::Assertion get's raised, so we'll
|
146
|
+
# handle raising a Test::Unit::AssertionFailedError
|
147
|
+
rescue MiniTest::Assertion => e
|
148
|
+
raise Test::Unit::AssertionFailedError, e.message
|
107
149
|
end
|
108
150
|
end
|
109
|
-
|
110
151
|
end
|
111
|
-
|
112
|
-
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'action_dispatch'
|
2
|
+
require 'capybara/rails'
|
3
|
+
require 'capybara/dsl'
|
4
|
+
|
5
|
+
module RSpec
|
6
|
+
module Rails
|
7
|
+
module IntegrationExampleGroup
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
include ActionDispatch::Integration::Runner
|
11
|
+
include RSpec::Rails::TestUnitAssertionAdapter
|
12
|
+
include ActionDispatch::Assertions
|
13
|
+
include Capybara
|
14
|
+
include RSpec::Matchers
|
15
|
+
|
16
|
+
module InstanceMethods
|
17
|
+
def app
|
18
|
+
::Rails.application
|
19
|
+
end
|
20
|
+
|
21
|
+
def last_response
|
22
|
+
page
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
included do
|
27
|
+
before do
|
28
|
+
@router = ::Rails.application.routes
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
RSpec.configure do |c|
|
33
|
+
c.include self, :example_group => { :file_path => /\bspec\/integration\// }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,19 +1,31 @@
|
|
1
1
|
# Rails template to build the sample app for specs
|
2
|
-
|
3
|
-
|
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"
|
4
11
|
generate :model, "user first_name:string last_name:string username:string"
|
5
12
|
inject_into_file 'app/models/user.rb', " has_many :posts, :foreign_key => 'author_id'\n", :after => "class User < ActiveRecord::Base\n"
|
6
|
-
generate :model, 'category name:string'
|
13
|
+
generate :model, 'category name:string description:text'
|
14
|
+
inject_into_file 'app/models/category.rb', " has_many :posts\n", :after => "class Category < ActiveRecord::Base\n"
|
15
|
+
|
16
|
+
# Add our local Active Admin to the load path
|
17
|
+
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__)"
|
7
18
|
|
8
19
|
run "rm Gemfile"
|
9
20
|
run "rm -r test"
|
10
21
|
run "rm -r spec"
|
11
22
|
|
12
|
-
rake "db:migrate"
|
13
|
-
rake "db:test:prepare"
|
14
|
-
|
15
|
-
# Install ActiveAdmin
|
16
|
-
# This should happen last so that we don't have to worry about the
|
17
|
-
# rake's blowing up due to not having active admin in their load paths
|
18
23
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
19
24
|
generate :'active_admin:install'
|
25
|
+
|
26
|
+
# Setup a root path for devise
|
27
|
+
route "root :to => 'admin/dashboard#index'"
|
28
|
+
|
29
|
+
rake "db:migrate"
|
30
|
+
rake "db:test:prepare"
|
31
|
+
run "/usr/bin/env RAILS_ENV=cucumber rake db:migrate"
|
@@ -0,0 +1,32 @@
|
|
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
|
+
end
|
17
|
+
|
18
|
+
categories = ["Rock", "Pop Rock", "Alt-Country", "Blues", "Dub-Step"].collect do |name|
|
19
|
+
Category.create! :name => name
|
20
|
+
end
|
21
|
+
|
22
|
+
1_000.times do |i|
|
23
|
+
user = users[i % users.size]
|
24
|
+
cat = categories[i % categories.size]
|
25
|
+
Post.create :title => "Blog Post \#{i}",
|
26
|
+
:body => "Blog post \#{i} is written by \#{user.username} about \#{cat.name}",
|
27
|
+
:category => cat,
|
28
|
+
:author => user
|
29
|
+
end
|
30
|
+
EOF
|
31
|
+
|
32
|
+
rake 'db:seed'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path('config/environments/test', Rails.root)
|
2
|
+
|
3
|
+
Rails.application.class.configure do
|
4
|
+
config.cache_classes = false
|
5
|
+
end
|
6
|
+
|
7
|
+
# rails/railties/lib/rails/test_help.rb aborts if the environment is not 'test'. (Rails 3.0.0.beta3)
|
8
|
+
# We can't run Cucumber/RSpec/Test_Unit tests in different environments then.
|
9
|
+
#
|
10
|
+
# For now, I patch StringInquirer so that Rails.env.test? returns true when Rails.env is 'test' or 'cucumber'
|
11
|
+
#
|
12
|
+
# https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4458-rails-should-allow-test-to-run-in-cucumber-environment
|
13
|
+
module ActiveSupport
|
14
|
+
class StringInquirer < String
|
15
|
+
def method_missing(method_name, *arguments)
|
16
|
+
if method_name.to_s[-1,1] == "?"
|
17
|
+
test_string = method_name.to_s[0..-2]
|
18
|
+
if test_string == 'test'
|
19
|
+
self == 'test' or self == 'cucumber'
|
20
|
+
else
|
21
|
+
self == test_string
|
22
|
+
end
|
23
|
+
else
|
24
|
+
super
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
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
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe 'defining new actions from registration blocks' do
|
4
4
|
|
5
5
|
let(:controller){ Admin::PostsController }
|
6
6
|
|
@@ -16,8 +16,10 @@ describe ActiveAdmin::ActionBuilder do
|
|
16
16
|
|
17
17
|
context "with a block" do
|
18
18
|
let(:action!) do
|
19
|
-
|
20
|
-
|
19
|
+
ActiveAdmin.register Post do
|
20
|
+
member_action :comment do
|
21
|
+
# Do nothing
|
22
|
+
end
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
@@ -33,7 +35,11 @@ describe ActiveAdmin::ActionBuilder do
|
|
33
35
|
end
|
34
36
|
|
35
37
|
context "without a block" do
|
36
|
-
let(:action!)
|
38
|
+
let(:action!) do
|
39
|
+
ActiveAdmin.register Post do
|
40
|
+
member_action :comment
|
41
|
+
end
|
42
|
+
end
|
37
43
|
it "should still generate a new empty action" do
|
38
44
|
controller.public_instance_methods.collect(&:to_s).should include("comment")
|
39
45
|
end
|
@@ -51,8 +57,10 @@ describe ActiveAdmin::ActionBuilder do
|
|
51
57
|
|
52
58
|
context "with a block" do
|
53
59
|
let(:action!) do
|
54
|
-
|
55
|
-
|
60
|
+
ActiveAdmin.register Post do
|
61
|
+
collection_action :comments do
|
62
|
+
# Do nothing
|
63
|
+
end
|
56
64
|
end
|
57
65
|
end
|
58
66
|
it "should create a new public instance method" do
|
@@ -66,7 +74,11 @@ describe ActiveAdmin::ActionBuilder do
|
|
66
74
|
end
|
67
75
|
end
|
68
76
|
context "without a block" do
|
69
|
-
let(:action!)
|
77
|
+
let(:action!) do
|
78
|
+
ActiveAdmin.register Post do
|
79
|
+
collection_action :comments
|
80
|
+
end
|
81
|
+
end
|
70
82
|
it "should still generate a new empty action" do
|
71
83
|
controller.public_instance_methods.collect(&:to_s).should include("comments")
|
72
84
|
end
|