volt 0.9.0.pre5 → 0.9.0.pre6
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/CHANGELOG.md +3 -0
- data/VERSION +1 -1
- data/lib/volt/cli/generate.rb +1 -1
- data/lib/volt/controllers/actions.rb +2 -2
- data/lib/volt/models/array_model.rb +3 -3
- data/lib/volt/models/model.rb +9 -2
- data/lib/volt/models/persistors/array_store.rb +9 -1
- data/lib/volt/page/bindings/attribute_binding.rb +9 -0
- data/lib/volt/page/bindings/each_binding.rb +10 -2
- data/lib/volt/reactive/eventable.rb +1 -0
- data/lib/volt/server/html_parser/attribute_scope.rb +5 -1
- data/lib/volt/server.rb +1 -0
- data/lib/volt/utils/boolean_patch.rb +8 -0
- data/lib/volt/utils/generic_pool.rb +1 -1
- data/lib/volt/utils/modes.rb +12 -0
- data/lib/volt/utils/tilt_patch.rb +9 -0
- data/lib/volt.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d7f725c0927c9b59afe03d26fb21eabd1dedb70
|
4
|
+
data.tar.gz: 5db3976c7d9fa0c0f4d39143fbdc55f605ef1d4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19f53d2bf32447609e05e3ec6bc7f111b746da01e6def14e94bc94a56a0f1940b328342d15d82e9378227855d99c02369b0bf31e356616a2ee149b8fd489b080
|
7
|
+
data.tar.gz: e7a5b0e5e96857977531d42c3805e9547ebff7af8cc3248aab7d39374e2fb880d124ceaf83493bd3cf61ca3db8d17198c2b8e0e66cada5cf59b9c08412fed9b3
|
data/CHANGELOG.md
CHANGED
@@ -23,6 +23,9 @@
|
|
23
23
|
- ```the_page``` is a shortcut to the page collection inside of specs. (Unfortunately, ```page``` is used by capybara, so for now we're using ```the_page```, we'll find a better solution in the future.)
|
24
24
|
- Add filtering to logging on password, and option to configure filtered args. Also, improve the way errors are displayed.
|
25
25
|
- You can now call raw in a content binding to render the raw html on the page. Use carefully, this can open you up to xss attacks. We reccomend never showing html from the user directly.
|
26
|
+
- before/after actions added to ModelController (HttpController support coming soon).
|
27
|
+
- in the disabled attribute, you can now bind to a boolean or string.
|
28
|
+
- added a .fetch_each method that fetches all items, then yields each one.
|
26
29
|
|
27
30
|
### Changed
|
28
31
|
- template bindings have been renamed to view. ```{{ view "path/for/view" }}``` instead of ```{{ template "path/for/view" }}```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.0.
|
1
|
+
0.9.0.pre6
|
data/lib/volt/cli/generate.rb
CHANGED
@@ -75,7 +75,7 @@ class Generate < Thor
|
|
75
75
|
method_option :name, type: :string, banner: 'The name of the task.'
|
76
76
|
method_option :component, type: :string, default: 'main', banner: 'The component the task should be created in.', required: false
|
77
77
|
def task(name, component = 'main')
|
78
|
-
name = name.underscore.singularize
|
78
|
+
name = name.underscore.gsub(/_tasks$/, '').singularize + '_tasks'
|
79
79
|
output_file = Dir.pwd + "/app/#{component}/tasks/#{name}.rb"
|
80
80
|
spec_file = Dir.pwd + "/spec/app/#{component}/tasks/#{name}_spec.rb"
|
81
81
|
template('task/task.rb.tt', output_file, task_name: name.camelize.singularize)
|
@@ -87,9 +87,9 @@ module Volt
|
|
87
87
|
# here by storing by action and having an all category as well.
|
88
88
|
def filter_actions_by_only_exclude(callbacks, action)
|
89
89
|
callbacks.select do |callback, options|
|
90
|
-
if options
|
90
|
+
if options && (only = options[:only])
|
91
91
|
# If there is an only, make sure the action is in the list.
|
92
|
-
|
92
|
+
[only].flatten.include?(action.to_sym)
|
93
93
|
else
|
94
94
|
# If no only, include it
|
95
95
|
true
|
@@ -41,7 +41,7 @@ module Volt
|
|
41
41
|
end
|
42
42
|
|
43
43
|
proxy_with_root_dep :[], :size, :first, :last, :state_for#, :limit, :find_one, :find
|
44
|
-
proxy_to_persistor :find, :where, :skip, :sort, :limit, :then, :fetch, :fetch_first
|
44
|
+
proxy_to_persistor :find, :where, :skip, :sort, :limit, :then, :fetch, :fetch_first, :fetch_each
|
45
45
|
|
46
46
|
def initialize(array = [], options = {})
|
47
47
|
@options = options
|
@@ -197,12 +197,12 @@ module Volt
|
|
197
197
|
end
|
198
198
|
end
|
199
199
|
|
200
|
-
def buffer
|
200
|
+
def buffer(attrs={})
|
201
201
|
model_path = options[:path] + [:[]]
|
202
202
|
model_klass = Volt::Model.class_at_path(model_path)
|
203
203
|
|
204
204
|
new_options = options.merge(path: model_path, save_to: self, buffer: true).reject { |k, _| k.to_sym == :persistor }
|
205
|
-
model = model_klass.new(
|
205
|
+
model = model_klass.new(attrs, new_options)
|
206
206
|
|
207
207
|
model
|
208
208
|
end
|
data/lib/volt/models/model.rb
CHANGED
@@ -16,6 +16,7 @@ require 'volt/models/permissions'
|
|
16
16
|
require 'volt/models/associations'
|
17
17
|
require 'volt/reactive/class_eventable'
|
18
18
|
require 'volt/utils/event_counter'
|
19
|
+
require 'volt/reactive/reactive_accessors'
|
19
20
|
require 'thread'
|
20
21
|
|
21
22
|
module Volt
|
@@ -43,6 +44,7 @@ module Volt
|
|
43
44
|
include ListenerTracker
|
44
45
|
include Permissions
|
45
46
|
include Associations
|
47
|
+
include ReactiveAccessors
|
46
48
|
|
47
49
|
attr_reader :attributes, :parent, :path, :persistor, :options
|
48
50
|
|
@@ -257,14 +259,19 @@ module Volt
|
|
257
259
|
else
|
258
260
|
# If we're expanding, or the get is for a collection, in which
|
259
261
|
# case we always expand.
|
260
|
-
|
262
|
+
plural_attr = attr_name.plural?
|
263
|
+
if expand || plural_attr
|
261
264
|
new_value = read_new_model(attr_name)
|
262
265
|
|
263
266
|
# A value was generated, store it
|
264
267
|
if new_value
|
265
268
|
# Assign directly. Since this is the first time
|
266
269
|
# we're loading, we can just assign.
|
267
|
-
|
270
|
+
#
|
271
|
+
# Don't track changes if we're setting a collection
|
272
|
+
Volt.run_in_mode_if(plural_attr, :no_change_tracking) do
|
273
|
+
set(attr_name, new_value)
|
274
|
+
end
|
268
275
|
end
|
269
276
|
|
270
277
|
return new_value
|
@@ -104,7 +104,6 @@ module Volt
|
|
104
104
|
|
105
105
|
# Called the first time data is requested from this collection
|
106
106
|
def load_data
|
107
|
-
# puts "LOAD DATA: #{@model.path.inspect}: #{@model.options[:query].inspect}"
|
108
107
|
Computation.run_without_tracking do
|
109
108
|
loaded_state = @model.loaded_state
|
110
109
|
|
@@ -218,6 +217,15 @@ module Volt
|
|
218
217
|
promise
|
219
218
|
end
|
220
219
|
|
220
|
+
# A combination of .fetch and .each. Returns the fetch promise
|
221
|
+
def fetch_each
|
222
|
+
fetch do |items|
|
223
|
+
items.each do |item|
|
224
|
+
yield(item)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
221
229
|
# Alias then for now
|
222
230
|
# TODO: Deprecate
|
223
231
|
alias_method :then, :fetch
|
@@ -97,6 +97,15 @@ module Volt
|
|
97
97
|
if val != element.value
|
98
98
|
element.value = val
|
99
99
|
end
|
100
|
+
when 'disabled'
|
101
|
+
# Disabled is handled specially, you can either return a boolean:
|
102
|
+
# (true being disabled, false not disabled), or you can optionally
|
103
|
+
# include the "disabled" string. (or any string)
|
104
|
+
if val != false && val.present?
|
105
|
+
element.attr('disabled', 'disabled')
|
106
|
+
else
|
107
|
+
element.remove_attr('disabled')
|
108
|
+
end
|
100
109
|
else
|
101
110
|
element[@attribute_name] = val
|
102
111
|
end
|
@@ -33,8 +33,14 @@ module Volt
|
|
33
33
|
values = current_values(value)
|
34
34
|
@value = values
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
if @added_listener
|
37
|
+
@added_listener.remove
|
38
|
+
@added_listener = nil
|
39
|
+
end
|
40
|
+
if @removed_listener
|
41
|
+
@removed_listener.remove
|
42
|
+
@removed_listener = nil
|
43
|
+
end
|
38
44
|
|
39
45
|
if @value.respond_to?(:on)
|
40
46
|
@added_listener = @value.on('added') { |position| item_added(position) }
|
@@ -132,6 +138,8 @@ module Volt
|
|
132
138
|
# Clear value
|
133
139
|
@value = []
|
134
140
|
|
141
|
+
@getter = nil
|
142
|
+
|
135
143
|
if @added_listener
|
136
144
|
@added_listener.remove
|
137
145
|
@added_listener = nil
|
@@ -35,7 +35,11 @@ module Volt
|
|
35
35
|
# Takes a string and splits on bindings, returns the string split on bindings
|
36
36
|
# and the number of bindings.
|
37
37
|
def binding_parts_and_count(value)
|
38
|
-
|
38
|
+
if value.is_a?(String)
|
39
|
+
parts = value.split(/(\{\{[^\}]+\}\})/).reject(&:blank?)
|
40
|
+
else
|
41
|
+
parts = ['']
|
42
|
+
end
|
39
43
|
binding_count = parts.count { |p| p[0] == '{' && p[1] == '{' && p[-2] == '}' && p[-1] == '}' }
|
40
44
|
|
41
45
|
[parts, binding_count]
|
data/lib/volt/server.rb
CHANGED
data/lib/volt/utils/modes.rb
CHANGED
@@ -27,6 +27,18 @@ module Volt
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
def run_in_mode_if(conditional, mode_name)
|
31
|
+
if conditional
|
32
|
+
# Yes, run in the mode
|
33
|
+
Volt.run_in_mode(mode_name) do
|
34
|
+
yield
|
35
|
+
end
|
36
|
+
else
|
37
|
+
# Just run normally
|
38
|
+
yield
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
30
42
|
# Check to see if we are in the specified mode
|
31
43
|
def in_mode?(mode_name)
|
32
44
|
return defined?(Thread) && Thread.current[mode_name]
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Tilt::Template
|
2
|
+
# Tilt outputs the following error:
|
3
|
+
# WARN: tilt autoloading 'sass' in a non thread-safe way; explicit require 'sass' suggested.
|
4
|
+
# I can't get rid of this no matter what I do. (If someone smarter wants to take a shot at
|
5
|
+
# it, please do.) For now for my sanity, I'm just silencing its warnings.
|
6
|
+
def warn(*args)
|
7
|
+
# Kernel.warn(*args)
|
8
|
+
end
|
9
|
+
end
|
data/lib/volt.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: volt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0.
|
4
|
+
version: 0.9.0.pre6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Stout
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -614,6 +614,7 @@ files:
|
|
614
614
|
- lib/volt/store/mongo.rb
|
615
615
|
- lib/volt/tasks/dispatcher.rb
|
616
616
|
- lib/volt/tasks/task_handler.rb
|
617
|
+
- lib/volt/utils/boolean_patch.rb
|
617
618
|
- lib/volt/utils/ejson.rb
|
618
619
|
- lib/volt/utils/event_counter.rb
|
619
620
|
- lib/volt/utils/generic_counting_pool.rb
|
@@ -623,6 +624,7 @@ files:
|
|
623
624
|
- lib/volt/utils/logging/task_logger.rb
|
624
625
|
- lib/volt/utils/modes.rb
|
625
626
|
- lib/volt/utils/promise_patch.rb
|
627
|
+
- lib/volt/utils/tilt_patch.rb
|
626
628
|
- lib/volt/utils/timers.rb
|
627
629
|
- lib/volt/utils/volt_user_error.rb
|
628
630
|
- lib/volt/volt/environment.rb
|