volt 0.9.1 → 0.9.2
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.
- 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.
|