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,168 @@
|
|
|
1
|
+
module Rad
|
|
2
|
+
module Callbacks
|
|
3
|
+
class AbstractCallback
|
|
4
|
+
attr_accessor :executor, :terminator
|
|
5
|
+
attr_reader :conditions
|
|
6
|
+
def conditions= conditions
|
|
7
|
+
@conditions = {}
|
|
8
|
+
conditions.each do |k, v|
|
|
9
|
+
@conditions[k.to_sym] = if v.is_a? Symbol
|
|
10
|
+
v.to_s
|
|
11
|
+
elsif v.is_a? Array
|
|
12
|
+
v.collect{|e| e.to_s}
|
|
13
|
+
else
|
|
14
|
+
v
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
@conditions
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def terminate? target, result
|
|
21
|
+
unless terminator.nil?
|
|
22
|
+
if terminator.is_a? Proc
|
|
23
|
+
terminator.call target, result
|
|
24
|
+
else
|
|
25
|
+
result == terminator
|
|
26
|
+
end
|
|
27
|
+
else
|
|
28
|
+
false
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def run? target, inf
|
|
33
|
+
if cond = conditions[:if]
|
|
34
|
+
evaluate_if(cond, target, inf)
|
|
35
|
+
elsif cond = conditions[:unless]
|
|
36
|
+
!evaluate_if(cond, target, inf)
|
|
37
|
+
elsif cond = conditions[:only]
|
|
38
|
+
evaluate_only(cond, inf)
|
|
39
|
+
elsif cond = conditions[:except]
|
|
40
|
+
!evaluate_only(cond, inf)
|
|
41
|
+
else
|
|
42
|
+
true
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def add_to_chain target, inf, &the_next
|
|
47
|
+
if run? target, inf
|
|
48
|
+
build_block target, &the_next
|
|
49
|
+
else
|
|
50
|
+
the_next
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
alias_method :deep_clone, :clone
|
|
55
|
+
|
|
56
|
+
protected
|
|
57
|
+
def evaluate_if cond, target, inf
|
|
58
|
+
if cond.is_a? String
|
|
59
|
+
target.send cond
|
|
60
|
+
elsif cond.is_a? Proc
|
|
61
|
+
cond.call target, inf
|
|
62
|
+
else
|
|
63
|
+
must_be.never_called
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def evaluate_only cond, inf
|
|
68
|
+
method = inf[:method].to_s
|
|
69
|
+
if cond.is_a? String
|
|
70
|
+
cond == method
|
|
71
|
+
elsif cond.is_a? Array
|
|
72
|
+
cond.include? method
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
class BeforeCallback < AbstractCallback
|
|
78
|
+
def build_block target, &the_next
|
|
79
|
+
lambda do
|
|
80
|
+
result = if executor.string_or_symbol?
|
|
81
|
+
target.send executor
|
|
82
|
+
elsif executor.is_a? Proc
|
|
83
|
+
executor.call target
|
|
84
|
+
else
|
|
85
|
+
must_be.never_called
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
the_next.call unless terminate? target, result
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class AroundCallback < AbstractCallback
|
|
94
|
+
def build_block target, &the_next
|
|
95
|
+
lambda do
|
|
96
|
+
if executor.string_or_symbol?
|
|
97
|
+
target.send executor, &the_next
|
|
98
|
+
elsif executor.is_a? Proc
|
|
99
|
+
executor.call target, the_next
|
|
100
|
+
else
|
|
101
|
+
must_be.never_called
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
class AfterCallback < AbstractCallback
|
|
108
|
+
def build_block target, &the_next
|
|
109
|
+
lambda do
|
|
110
|
+
result = if executor.string_or_symbol?
|
|
111
|
+
target.send executor
|
|
112
|
+
elsif executor.is_a? Proc
|
|
113
|
+
executor.call target
|
|
114
|
+
else
|
|
115
|
+
must_be.never_called
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
the_next.call unless terminate? target, result
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def run_callbacks callback_name, additional_information = {}, &block
|
|
124
|
+
callback_name = callback_name.to_s
|
|
125
|
+
block.must_be.defined
|
|
126
|
+
|
|
127
|
+
callbacks = self.class.callbacks[callback_name]
|
|
128
|
+
chain_head = block
|
|
129
|
+
if callbacks and !callbacks.empty?
|
|
130
|
+
callbacks.reverse_each do |callback|
|
|
131
|
+
block = callback.add_to_chain self, additional_information, &chain_head
|
|
132
|
+
chain_head = block if block
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
chain_head.call
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
module ClassMethods
|
|
139
|
+
inheritable_accessor :callbacks, {}
|
|
140
|
+
|
|
141
|
+
def set_callback callback_name, type, *executor_or_options, &block
|
|
142
|
+
# parsing arguments
|
|
143
|
+
type, callback_name = type.to_s, callback_name.to_s
|
|
144
|
+
opt = executor_or_options.extract_options!
|
|
145
|
+
"You can't provide both method name and block for filter!" if block and !executor_or_options.empty?
|
|
146
|
+
executor = block || executor_or_options.first
|
|
147
|
+
|
|
148
|
+
type.must_be.in %w{before around after}
|
|
149
|
+
executor.must_be.defined
|
|
150
|
+
|
|
151
|
+
# creating callback
|
|
152
|
+
callback = case type
|
|
153
|
+
when 'before' then BeforeCallback.new
|
|
154
|
+
when 'around' then AroundCallback.new
|
|
155
|
+
when 'after' then AfterCallback.new
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
callback.executor = executor
|
|
159
|
+
callback.terminator = opt.delete :terminator
|
|
160
|
+
callback.conditions = opt
|
|
161
|
+
|
|
162
|
+
callbacks[callback_name] ||= []
|
|
163
|
+
callbacks[callback_name] << callback
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class Exception
|
|
2
|
+
class << self
|
|
3
|
+
attr_accessor :common_filters
|
|
4
|
+
end
|
|
5
|
+
end
|
|
6
|
+
Exception.common_filters = [
|
|
7
|
+
"/gems/haml",
|
|
8
|
+
"/gems/tilt",
|
|
9
|
+
"/gems/facets",
|
|
10
|
+
"/gems/rack",
|
|
11
|
+
"/gems/mongrel",
|
|
12
|
+
"/gems/rspec",
|
|
13
|
+
"/timeout.rb",
|
|
14
|
+
"/bin/spec",
|
|
15
|
+
|
|
16
|
+
"/rad/support/callbacks",
|
|
17
|
+
"/rad/template/template",
|
|
18
|
+
"/rad/template/support/tilt",
|
|
19
|
+
|
|
20
|
+
"/abstract_inteface/lib/abstract_interface/view_builder",
|
|
21
|
+
"/common_interface/lib/common_interface/view_helper",
|
|
22
|
+
|
|
23
|
+
# "/rad/template",
|
|
24
|
+
# "/rad/support",
|
|
25
|
+
|
|
26
|
+
"/monitor",
|
|
27
|
+
"/synchronize",
|
|
28
|
+
"/class_loader",
|
|
29
|
+
"/micon"
|
|
30
|
+
]
|
|
31
|
+
# Exception.common_filters = []
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Rad
|
|
2
|
+
module Filters
|
|
3
|
+
inherit Callbacks
|
|
4
|
+
|
|
5
|
+
module ClassMethods
|
|
6
|
+
def before *args, &block
|
|
7
|
+
opt = args.extract_options!
|
|
8
|
+
if block
|
|
9
|
+
set_callback :action, :before, opt, &block
|
|
10
|
+
else
|
|
11
|
+
args.each{|executor| set_callback :action, :before, executor, opt}
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def around *args, &block
|
|
16
|
+
opt = args.extract_options!
|
|
17
|
+
if block
|
|
18
|
+
set_callback :action, :around, opt, &block
|
|
19
|
+
else
|
|
20
|
+
args.each{|executor| set_callback :action, :around, executor, opt}
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def after *args, &block
|
|
25
|
+
opt = args.extract_options!
|
|
26
|
+
if block
|
|
27
|
+
set_callback :action, :after, opt, &block
|
|
28
|
+
else
|
|
29
|
+
args.each{|executor| set_callback :action, :after, executor, opt}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# module Rad
|
|
2
|
+
# class Format < String
|
|
3
|
+
# def == other
|
|
4
|
+
# self.to_sym == other
|
|
5
|
+
# end
|
|
6
|
+
#
|
|
7
|
+
# def method_missing m
|
|
8
|
+
# m = m.to_s
|
|
9
|
+
# super unless m[-1..-1] == '?'
|
|
10
|
+
# self == m[0..-2].to_sym
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# def inspect
|
|
14
|
+
# self.to_sym.inspect
|
|
15
|
+
# end
|
|
16
|
+
# end
|
|
17
|
+
# end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Problem: the Hash::slice method in ActiveSupport works a little differently than in Facets.
|
|
3
|
+
# And because Facets is overrides ActiveSupport version this causes problems (for example in to_json method)
|
|
4
|
+
# In ActiveSupport it returns :nil if there's no key in Facets it raises error.
|
|
5
|
+
#
|
|
6
|
+
# Use Case:
|
|
7
|
+
# hash = {:items=>[], "slug"=>"item-z8w", "name"=>"Item", "created_at"=>"2011-01-10T07:04:01Z", "dependent"=>"false", "viewers"=>["manager", "user:user1"], "updated_at"=>"2011-01-10T07:04:01Z", :icon_url=>"null", "text"=>"null", "tags"=>[], "owner_name"=>"user1", "_type"=>"Selector"}
|
|
8
|
+
# args = ["id", "_type", "slug", "name", "text", "tags", "dependent", "owner_name", "viewers", "created_at", "updated_at"]
|
|
9
|
+
# hash.slice *args
|
|
10
|
+
#
|
|
11
|
+
# Solution:
|
|
12
|
+
# Redefining :slice the same way as in ActiveSupport.
|
|
13
|
+
#
|
|
14
|
+
class Hash
|
|
15
|
+
def slice(*keep_keys)
|
|
16
|
+
hash = {}
|
|
17
|
+
keep_keys.each do |key|
|
|
18
|
+
# hash[key] = fetch(key)
|
|
19
|
+
hash[key] = self[key]
|
|
20
|
+
end
|
|
21
|
+
hash
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Mime
|
|
2
|
+
class << self
|
|
3
|
+
def method_missing m, *args
|
|
4
|
+
raise "invalid usage of Mime!" unless args.empty?
|
|
5
|
+
self[m]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def [] type
|
|
9
|
+
type = ".#{type}" unless type =~ /^\./
|
|
10
|
+
Rack::Mime.mime_type(type) || raise("Unknown MIME type: #{type}")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
class Module
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# Dynamically enables cache in :production and disables in another environments.
|
|
5
|
+
# If no environment given uses non-cached version.
|
|
6
|
+
#
|
|
7
|
+
def cache_method_with_params_in_production method
|
|
8
|
+
method_with_cache, method_without_cache = "#{method}_with_cache", "#{method}_without_cache"
|
|
9
|
+
iv = "@#{method}_cache"
|
|
10
|
+
|
|
11
|
+
# raise "Method '#{method}' already defined!" if instance_methods.include?(method)
|
|
12
|
+
if instance_methods.include?(method_with_cache) or instance_methods.include?(method_without_cache)
|
|
13
|
+
warn "can't cache the :#{method} twice!"
|
|
14
|
+
else
|
|
15
|
+
alias_method method_without_cache, method
|
|
16
|
+
|
|
17
|
+
# create cached method
|
|
18
|
+
define_method method_with_cache do |*args|
|
|
19
|
+
unless results = instance_variable_get(iv)
|
|
20
|
+
results = Hash.new(NotDefined)
|
|
21
|
+
instance_variable_set iv, results
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
result = results[args]
|
|
25
|
+
|
|
26
|
+
if result.equal? NotDefined
|
|
27
|
+
result = send method_without_cache, *args
|
|
28
|
+
results[args] = result
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
result
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# listen to environment events
|
|
35
|
+
rad.after :config do |config|
|
|
36
|
+
if config.production?
|
|
37
|
+
alias_method method, method_with_cache
|
|
38
|
+
else
|
|
39
|
+
alias_method method, method_without_cache
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# by default uses non-cached version
|
|
44
|
+
# alias_method method, method_without_cache
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
class Object
|
|
2
|
+
def rson?
|
|
3
|
+
false
|
|
4
|
+
end
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
[
|
|
8
|
+
FalseClass,
|
|
9
|
+
TrueClass,
|
|
10
|
+
Numeric,
|
|
11
|
+
String,
|
|
12
|
+
Symbol,
|
|
13
|
+
NilClass,
|
|
14
|
+
].each do |klass|
|
|
15
|
+
klass.class_eval do
|
|
16
|
+
def to_rson options = {}
|
|
17
|
+
self
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def rson?
|
|
21
|
+
true
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Array.class_eval do
|
|
27
|
+
def to_rson options = {}
|
|
28
|
+
collect{|v| v.to_rson(options)}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def rson?
|
|
32
|
+
all?{|v| v.rson?}
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
[Hash, OpenObject].each do |klass|
|
|
37
|
+
klass.class_eval do
|
|
38
|
+
def to_rson options = {}
|
|
39
|
+
r = self.class.new
|
|
40
|
+
each do |k, v|
|
|
41
|
+
r[k.to_rson(options)] = v.to_rson(options)
|
|
42
|
+
end
|
|
43
|
+
r
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def rson?
|
|
47
|
+
each do |k, v|
|
|
48
|
+
return false unless k.rson? and v.rson?
|
|
49
|
+
end
|
|
50
|
+
true
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
class String
|
|
2
|
+
def json_escape
|
|
3
|
+
ERB::Util.json_escape self
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def html_escape
|
|
7
|
+
# ERB::Util.html_escape self
|
|
8
|
+
Rack::Utils.escape_html self
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
JS_ESCAPE_MAP = {
|
|
12
|
+
'\\' => '\\\\',
|
|
13
|
+
'</' => '<\/',
|
|
14
|
+
"\r\n" => '\n',
|
|
15
|
+
"\n" => '\n',
|
|
16
|
+
"\r" => '\n',
|
|
17
|
+
'"' => '\\"',
|
|
18
|
+
"'" => "\\'"
|
|
19
|
+
}
|
|
20
|
+
def js_escape
|
|
21
|
+
gsub(/(\\|<\/|\r\n|[\n\r"'])/){JS_ESCAPE_MAP[$1]}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# String marks, like :format, :safe
|
|
25
|
+
def marks; @marks ||= OpenObject.new end
|
|
26
|
+
end
|
data/lib/rad/support.rb
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#
|
|
2
|
+
# ruby
|
|
3
|
+
#
|
|
4
|
+
raise 'ruby 1.9.2 or higher required!' unless RUBY_VERSION >= '1.9.2'
|
|
5
|
+
|
|
6
|
+
Encoding.default_external = Encoding::UTF_8
|
|
7
|
+
Encoding.default_internal = Encoding::UTF_8
|
|
8
|
+
warn " default source encoding is not UTF-8, something wroing is going on!" if __ENCODING__ != Encoding::UTF_8
|
|
9
|
+
|
|
10
|
+
# def ensure_utf8! string
|
|
11
|
+
# raise "invalid encoding (#{string})!" unless string.encoding == Encoding::UTF_8
|
|
12
|
+
# end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
# gems
|
|
17
|
+
#
|
|
18
|
+
require 'rad_core/gems'
|
|
19
|
+
|
|
20
|
+
require 'rad/support/active_support'
|
|
21
|
+
|
|
22
|
+
require 'ruby_ext'
|
|
23
|
+
|
|
24
|
+
require 'vfs'
|
|
25
|
+
|
|
26
|
+
require 'ruby_ext/more/open_constructor'
|
|
27
|
+
require 'rad/support/ruby_ext_with_active_support'
|
|
28
|
+
|
|
29
|
+
require 'class_loader'
|
|
30
|
+
|
|
31
|
+
require 'micon'
|
|
32
|
+
require 'rad/support/micon'
|
|
33
|
+
|
|
34
|
+
require 'dictionary'
|
|
35
|
+
|
|
36
|
+
require 'thread'
|
|
37
|
+
require 'time'
|
|
38
|
+
require 'uri'
|
|
39
|
+
require 'json'
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
require 'addressable/uri'
|
|
43
|
+
require 'rad/support/addressable'
|
|
44
|
+
::Uri = Addressable::URI
|
|
45
|
+
|
|
46
|
+
#
|
|
47
|
+
# support
|
|
48
|
+
#
|
|
49
|
+
require 'rad/support/hacks_and_fixes'
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
autoload :Nokogiri, 'nokogiri'
|
|
53
|
+
|
|
54
|
+
[
|
|
55
|
+
'module',
|
|
56
|
+
'buffered_logger',
|
|
57
|
+
'callbacks',
|
|
58
|
+
'filters',
|
|
59
|
+
'mime',
|
|
60
|
+
'string',
|
|
61
|
+
'rson',
|
|
62
|
+
'exception',
|
|
63
|
+
].each{|f| require "rad/support/#{f}"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
module Tilt
|
|
2
|
+
#
|
|
3
|
+
# Include it into your template context class for :output, :capture and :concat support
|
|
4
|
+
#
|
|
5
|
+
module ContextExt
|
|
6
|
+
def output
|
|
7
|
+
_tilt_template.class.output(self)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def capture *args, &block
|
|
11
|
+
_tilt_template.class.capture self, &block
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def concat value
|
|
15
|
+
_tilt_template.class.concat self, value
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Template
|
|
20
|
+
def self.get_output context
|
|
21
|
+
raise "Output variable for #{self.class} not defined!"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.capture context, &block
|
|
25
|
+
raise "capture not implemented for #{self.class}!"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.concat context, value
|
|
29
|
+
raise "concat not implemented for #{self.class}!"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class ERBTemplate
|
|
34
|
+
def self.get_output context
|
|
35
|
+
context.instance_variable_get "@output"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.capture context, &block
|
|
39
|
+
begin
|
|
40
|
+
old_output = context.instance_variable_get "@output"
|
|
41
|
+
old_output.must_be.defined
|
|
42
|
+
context.instance_variable_set "@output", ""
|
|
43
|
+
block.call
|
|
44
|
+
context.instance_variable_get "@output"
|
|
45
|
+
ensure
|
|
46
|
+
context.instance_variable_set "@output", old_output
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.concat context, value
|
|
51
|
+
get_output(context) << value
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class HamlTemplate
|
|
56
|
+
def self.get_output context
|
|
57
|
+
context.haml_buffer.buffer
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def self.capture context, &block
|
|
61
|
+
context.capture_haml &block
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def self.concat context, value
|
|
65
|
+
context.haml_concat value
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Tilt::HamlTemplate.inspect causes error, fixin it.
|
|
3
|
+
#
|
|
4
|
+
class Tilt::HamlTemplate
|
|
5
|
+
def inspect
|
|
6
|
+
"#<Tilt::HamlTemplate:#{object_id} ...>"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
#
|
|
11
|
+
# Tilt::HamlTemplate.inspect causes error, fixin it.
|
|
12
|
+
#
|
|
13
|
+
class Haml::Buffer
|
|
14
|
+
def inspect
|
|
15
|
+
"#<Tilt::Buffer:#{object_id} ...>"
|
|
16
|
+
end
|
|
17
|
+
end
|