volt 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +56 -0
- data/CHANGELOG.md +4 -0
- data/Rakefile +0 -1
- data/app/volt/models/user.rb +1 -3
- data/app/volt/tasks/live_query/live_query.rb +1 -1
- data/app/volt/tasks/store_tasks.rb +4 -5
- data/app/volt/tasks/user_tasks.rb +1 -1
- data/lib/volt.rb +2 -6
- data/lib/volt/boot.rb +0 -2
- data/lib/volt/cli.rb +0 -1
- data/lib/volt/cli/asset_compile.rb +0 -2
- data/lib/volt/cli/console.rb +3 -4
- data/lib/volt/cli/generate.rb +3 -4
- data/lib/volt/cli/new_gem.rb +1 -3
- data/lib/volt/controllers/actions.rb +6 -6
- data/lib/volt/controllers/model_controller.rb +4 -8
- data/lib/volt/data_stores/base.rb +1 -2
- data/lib/volt/data_stores/data_store.rb +2 -2
- data/lib/volt/data_stores/mongo_driver.rb +3 -3
- data/lib/volt/extra_core/hash.rb +1 -1
- data/lib/volt/extra_core/inflector/inflections.rb +10 -2
- data/lib/volt/extra_core/logger.rb +1 -4
- data/lib/volt/extra_core/object.rb +1 -1
- data/lib/volt/models.rb +2 -4
- data/lib/volt/models/array_model.rb +3 -7
- data/lib/volt/models/associations.rb +5 -4
- data/lib/volt/models/buffer.rb +1 -2
- data/lib/volt/models/dirty.rb +2 -2
- data/lib/volt/models/errors.rb +1 -1
- data/lib/volt/models/listener_tracker.rb +1 -3
- data/lib/volt/models/model.rb +16 -20
- data/lib/volt/models/permissions.rb +15 -18
- data/lib/volt/models/persistors/array_store.rb +5 -10
- data/lib/volt/models/persistors/cookies.rb +2 -2
- data/lib/volt/models/persistors/model_store.rb +3 -9
- data/lib/volt/models/persistors/params.rb +1 -3
- data/lib/volt/models/persistors/query/normalizer.rb +3 -3
- data/lib/volt/models/persistors/query/query_listener.rb +1 -1
- data/lib/volt/models/persistors/store.rb +2 -2
- data/lib/volt/models/state_helpers.rb +1 -1
- data/lib/volt/models/state_manager.rb +4 -4
- data/lib/volt/models/url.rb +2 -6
- data/lib/volt/models/validations.rb +8 -13
- data/lib/volt/models/validators/numericality_validator.rb +2 -6
- data/lib/volt/models/validators/unique_validator.rb +1 -1
- data/lib/volt/models/validators/user_validation.rb +0 -1
- data/lib/volt/page/bindings/attribute_binding.rb +9 -19
- data/lib/volt/page/bindings/content_binding.rb +1 -1
- data/lib/volt/page/bindings/each_binding.rb +3 -4
- data/lib/volt/page/bindings/if_binding.rb +1 -1
- data/lib/volt/page/bindings/view_binding.rb +15 -22
- data/lib/volt/page/bindings/view_binding/controller_handler.rb +5 -7
- data/lib/volt/page/bindings/view_binding/view_lookup_for_path.rb +1 -2
- data/lib/volt/page/bindings/yield_binding.rb +1 -2
- data/lib/volt/page/channel.rb +3 -3
- data/lib/volt/page/document_events.rb +1 -1
- data/lib/volt/page/page.rb +3 -6
- data/lib/volt/page/path_string_renderer.rb +7 -8
- data/lib/volt/page/sub_context.rb +1 -3
- data/lib/volt/page/targets/binding_document/component_node.rb +1 -3
- data/lib/volt/page/tasks.rb +3 -5
- data/lib/volt/reactive/class_eventable.rb +2 -2
- data/lib/volt/reactive/computation.rb +7 -7
- data/lib/volt/reactive/dependency.rb +1 -1
- data/lib/volt/reactive/eventable.rb +3 -4
- data/lib/volt/reactive/reactive_accessors.rb +0 -1
- data/lib/volt/reactive/reactive_array.rb +4 -12
- data/lib/volt/router/routes.rb +1 -3
- data/lib/volt/server.rb +6 -6
- data/lib/volt/server/component_handler.rb +1 -1
- data/lib/volt/server/component_templates.rb +2 -2
- data/lib/volt/server/forking_server.rb +6 -9
- data/lib/volt/server/html_parser/component_view_scope.rb +2 -2
- data/lib/volt/server/html_parser/each_scope.rb +1 -1
- data/lib/volt/server/html_parser/sandlebars_parser.rb +2 -6
- data/lib/volt/server/html_parser/view_handler.rb +1 -1
- data/lib/volt/server/html_parser/view_parser.rb +1 -1
- data/lib/volt/server/html_parser/view_scope.rb +2 -4
- data/lib/volt/server/rack/asset_files.rb +1 -3
- data/lib/volt/server/rack/component_paths.rb +1 -3
- data/lib/volt/server/rack/http_request.rb +1 -3
- data/lib/volt/server/rack/http_resource.rb +1 -3
- data/lib/volt/server/rack/http_response_renderer.rb +2 -2
- data/lib/volt/server/rack/index_files.rb +1 -1
- data/lib/volt/server/rack/opal_files.rb +1 -3
- data/lib/volt/server/socket_connection_handler.rb +1 -3
- data/lib/volt/server/websocket/rack_server_adaptor.rb +1 -1
- data/lib/volt/server/websocket/websocket_handler.rb +1 -2
- data/lib/volt/spec/capybara.rb +1 -1
- data/lib/volt/spec/setup.rb +18 -12
- data/lib/volt/tasks/dispatcher.rb +1 -2
- data/lib/volt/tasks/task_handler.rb +1 -3
- data/lib/volt/utils/boolean_patch.rb +1 -1
- data/lib/volt/utils/event_counter.rb +2 -2
- data/lib/volt/utils/generic_pool.rb +5 -9
- data/lib/volt/utils/logging/task_argument_filterer.rb +4 -4
- data/lib/volt/utils/logging/task_logger.rb +2 -2
- data/lib/volt/utils/modes.rb +2 -2
- data/lib/volt/utils/promise_patch.rb +1 -2
- data/lib/volt/utils/read_write_lock.rb +21 -23
- data/lib/volt/utils/tilt_patch.rb +1 -1
- data/lib/volt/utils/timers.rb +3 -7
- data/lib/volt/utils/volt_user_error.rb +1 -1
- data/lib/volt/version.rb +2 -2
- data/lib/volt/volt/app.rb +4 -6
- data/lib/volt/volt/users.rb +4 -3
- data/spec/apps/kitchen_sink/app/main/controllers/main_controller.rb +1 -1
- data/spec/apps/kitchen_sink/app/main/controllers/server/simple_http_controller.rb +1 -1
- data/spec/apps/kitchen_sink/app/main/controllers/todos_controller.rb +5 -5
- data/spec/apps/kitchen_sink/app/main/controllers/upload_controller.rb +1 -1
- data/spec/apps/kitchen_sink/app/main/controllers/yield_component_controller.rb +1 -1
- data/spec/controllers/actions_spec.rb +9 -10
- data/spec/controllers/model_controller_spec.rb +1 -1
- data/spec/extra_core/blank_spec.rb +2 -2
- data/spec/extra_core/logger_spec.rb +6 -8
- data/spec/extra_core/string_transformations_spec.rb +3 -3
- data/spec/integration/bindings_spec.rb +3 -9
- data/spec/integration/first_last_spec.rb +1 -1
- data/spec/integration/missing_spec.rb +1 -2
- data/spec/integration/raw_html_binding.rb +2 -2
- data/spec/integration/todos_spec.rb +22 -0
- data/spec/integration/yield_spec.rb +2 -2
- data/spec/models/associations_spec.rb +4 -4
- data/spec/models/buffer_spec.rb +2 -2
- data/spec/models/dirty_spec.rb +10 -11
- data/spec/models/model_spec.rb +19 -13
- data/spec/models/model_state_spec.rb +1 -1
- data/spec/models/permissions_spec.rb +8 -12
- data/spec/models/url_spec.rb +1 -1
- data/spec/models/user_spec.rb +17 -10
- data/spec/models/user_validation_spec.rb +2 -3
- data/spec/models/validations_spec.rb +7 -10
- data/spec/models/validators/email_validator_spec.rb +5 -7
- data/spec/models/validators/format_validator_spec.rb +21 -3
- data/spec/models/validators/length_validator_spec.rb +12 -22
- data/spec/models/validators/shared_examples_for_validators.rb +1 -1
- data/spec/models/validators/unique_validator_spec.rb +1 -2
- data/spec/page/bindings/content_binding_spec.rb +1 -1
- data/spec/page/bindings/template_binding/view_lookup_for_path_spec.rb +0 -1
- data/spec/page/path_string_renderer_spec.rb +2 -3
- data/spec/reactive/class_eventable_spec.rb +1 -1
- data/spec/reactive/computation_spec.rb +30 -31
- data/spec/reactive/reactive_hash_spec.rb +1 -1
- data/spec/router/routes_spec.rb +14 -16
- data/spec/server/html_parser/view_handler_spec.rb +1 -1
- data/spec/server/html_parser/view_parser_spec.rb +0 -1
- data/spec/server/rack/quite_common_logger_spec.rb +3 -3
- data/spec/tasks/dispatcher_spec.rb +1 -1
- data/spec/tasks/query_tracker_spec.rb +1 -3
- data/spec/utils/task_argument_filtererer_spec.rb +5 -5
- data/templates/project/app/main/controllers/main_controller.rb +1 -1
- data/templates/project/spec/app/main/models/sample_model_spec.rb +2 -2
- data/templates/project/spec/app/main/tasks/sample_task_spec.rb +2 -2
- data/volt.gemspec +3 -5
- metadata +19 -4
@@ -30,14 +30,14 @@ module Volt
|
|
30
30
|
parts << `encodeURIComponent(value)`
|
31
31
|
parts << '; '
|
32
32
|
|
33
|
-
parts << 'path='
|
33
|
+
parts << 'path=' << options[:path] << '; ' if options[:path]
|
34
34
|
parts << 'max-age=' << options[:max_age] << '; ' if options[:max_age]
|
35
35
|
|
36
36
|
if (expires = options[:expires])
|
37
37
|
parts << 'expires=' << `expires.toGMTString()` << '; '
|
38
38
|
end
|
39
39
|
|
40
|
-
parts << 'domain='
|
40
|
+
parts << 'domain=' << options[:domain] << '; ' if options[:domain]
|
41
41
|
parts << 'secure' if options[:secure]
|
42
42
|
|
43
43
|
cookie_val = parts.join
|
@@ -23,9 +23,7 @@ module Volt
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def loaded(initial_state = nil)
|
26
|
-
if model.path == []
|
27
|
-
initial_state = :loaded
|
28
|
-
end
|
26
|
+
initial_state = :loaded if model.path == []
|
29
27
|
|
30
28
|
model.change_state_to(:loaded_state, initial_state)
|
31
29
|
end
|
@@ -143,9 +141,7 @@ module Volt
|
|
143
141
|
end
|
144
142
|
|
145
143
|
def event_added(event, first, first_for_event)
|
146
|
-
if first_for_event && event == :changed
|
147
|
-
ensure_setup
|
148
|
-
end
|
144
|
+
ensure_setup if first_for_event && event == :changed
|
149
145
|
end
|
150
146
|
|
151
147
|
# Update the models based on the id/identity map. Usually these requests
|
@@ -156,9 +152,7 @@ module Volt
|
|
156
152
|
|
157
153
|
if model
|
158
154
|
data.each_pair do |key, value|
|
159
|
-
if key != :_id
|
160
|
-
model.send(:"_#{key}=", value)
|
161
|
-
end
|
155
|
+
model.send(:"_#{key}=", value) if key != :_id
|
162
156
|
end
|
163
157
|
end
|
164
158
|
end
|
@@ -12,8 +12,8 @@ module Volt
|
|
12
12
|
|
13
13
|
def self.merge_finds_and_move_to_front(query)
|
14
14
|
# Map first parts to string
|
15
|
-
query = query.map {|v| v[0] = v[0].to_s
|
16
|
-
has_find = query.find {|v| v[0] == 'find' }
|
15
|
+
query = query.map { |v| v[0] = v[0].to_s; v }
|
16
|
+
has_find = query.find { |v| v[0] == 'find' }
|
17
17
|
|
18
18
|
if has_find
|
19
19
|
# merge any finds
|
@@ -48,4 +48,4 @@ module Volt
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
51
|
-
end
|
51
|
+
end
|
@@ -29,7 +29,7 @@ module Volt
|
|
29
29
|
model = @model.new_model(nil, options)
|
30
30
|
|
31
31
|
# TODO: Might not need to assign this
|
32
|
-
@model.attributes
|
32
|
+
@model.attributes ||= {}
|
33
33
|
@model.attributes[method_name] = model
|
34
34
|
end
|
35
35
|
model
|
@@ -40,7 +40,7 @@ module Volt
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def inspect
|
43
|
-
"<#{self.class
|
43
|
+
"<#{self.class}:#{object_id}>"
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -10,7 +10,7 @@ module Volt
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# Called from the QueryListener when the data is loaded
|
13
|
-
def change_state_to(state_name, new_state, trigger=true)
|
13
|
+
def change_state_to(state_name, new_state, trigger = true)
|
14
14
|
# use an instance variable for the state storage
|
15
15
|
ivar_name = :"@#{state_name}"
|
16
16
|
|
@@ -25,10 +25,11 @@ module Volt
|
|
25
25
|
end
|
26
26
|
|
27
27
|
private
|
28
|
+
|
28
29
|
# Get a state ivar for state_name
|
29
30
|
# @params [String] the name of the state variable
|
30
31
|
# @params [Boolean] if true, one will be created if it does not exist
|
31
|
-
def state_dep_for(state_name, create=true)
|
32
|
+
def state_dep_for(state_name, create = true)
|
32
33
|
dep_ivar_name = :"@#{state_name}_dep"
|
33
34
|
dep = instance_variable_get(dep_ivar_name)
|
34
35
|
if !dep && create
|
@@ -38,6 +39,5 @@ module Volt
|
|
38
39
|
|
39
40
|
dep
|
40
41
|
end
|
41
|
-
|
42
42
|
end
|
43
|
-
end
|
43
|
+
end
|
data/lib/volt/models/url.rb
CHANGED
@@ -153,9 +153,7 @@ module Volt
|
|
153
153
|
# Get the params that are in the route
|
154
154
|
new_params = @router.url_to_params(path)
|
155
155
|
|
156
|
-
if new_params == false
|
157
|
-
fail "no routes match path: #{path}"
|
158
|
-
end
|
156
|
+
fail "no routes match path: #{path}" if new_params == false
|
159
157
|
|
160
158
|
query_hash.merge!(new_params)
|
161
159
|
|
@@ -181,9 +179,7 @@ module Volt
|
|
181
179
|
assign_from_old(old_val, new_val)
|
182
180
|
else
|
183
181
|
# assign value
|
184
|
-
if old_val != new_val
|
185
|
-
params.set(name, new_val)
|
186
|
-
end
|
182
|
+
params.set(name, new_val) if old_val != new_val
|
187
183
|
new_params.delete(name)
|
188
184
|
end
|
189
185
|
end
|
@@ -19,8 +19,8 @@ module Volt
|
|
19
19
|
self.custom_validations ||= []
|
20
20
|
custom_validations << block
|
21
21
|
else
|
22
|
-
self.validations
|
23
|
-
validations[field_name]
|
22
|
+
self.validations ||= {}
|
23
|
+
validations[field_name] ||= {}
|
24
24
|
validations[field_name].merge!(options)
|
25
25
|
end
|
26
26
|
end
|
@@ -67,12 +67,12 @@ module Volt
|
|
67
67
|
@server_errors.delete(key)
|
68
68
|
end
|
69
69
|
|
70
|
-
def errors(marked_only=false)
|
70
|
+
def errors(marked_only = false)
|
71
71
|
@errors ||= Errors.new
|
72
72
|
|
73
73
|
if marked_only
|
74
74
|
# Only return the fields that have been marked
|
75
|
-
@errors.to_h.select {|key,_| marked_fields[key] }
|
75
|
+
@errors.to_h.select { |key, _| marked_fields[key] }
|
76
76
|
else
|
77
77
|
@errors
|
78
78
|
end
|
@@ -84,11 +84,8 @@ module Volt
|
|
84
84
|
errors.clear
|
85
85
|
|
86
86
|
run_validations.then do
|
87
|
-
|
88
87
|
# See if any server errors are in place and merge them in if they are
|
89
|
-
if Volt.client?
|
90
|
-
errors.merge!(server_errors.to_h)
|
91
|
-
end
|
88
|
+
errors.merge!(server_errors.to_h) if Volt.client?
|
92
89
|
end.then do
|
93
90
|
run_custom_validations
|
94
91
|
end.then do
|
@@ -107,10 +104,9 @@ module Volt
|
|
107
104
|
return true if errs[key]
|
108
105
|
end
|
109
106
|
|
110
|
-
|
107
|
+
false
|
111
108
|
end
|
112
109
|
|
113
|
-
|
114
110
|
private
|
115
111
|
|
116
112
|
# Runs through each of the normal validations.
|
@@ -142,7 +138,7 @@ module Volt
|
|
142
138
|
end
|
143
139
|
end
|
144
140
|
|
145
|
-
|
141
|
+
promise
|
146
142
|
end
|
147
143
|
|
148
144
|
def run_custom_validations
|
@@ -161,7 +157,7 @@ module Volt
|
|
161
157
|
end
|
162
158
|
end
|
163
159
|
|
164
|
-
|
160
|
+
promise
|
165
161
|
end
|
166
162
|
|
167
163
|
def validation_class(validation, args)
|
@@ -169,6 +165,5 @@ module Volt
|
|
169
165
|
rescue NameError => e
|
170
166
|
puts "Unable to find #{validation} validator"
|
171
167
|
end
|
172
|
-
|
173
168
|
end
|
174
169
|
end
|
@@ -37,13 +37,9 @@ module Volt
|
|
37
37
|
@args.each do |arg, val|
|
38
38
|
case arg
|
39
39
|
when :min
|
40
|
-
if @value < val
|
41
|
-
add_error("number must be greater than #{val}")
|
42
|
-
end
|
40
|
+
add_error("number must be greater than #{val}") if @value < val
|
43
41
|
when :max
|
44
|
-
if @value > val
|
45
|
-
add_error("number must be less than #{val}")
|
46
|
-
end
|
42
|
+
add_error("number must be less than #{val}") if @value > val
|
47
43
|
end
|
48
44
|
end
|
49
45
|
|
@@ -15,7 +15,7 @@ module Volt
|
|
15
15
|
|
16
16
|
def setup
|
17
17
|
# Listen for changes
|
18
|
-
@computation =
|
18
|
+
@computation = lambda do
|
19
19
|
begin
|
20
20
|
@context.instance_eval(&@getter)
|
21
21
|
rescue => e
|
@@ -27,17 +27,15 @@ module Volt
|
|
27
27
|
end
|
28
28
|
|
29
29
|
@is_radio = `#{element}.is('[type=radio]')`
|
30
|
-
if @is_radio
|
31
|
-
@selected_value = `#{element}.attr('value') || ''`
|
32
|
-
end
|
30
|
+
@selected_value = `#{element}.attr('value') || ''` if @is_radio
|
33
31
|
|
34
32
|
# Bind so when this value updates, we update
|
35
33
|
case @attribute_name
|
36
34
|
when 'value'
|
37
|
-
changed_event =
|
35
|
+
changed_event = proc { changed }
|
38
36
|
`#{element}.on('input.attrbind', #{changed_event})`
|
39
37
|
when 'checked'
|
40
|
-
changed_event =
|
38
|
+
changed_event = proc { |event| changed(event) }
|
41
39
|
`#{element}.on('change.attrbind', #{changed_event})`
|
42
40
|
end
|
43
41
|
end
|
@@ -79,13 +77,11 @@ module Volt
|
|
79
77
|
# update, we can just depend on it and update directly.
|
80
78
|
@string_template_renderer = new_value
|
81
79
|
|
82
|
-
@string_template_renderer_computation =
|
80
|
+
@string_template_renderer_computation = lambda do
|
83
81
|
self.value = @string_template_renderer.html
|
84
82
|
end.watch!
|
85
83
|
else
|
86
|
-
if new_value.is_a?(NilMethodCall) || new_value.nil?
|
87
|
-
new_value = ''
|
88
|
-
end
|
84
|
+
new_value = '' if new_value.is_a?(NilMethodCall) || new_value.nil?
|
89
85
|
|
90
86
|
self.value = new_value
|
91
87
|
end
|
@@ -96,9 +92,7 @@ module Volt
|
|
96
92
|
when 'value'
|
97
93
|
# TODO: only update if its not the same, this keeps it from moving the
|
98
94
|
# cursor in text fields.
|
99
|
-
if val != `(#{element}.val() || '')`
|
100
|
-
`#{element}.val(#{val})`
|
101
|
-
end
|
95
|
+
`#{element}.val(#{val})` if val != `(#{element}.val() || '')`
|
102
96
|
when 'disabled'
|
103
97
|
# Disabled is handled specially, you can either return a boolean:
|
104
98
|
# (true being disabled, false not disabled), or you can optionally
|
@@ -114,13 +108,9 @@ module Volt
|
|
114
108
|
end
|
115
109
|
|
116
110
|
def update_checked(value)
|
117
|
-
if value.is_a?(NilMethodCall) || value.nil?
|
118
|
-
value = false
|
119
|
-
end
|
111
|
+
value = false if value.is_a?(NilMethodCall) || value.nil?
|
120
112
|
|
121
|
-
if @is_radio
|
122
|
-
value = (@selected_value == value)
|
123
|
-
end
|
113
|
+
value = (@selected_value == value) if @is_radio
|
124
114
|
|
125
115
|
`#{element}.prop('checked', #{value})`
|
126
116
|
end
|
@@ -57,7 +57,7 @@ module Volt
|
|
57
57
|
def item_removed(position)
|
58
58
|
# Remove dependency
|
59
59
|
@templates[position].context.locals[:_index_dependency].remove
|
60
|
-
@templates[position].context.locals["_#{@item_name
|
60
|
+
@templates[position].context.locals["_#{@item_name}_dependency".to_sym].remove
|
61
61
|
|
62
62
|
@templates[position].remove_anchors
|
63
63
|
@templates[position].remove
|
@@ -92,12 +92,11 @@ module Volt
|
|
92
92
|
item_context.locals[:_index_value] = val
|
93
93
|
end
|
94
94
|
|
95
|
-
|
96
95
|
# Get and set value
|
97
96
|
value_dependency = Dependency.new
|
98
|
-
item_context.locals["_#{@item_name
|
97
|
+
item_context.locals["_#{@item_name}_dependency".to_sym] = value_dependency
|
99
98
|
|
100
|
-
item_context.locals["#{@item_name
|
99
|
+
item_context.locals["#{@item_name}=".to_sym] = proc do |val|
|
101
100
|
value_dependency.changed!
|
102
101
|
@value[item_context.locals[:_index_value]] = val
|
103
102
|
end
|
@@ -4,15 +4,13 @@ require 'volt/page/bindings/view_binding/grouped_controllers'
|
|
4
4
|
require 'volt/page/bindings/view_binding/view_lookup_for_path'
|
5
5
|
require 'volt/page/bindings/view_binding/controller_handler'
|
6
6
|
|
7
|
-
|
8
7
|
module Volt
|
9
8
|
class ViewBinding < BaseBinding
|
10
|
-
|
11
9
|
# @param [String] binding_in_path is the path this binding was rendered from. Used to
|
12
10
|
# lookup paths in ViewLookupForPath
|
13
11
|
# @param [String|nil] content_template_path is the path to the template for the content
|
14
12
|
# provided in the tag.
|
15
|
-
def initialize(page, target, context, binding_name, binding_in_path, getter, content_template_path=nil)
|
13
|
+
def initialize(page, target, context, binding_name, binding_in_path, getter, content_template_path = nil)
|
16
14
|
super(page, target, context, binding_name)
|
17
15
|
|
18
16
|
@content_template_path = content_template_path
|
@@ -23,7 +21,7 @@ module Volt
|
|
23
21
|
@current_template = nil
|
24
22
|
|
25
23
|
# Run the initial render
|
26
|
-
@computation =
|
24
|
+
@computation = lambda do
|
27
25
|
# Don't try to render if this has been removed
|
28
26
|
if @context
|
29
27
|
# Render
|
@@ -97,22 +95,19 @@ module Volt
|
|
97
95
|
|
98
96
|
# Called when the next template is ready to render
|
99
97
|
def render_next_template(full_path, path)
|
100
|
-
|
101
|
-
# stop_waiting_for_load
|
102
|
-
remove_current_controller_and_template
|
98
|
+
remove_current_controller_and_template
|
103
99
|
|
104
|
-
|
105
|
-
|
106
|
-
|
100
|
+
# Switch the current template
|
101
|
+
@current_controller_handler = @starting_controller_handler
|
102
|
+
@starting_controller_handler = nil
|
107
103
|
|
108
|
-
|
109
|
-
|
104
|
+
# Also track the current controller directly
|
105
|
+
@controller = @current_controller_handler.controller if full_path
|
110
106
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
end
|
107
|
+
render_template(full_path || path)
|
108
|
+
rescue => e
|
109
|
+
Volt.logger.error("Error during render of template at #{path}: #{e.inspect}")
|
110
|
+
Volt.logger.error(e.backtrace)
|
116
111
|
end
|
117
112
|
|
118
113
|
def stop_waiting_for_load
|
@@ -189,7 +184,7 @@ module Volt
|
|
189
184
|
controller_class, action = ControllerHandler.get_controller_and_action(controller_path)
|
190
185
|
|
191
186
|
generated_new = false
|
192
|
-
new_controller =
|
187
|
+
new_controller = proc do
|
193
188
|
# Mark that we needed to generate a new controller instance (not reused
|
194
189
|
# from the group)
|
195
190
|
generated_new = true
|
@@ -212,14 +207,12 @@ module Volt
|
|
212
207
|
# Call the action
|
213
208
|
stopped = handler.call_action
|
214
209
|
|
215
|
-
if stopped
|
216
|
-
controller.instance_variable_set('@chain_stopped', true)
|
217
|
-
end
|
210
|
+
controller.instance_variable_set('@chain_stopped', true) if stopped
|
218
211
|
else
|
219
212
|
stopped = controller.instance_variable_get('@chain_stopped')
|
220
213
|
end
|
221
214
|
|
222
|
-
|
215
|
+
[handler, generated_new, stopped]
|
223
216
|
end
|
224
217
|
|
225
218
|
# The context for templates can be either a controller, or the original context.
|