volt 0.8.17 → 0.8.18
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/.travis.yml +1 -1
- data/CHANGELOG.md +9 -0
- data/Gemfile +4 -0
- data/Readme.md +1 -0
- data/VERSION +1 -1
- data/app/volt/tasks/store_tasks.rb +22 -28
- data/lib/volt/cli.rb +1 -1
- data/lib/volt/{console.rb → cli/console.rb} +0 -0
- data/lib/volt/cli/runner.rb +1 -0
- data/lib/volt/controllers/model_controller.rb +22 -9
- data/lib/volt/models/model_hash_behaviour.rb +1 -1
- data/lib/volt/models/persistors/array_store.rb +1 -1
- data/lib/volt/models/persistors/model_store.rb +56 -2
- data/lib/volt/models/url.rb +1 -1
- data/lib/volt/page/bindings/each_binding.rb +8 -4
- data/lib/volt/page/url_tracker.rb +1 -7
- data/lib/volt/tasks/dispatcher.rb +31 -6
- data/lib/volt/tasks/task_handler.rb +5 -0
- data/spec/extra_core/array_spec.rb +8 -0
- data/spec/extra_core/inflector_spec.rb +4 -0
- data/spec/extra_core/object_spec.rb +14 -0
- data/spec/extra_core/string_transformation_test_cases.rb +0 -21
- data/spec/extra_core/symbol_spec.rb +15 -0
- data/spec/integration/url_spec.rb +31 -0
- data/spec/router/routes_spec.rb +1 -1
- data/spec/tasks/dispatcher_spec.rb +43 -0
- data/templates/project/app/main/assets/css/app.css.scss +1 -0
- metadata +14 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 643b4bf773281e2714b4002a68362b71e886b84b
|
4
|
+
data.tar.gz: c229e47bfe005bbb3e4b5b0cfd54bef225b3eb87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e794f7cce33a794913abb6c06d516e50d9fb4fe55c099d63c2a478cb2d1339b75c96d46943e0960f6a42c16be8efc9d3526e77613362cc927ac9941955d844e8
|
7
|
+
data.tar.gz: 6e6b49d6d6504f25911bbf766d99453a25c34a9dee63f27b73f73dcfc5dd31f811ef29492a0189ff1ecbbdaa528d4ea5d87677cfef697f044cb3cae433512906
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.8.18 - 2014-10-26
|
4
|
+
### Added
|
5
|
+
- Added a default app.css.scss file
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
- back button fixed
|
9
|
+
- improve security on task dispatcher
|
10
|
+
|
3
11
|
## 0.8.17 - 2014-10-20
|
4
12
|
### Added
|
5
13
|
- Volt now has a runner task (like rails) so you can run .rb files inside of the volt project. Example: ```volt runner lib/import.rb```
|
14
|
+
- New video showing pagination: https://www.youtube.com/watch?v=1uanfzMLP9g
|
6
15
|
|
7
16
|
## 0.8.16 - 2014-10-20
|
8
17
|
### Added
|
data/Gemfile
CHANGED
data/Readme.md
CHANGED
@@ -16,6 +16,7 @@ Pages HTML is written in a template language where you can put ruby between ```{
|
|
16
16
|
|
17
17
|
See some demo videos here:
|
18
18
|
- [Volt Todos Example](https://www.youtube.com/watch?v=Tg-EtRnMz7o)
|
19
|
+
- [Pagination Example](https://www.youtube.com/watch?v=1uanfzMLP9g)
|
19
20
|
- [Build a Blog with Volt](https://www.youtube.com/watch?v=c478sMlhx1o)
|
20
21
|
** Note: The blog video is outdated, expect an updated version soon.
|
21
22
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.18
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'mongo'
|
2
|
+
require 'volt/models'
|
2
3
|
|
3
4
|
class StoreTasks < Volt::TaskHandler
|
4
5
|
def initialize(channel = nil, dispatcher = nil)
|
@@ -10,7 +11,7 @@ class StoreTasks < Volt::TaskHandler
|
|
10
11
|
@@db ||= Volt::DataStore.fetch
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
+
def load_model(collection, path, data)
|
14
15
|
model_name = collection.singularize.camelize
|
15
16
|
|
16
17
|
# TODO: Security check to make sure we have a valid model
|
@@ -18,44 +19,37 @@ class StoreTasks < Volt::TaskHandler
|
|
18
19
|
begin
|
19
20
|
model_class = Object.send(:const_get, model_name)
|
20
21
|
rescue NameError => e
|
21
|
-
model_class =
|
22
|
+
model_class = Volt::Model
|
22
23
|
end
|
23
24
|
|
24
25
|
if model_class
|
25
|
-
model
|
26
|
-
|
26
|
+
# Load the model, use the Store persistor and set the path
|
27
|
+
model = model_class.new(data, persistor: Volt::Persistors::StoreFactory.new(nil), path: path)
|
28
|
+
return model
|
27
29
|
end
|
28
30
|
|
29
|
-
|
31
|
+
return nil
|
30
32
|
end
|
31
33
|
|
32
|
-
def save(collection, data)
|
34
|
+
def save(collection, path, data)
|
33
35
|
data = data.symbolize_keys
|
34
|
-
|
36
|
+
model = load_model(collection, path, data)
|
35
37
|
|
36
|
-
|
37
|
-
# id = BSON::ObjectId(values[:_id])
|
38
|
-
id = values[:_id]
|
38
|
+
errors = model.errors
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
update_values.delete(:_id)
|
51
|
-
db[collection].update({ _id: id }, update_values)
|
52
|
-
else
|
53
|
-
return { error: error.message }
|
54
|
-
end
|
55
|
-
end
|
40
|
+
if model.errors.size == 0
|
41
|
+
|
42
|
+
# On the backend, the promise is resolved before its returned, so we can
|
43
|
+
# return from within it.
|
44
|
+
#
|
45
|
+
# Pass the channel as a thread-local so that we don't update the client
|
46
|
+
# who sent the update.
|
47
|
+
Thread.current['in_channel'] = @channel
|
48
|
+
model.persistor.changed do |errors|
|
49
|
+
Thread.current['in_channel'] = nil
|
56
50
|
|
57
|
-
|
58
|
-
|
51
|
+
return errors
|
52
|
+
end
|
59
53
|
else
|
60
54
|
return errors
|
61
55
|
end
|
data/lib/volt/cli.rb
CHANGED
File without changes
|
data/lib/volt/cli/runner.rb
CHANGED
@@ -22,10 +22,8 @@ module Volt
|
|
22
22
|
else
|
23
23
|
fail "#{val} is not the name of a valid model, choose from: #{collections.join(', ')}"
|
24
24
|
end
|
25
|
-
elsif val
|
26
|
-
self.current_model = val
|
27
25
|
else
|
28
|
-
|
26
|
+
self.current_model = val
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
@@ -43,7 +41,7 @@ module Volt
|
|
43
41
|
def self.new(*args, &block)
|
44
42
|
inst = allocate
|
45
43
|
|
46
|
-
inst.model =
|
44
|
+
inst.model = @default_model if @default_model
|
47
45
|
|
48
46
|
inst.initialize(*args, &block)
|
49
47
|
|
@@ -73,10 +71,6 @@ module Volt
|
|
73
71
|
$page.page
|
74
72
|
end
|
75
73
|
|
76
|
-
def paged
|
77
|
-
$page.page
|
78
|
-
end
|
79
|
-
|
80
74
|
def store
|
81
75
|
$page.store
|
82
76
|
end
|
@@ -109,8 +103,27 @@ module Volt
|
|
109
103
|
@controller ||= Model.new
|
110
104
|
end
|
111
105
|
|
106
|
+
def loaded?
|
107
|
+
respond_to?(:state) && state == :loaded
|
108
|
+
end
|
109
|
+
|
110
|
+
# Check if this controller responds_to method, or the model
|
111
|
+
def respond_to?(method_name)
|
112
|
+
super || begin
|
113
|
+
model = self.model
|
114
|
+
|
115
|
+
model.respond_to?(method_name) if model
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
112
119
|
def method_missing(method_name, *args, &block)
|
113
|
-
model
|
120
|
+
model = self.model
|
121
|
+
|
122
|
+
if model
|
123
|
+
model.send(method_name, *args, &block)
|
124
|
+
else
|
125
|
+
super
|
126
|
+
end
|
114
127
|
end
|
115
128
|
end
|
116
129
|
end
|
@@ -1,6 +1,11 @@
|
|
1
1
|
require 'volt/models/persistors/store'
|
2
2
|
require 'volt/models/persistors/store_state'
|
3
3
|
|
4
|
+
if RUBY_PLATFORM == 'opal'
|
5
|
+
else
|
6
|
+
require 'mongo'
|
7
|
+
end
|
8
|
+
|
4
9
|
module Volt
|
5
10
|
module Persistors
|
6
11
|
class ModelStore < Store
|
@@ -52,6 +57,14 @@ module Volt
|
|
52
57
|
id.join
|
53
58
|
end
|
54
59
|
|
60
|
+
def save_changes?
|
61
|
+
if RUBY_PLATFORM == 'opal'
|
62
|
+
return !(defined?($loading_models) && $loading_models) && @tasks
|
63
|
+
else
|
64
|
+
return true
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
55
68
|
# Called when the model changes
|
56
69
|
def changed(attribute_name = nil)
|
57
70
|
path = @model.path
|
@@ -61,7 +74,7 @@ module Volt
|
|
61
74
|
ensure_setup
|
62
75
|
|
63
76
|
path_size = path.size
|
64
|
-
if
|
77
|
+
if save_changes? && path_size > 0 && !@model.nil?
|
65
78
|
if path_size > 3 && (parent = @model.parent) && (source = parent.parent)
|
66
79
|
@model.attributes[:"#{path[-4].singularize}_id"] = source._id
|
67
80
|
end
|
@@ -70,7 +83,16 @@ module Volt
|
|
70
83
|
puts 'Attempting to save model directly on store.'
|
71
84
|
fail 'Attempting to save model directly on store.'
|
72
85
|
else
|
73
|
-
|
86
|
+
if RUBY_PLATFORM == 'opal'
|
87
|
+
StoreTasks.save(collection, path, self_attributes).then do |errors|
|
88
|
+
if errors.size == 0
|
89
|
+
promise.resolve(nil)
|
90
|
+
else
|
91
|
+
promise.reject(errors)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
else
|
95
|
+
errors = save_to_db!(self_attributes)
|
74
96
|
if errors.size == 0
|
75
97
|
promise.resolve(nil)
|
76
98
|
else
|
@@ -117,6 +139,38 @@ module Volt
|
|
117
139
|
def collection
|
118
140
|
@model.path[-2]
|
119
141
|
end
|
142
|
+
|
143
|
+
if RUBY_PLATFORM != 'opal'
|
144
|
+
def db
|
145
|
+
@@db ||= Volt::DataStore.fetch
|
146
|
+
end
|
147
|
+
|
148
|
+
# Do the actual writing of data to the database, only runs on the backend.
|
149
|
+
def save_to_db!(values)
|
150
|
+
id = values[:_id]
|
151
|
+
|
152
|
+
# Try to create
|
153
|
+
# TODO: Seems mongo is dumb and doesn't let you upsert with custom id's
|
154
|
+
begin
|
155
|
+
# values['_id'] = BSON::ObjectId('_id') if values['_id']
|
156
|
+
db[collection].insert(values)
|
157
|
+
rescue Mongo::OperationFailure => error
|
158
|
+
# Really mongo client?
|
159
|
+
if error.message[/^11000[:]/]
|
160
|
+
# Update because the id already exists
|
161
|
+
update_values = values.dup
|
162
|
+
update_values.delete(:_id)
|
163
|
+
db[collection].update({ _id: id }, update_values)
|
164
|
+
else
|
165
|
+
return { error: error.message }
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# puts "Update Collection: #{collection.inspect} - #{values.inspect}"
|
170
|
+
QueryTasks.live_query_pool.updated_collection(collection.to_s, Thread.current['from_channel'])
|
171
|
+
return {}
|
172
|
+
end
|
173
|
+
end
|
120
174
|
end
|
121
175
|
end
|
122
176
|
end
|
data/lib/volt/models/url.rb
CHANGED
@@ -129,11 +129,15 @@ module Volt
|
|
129
129
|
# Clear value
|
130
130
|
@value = nil
|
131
131
|
|
132
|
-
@added_listener
|
133
|
-
|
132
|
+
if @added_listener
|
133
|
+
@added_listener.remove
|
134
|
+
@added_listener = nil
|
135
|
+
end
|
134
136
|
|
135
|
-
@removed_listener
|
136
|
-
|
137
|
+
if @removed_listener
|
138
|
+
@removed_listener.remove
|
139
|
+
@removed_listener = nil
|
140
|
+
end
|
137
141
|
|
138
142
|
if @templates
|
139
143
|
template_count = @templates.size
|
@@ -12,14 +12,8 @@ module Volt
|
|
12
12
|
# Setup popstate on the dom ready event. Prevents an extra
|
13
13
|
# popstate trigger
|
14
14
|
`
|
15
|
-
var first = true;
|
16
15
|
window.addEventListener("popstate", function(e) {
|
17
|
-
|
18
|
-
that.$url_updated();
|
19
|
-
}
|
20
|
-
|
21
|
-
first = false;
|
22
|
-
|
16
|
+
that.$url_updated();
|
23
17
|
return true;
|
24
18
|
});
|
25
19
|
`
|
@@ -4,28 +4,53 @@ module Volt
|
|
4
4
|
class Dispatcher
|
5
5
|
def dispatch(channel, message)
|
6
6
|
callback_id, class_name, method_name, *args = message
|
7
|
+
method_name = method_name.to_sym
|
7
8
|
|
8
9
|
# Get the class
|
9
10
|
klass = Object.send(:const_get, class_name)
|
10
11
|
|
11
|
-
|
12
|
+
result = nil
|
13
|
+
error = nil
|
14
|
+
|
15
|
+
if safe_method?(klass, method_name)
|
12
16
|
# Init and send the method
|
13
17
|
begin
|
14
18
|
result = klass.new(channel, self).send(method_name, *args)
|
15
|
-
error = nil
|
16
19
|
rescue => e
|
17
20
|
# TODO: Log these errors better
|
18
21
|
puts e.inspect
|
19
22
|
puts e.backtrace
|
20
|
-
result = nil
|
21
23
|
error = e
|
22
24
|
end
|
25
|
+
else
|
26
|
+
# Unsafe method
|
27
|
+
error = RuntimeError.new("unsafe method: #{method_name}")
|
28
|
+
end
|
23
29
|
|
24
|
-
|
25
|
-
|
26
|
-
|
30
|
+
if callback_id
|
31
|
+
# Callback with result
|
32
|
+
channel.send_message('response', callback_id, result, error)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Check if it is safe to use this method
|
37
|
+
def safe_method?(klass, method_name)
|
38
|
+
# Make sure the class being called is a TaskHandler.
|
39
|
+
return false unless klass.ancestors.include?(TaskHandler)
|
40
|
+
|
41
|
+
# Make sure the method is defined on the klass we're using and not up the hiearchy.
|
42
|
+
# ^ This check prevents methods like #send, #eval, #instance_eval, #class_eval, etc...
|
43
|
+
klass.ancestors.each do |ancestor_klass|
|
44
|
+
if ancestor_klass.instance_methods(false).include?(method_name)
|
45
|
+
return true
|
46
|
+
elsif ancestor_klass == TaskHandler
|
47
|
+
# We made it to TaskHandler and didn't find the method, that means it
|
48
|
+
# was defined above TaskHandler, so we reject the call.
|
49
|
+
return false
|
27
50
|
end
|
28
51
|
end
|
52
|
+
|
53
|
+
return false
|
29
54
|
end
|
30
55
|
end
|
31
56
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'volt/extra_core/blank'
|
3
|
+
|
4
|
+
describe Object do
|
5
|
+
it 'should add blank? to all objects' do
|
6
|
+
expect(Object.new.blank?).to be_false
|
7
|
+
expect(nil.blank?).to be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should add present? to all objects' do
|
11
|
+
expect(Object.new.present?).to be_true
|
12
|
+
expect(nil.present?).to be_false
|
13
|
+
end
|
14
|
+
end
|
@@ -12,27 +12,6 @@
|
|
12
12
|
'area51_controller' => 'area51Controller'
|
13
13
|
}
|
14
14
|
|
15
|
-
SymbolToLowerCamel = {
|
16
|
-
product: 'product',
|
17
|
-
special_guest: 'specialGuest',
|
18
|
-
application_controller: 'applicationController',
|
19
|
-
area51_controller: 'area51Controller'
|
20
|
-
}
|
21
|
-
|
22
|
-
CamelToUnderscoreWithoutReverse = {
|
23
|
-
'HTMLTidy' => 'html_tidy',
|
24
|
-
'HTMLTidyGenerator' => 'html_tidy_generator',
|
25
|
-
'FreeBSD' => 'free_bsd',
|
26
|
-
'HTML' => 'html',
|
27
|
-
'ForceXMLController' => 'force_xml_controller'
|
28
|
-
}
|
29
|
-
|
30
|
-
CamelWithModuleToUnderscoreWithSlash = {
|
31
|
-
'Admin::Product' => 'admin/product',
|
32
|
-
'Users::Commission::Department' => 'users/commission/department',
|
33
|
-
'UsersSection::CommissionDepartment' => 'users_section/commission_department'
|
34
|
-
}
|
35
|
-
|
36
15
|
UnderscoresToDashes = {
|
37
16
|
'street' => 'street',
|
38
17
|
'street_address' => 'street-address',
|
@@ -0,0 +1,15 @@
|
|
1
|
+
if RUBY_PLATFORM == 'opal'
|
2
|
+
else
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'volt/extra_core/symbol'
|
5
|
+
|
6
|
+
describe Symbol do
|
7
|
+
it 'should pluralize correctly' do
|
8
|
+
expect(:car.pluralize).to eq(:cars)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should singularize correctly' do
|
12
|
+
expect(:cars.singularize).to eq(:car)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
if ENV['BROWSER'] && ENV['BROWSER'] != 'phantom'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe 'url features', type: :feature do
|
5
|
+
it 'should update the page when using the back button' do
|
6
|
+
visit '/'
|
7
|
+
expect(current_url).to match(/\/$/)
|
8
|
+
|
9
|
+
click_link 'Bindings'
|
10
|
+
expect(current_url).to match(/\/bindings$/)
|
11
|
+
expect(page).to have_content('Checkbox')
|
12
|
+
|
13
|
+
click_link 'Todos'
|
14
|
+
expect(current_url).to match(/\/todos$/)
|
15
|
+
expect(page).to have_content('Todos Example')
|
16
|
+
|
17
|
+
# "Click" back button
|
18
|
+
page.evaluate_script('window.history.back()')
|
19
|
+
|
20
|
+
click_link 'Bindings'
|
21
|
+
expect(current_url).to match(/\/bindings$/)
|
22
|
+
expect(page).to have_content('Checkbox')
|
23
|
+
|
24
|
+
# "Click" back button
|
25
|
+
page.evaluate_script('window.history.back()')
|
26
|
+
|
27
|
+
expect(current_url).to match(/\/$/)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
data/spec/router/routes_spec.rb
CHANGED
@@ -17,7 +17,7 @@ describe Volt::Routes do
|
|
17
17
|
expect(direct_routes).to eq('/' => { _view: 'index' }, '/page1' => { _view: 'first_page' })
|
18
18
|
end
|
19
19
|
|
20
|
-
it 'should setup
|
20
|
+
it 'should setup indirect routes' do
|
21
21
|
routes do
|
22
22
|
get '/blog/{{ _id }}/edit', _view: 'blog/edit'
|
23
23
|
get '/blog/{{ _id }}', _view: 'blog/show'
|
@@ -0,0 +1,43 @@
|
|
1
|
+
if RUBY_PLATFORM != 'opal'
|
2
|
+
class TestTask < Volt::TaskHandler
|
3
|
+
def allowed_method(arg1)
|
4
|
+
return 'yes' + arg1
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
describe Volt::Dispatcher do
|
10
|
+
|
11
|
+
it 'should only allow method calls on TaskHandler or above in the inheritance chain' do
|
12
|
+
channel = double('channel')
|
13
|
+
|
14
|
+
expect(channel).to receive(:send_message).with('response', 0, 'yes works', nil)
|
15
|
+
|
16
|
+
Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :allowed_method, ' works'])
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should not allow eval' do
|
20
|
+
channel = double('channel')
|
21
|
+
|
22
|
+
expect(channel).to receive(:send_message).with('response', 0, nil, RuntimeError.new('unsafe method: eval'))
|
23
|
+
|
24
|
+
Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :eval, '5 + 10'])
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should not allow instance_eval' do
|
28
|
+
channel = double('channel')
|
29
|
+
|
30
|
+
expect(channel).to receive(:send_message).with('response', 0, nil, RuntimeError.new('unsafe method: instance_eval'))
|
31
|
+
|
32
|
+
Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :instance_eval, '5 + 10'])
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should not allow #methods' do
|
36
|
+
channel = double('channel')
|
37
|
+
|
38
|
+
expect(channel).to receive(:send_message).with('response', 0, nil, RuntimeError.new('unsafe method: methods'))
|
39
|
+
|
40
|
+
Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :methods])
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
// Place your apps css here
|
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.8.
|
4
|
+
version: 0.8.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Stout
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -379,11 +379,11 @@ files:
|
|
379
379
|
- lib/volt/boot.rb
|
380
380
|
- lib/volt/cli.rb
|
381
381
|
- lib/volt/cli/asset_compile.rb
|
382
|
+
- lib/volt/cli/console.rb
|
382
383
|
- lib/volt/cli/generate.rb
|
383
384
|
- lib/volt/cli/new_gem.rb
|
384
385
|
- lib/volt/cli/runner.rb
|
385
386
|
- lib/volt/config.rb
|
386
|
-
- lib/volt/console.rb
|
387
387
|
- lib/volt/controllers/model_controller.rb
|
388
388
|
- lib/volt/data_stores/data_store.rb
|
389
389
|
- lib/volt/data_stores/mongo_driver.rb
|
@@ -513,12 +513,16 @@ files:
|
|
513
513
|
- spec/apps/kitchen_sink/config.ru
|
514
514
|
- spec/apps/kitchen_sink/public/index.html
|
515
515
|
- spec/controllers/reactive_accessors_spec.rb
|
516
|
+
- spec/extra_core/array_spec.rb
|
516
517
|
- spec/extra_core/inflector_spec.rb
|
518
|
+
- spec/extra_core/object_spec.rb
|
517
519
|
- spec/extra_core/string_transformation_test_cases.rb
|
518
520
|
- spec/extra_core/string_transformations_spec.rb
|
521
|
+
- spec/extra_core/symbol_spec.rb
|
519
522
|
- spec/integration/bindings_spec.rb
|
520
523
|
- spec/integration/list_spec.rb
|
521
524
|
- spec/integration/templates_spec.rb
|
525
|
+
- spec/integration/url_spec.rb
|
522
526
|
- spec/models/model_spec.rb
|
523
527
|
- spec/models/persistors/params_spec.rb
|
524
528
|
- spec/models/persistors/store_spec.rb
|
@@ -539,6 +543,7 @@ files:
|
|
539
543
|
- spec/server/rack/rack_requests_spec.rb
|
540
544
|
- spec/spec_helper.rb
|
541
545
|
- spec/store/mongo_spec.rb
|
546
|
+
- spec/tasks/dispatcher_spec.rb
|
542
547
|
- spec/tasks/live_query_spec.rb
|
543
548
|
- spec/tasks/query_tasks.rb
|
544
549
|
- spec/tasks/query_tracker_spec.rb
|
@@ -580,6 +585,7 @@ files:
|
|
580
585
|
- templates/project/README.md.tt
|
581
586
|
- templates/project/app/.empty_directory
|
582
587
|
- templates/project/app/main/assets/css/.empty_directory
|
588
|
+
- templates/project/app/main/assets/css/app.css.scss
|
583
589
|
- templates/project/app/main/assets/js/.empty_directory
|
584
590
|
- templates/project/app/main/config/dependencies.rb
|
585
591
|
- templates/project/app/main/config/routes.rb
|
@@ -642,12 +648,16 @@ test_files:
|
|
642
648
|
- spec/apps/kitchen_sink/config.ru
|
643
649
|
- spec/apps/kitchen_sink/public/index.html
|
644
650
|
- spec/controllers/reactive_accessors_spec.rb
|
651
|
+
- spec/extra_core/array_spec.rb
|
645
652
|
- spec/extra_core/inflector_spec.rb
|
653
|
+
- spec/extra_core/object_spec.rb
|
646
654
|
- spec/extra_core/string_transformation_test_cases.rb
|
647
655
|
- spec/extra_core/string_transformations_spec.rb
|
656
|
+
- spec/extra_core/symbol_spec.rb
|
648
657
|
- spec/integration/bindings_spec.rb
|
649
658
|
- spec/integration/list_spec.rb
|
650
659
|
- spec/integration/templates_spec.rb
|
660
|
+
- spec/integration/url_spec.rb
|
651
661
|
- spec/models/model_spec.rb
|
652
662
|
- spec/models/persistors/params_spec.rb
|
653
663
|
- spec/models/persistors/store_spec.rb
|
@@ -668,6 +678,7 @@ test_files:
|
|
668
678
|
- spec/server/rack/rack_requests_spec.rb
|
669
679
|
- spec/spec_helper.rb
|
670
680
|
- spec/store/mongo_spec.rb
|
681
|
+
- spec/tasks/dispatcher_spec.rb
|
671
682
|
- spec/tasks/live_query_spec.rb
|
672
683
|
- spec/tasks/query_tasks.rb
|
673
684
|
- spec/tasks/query_tracker_spec.rb
|