rad_core 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- 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,19 @@
|
|
1
|
+
module Rad
|
2
|
+
module ControllerMicelaneousHelper
|
3
|
+
def reload_page
|
4
|
+
params = workspace.params
|
5
|
+
params.format.must_be.in 'html', 'js'
|
6
|
+
|
7
|
+
keep_flash!
|
8
|
+
if params.format == 'js'
|
9
|
+
workspace.response.set!(
|
10
|
+
status: :ok,
|
11
|
+
content_type: Mime[params.format]
|
12
|
+
)
|
13
|
+
throw :halt_render, "window.location.reload();"
|
14
|
+
else
|
15
|
+
redirect_to workspace.request.env["HTTP_REFERER"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Rad
|
2
|
+
module AbstractRoutingHelper
|
3
|
+
protected
|
4
|
+
def special_url key
|
5
|
+
return nil unless (key.is_a?(Symbol) or key.is_a?(String))
|
6
|
+
|
7
|
+
if key == :back
|
8
|
+
workspace.request.env["HTTP_REFERER"] || 'javascript:history.back()'
|
9
|
+
elsif key == '#'
|
10
|
+
'#'
|
11
|
+
elsif key !~ /^[\/0-9_a-z]+$/i
|
12
|
+
key
|
13
|
+
else
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def keep_flash!
|
19
|
+
rad[:flash].keep! if rad.include? :flash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Rad
|
2
|
+
module ControllerRoutingHelper
|
3
|
+
inherit AbstractRoutingHelper
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
|
7
|
+
#
|
8
|
+
# persist_params controller filters
|
9
|
+
#
|
10
|
+
def persist_params *args
|
11
|
+
if args.empty?
|
12
|
+
before :persist_params
|
13
|
+
elsif args.first.is_a? Hash
|
14
|
+
before :persist_params, args.first
|
15
|
+
else
|
16
|
+
before :persist_params, only: args.first
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# redirect_to
|
23
|
+
#
|
24
|
+
def redirect_to *args
|
25
|
+
params, response = workspace.params, workspace.response
|
26
|
+
params.format.must_be.in 'html', 'js'
|
27
|
+
|
28
|
+
if url = special_url(args.first)
|
29
|
+
args.size.must_be <= 1
|
30
|
+
else
|
31
|
+
url = url_for(*args)
|
32
|
+
end
|
33
|
+
content_type = Mime[params.format]
|
34
|
+
|
35
|
+
content = if params.format == 'js'
|
36
|
+
response.set!(
|
37
|
+
status: :ok,
|
38
|
+
content_type: content_type
|
39
|
+
)
|
40
|
+
|
41
|
+
"window.location = '#{url}';"
|
42
|
+
else
|
43
|
+
response.set!(
|
44
|
+
status: :redirect,
|
45
|
+
content_type: content_type
|
46
|
+
)
|
47
|
+
response.headers['Location'] = url
|
48
|
+
|
49
|
+
%(<html><body>You are being <a href="#{url.html_escape if url}">redirected</a>.</body></html>)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Flash need to know if we using redirect
|
53
|
+
keep_flash!
|
54
|
+
|
55
|
+
throw :halt_render, content
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module Rad
|
2
|
+
module ViewRoutingHelper
|
3
|
+
inherit AbstractRoutingHelper
|
4
|
+
|
5
|
+
#
|
6
|
+
# links
|
7
|
+
#
|
8
|
+
# def link_to *args, &block
|
9
|
+
# # parse args
|
10
|
+
# content = if block
|
11
|
+
# capture(&block)
|
12
|
+
# else
|
13
|
+
# args.shift
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# special = nil
|
17
|
+
# html_options = if args.last.is_a?(Hash)
|
18
|
+
# if args[-2].is_a?(Hash)
|
19
|
+
# args.pop
|
20
|
+
# else
|
21
|
+
# {}
|
22
|
+
# end
|
23
|
+
# else
|
24
|
+
# args << {}
|
25
|
+
# {}
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# # build url
|
29
|
+
# url = special_url(*args) || url_for(*args)
|
30
|
+
#
|
31
|
+
# # add javascript
|
32
|
+
# add_js_link_options! url, html_options
|
33
|
+
#
|
34
|
+
# tag :a, content, html_options.merge(href: url)
|
35
|
+
# end
|
36
|
+
|
37
|
+
def link_to *args, &block
|
38
|
+
# content
|
39
|
+
content = if block
|
40
|
+
capture(&block)
|
41
|
+
else
|
42
|
+
args.shift
|
43
|
+
end
|
44
|
+
|
45
|
+
# url, html_options
|
46
|
+
if args.first.is_a? String
|
47
|
+
args.size.must_be.in 1..2
|
48
|
+
url, html_options = args
|
49
|
+
html_options ||= {}
|
50
|
+
else
|
51
|
+
if url = special_url(args.first)
|
52
|
+
args.size.must_be <= 2
|
53
|
+
html_options = args[1] || {}
|
54
|
+
else
|
55
|
+
html_options = if args[-1].is_a?(Hash) and args[-1].is_a?(Hash)
|
56
|
+
args.pop
|
57
|
+
else
|
58
|
+
{}
|
59
|
+
end
|
60
|
+
|
61
|
+
args << {} unless args[-1].is_a?(Hash)
|
62
|
+
url = url_for(*args)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# add javascript
|
67
|
+
add_js_link_options! url, html_options
|
68
|
+
|
69
|
+
tag :a, content, html_options.merge(href: url)
|
70
|
+
end
|
71
|
+
|
72
|
+
protected
|
73
|
+
# TODO3 refactor to use data-remote, data-method, data-confirm
|
74
|
+
def add_js_link_options! url, html_options
|
75
|
+
confirm, remote, method = html_options.delete(:confirm), html_options.delete(:remote),
|
76
|
+
html_options.delete(:method)
|
77
|
+
|
78
|
+
remote ||= config.remote_link_formats!.include? url.marks.format
|
79
|
+
|
80
|
+
onclick = if remote
|
81
|
+
method ||= :get
|
82
|
+
%{$(this).link_to({method: '#{method}', ajax: true}); return false;}
|
83
|
+
elsif method
|
84
|
+
%{$(this).link_to({method: '#{method}'}); return false;}
|
85
|
+
else
|
86
|
+
nil
|
87
|
+
end
|
88
|
+
|
89
|
+
# if onclick and ActionController::Base.defer_static_scripts?
|
90
|
+
# html_options['class'] ||= ""
|
91
|
+
# end
|
92
|
+
|
93
|
+
if confirm
|
94
|
+
onclick = if onclick
|
95
|
+
%(if(confirm('#{confirm.js_escape}')){#{onclick}}; return false;)
|
96
|
+
else
|
97
|
+
%(return confirm('#{confirm.js_escape}');)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
html_options[:onclick] = onclick if onclick
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'rad/html'
|
2
|
+
require 'rad/router'
|
3
|
+
|
4
|
+
%w(
|
5
|
+
controller_micelaneous_helper
|
6
|
+
|
7
|
+
router/abstract_routing_helper
|
8
|
+
router/view_routing_helper
|
9
|
+
router/controller_routing_helper
|
10
|
+
).each{|f| require "rad/integration/#{f}"}
|
11
|
+
|
12
|
+
|
13
|
+
module Rad
|
14
|
+
# View helpers
|
15
|
+
[
|
16
|
+
HtmlHelper,
|
17
|
+
CoreRoutingHelper, ViewRoutingHelper
|
18
|
+
].each do |helper|
|
19
|
+
ControllerContext.inherit helper
|
20
|
+
end
|
21
|
+
|
22
|
+
# Controller helpers
|
23
|
+
[
|
24
|
+
FlashHelper,
|
25
|
+
CoreRoutingHelper, ControllerRoutingHelper,
|
26
|
+
ControllerMicelaneousHelper
|
27
|
+
].each do |helper|
|
28
|
+
AbstractController.inherit helper
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Rad
|
2
|
+
class Letter
|
3
|
+
inject mailer: :mailer
|
4
|
+
|
5
|
+
attr_accessor :from, :to, :subject, :body
|
6
|
+
|
7
|
+
def initialize properties
|
8
|
+
properties.each do |k, v|
|
9
|
+
send "#{k}=", v
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate!
|
14
|
+
from || raise("letter :from not specified!")
|
15
|
+
to || raise("letter :to not specified!")
|
16
|
+
subject || raise("letter :subject not specified!")
|
17
|
+
body || raise("letter :body not specified!")
|
18
|
+
end
|
19
|
+
|
20
|
+
def deliver
|
21
|
+
validate!
|
22
|
+
mailer.deliver self
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_hash
|
26
|
+
{from: from, to: to, subject: subject, body: body}
|
27
|
+
end
|
28
|
+
alias_method :to_h, :to_hash
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Rad
|
2
|
+
module MailController
|
3
|
+
inherit AbstractController
|
4
|
+
|
5
|
+
attr_accessor :from, :to, :subject, :body
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
protected
|
9
|
+
inject conveyors: :conveyors
|
10
|
+
|
11
|
+
def method_missing m, *args, &block
|
12
|
+
mail_controller = self.new
|
13
|
+
if mail_controller.respond_to? m
|
14
|
+
build_letter mail_controller, m, *args
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def build_letter mail_controller, m, *args
|
21
|
+
conveyors.mail.must_be.present
|
22
|
+
workspace = conveyors.mail.call(
|
23
|
+
controller: mail_controller,
|
24
|
+
method_name: m,
|
25
|
+
arguments: args
|
26
|
+
)
|
27
|
+
workspace.letter.must_be.present
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Rad
|
2
|
+
class Mailer
|
3
|
+
inject logger: :logger, config: :config
|
4
|
+
|
5
|
+
def deliver letter
|
6
|
+
mail = Mail.new letter.to_h
|
7
|
+
if config.development?
|
8
|
+
logger.info " Delivering mail #{letter.to_h.inspect}"
|
9
|
+
else
|
10
|
+
logger.info " Delivering mail '#{letter.subject}'"
|
11
|
+
end
|
12
|
+
mail.deliver!
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
rad.after :environment do
|
18
|
+
if rad.config.development?
|
19
|
+
Mail.defaults do
|
20
|
+
delivery_method :test
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Rad
|
2
|
+
module Processors
|
3
|
+
class LetterBuilder < Processor
|
4
|
+
def call
|
5
|
+
# prepare
|
6
|
+
controller = workspace.controller.must_be.present
|
7
|
+
raise "The controller #{controller} must be a Rad::MailController!" unless controller.is_a? Rad::MailController
|
8
|
+
action = workspace.action = workspace.method_name
|
9
|
+
|
10
|
+
# call
|
11
|
+
content = catch :halt_render do
|
12
|
+
controller.run_callbacks :action, method: action do
|
13
|
+
# call controller
|
14
|
+
controller.send action, *workspace.arguments
|
15
|
+
# render view
|
16
|
+
controller.render action: action
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
controller.body = content unless content.blank?
|
21
|
+
|
22
|
+
# letter
|
23
|
+
workspace.letter = ::Rad::Letter.new(
|
24
|
+
from: controller.from,
|
25
|
+
to: controller.to,
|
26
|
+
subject: controller.subject,
|
27
|
+
body: controller.body
|
28
|
+
)
|
29
|
+
workspace.letter.validate!
|
30
|
+
|
31
|
+
next_processor.call if next_processor
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/rad/mail.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'mail'
|
2
|
+
|
3
|
+
require 'rad/controller'
|
4
|
+
require 'rad/template'
|
5
|
+
|
6
|
+
%w(
|
7
|
+
mailer
|
8
|
+
letter
|
9
|
+
mail_controller
|
10
|
+
processors/letter_builder
|
11
|
+
).each{|f| require "rad/mail/#{f}"}
|
12
|
+
|
13
|
+
rad.register :mailer, depends_on: :environment do
|
14
|
+
Rad::Mailer.new
|
15
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rad/profiles/web_require'
|
2
|
+
|
3
|
+
#
|
4
|
+
# Routes
|
5
|
+
#
|
6
|
+
rad.after :environment do
|
7
|
+
rad.register :router, depends_on: :environment do
|
8
|
+
Rad::Router.new(:class, [
|
9
|
+
[:alias_router, Rad::AliasRouter.new],
|
10
|
+
[:restful_router, Rad::RestfulRouter.new],
|
11
|
+
[:simple_router, Rad::SimpleRouter.new]
|
12
|
+
])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
#
|
18
|
+
# Conveyors
|
19
|
+
#
|
20
|
+
module Rad::Processors
|
21
|
+
rad.after :environment do
|
22
|
+
rad.conveyors.web do |web|
|
23
|
+
# conveyor
|
24
|
+
web.use ConveyorLogger
|
25
|
+
|
26
|
+
# http
|
27
|
+
web.use HttpWriter
|
28
|
+
web.use PrepareParams
|
29
|
+
web.use EvaluateFormat
|
30
|
+
web.use HTTPLogger
|
31
|
+
|
32
|
+
# html
|
33
|
+
# web.use ScopedParams
|
34
|
+
web.use PrepareFlash
|
35
|
+
|
36
|
+
# controller
|
37
|
+
web.use ControllerErrorHandling
|
38
|
+
|
39
|
+
# router
|
40
|
+
web.use Router, :class, :method_name
|
41
|
+
|
42
|
+
# controller
|
43
|
+
web.use ControllerLogger
|
44
|
+
web.use ControllerCaller
|
45
|
+
|
46
|
+
web.build!
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
#
|
53
|
+
# Rack
|
54
|
+
#
|
55
|
+
Rad.initialize_rack do |builder|
|
56
|
+
config = rad.config
|
57
|
+
|
58
|
+
# CommonLogger, ShowExceptions, Lint
|
59
|
+
builder.use Rack::Lint if config.development?
|
60
|
+
builder.use Rad::StaticFiles, config.public_dir! if config.static? and config.public_dir? and config.development?
|
61
|
+
|
62
|
+
# use Rack::Session::Cookie, key: 'rack.session', domain: 'foo.com', path: '/', expire_after: 2592000, secret: 'change_me'
|
63
|
+
builder.use Rack::Session::Cookie, config.session.to_hash if config.session?
|
64
|
+
|
65
|
+
# builder.use Rack::CommonLogger
|
66
|
+
builder.use Rack::MethodOverride
|
67
|
+
# builder.use ShowExceptions if config.show_exceptions?
|
68
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Rad
|
2
|
+
module Processors
|
3
|
+
class RemoteCaller < Processor
|
4
|
+
# TODO2 :remote isn't registered with rad[
|
5
|
+
inject remote: :remote
|
6
|
+
|
7
|
+
def initialize next_processor, result_variable = 'content'
|
8
|
+
super(next_processor)
|
9
|
+
@result_variable = result_variable
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
return next_processor.call unless workspace.class?
|
14
|
+
|
15
|
+
# prepare
|
16
|
+
klass = workspace.class
|
17
|
+
raise "The remote class #{klass} must be a Rad::Remote!" unless klass.is? Rad::Remote
|
18
|
+
workspace.remote_object = klass.new
|
19
|
+
method = workspace.method_name
|
20
|
+
|
21
|
+
# call
|
22
|
+
begin
|
23
|
+
result = workspace.remote_object.run_callbacks :action, method: method do
|
24
|
+
workspace.remote_object.send method
|
25
|
+
end
|
26
|
+
|
27
|
+
ensure_correct_result! result
|
28
|
+
workspace.remote_result = result
|
29
|
+
|
30
|
+
next_processor.call
|
31
|
+
|
32
|
+
# write JSON as a result if format is JSON and no one else filled it
|
33
|
+
if workspace[@result_variable].blank?
|
34
|
+
workspace[@result_variable] = workspace.remote_result.to_json
|
35
|
+
end
|
36
|
+
rescue StandardError => e
|
37
|
+
raise e if !workspace.params.format == 'json' or config.test?
|
38
|
+
|
39
|
+
workspace[@result_variable] = {error: e.message}.to_json
|
40
|
+
|
41
|
+
logger.error e
|
42
|
+
logger.info "\n"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
def ensure_correct_result! result
|
48
|
+
unless result.rson?
|
49
|
+
raise "You can't use object of type '#{result.class}' as Remote's return value!"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Rad
|
2
|
+
module Processors
|
3
|
+
class RemoteLogger < Processor
|
4
|
+
def call
|
5
|
+
next_processor.call
|
6
|
+
|
7
|
+
if (klass = workspace.class) and (method = workspace.method_name)
|
8
|
+
logger.info " Processing #{klass.name}.#{method} with #{workspace.params.inspect}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/rad/remote.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Rad
|
2
|
+
module Routes
|
3
|
+
class Configurator
|
4
|
+
inject router: :router
|
5
|
+
|
6
|
+
def initialize router
|
7
|
+
@router = router
|
8
|
+
end
|
9
|
+
|
10
|
+
def persistent_params *args
|
11
|
+
args.each{|v| router.persistent_params << v}
|
12
|
+
end
|
13
|
+
|
14
|
+
delegate :skip, to: :router
|
15
|
+
|
16
|
+
class << self
|
17
|
+
inject router: :router
|
18
|
+
|
19
|
+
def routes &block
|
20
|
+
block.call Configurator.new(router)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Rad
|
2
|
+
module CoreRoutingHelper
|
3
|
+
inject router: :router
|
4
|
+
|
5
|
+
delegate :url_for, :url_for_path, :persist_params, :persist_params?, :dont_persist_params, to: :router
|
6
|
+
|
7
|
+
def default_path options = {}
|
8
|
+
url_for_path config.default_path!, options.merge(url_root: false)
|
9
|
+
end
|
10
|
+
|
11
|
+
def return_to_path options = {}
|
12
|
+
dont_persist_params do
|
13
|
+
path = params[:_return_to] || workspace.request.session['return_to'] || config.default_path!
|
14
|
+
url_for_path path, options.merge(url_root: false)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse_routing_arguments *args
|
19
|
+
params = args.extract_options!
|
20
|
+
raise "invalid usage!" unless args.size <= 1
|
21
|
+
if args.size == 1
|
22
|
+
raise "duplicate :id pameter!" if params.include?(:id) or params.include?('id')
|
23
|
+
params[:id] = args.first.to_param
|
24
|
+
end
|
25
|
+
params
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def method_missing m, *args, &block
|
30
|
+
m = m.to_s
|
31
|
+
if m =~ /_path$/
|
32
|
+
params = parse_routing_arguments(*args)
|
33
|
+
klass, method = router.encode_method m
|
34
|
+
|
35
|
+
url_for klass, method, params
|
36
|
+
else
|
37
|
+
super m.to_sym, *args, &block
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Rad
|
2
|
+
module Processors
|
3
|
+
class Router < Processor
|
4
|
+
inject router: :router
|
5
|
+
|
6
|
+
def initialize next_processor, class_variable = :class, method_variable = :method
|
7
|
+
super(next_processor)
|
8
|
+
@class_variable, @method_variable = class_variable, method_variable
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
skip = catch :skip do
|
13
|
+
if workspace[@class_variable].blank? or workspace[@method_variable].blank?
|
14
|
+
klass, method, params = router.decode workspace.path, workspace.params
|
15
|
+
workspace[@class_variable], workspace[@method_variable], workspace.params = klass, method, params
|
16
|
+
end
|
17
|
+
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
if skip
|
22
|
+
logger.info " Skipping '#{workspace.path}'"
|
23
|
+
else
|
24
|
+
next_processor.call
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|