volt 0.8.18 → 0.8.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/Readme.md +2 -1
- data/VERSION +1 -1
- data/app/volt/controllers/notices_controller.rb +12 -2
- data/app/volt/models/user.rb +34 -1
- data/app/volt/tasks/store_tasks.rb +26 -23
- data/app/volt/tasks/user_tasks.rb +26 -2
- data/app/volt/views/notices/index.html +8 -6
- data/lib/volt.rb +47 -1
- data/lib/volt/cli/asset_compile.rb +24 -42
- data/lib/volt/config.rb +24 -14
- data/lib/volt/controllers/model_controller.rb +6 -1
- data/lib/volt/data_stores/mongo_driver.rb +7 -3
- data/lib/volt/models.rb +3 -0
- data/lib/volt/models/array_model.rb +21 -3
- data/lib/volt/models/model.rb +109 -48
- data/lib/volt/models/model_hash_behaviour.rb +25 -8
- data/lib/volt/models/persistors/array_store.rb +5 -2
- data/lib/volt/models/persistors/cookies.rb +91 -0
- data/lib/volt/models/persistors/model_store.rb +52 -14
- data/lib/volt/models/persistors/query/query_listener.rb +4 -1
- data/lib/volt/models/persistors/query/query_listener_pool.rb +1 -1
- data/lib/volt/models/persistors/store_state.rb +5 -5
- data/lib/volt/models/validations.rb +87 -18
- data/lib/volt/models/validators/length_validator.rb +1 -1
- data/lib/volt/models/validators/presence_validator.rb +1 -1
- data/lib/volt/models/validators/unique_validator.rb +28 -0
- data/lib/volt/page/bindings/template_binding.rb +2 -2
- data/lib/volt/page/page.rb +4 -0
- data/lib/volt/page/tasks.rb +2 -2
- data/lib/volt/reactive/computation.rb +2 -0
- data/lib/volt/reactive/hash_dependency.rb +1 -3
- data/lib/volt/reactive/reactive_array.rb +7 -0
- data/lib/volt/reactive/reactive_hash.rb +17 -0
- data/lib/volt/server.rb +1 -1
- data/lib/volt/server/component_templates.rb +3 -6
- data/lib/volt/server/html_parser/view_scope.rb +1 -1
- data/lib/volt/server/rack/component_code.rb +3 -2
- data/lib/volt/server/rack/component_paths.rb +15 -0
- data/lib/volt/server/rack/index_files.rb +1 -1
- data/lib/volt/tasks/dispatcher.rb +26 -12
- data/lib/volt/tasks/task_handler.rb +17 -15
- data/spec/apps/kitchen_sink/app/main/config/routes.rb +3 -0
- data/spec/apps/kitchen_sink/app/main/controllers/main_controller.rb +26 -0
- data/spec/apps/kitchen_sink/app/main/controllers/users_test_controller.rb +27 -0
- data/spec/apps/kitchen_sink/app/main/views/main/cookie_test.html +25 -0
- data/spec/apps/kitchen_sink/app/main/views/main/flash.html +13 -0
- data/spec/apps/kitchen_sink/app/main/views/main/main.html +3 -0
- data/spec/apps/kitchen_sink/app/main/views/users_test/index.html +22 -0
- data/spec/apps/kitchen_sink/config/app.rb +3 -0
- data/spec/integration/bindings_spec.rb +1 -1
- data/spec/integration/cookies_spec.rb +48 -0
- data/spec/integration/flash_spec.rb +32 -0
- data/spec/models/model_spec.rb +3 -4
- data/spec/models/validations_spec.rb +13 -13
- data/spec/tasks/dispatcher_spec.rb +1 -1
- data/templates/project/config/app.rb.tt +6 -1
- data/templates/project/{public → config/base_page}/index.html +0 -0
- data/volt.gemspec +4 -0
- metadata +47 -3
@@ -0,0 +1,32 @@
|
|
1
|
+
if ENV['BROWSER']
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe 'flash messages', type: :feature do
|
5
|
+
it 'should flash on sucesses, notices, warnings, and errors' do
|
6
|
+
visit '/'
|
7
|
+
|
8
|
+
click_link 'Flash'
|
9
|
+
|
10
|
+
click_link 'Flash Notice'
|
11
|
+
expect(page).to have_content('A notice message')
|
12
|
+
find('.alert').click
|
13
|
+
expect(page).to_not have_content('A notice message')
|
14
|
+
|
15
|
+
click_link 'Flash Success'
|
16
|
+
expect(page).to have_content('A success message')
|
17
|
+
find('.alert').click
|
18
|
+
expect(page).to_not have_content('A success message')
|
19
|
+
|
20
|
+
click_link 'Flash Warning'
|
21
|
+
expect(page).to have_content('A warning message')
|
22
|
+
find('.alert').click
|
23
|
+
expect(page).to_not have_content('A warning message')
|
24
|
+
|
25
|
+
click_link 'Flash Error'
|
26
|
+
expect(page).to have_content('An error message')
|
27
|
+
find('.alert').click
|
28
|
+
expect(page).to_not have_content('An error message')
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/spec/models/model_spec.rb
CHANGED
@@ -204,17 +204,16 @@ describe Volt::Model do
|
|
204
204
|
a._blue._green = 5
|
205
205
|
Volt::Computation.flush!
|
206
206
|
|
207
|
-
|
208
|
-
expect(count).to eq(2)
|
207
|
+
expect(count).to eq(1)
|
209
208
|
|
210
209
|
a._blue = 22
|
211
210
|
Volt::Computation.flush!
|
212
|
-
expect(count).to eq(
|
211
|
+
expect(count).to eq(2)
|
213
212
|
|
214
213
|
a._blue = { green: 50 }
|
215
214
|
expect(a._blue._green).to eq(50)
|
216
215
|
Volt::Computation.flush!
|
217
|
-
expect(count).to eq(
|
216
|
+
expect(count).to eq(3)
|
218
217
|
end
|
219
218
|
|
220
219
|
it 'should trigger changed when a value is deleted' do
|
@@ -1,17 +1,17 @@
|
|
1
1
|
require 'volt/models'
|
2
2
|
|
3
3
|
class TestModel < Volt::Model
|
4
|
-
validate :
|
5
|
-
validate :
|
6
|
-
validate :
|
4
|
+
validate :name, length: 4
|
5
|
+
validate :description, length: { message: 'needs to be longer', length: 50 }
|
6
|
+
validate :username, presence: true
|
7
7
|
end
|
8
8
|
|
9
9
|
describe Volt::Model do
|
10
10
|
it 'should validate the name' do
|
11
11
|
expect(TestModel.new.errors).to eq(
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
name: ['must be at least 4 characters'],
|
13
|
+
description: ['needs to be longer'],
|
14
|
+
username: ['must be specified']
|
15
15
|
)
|
16
16
|
end
|
17
17
|
|
@@ -20,10 +20,10 @@ describe Volt::Model do
|
|
20
20
|
|
21
21
|
expect(model.marked_errors).to eq({})
|
22
22
|
|
23
|
-
model.mark_field!(:
|
23
|
+
model.mark_field!(:name)
|
24
24
|
|
25
25
|
expect(model.marked_errors).to eq(
|
26
|
-
|
26
|
+
name: ['must be at least 4 characters']
|
27
27
|
)
|
28
28
|
end
|
29
29
|
|
@@ -34,7 +34,7 @@ describe Volt::Model do
|
|
34
34
|
|
35
35
|
model.save!
|
36
36
|
|
37
|
-
expect(model.marked_errors.keys).to eq([:
|
37
|
+
expect(model.marked_errors.keys).to eq([:name, :description, :username])
|
38
38
|
end
|
39
39
|
|
40
40
|
describe 'length' do
|
@@ -43,10 +43,10 @@ describe Volt::Model do
|
|
43
43
|
|
44
44
|
expect(model.marked_errors).to eq({})
|
45
45
|
|
46
|
-
model.mark_field!(:
|
46
|
+
model.mark_field!(:description)
|
47
47
|
|
48
48
|
expect(model.marked_errors).to eq(
|
49
|
-
|
49
|
+
description: ['needs to be longer']
|
50
50
|
)
|
51
51
|
end
|
52
52
|
end
|
@@ -57,10 +57,10 @@ describe Volt::Model do
|
|
57
57
|
|
58
58
|
expect(model.marked_errors).to eq({})
|
59
59
|
|
60
|
-
model.mark_field!(:
|
60
|
+
model.mark_field!(:username)
|
61
61
|
|
62
62
|
expect(model.marked_errors).to eq(
|
63
|
-
|
63
|
+
username: ['must be specified']
|
64
64
|
)
|
65
65
|
end
|
66
66
|
end
|
@@ -13,7 +13,7 @@ if RUBY_PLATFORM != 'opal'
|
|
13
13
|
|
14
14
|
expect(channel).to receive(:send_message).with('response', 0, 'yes works', nil)
|
15
15
|
|
16
|
-
Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :allowed_method, ' works'])
|
16
|
+
Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :allowed_method, {}, ' works'])
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should not allow eval' do
|
@@ -1,6 +1,11 @@
|
|
1
|
-
Volt.
|
1
|
+
Volt.configure do |config|
|
2
2
|
# Setup your global app config here.
|
3
3
|
|
4
|
+
# Your app secret is used for signing things like the user cookie so it can't
|
5
|
+
# be tampered with. A random value is generated on new projects that will work
|
6
|
+
# without the need to customize. Make sure this value doesn't leave your server.
|
7
|
+
config.app_secret = '<%= SecureRandom.urlsafe_base64(50) %>'
|
8
|
+
|
4
9
|
# The app name defaults to the folder it is run in.
|
5
10
|
# config.app_name = '<%= config[:name] %>'
|
6
11
|
|
File without changes
|
data/volt.gemspec
CHANGED
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_dependency 'rake', '~> 10.0.4'
|
31
31
|
spec.add_dependency 'listen', '~> 2.7.0'
|
32
32
|
spec.add_dependency 'uglifier', '~> 2.4.0'
|
33
|
+
spec.add_dependency "configurations", "~> 2.0.0.pre"
|
33
34
|
spec.add_dependency 'yui-compressor', '~> 0.12.0'
|
34
35
|
spec.add_dependency 'opal', '~> 0.6.0'
|
35
36
|
spec.add_dependency 'opal-jquery', '~> 0.2.0'
|
@@ -42,6 +43,9 @@ Gem::Specification.new do |spec|
|
|
42
43
|
spec.add_dependency 'opal-rspec', '0.3.0.beta3'
|
43
44
|
spec.add_dependency 'bundler', '>= 1.5'
|
44
45
|
|
46
|
+
# For user passwords
|
47
|
+
spec.add_dependency 'bcrypt', '~> 3.1.9'
|
48
|
+
|
45
49
|
# spec.add_dependency "promise.rb", "~> 0.6.1"
|
46
50
|
|
47
51
|
# spec.add_dependency "rack-colorized_logger", "~> 1.0.4"
|
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.19
|
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-
|
11
|
+
date: 2014-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: 2.4.0
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: configurations
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 2.0.0.pre
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 2.0.0.pre
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: yui-compressor
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -290,6 +304,20 @@ dependencies:
|
|
290
304
|
- - ">="
|
291
305
|
- !ruby/object:Gem::Version
|
292
306
|
version: '1.5'
|
307
|
+
- !ruby/object:Gem::Dependency
|
308
|
+
name: bcrypt
|
309
|
+
requirement: !ruby/object:Gem::Requirement
|
310
|
+
requirements:
|
311
|
+
- - "~>"
|
312
|
+
- !ruby/object:Gem::Version
|
313
|
+
version: 3.1.9
|
314
|
+
type: :runtime
|
315
|
+
prerelease: false
|
316
|
+
version_requirements: !ruby/object:Gem::Requirement
|
317
|
+
requirements:
|
318
|
+
- - "~>"
|
319
|
+
- !ruby/object:Gem::Version
|
320
|
+
version: 3.1.9
|
293
321
|
- !ruby/object:Gem::Dependency
|
294
322
|
name: guard
|
295
323
|
requirement: !ruby/object:Gem::Requirement
|
@@ -411,6 +439,7 @@ files:
|
|
411
439
|
- lib/volt/models/model_wrapper.rb
|
412
440
|
- lib/volt/models/persistors/array_store.rb
|
413
441
|
- lib/volt/models/persistors/base.rb
|
442
|
+
- lib/volt/models/persistors/cookies.rb
|
414
443
|
- lib/volt/models/persistors/flash.rb
|
415
444
|
- lib/volt/models/persistors/local_store.rb
|
416
445
|
- lib/volt/models/persistors/model_identity_map.rb
|
@@ -425,6 +454,7 @@ files:
|
|
425
454
|
- lib/volt/models/validations.rb
|
426
455
|
- lib/volt/models/validators/length_validator.rb
|
427
456
|
- lib/volt/models/validators/presence_validator.rb
|
457
|
+
- lib/volt/models/validators/unique_validator.rb
|
428
458
|
- lib/volt/page/bindings/attribute_binding.rb
|
429
459
|
- lib/volt/page/bindings/base_binding.rb
|
430
460
|
- lib/volt/page/bindings/component_binding.rb
|
@@ -505,12 +535,17 @@ files:
|
|
505
535
|
- spec/apps/kitchen_sink/app/main/config/routes.rb
|
506
536
|
- spec/apps/kitchen_sink/app/main/controllers/main_controller.rb
|
507
537
|
- spec/apps/kitchen_sink/app/main/controllers/todos_controller.rb
|
538
|
+
- spec/apps/kitchen_sink/app/main/controllers/users_test_controller.rb
|
508
539
|
- spec/apps/kitchen_sink/app/main/views/main/bindings.html
|
540
|
+
- spec/apps/kitchen_sink/app/main/views/main/cookie_test.html
|
541
|
+
- spec/apps/kitchen_sink/app/main/views/main/flash.html
|
509
542
|
- spec/apps/kitchen_sink/app/main/views/main/index.html
|
510
543
|
- spec/apps/kitchen_sink/app/main/views/main/main.html
|
511
544
|
- spec/apps/kitchen_sink/app/main/views/main/store.html
|
512
545
|
- spec/apps/kitchen_sink/app/main/views/todos/index.html
|
546
|
+
- spec/apps/kitchen_sink/app/main/views/users_test/index.html
|
513
547
|
- spec/apps/kitchen_sink/config.ru
|
548
|
+
- spec/apps/kitchen_sink/config/app.rb
|
514
549
|
- spec/apps/kitchen_sink/public/index.html
|
515
550
|
- spec/controllers/reactive_accessors_spec.rb
|
516
551
|
- spec/extra_core/array_spec.rb
|
@@ -520,6 +555,8 @@ files:
|
|
520
555
|
- spec/extra_core/string_transformations_spec.rb
|
521
556
|
- spec/extra_core/symbol_spec.rb
|
522
557
|
- spec/integration/bindings_spec.rb
|
558
|
+
- spec/integration/cookies_spec.rb
|
559
|
+
- spec/integration/flash_spec.rb
|
523
560
|
- spec/integration/list_spec.rb
|
524
561
|
- spec/integration/templates_spec.rb
|
525
562
|
- spec/integration/url_spec.rb
|
@@ -596,8 +633,8 @@ files:
|
|
596
633
|
- templates/project/app/main/views/main/main.html.tt
|
597
634
|
- templates/project/config.ru
|
598
635
|
- templates/project/config/app.rb.tt
|
636
|
+
- templates/project/config/base_page/index.html
|
599
637
|
- templates/project/lib/.empty_directory
|
600
|
-
- templates/project/public/index.html
|
601
638
|
- templates/project/spec/sample_spec.rb
|
602
639
|
- templates/project/spec/spec_helper.rb
|
603
640
|
- volt.gemspec
|
@@ -640,12 +677,17 @@ test_files:
|
|
640
677
|
- spec/apps/kitchen_sink/app/main/config/routes.rb
|
641
678
|
- spec/apps/kitchen_sink/app/main/controllers/main_controller.rb
|
642
679
|
- spec/apps/kitchen_sink/app/main/controllers/todos_controller.rb
|
680
|
+
- spec/apps/kitchen_sink/app/main/controllers/users_test_controller.rb
|
643
681
|
- spec/apps/kitchen_sink/app/main/views/main/bindings.html
|
682
|
+
- spec/apps/kitchen_sink/app/main/views/main/cookie_test.html
|
683
|
+
- spec/apps/kitchen_sink/app/main/views/main/flash.html
|
644
684
|
- spec/apps/kitchen_sink/app/main/views/main/index.html
|
645
685
|
- spec/apps/kitchen_sink/app/main/views/main/main.html
|
646
686
|
- spec/apps/kitchen_sink/app/main/views/main/store.html
|
647
687
|
- spec/apps/kitchen_sink/app/main/views/todos/index.html
|
688
|
+
- spec/apps/kitchen_sink/app/main/views/users_test/index.html
|
648
689
|
- spec/apps/kitchen_sink/config.ru
|
690
|
+
- spec/apps/kitchen_sink/config/app.rb
|
649
691
|
- spec/apps/kitchen_sink/public/index.html
|
650
692
|
- spec/controllers/reactive_accessors_spec.rb
|
651
693
|
- spec/extra_core/array_spec.rb
|
@@ -655,6 +697,8 @@ test_files:
|
|
655
697
|
- spec/extra_core/string_transformations_spec.rb
|
656
698
|
- spec/extra_core/symbol_spec.rb
|
657
699
|
- spec/integration/bindings_spec.rb
|
700
|
+
- spec/integration/cookies_spec.rb
|
701
|
+
- spec/integration/flash_spec.rb
|
658
702
|
- spec/integration/list_spec.rb
|
659
703
|
- spec/integration/templates_spec.rb
|
660
704
|
- spec/integration/url_spec.rb
|