rad_core 0.0.13
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/Rakefile +10 -0
- data/lib/rad/controller/abstract_controller/micelaneous.rb +31 -0
- data/lib/rad/controller/abstract_controller/render.rb +160 -0
- data/lib/rad/controller/abstract_controller/responder.rb +17 -0
- data/lib/rad/controller/abstract_controller.rb +64 -0
- data/lib/rad/controller/controller_context.rb +15 -0
- data/lib/rad/controller/http_controller.rb +48 -0
- data/lib/rad/controller/processors/controller_caller.rb +28 -0
- data/lib/rad/controller/processors/controller_error_handling.rb +51 -0
- data/lib/rad/controller/processors/controller_logger.rb +12 -0
- data/lib/rad/controller.rb +28 -0
- data/lib/rad/conveyor/conveyor.rb +74 -0
- data/lib/rad/conveyor/conveyors.rb +20 -0
- data/lib/rad/conveyor/params.rb +14 -0
- data/lib/rad/conveyor/processor.rb +68 -0
- data/lib/rad/conveyor/processors/conveyor_logger.rb +25 -0
- data/lib/rad/conveyor/workspace.rb +36 -0
- data/lib/rad/conveyor.rb +29 -0
- data/lib/rad/environment/config.rb +111 -0
- data/lib/rad/environment/dependency_resolver.rb +107 -0
- data/lib/rad/environment/environment.rb +29 -0
- data/lib/rad/environment/files_helper.rb +55 -0
- data/lib/rad/environment/logger.rb +21 -0
- data/lib/rad/environment.rb +55 -0
- data/lib/rad/html/flash.rb +42 -0
- data/lib/rad/html/helpers/basic_html_helper.rb +83 -0
- data/lib/rad/html/helpers/flash_helper.rb +5 -0
- data/lib/rad/html/helpers/form_helper.rb +115 -0
- data/lib/rad/html/helpers/html_helper.rb +5 -0
- data/lib/rad/html/helpers/javascript_helper.rb +18 -0
- data/lib/rad/html/helpers/model_helper.rb +135 -0
- data/lib/rad/html/include_into_controller.rb +0 -0
- data/lib/rad/html/processors/prepare_flash.rb +26 -0
- data/lib/rad/html/processors/scoped_params.rb +26 -0
- data/lib/rad/html.rb +26 -0
- data/lib/rad/http/http.rb +21 -0
- data/lib/rad/http/http_adapter.rb +36 -0
- data/lib/rad/http/middleware/static_files.rb +21 -0
- data/lib/rad/http/processors/evaluate_format.rb +22 -0
- data/lib/rad/http/processors/http_logger.rb +15 -0
- data/lib/rad/http/processors/http_writer.rb +30 -0
- data/lib/rad/http/processors/prepare_params.rb +22 -0
- data/lib/rad/http/support/rack/fixes.rb +36 -0
- data/lib/rad/http/support/rack/rack_adapter.rb +67 -0
- data/lib/rad/http/support/rack/request.rb +42 -0
- data/lib/rad/http/support/rack/response.rb +86 -0
- data/lib/rad/http.rb +48 -0
- data/lib/rad/integration/controller_micelaneous_helper.rb +19 -0
- data/lib/rad/integration/router/abstract_routing_helper.rb +22 -0
- data/lib/rad/integration/router/controller_routing_helper.rb +58 -0
- data/lib/rad/integration/router/view_routing_helper.rb +104 -0
- data/lib/rad/integration.rb +30 -0
- data/lib/rad/mail/letter.rb +30 -0
- data/lib/rad/mail/mail_controller.rb +31 -0
- data/lib/rad/mail/mailer.rb +23 -0
- data/lib/rad/mail/processors/letter_builder.rb +36 -0
- data/lib/rad/mail.rb +15 -0
- data/lib/rad/profiles/mail.rb +16 -0
- data/lib/rad/profiles/web.rb +68 -0
- data/lib/rad/profiles/web_require.rb +5 -0
- data/lib/rad/remote/processors/remote_caller.rb +54 -0
- data/lib/rad/remote/processors/remote_logger.rb +13 -0
- data/lib/rad/remote/remote.rb +15 -0
- data/lib/rad/remote.rb +9 -0
- data/lib/rad/router/core/configurator.rb +25 -0
- data/lib/rad/router/core/core_routing_helper.rb +41 -0
- data/lib/rad/router/core/default_format_processor.rb +12 -0
- data/lib/rad/router/core/processors/router.rb +29 -0
- data/lib/rad/router/core/router.rb +271 -0
- data/lib/rad/router/core/simple_router.rb +23 -0
- data/lib/rad/router/routers/abstract_router.rb +62 -0
- data/lib/rad/router/routers/alias_router.rb +113 -0
- data/lib/rad/router/routers/restful_router.rb +113 -0
- data/lib/rad/router.rb +29 -0
- data/lib/rad/spec/controller.rb +41 -0
- data/lib/rad/spec/environment.rb +51 -0
- data/lib/rad/spec/http.rb +93 -0
- data/lib/rad/spec/mail.rb +31 -0
- data/lib/rad/spec/remote.rb +9 -0
- data/lib/rad/spec/router.rb +18 -0
- data/lib/rad/spec/template.rb +12 -0
- data/lib/rad/spec/view.rb +10 -0
- data/lib/rad/spec/xhtml.rb +33 -0
- data/lib/rad/spec.rb +11 -0
- data/lib/rad/support/active_support/locales/en/actionpack.yml +154 -0
- data/lib/rad/support/active_support/locales/en/activesupport.yml +36 -0
- data/lib/rad/support/active_support/micelaneous.rb +2 -0
- data/lib/rad/support/active_support/time.rb +105 -0
- data/lib/rad/support/active_support.rb +49 -0
- data/lib/rad/support/addressable.rb +45 -0
- data/lib/rad/support/buffered_logger.rb +44 -0
- data/lib/rad/support/callbacks.rb +168 -0
- data/lib/rad/support/exception.rb +31 -0
- data/lib/rad/support/filters.rb +34 -0
- data/lib/rad/support/format.rb +17 -0
- data/lib/rad/support/hacks_and_fixes.rb +23 -0
- data/lib/rad/support/micon.rb +13 -0
- data/lib/rad/support/mime.rb +13 -0
- data/lib/rad/support/module.rb +48 -0
- data/lib/rad/support/rson.rb +53 -0
- data/lib/rad/support/ruby_ext_with_active_support.rb +4 -0
- data/lib/rad/support/string.rb +26 -0
- data/lib/rad/support.rb +63 -0
- data/lib/rad/template/support/tilt.rb +68 -0
- data/lib/rad/template/support/tilt_fixes.rb +17 -0
- data/lib/rad/template/template.rb +250 -0
- data/lib/rad/template/template_context.rb +62 -0
- data/lib/rad/template.rb +25 -0
- data/lib/rad_core/gems.rb +31 -0
- data/readme.md +33 -0
- data/spec/controller/abstract_controller_spec/views/OperationsOrderSpec/action.erb +1 -0
- data/spec/controller/abstract_controller_spec/views/ViewVariablesSpec/action.erb +11 -0
- data/spec/controller/abstract_controller_spec.rb +132 -0
- data/spec/controller/controller_context_spec/views/ItemSpec/actions.erb +4 -0
- data/spec/controller/controller_context_spec/views/ItemSpec/show.erb +0 -0
- data/spec/controller/controller_context_spec/views/ItemSpec/update.erb +0 -0
- data/spec/controller/controller_context_spec/views/NamespaceSpec/ClassSpec/show.erb +0 -0
- data/spec/controller/controller_context_spec/views/PageSpec/actions.erb +3 -0
- data/spec/controller/controller_context_spec/views/PageSpec/show.erb +0 -0
- data/spec/controller/controller_context_spec/views/namespace_spec/class_spec/update.erb +0 -0
- data/spec/controller/controller_context_spec.rb +123 -0
- data/spec/controller/controller_helper_spec/views/HelperMethodSpec/action.erb +1 -0
- data/spec/controller/controller_helper_spec/views/HelperSpec/action.erb +1 -0
- data/spec/controller/controller_helper_spec.rb +53 -0
- data/spec/controller/controller_render_spec/views/AlreadyRenderedSpec/action.erb +1 -0
- data/spec/controller/controller_render_spec/views/AlreadyRenderedSpec/custom_template.erb +1 -0
- data/spec/controller/controller_render_spec/views/AnotherActionSpec/another_action.erb +1 -0
- data/spec/controller/controller_render_spec/views/AnotherLayout/action.erb +1 -0
- data/spec/controller/controller_render_spec/views/ForbidPartialAsActionSpec/_action.erb +1 -0
- data/spec/controller/controller_render_spec/views/FormatSpec/action.html.erb +1 -0
- data/spec/controller/controller_render_spec/views/FormatSpec/action.js.erb +1 -0
- data/spec/controller/controller_render_spec/views/LayoutFiltersSpec/action_with_layout.erb +1 -0
- data/spec/controller/controller_render_spec/views/LayoutFiltersSpec/action_without_layout.erb +1 -0
- data/spec/controller/controller_render_spec/views/LayoutSpec/action.erb +1 -0
- data/spec/controller/controller_render_spec/views/MultipleActions/actions.haml +7 -0
- data/spec/controller/controller_render_spec/views/layouts/admin.erb +1 -0
- data/spec/controller/controller_render_spec/views/layouts/app.html.erb +1 -0
- data/spec/controller/controller_render_spec/views/layouts/app.js.erb +1 -0
- data/spec/controller/controller_render_spec/views/rem ExplicitRenderSpec/action.erb +1 -0
- data/spec/controller/controller_render_spec/views/rem ExplicitRenderSpec/another_action.erb +1 -0
- data/spec/controller/controller_render_spec/views/some_template.erb +1 -0
- data/spec/controller/controller_render_spec/views/standalone.html.erb +1 -0
- data/spec/controller/controller_render_spec.rb +217 -0
- data/spec/controller/error_handling_spec/views/diferrent_error_handling_spec/a.erb +1 -0
- data/spec/controller/error_handling_spec/views/diferrent_error_handling_spec/b.erb +1 -0
- data/spec/controller/error_handling_spec/views/diferrent_error_handling_spec/c.erb +1 -0
- data/spec/controller/error_handling_spec.rb +117 -0
- data/spec/controller/http_controller_spec.rb +130 -0
- data/spec/controller/spec_helper.rb +19 -0
- data/spec/conveyor/conveyor_spec.rb +124 -0
- data/spec/conveyor/spec_helper.rb +3 -0
- data/spec/environment/config_spec/config.default.yml +3 -0
- data/spec/environment/config_spec/config.development.yml +3 -0
- data/spec/environment/config_spec/config.yml +5 -0
- data/spec/environment/config_spec.rb +30 -0
- data/spec/environment/environment_spec/path1/file1 +0 -0
- data/spec/environment/environment_spec/path1/some_folder/some_file +0 -0
- data/spec/environment/environment_spec/path2/file2 +0 -0
- data/spec/environment/environment_spec/path2/some_folder/some_file +0 -0
- data/spec/environment/environment_spec.rb +65 -0
- data/spec/environment/logger_spec.rb +19 -0
- data/spec/environment/minimal_app_spec/app.rb +1 -0
- data/spec/environment/minimal_app_spec.rb +25 -0
- data/spec/environment/spec_helper.rb +1 -0
- data/spec/environment/standard_app_spec/app/lib/app/init.rb +3 -0
- data/spec/environment/standard_app_spec/plugin_a/lib/plugin_a/init.rb +1 -0
- data/spec/environment/standard_app_spec/plugin_b/lib/emptygit +0 -0
- data/spec/environment/standard_app_spec.rb +48 -0
- data/spec/html/basic_html_helper_spec.rb +29 -0
- data/spec/html/form_helper_spec.rb +63 -0
- data/spec/html/javascript_helper_spec.rb +15 -0
- data/spec/html/model_helper_spec.rb +81 -0
- data/spec/html/scoped_params_spec.rb +15 -0
- data/spec/html/spec_helper.rb +28 -0
- data/spec/http/http_spec/app/lib/app/init.rb +10 -0
- data/spec/http/http_spec/app/runtime/public/emptygit +0 -0
- data/spec/http/http_spec/plugin_a/lib/plugin_a/init.rb +0 -0
- data/spec/http/http_spec/plugin_b/lib/plugin_b/init.rb +5 -0
- data/spec/http/http_spec/plugin_b/static/emptygit +0 -0
- data/spec/http/http_spec.rb +51 -0
- data/spec/http/micelaneous_spec.rb +13 -0
- data/spec/http/spec_helper.rb +5 -0
- data/spec/integration/basic_spec/views/smoke_test_spec/action.erb +1 -0
- data/spec/integration/basic_spec.rb +79 -0
- data/spec/integration/controller_routing_helper_spec.rb +84 -0
- data/spec/integration/flash_spec.rb +206 -0
- data/spec/integration/spec_helper.rb +5 -0
- data/spec/integration/spec_helper_spec.rb +63 -0
- data/spec/integration/view_routing_helper_spec.rb +134 -0
- data/spec/mail/mail_controller_spec/views/body_template_spec/signup.erb +1 -0
- data/spec/mail/mail_controller_spec.rb +61 -0
- data/spec/mail/spec_helper.rb +7 -0
- data/spec/remote/remote_spec.rb +75 -0
- data/spec/remote/spec_helper.rb +17 -0
- data/spec/router/alias_router_spec.rb +98 -0
- data/spec/router/basic_spec.rb +111 -0
- data/spec/router/configurator_spec.rb +18 -0
- data/spec/router/integration_spec.rb +42 -0
- data/spec/router/persistent_params_spec.rb +65 -0
- data/spec/router/restful_router_spec.rb +120 -0
- data/spec/router/routing_helper_spec.rb +55 -0
- data/spec/router/spec_helper.rb +20 -0
- data/spec/support/callbacks_spec.rb +157 -0
- data/spec/support/filters_spec.rb +60 -0
- data/spec/support/spec_helper.rb +4 -0
- data/spec/template/spec_helper.rb +6 -0
- data/spec/template/template_spec/file.erb +1 -0
- data/spec/template/template_spec/views/basic/custom_context.erb +1 -0
- data/spec/template/template_spec/views/basic/extension.erb +1 -0
- data/spec/template/template_spec/views/basic/general.html.erb +5 -0
- data/spec/template/template_spec/views/basic/non_existing_format.html.erb +0 -0
- data/spec/template/template_spec/views/format/format.erb +1 -0
- data/spec/template/template_spec/views/format/format.html.erb +1 -0
- data/spec/template/template_spec/views/format/format.js.erb +1 -0
- data/spec/template/template_spec/views/format_for_partials/_form.html.erb +1 -0
- data/spec/template/template_spec/views/format_for_partials/dialog.js.erb +1 -0
- data/spec/template/template_spec/views/layout/basic/content.erb +1 -0
- data/spec/template/template_spec/views/layout/basic/layout.erb +1 -0
- data/spec/template/template_spec/views/layout/content_for/content.erb +3 -0
- data/spec/template/template_spec/views/layout/content_for/layout.erb +3 -0
- data/spec/template/template_spec/views/layout/format/content.html.erb +1 -0
- data/spec/template/template_spec/views/layout/format/content.js.erb +1 -0
- data/spec/template/template_spec/views/layout/format/layout.html.erb +1 -0
- data/spec/template/template_spec/views/layout/format/layout.js.erb +1 -0
- data/spec/template/template_spec/views/layout/nested_yield/a.erb +1 -0
- data/spec/template/template_spec/views/layout/nested_yield/layout.erb +1 -0
- data/spec/template/template_spec/views/layout/nested_yield/layout_b.erb +1 -0
- data/spec/template/template_spec/views/layout/same_context/a.erb +1 -0
- data/spec/template/template_spec/views/layout/same_context/b.erb +1 -0
- data/spec/template/template_spec/views/layout/same_context/layout.erb +1 -0
- data/spec/template/template_spec/views/nested/format/a.erb +1 -0
- data/spec/template/template_spec/views/nested/format/b.erb +1 -0
- data/spec/template/template_spec/views/nested/relative/a.erb +1 -0
- data/spec/template/template_spec/views/nested/relative/b.erb +1 -0
- data/spec/template/template_spec/views/nested/relative/c.erb +1 -0
- data/spec/template/template_spec/views/nested/shared/c.erb +1 -0
- data/spec/template/template_spec/views/nesting_format/_edit.html.erb +1 -0
- data/spec/template/template_spec/views/nesting_format/_form.html.erb +1 -0
- data/spec/template/template_spec/views/nesting_format/dialog.js.erb +1 -0
- data/spec/template/template_spec/views/other/template.erb +1 -0
- data/spec/template/template_spec/views/prefixes/_underscored.erb +1 -0
- data/spec/template/template_spec/views/prefixes/without_prefix.erb +1 -0
- data/spec/template/template_spec.rb +204 -0
- data/spec/template/tilt_spec/views/concat_and_capture.erb +1 -0
- data/spec/template/tilt_spec/views/concat_and_capture.haml +3 -0
- data/spec/template/tilt_spec/views/encoding/erb.erb +1 -0
- data/spec/template/tilt_spec/views/encoding/haml.haml +1 -0
- data/spec/template/tilt_spec/views/errors.erb +3 -0
- data/spec/template/tilt_spec/views/errors.haml +3 -0
- data/spec/template/tilt_spec/views/mixed_templates/broken_erb_concat_erb.erb +4 -0
- data/spec/template/tilt_spec/views/mixed_templates/broken_erb_concat_haml.haml +1 -0
- data/spec/template/tilt_spec/views/mixed_templates/broken_haml_concat_erb.erb +1 -0
- data/spec/template/tilt_spec/views/mixed_templates/broken_haml_concat_haml.haml +2 -0
- data/spec/template/tilt_spec/views/nested_capture_and_concat.haml +3 -0
- data/spec/template/tilt_spec/views/ugly.haml +3 -0
- data/spec/template/tilt_spec/views/yield.erb +1 -0
- data/spec/template/tilt_spec.rb +98 -0
- metadata +531 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= some_controller_method %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= wiget %>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require "controller/spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "AbstractController" do
|
|
4
|
+
with_environment
|
|
5
|
+
with_abstract_controller_spec
|
|
6
|
+
with_view_path "#{spec_dir}/views"
|
|
7
|
+
|
|
8
|
+
before :all do
|
|
9
|
+
AbstractController = Rad::AbstractController
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
after :all do
|
|
13
|
+
remove_constants %w(
|
|
14
|
+
SomeHelperSpec
|
|
15
|
+
HelperSpec
|
|
16
|
+
HelperMethodSpec
|
|
17
|
+
AbstractController
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "helper_method" do
|
|
22
|
+
class ::HelperMethodSpec
|
|
23
|
+
inherit AbstractController
|
|
24
|
+
|
|
25
|
+
def some_controller_method
|
|
26
|
+
"some controller value (rendered in cotext of #{self.class})"
|
|
27
|
+
end
|
|
28
|
+
helper_method :some_controller_method
|
|
29
|
+
|
|
30
|
+
def action; end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
ccall(HelperMethodSpec, :action).should == "some controller value (rendered in cotext of HelperMethodSpec)"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "helper" do
|
|
37
|
+
module ::SomeHelperSpec
|
|
38
|
+
def wiget
|
|
39
|
+
"some wighet (rendered in context of #{self.class.name})"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class ::HelperSpec
|
|
44
|
+
inherit AbstractController
|
|
45
|
+
|
|
46
|
+
helper SomeHelperSpec
|
|
47
|
+
|
|
48
|
+
def action; end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
ccall(HelperSpec, :action).should == "some wighet (rendered in context of HelperSpec::HelperSpecControllerContext)"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
content
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
custom content
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
another action (action_name: <%= action_name %>)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
action
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
partial content
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
html format
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
js format
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
content
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
content
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
content
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Admin layout, <%= yield %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Layout html, <%= yield %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Layout js, <%= yield %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
action
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
another action
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
some template
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
standalone usage, <%= a %>
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
require "controller/spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "Controller render" do
|
|
4
|
+
with_environment
|
|
5
|
+
with_abstract_controller_spec
|
|
6
|
+
with_view_path "#{spec_dir}/views"
|
|
7
|
+
|
|
8
|
+
before :all do
|
|
9
|
+
AbstractController = Rad::AbstractController
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
after :all do
|
|
13
|
+
remove_constants %w(
|
|
14
|
+
LayoutFiltersSpec
|
|
15
|
+
LayoutSpec
|
|
16
|
+
AnotherLayout
|
|
17
|
+
ExplicitRenderSpec
|
|
18
|
+
RenderInsideOfControllerSpec
|
|
19
|
+
ForbidPartialAsActionSpec
|
|
20
|
+
FormatSpec
|
|
21
|
+
AlreadyRenderedSpec
|
|
22
|
+
SpecialFormatSpec
|
|
23
|
+
AnotherActionSpec
|
|
24
|
+
InlineRenderSpec
|
|
25
|
+
AbstractController
|
|
26
|
+
InlineWithLayoutSpec
|
|
27
|
+
MultipleActions
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe 'layout' do
|
|
32
|
+
it "should use :except and :only in layout" do
|
|
33
|
+
class ::LayoutFiltersSpec
|
|
34
|
+
inherit AbstractController
|
|
35
|
+
layout '/layouts/app', only: :action_with_layout
|
|
36
|
+
|
|
37
|
+
def action_with_layout; end
|
|
38
|
+
def action_without_layout; end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
ccall(LayoutFiltersSpec, :action_with_layout, format: 'html').should == "Layout html, content"
|
|
42
|
+
ccall(LayoutFiltersSpec, :action_without_layout).should == "content"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should apply formats to layout" do
|
|
46
|
+
class LayoutSpec
|
|
47
|
+
inherit AbstractController
|
|
48
|
+
layout '/layouts/app'
|
|
49
|
+
|
|
50
|
+
def action; end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
ccall(LayoutSpec, :action, format: 'html').should == "Layout html, content"
|
|
54
|
+
ccall(LayoutSpec, :action, format: 'js').should == "Layout js, content"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should take layout: false or layout: '/another_layout'" do
|
|
58
|
+
class AnotherLayout
|
|
59
|
+
inherit AbstractController
|
|
60
|
+
layout '/layout/app'
|
|
61
|
+
|
|
62
|
+
def action; end
|
|
63
|
+
|
|
64
|
+
def without_layout
|
|
65
|
+
render action: :action, layout: false
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def another_layout
|
|
69
|
+
render action: :action, layout: '/layouts/admin'
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
ccall(AnotherLayout, :without_layout).should == "action"
|
|
74
|
+
ccall(AnotherLayout, :another_layout).should == "Admin layout, action"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
it "should take into account :layout when rendering template" do
|
|
79
|
+
class ::ExplicitRenderSpec
|
|
80
|
+
inherit AbstractController
|
|
81
|
+
layout '/layouts/app'
|
|
82
|
+
|
|
83
|
+
def with_layout
|
|
84
|
+
render '/some_template'
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def without_layout
|
|
88
|
+
render '/some_template', layout: false
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
ccall(ExplicitRenderSpec, :with_layout, format: 'html').should == "Layout html, some template"
|
|
93
|
+
ccall(ExplicitRenderSpec, :without_layout, format: 'html').should == "some template"
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should render template inside of controller" do
|
|
98
|
+
class ::RenderInsideOfControllerSpec
|
|
99
|
+
inherit AbstractController
|
|
100
|
+
|
|
101
|
+
def some_action
|
|
102
|
+
render '/some_template'
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
ccall(RenderInsideOfControllerSpec, 'some_action').should == "some template"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "should not allow to render partials as actions" do
|
|
110
|
+
class ::ForbidPartialAsActionSpec
|
|
111
|
+
inherit AbstractController
|
|
112
|
+
def action; end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
lambda{ccall ForbidPartialAsActionSpec, :action}.should raise_error(/No template/)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "should render view with right format" do
|
|
119
|
+
class FormatSpec
|
|
120
|
+
inherit AbstractController
|
|
121
|
+
def action; end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
ccall(FormatSpec, :action, format: 'html').should == "html format"
|
|
125
|
+
ccall(FormatSpec, :action, format: 'js').should == "js format"
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "should be able to use Template.render for different purposes (mail for example)" do
|
|
129
|
+
Rad::Template.render("/standalone", locals: {a: 'a'}).should == 'standalone usage, a'
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "should not rener if already rendered in controller" do
|
|
133
|
+
class ::AlreadyRenderedSpec
|
|
134
|
+
inherit AbstractController
|
|
135
|
+
|
|
136
|
+
def action
|
|
137
|
+
render '/AlreadyRenderedSpec/custom_template'
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
ccall(AlreadyRenderedSpec, :action).should == 'custom content'
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "should handle serialization obj ('xml', 'json')" do
|
|
145
|
+
class ::SpecialFormatSpec
|
|
146
|
+
inherit AbstractController
|
|
147
|
+
|
|
148
|
+
def json_action
|
|
149
|
+
render json: {a: "b"}
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def xml_action
|
|
153
|
+
render xml: {a: "b"}
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
ccall(SpecialFormatSpec, :json_action, format: 'json').should == %({"a":"b"})
|
|
158
|
+
ccall(SpecialFormatSpec, :xml_action, format: 'xml').should =~ /<a>b<\/a>/
|
|
159
|
+
-> {
|
|
160
|
+
ccall(SpecialFormatSpec, :json_action, format: 'xml')
|
|
161
|
+
}.should raise_error(/responing with 'json' to the 'xml'/)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "should render another action via action: :action_name" do
|
|
165
|
+
class ::AnotherActionSpec
|
|
166
|
+
inherit AbstractController
|
|
167
|
+
|
|
168
|
+
def another_action; end
|
|
169
|
+
|
|
170
|
+
def action
|
|
171
|
+
render action: :another_action
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
ccall(AnotherActionSpec, :action).should == "another action (action_name: another_action)"
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "should take :inline option" do
|
|
179
|
+
class ::InlineRenderSpec
|
|
180
|
+
inherit AbstractController
|
|
181
|
+
|
|
182
|
+
def action
|
|
183
|
+
render inline: "content"
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
ccall(InlineRenderSpec, :action).should == "content"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it ":inline option should render without layout" do
|
|
191
|
+
class ::InlineWithLayoutSpec
|
|
192
|
+
inherit AbstractController
|
|
193
|
+
|
|
194
|
+
layout '/layouts/app'
|
|
195
|
+
|
|
196
|
+
def action
|
|
197
|
+
render inline: "content"
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
ccall(InlineWithLayoutSpec, :action).should == "content"
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it "should render correct action inside of special 'actions.xxx' template file" do
|
|
205
|
+
class ::MultipleActions
|
|
206
|
+
inherit AbstractController
|
|
207
|
+
|
|
208
|
+
def increase; end
|
|
209
|
+
def decrease; end
|
|
210
|
+
def action_without_template; end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
ccall(MultipleActions, :increase).should == "plus\n"
|
|
214
|
+
ccall(MultipleActions, :decrease).should == "minus\n"
|
|
215
|
+
ccall(MultipleActions, :action_without_template).should == ""
|
|
216
|
+
end
|
|
217
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<% raise 'error in template' %>
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require "controller/spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "Error handling" do
|
|
4
|
+
with_environment
|
|
5
|
+
with_view_path "#{spec_dir}/views"
|
|
6
|
+
|
|
7
|
+
before :all do
|
|
8
|
+
AbstractController = Rad::AbstractController
|
|
9
|
+
|
|
10
|
+
rad.before :environment do
|
|
11
|
+
rad.config.test_error_template = rad.config.development_error_template!
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
rad.after :environment do
|
|
15
|
+
rad.conveyors.web do |web|
|
|
16
|
+
web.use Rad::Processors::ControllerErrorHandling
|
|
17
|
+
web.use Rad::Processors::ControllerCaller
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
after :all do
|
|
23
|
+
remove_constants %w(
|
|
24
|
+
DisplayErrorWithFormat
|
|
25
|
+
DiferrentErrorHandlingSpec
|
|
26
|
+
AbstractController
|
|
27
|
+
ErrorInRedirectSpec
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should correctly display error messages in :development (with correct format)" do
|
|
32
|
+
class ::DisplayErrorWithFormat
|
|
33
|
+
inherit AbstractController
|
|
34
|
+
|
|
35
|
+
def method
|
|
36
|
+
raise params.error
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
config.environment = :development
|
|
41
|
+
silence_logger!
|
|
42
|
+
|
|
43
|
+
error = StandardError.new('some error')
|
|
44
|
+
|
|
45
|
+
ccall(
|
|
46
|
+
DisplayErrorWithFormat, :method,
|
|
47
|
+
{error: error, format: 'html'}
|
|
48
|
+
).should =~ /html.+some error/m
|
|
49
|
+
|
|
50
|
+
ccall(
|
|
51
|
+
DisplayErrorWithFormat, :method,
|
|
52
|
+
{error: error, format: 'js'}
|
|
53
|
+
).should =~ /some error/
|
|
54
|
+
|
|
55
|
+
ccall(
|
|
56
|
+
DisplayErrorWithFormat, :method,
|
|
57
|
+
{error: error, format: :non_existing_mime}
|
|
58
|
+
).should =~ /some error/
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should catch errors with redirect (from error)" do
|
|
62
|
+
# if response.headers['Location'] has been set before redirect, it'll do redirect
|
|
63
|
+
# after error will be catched and no error message will be displayed
|
|
64
|
+
|
|
65
|
+
class ::ErrorInRedirectSpec
|
|
66
|
+
inherit AbstractController
|
|
67
|
+
|
|
68
|
+
def a
|
|
69
|
+
response.headers['Location'] = '/'
|
|
70
|
+
raise 'some error'
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
config.environment = :development
|
|
75
|
+
silence_logger!
|
|
76
|
+
|
|
77
|
+
ccall(ErrorInRedirectSpec, :a, format: 'html')
|
|
78
|
+
response.headers['Location'].should be_nil
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "should be different in :test, :development and :production" do
|
|
82
|
+
before :all do
|
|
83
|
+
class ::DiferrentErrorHandlingSpec
|
|
84
|
+
inherit AbstractController
|
|
85
|
+
|
|
86
|
+
def a; end
|
|
87
|
+
def b
|
|
88
|
+
raise 'some error'
|
|
89
|
+
end
|
|
90
|
+
def c; end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "in :production errors shouldn't be shown to user"
|
|
95
|
+
|
|
96
|
+
it "in development errors should be catched" do
|
|
97
|
+
config.environment = :development
|
|
98
|
+
silence_logger!
|
|
99
|
+
|
|
100
|
+
# with view
|
|
101
|
+
ccall(DiferrentErrorHandlingSpec, :a).should == 'a'
|
|
102
|
+
%w(html js).each do |format|
|
|
103
|
+
ccall(DiferrentErrorHandlingSpec, :b, format: format).should =~ /some error/
|
|
104
|
+
ccall(DiferrentErrorHandlingSpec, :c, format: format).should =~ /error in template/
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "should not catch errors in :test environment" do
|
|
109
|
+
config.environment = :test
|
|
110
|
+
|
|
111
|
+
# with render
|
|
112
|
+
ccall(DiferrentErrorHandlingSpec, :a).should == 'a'
|
|
113
|
+
lambda{ccall(DiferrentErrorHandlingSpec, :b)}.should raise_error(/some error/)
|
|
114
|
+
lambda{ccall(DiferrentErrorHandlingSpec, :c)}.should raise_error(/error in template/)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
require "controller/spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "HttpController" do
|
|
4
|
+
with_environment
|
|
5
|
+
with_http
|
|
6
|
+
|
|
7
|
+
before :all do
|
|
8
|
+
HttpController = Rad::HttpController
|
|
9
|
+
|
|
10
|
+
rad.after :environment do
|
|
11
|
+
rad.conveyors.web do |web|
|
|
12
|
+
web.use Rad::Processors::HttpWriter
|
|
13
|
+
web.use Rad::Processors::ControllerCaller
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
after :all do
|
|
19
|
+
remove_constants %w(
|
|
20
|
+
HttpController
|
|
21
|
+
ContentTypeSpec
|
|
22
|
+
StatusSpec
|
|
23
|
+
StatusShortcutsSpec
|
|
24
|
+
LocationSpec
|
|
25
|
+
RequestMethod
|
|
26
|
+
ForbidGetSpec
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'render' do
|
|
31
|
+
it "should take :content_type option" do
|
|
32
|
+
class ::ContentTypeSpec
|
|
33
|
+
inherit HttpController
|
|
34
|
+
|
|
35
|
+
def action
|
|
36
|
+
render inline: "some content", content_type: Mime.js
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
wcall(ContentTypeSpec, :action)
|
|
41
|
+
response.content_type.should == "application/javascript"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should take :status option" do
|
|
45
|
+
class ::StatusSpec
|
|
46
|
+
inherit HttpController
|
|
47
|
+
|
|
48
|
+
def action
|
|
49
|
+
render inline: "some content", status: 220
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
wcall(StatusSpec, :action)
|
|
54
|
+
response.status.should == 220
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should take shortcuts to status codes" do
|
|
58
|
+
class ::StatusShortcutsSpec
|
|
59
|
+
inherit HttpController
|
|
60
|
+
|
|
61
|
+
def ok
|
|
62
|
+
render :ok
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def failed
|
|
66
|
+
render :failed
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
wcall(StatusShortcutsSpec, :ok)
|
|
71
|
+
response.status.should == 200
|
|
72
|
+
|
|
73
|
+
wcall(StatusShortcutsSpec, :failed)
|
|
74
|
+
response.status.should == 500
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "should take :location option" do
|
|
78
|
+
class ::LocationSpec
|
|
79
|
+
inherit HttpController
|
|
80
|
+
|
|
81
|
+
def action
|
|
82
|
+
render location: "/"
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# mock
|
|
87
|
+
class ::LocationSpec
|
|
88
|
+
def redirect_to location
|
|
89
|
+
self.class.location = location
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
class << self
|
|
93
|
+
attr_accessor :location
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
wcall(LocationSpec, :action, format: 'html')
|
|
98
|
+
LocationSpec.location.should == '/'
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should specify request method" do
|
|
103
|
+
class ::RequestMethod
|
|
104
|
+
inherit HttpController
|
|
105
|
+
def action
|
|
106
|
+
workspace.request.post?.should == true
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
workspace, params = {env: {'REQUEST_METHOD' => 'POST'}}, {}
|
|
111
|
+
wcall(RequestMethod, :action, workspace, params)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should protect methods from GET request" do
|
|
115
|
+
class ::ForbidGetSpec
|
|
116
|
+
inherit HttpController
|
|
117
|
+
allow_get_for :get_action
|
|
118
|
+
|
|
119
|
+
def get_action; end
|
|
120
|
+
def post_action; end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
workspace = {env: {'REQUEST_METHOD' => 'GET'}}
|
|
124
|
+
|
|
125
|
+
wcall(ForbidGetSpec, :get_action, workspace, {})
|
|
126
|
+
lambda{
|
|
127
|
+
wcall(ForbidGetSpec, :post_action, workspace, {})
|
|
128
|
+
}.should raise_error(/not allowed/)
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'rspec_ext'
|
|
2
|
+
|
|
3
|
+
require 'rad/controller'
|
|
4
|
+
require 'rad/controller/http_controller'
|
|
5
|
+
require 'rad/http'
|
|
6
|
+
|
|
7
|
+
require 'rad/spec'
|
|
8
|
+
|
|
9
|
+
rspec do
|
|
10
|
+
def self.with_abstract_controller_spec
|
|
11
|
+
before :all do
|
|
12
|
+
rad.after :environment do
|
|
13
|
+
rad.conveyors.web do |web|
|
|
14
|
+
web.use Rad::Processors::ControllerCaller
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|