volt 0.9.5 → 0.9.6.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/app/volt/tasks/query_tasks.rb +1 -1
  4. data/app/volt/tasks/user_tasks.rb +6 -0
  5. data/docs/UPGRADE_GUIDE.md +19 -0
  6. data/lib/volt.rb +0 -1
  7. data/lib/volt/cli.rb +3 -0
  8. data/lib/volt/cli/destroy.rb +8 -0
  9. data/lib/volt/cli/generate.rb +1 -105
  10. data/lib/volt/cli/generators.rb +111 -0
  11. data/lib/volt/controllers/model_controller.rb +1 -1
  12. data/lib/volt/helpers/time.rb +5 -5
  13. data/lib/volt/models/array_model.rb +1 -1
  14. data/lib/volt/models/helpers/base.rb +28 -12
  15. data/lib/volt/models/persistors/page.rb +6 -6
  16. data/lib/volt/models/persistors/query/query_listener.rb +1 -1
  17. data/lib/volt/page/bindings/each_binding.rb +1 -1
  18. data/lib/volt/page/channel.rb +18 -7
  19. data/lib/volt/page/tasks.rb +10 -4
  20. data/lib/volt/reactive/computation.rb +20 -8
  21. data/lib/volt/reactive/dependency.rb +3 -1
  22. data/lib/volt/server/component_templates.rb +4 -3
  23. data/lib/volt/server/middleware/default_middleware_stack.rb +6 -6
  24. data/lib/volt/server/rack/index_files.rb +0 -12
  25. data/lib/volt/server/rack/opal_files.rb +1 -1
  26. data/lib/volt/server/socket_connection_handler.rb +40 -1
  27. data/lib/volt/server/template_handlers/sprockets_component_handler.rb +5 -2
  28. data/lib/volt/server/template_handlers/view_processor.rb +4 -4
  29. data/lib/volt/tasks/task.rb +2 -1
  30. data/lib/volt/utils/csso_patch.rb +1 -1
  31. data/lib/volt/version.rb +1 -1
  32. data/lib/volt/volt/app.rb +9 -0
  33. data/lib/volt/volt/server_setup/app.rb +19 -0
  34. data/lib/volt/volt/users.rb +4 -0
  35. data/spec/apps/kitchen_sink/app/main/config/routes.rb +1 -0
  36. data/spec/apps/kitchen_sink/app/main/controllers/main_controller.rb +3 -0
  37. data/spec/apps/kitchen_sink/app/main/models/user.rb +18 -0
  38. data/spec/apps/kitchen_sink/app/main/views/main/callbacks.html +7 -0
  39. data/spec/integration/bindings_spec.rb +1 -1
  40. data/spec/integration/callbacks_spec.rb +31 -0
  41. data/spec/integration/todos_spec.rb +2 -2
  42. data/spec/models/array_model_spec.rb +13 -0
  43. data/spec/models/associations_spec.rb +1 -1
  44. data/spec/models/field_helpers_spec.rb +1 -1
  45. data/spec/models/model_spec.rb +18 -0
  46. data/spec/models/permissions_spec.rb +1 -2
  47. data/spec/models/persistors/page_spec.rb +19 -0
  48. data/spec/reactive/computation_spec.rb +33 -0
  49. data/spec/server/socket_connection_handler_spec.rb +99 -0
  50. data/spec/tasks/dispatcher_spec.rb +1 -1
  51. data/spec/tasks/user_tasks_spec.rb +1 -1
  52. data/spec/utils/task_argument_filtererer_spec.rb +1 -1
  53. data/templates/project/Gemfile.tt +1 -1
  54. data/templates/project/README.md.tt +1 -1
  55. data/templates/project/config/app.rb.tt +10 -0
  56. data/templates/view/index.html.tt +1 -1
  57. metadata +14 -5
  58. data/lib/volt/utils/set_patch.rb +0 -25
@@ -92,6 +92,9 @@ module Main
92
92
  LoginTasks.login_first_user
93
93
  end
94
94
 
95
+ def callbacks
96
+ end
97
+
95
98
  private
96
99
 
97
100
  # the main template contains a #template binding that shows another
@@ -6,4 +6,22 @@ class User < Volt::User
6
6
 
7
7
  validate login_field, unique: true, length: 8
8
8
  validate :email, email: true
9
+
10
+ unless RUBY_PLATFORM == "opal"
11
+ Volt.current_app.on("user_connect") do |user_id|
12
+ begin
13
+ Volt.current_app.store.users.where(id: user_id).first.sync._event_triggered = "user_connect"
14
+ rescue
15
+ #we rescue as this callback will also get called from the SocketConnectionHandler specs (and will fail)
16
+ end
17
+ end
18
+
19
+ Volt.current_app.on("user_disconnect") do |user_id|
20
+ begin
21
+ Volt.current_app.store.users.where(id: user_id).first.sync._event_triggered = "user_disconnect"
22
+ rescue
23
+ #we rescue as this callback will also get called from the SocketConnectionHandler specs (and will fail)
24
+ end
25
+ end
26
+ end
9
27
  end
@@ -0,0 +1,7 @@
1
+ <:Title>
2
+ Lifecycle Callbacks
3
+
4
+ <:Body>
5
+ <h1>Lifecycle Callbacks</h1>
6
+
7
+ {{ store.users.first._event_triggered }}
@@ -131,7 +131,7 @@ describe 'bindings test', type: :feature, sauce: true do
131
131
  # expect(find('#pageSelect3')).to have_content('two')
132
132
  #
133
133
  # # Fill in one field and see if it updates the rest
134
- # fill_in('pageSelect2', :with => 'three')
134
+ # fill_in('pageSelect2', with: 'three')
135
135
  # expect(find('#pageSelect1').value).to eq('three')
136
136
  # expect(find('#pageSelect2').value).to eq('three')
137
137
  # expect(find('#pageSelect3')).to have_content('three')
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'lifecycle callbacks', type: :feature, sauce: true do
4
+
5
+ context 'with a user' do
6
+ before do
7
+ # Add the user
8
+ store._users! << { email: 'test@test.com', password: 'awes0mesEcRet', name: 'Test Account 9550' }
9
+ end
10
+
11
+ it 'should trigger a user_connect event when a user logs in and a user_disconnect event when a user logs out' do
12
+ visit '/'
13
+
14
+ click_link 'Login'
15
+
16
+ fields = all(:css, 'form .form-control')
17
+ fields[0].set('test@test.com')
18
+ fields[1].set('awes0mesEcRet')
19
+ click_button 'Login'
20
+
21
+ visit '/callbacks'
22
+
23
+ expect(page).to have_content('user_connect')
24
+
25
+ click_link 'Test Account 9550'
26
+ click_link 'Logout'
27
+
28
+ expect(page).to have_content('user_disconnect')
29
+ end
30
+ end
31
+ end
@@ -5,7 +5,7 @@ describe 'todos app', type: :feature, sauce: true do
5
5
  it 'should add a todo and remove it' do
6
6
  visit '/todos'
7
7
 
8
- fill_in 'newtodo', :with => 'Todo 1'
8
+ fill_in 'newtodo', with: 'Todo 1'
9
9
  find('#newtodo').native.send_keys(ENTER_KEY)
10
10
 
11
11
  expect(page).to have_content('Todo 1')
@@ -28,7 +28,7 @@ describe 'todos app', type: :feature, sauce: true do
28
28
  it 'should update a todo check state and persist' do
29
29
  visit '/todos'
30
30
 
31
- fill_in 'newtodo', :with => 'Todo 1'
31
+ fill_in 'newtodo', with: 'Todo 1'
32
32
  find('#newtodo').native.send_keys(ENTER_KEY)
33
33
 
34
34
  expect(page).to have_content('Todo 1')
@@ -50,4 +50,17 @@ describe Volt::ArrayModel do
50
50
  end
51
51
  end
52
52
  end
53
+ context "appending a model" do
54
+ it "sets the parent to self" do
55
+ item = Volt::Model.new
56
+ array = Volt::ArrayModel.new([], { path: [:items], parent: double("StoreRoot") })
57
+ array << item
58
+ expect(item.parent).to eq(array)
59
+
60
+ sub = Volt::Model.new
61
+ item._sub_items << sub
62
+ expect(sub.parent).to eq(item._sub_items)
63
+ end
64
+ end
65
+
53
66
  end
@@ -85,7 +85,7 @@ describe Volt::Associations do
85
85
  bob = store.people.create.sync
86
86
 
87
87
  expect(bob.path).to eq([:people, :[]])
88
- address = bob.addresses.create({:street => '1234 awesome street'})
88
+ address = bob.addresses.create({street: '1234 awesome street'})
89
89
 
90
90
  expect(bob.addresses[0].sync.person_id).to eq(bob.id)
91
91
  expect(bob.id).to_not eq(nil)
@@ -47,6 +47,6 @@ describe 'field helpers' do
47
47
  end
48
48
 
49
49
  it 'should track the fields on the model class' do
50
- expect(ExampleModelWithField.fields_data).to eq({:name=>[nil, {}], :value=>[[Numeric, NilClass], {}]})
50
+ expect(ExampleModelWithField.fields_data).to eq({name:[nil, {}], value:[[Numeric, NilClass], {}]})
51
51
  end
52
52
  end
@@ -9,6 +9,9 @@ end
9
9
  class Items < Volt::ArrayModel
10
10
  end
11
11
 
12
+ class SubItem < Item
13
+ end
14
+
12
15
  class TestAssignsMethod < Volt::Model
13
16
  def name=(val)
14
17
  self._name = val
@@ -147,6 +150,15 @@ describe Volt::Model do
147
150
  expect(values).to eq([nil, 'one'])
148
151
  end
149
152
 
153
+ if RUBY_PLATFORM != 'opal'
154
+ it 'should allow a create/destroy from an existing model class' do
155
+ item = Item.new(name: 'The item')
156
+ store._items.create(item)
157
+
158
+ item.destroy
159
+ end
160
+ end
161
+
150
162
  it 'should trigger changed for any indicies after a deleted index' do
151
163
  model = Volt::Model.new
152
164
 
@@ -612,4 +624,10 @@ describe Volt::Model do
612
624
  model._items << {}
613
625
  expect(model._items).to be_instance_of Items
614
626
  end
627
+
628
+ it 'assigns the superclass\'s custom ArrayModel if it exists' do
629
+ model = Volt::Model.new
630
+ model._sub_items << {}
631
+ expect(model._sub_items).to be_instance_of Items
632
+ end
615
633
  end
@@ -61,8 +61,7 @@ describe 'model permissions' do
61
61
  let(:user_todo) { TestUserTodo.new }
62
62
 
63
63
  it 'auto-associates users via own_by_user' do
64
- #TODO: better assertions
65
- expect(user_todo.respond_to?(:user)).to be(true)
64
+ expect(user_todo).to respond_to(:user)
66
65
  end
67
66
 
68
67
  it 'should follow CRUD states when checking permissions' do
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ module Volt
4
+ module Persistors
5
+ describe Page do
6
+ describe '#where' do
7
+ it 'searches for records in the page collection with the given values' do
8
+ juan = Volt::Model.new(name: 'Juan', city: 'Quito', age: 13)
9
+ pedro = Volt::Model.new(name: 'Pedro', city: 'Quito', age: 15)
10
+ jose = Volt::Model.new(name: 'Jose', city: 'Quito', age: 13)
11
+
12
+ page = described_class.new [jose, juan, pedro]
13
+
14
+ expect(page.where age: 13, city: 'Quito').to match_array [juan, jose]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -112,6 +112,39 @@ describe Volt::Computation do
112
112
  expect(values).to eq([nil, nil, 'inner', 'outer', 'inner'])
113
113
  end
114
114
 
115
+ it 'should raise an exception on a .watch! on the initial run' do
116
+ comp = nil
117
+ count = 1
118
+ expect do
119
+ comp = -> { count += 1 ; wrong_method }.watch!
120
+ end.to raise_error(/method `wrong_method'/)
121
+ # comp.stop
122
+ end
123
+
124
+ it 'should log an exception on the 2nd run, but not raise it' do
125
+ comp = nil
126
+ count = 0
127
+ dep = Volt::Dependency.new
128
+
129
+ expect(Volt.logger).to receive(:error) { nil }
130
+
131
+ expect do
132
+ comp = proc do
133
+ dep.depend
134
+ count += 1
135
+ if count > 1
136
+ raise "Count gt one"
137
+ end
138
+ end.watch!
139
+ end.not_to raise_error
140
+
141
+ dep.changed!
142
+
143
+ expect do
144
+ Volt::Computation.flush!
145
+ end.not_to raise_error
146
+ end
147
+
115
148
  describe 'watch_and_resolve!' do
116
149
  it 'should resolve any returnted promises' do
117
150
  promise = Promise.new
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ if RUBY_PLATFORM != 'opal'
4
+ require 'volt/server/socket_connection_handler'
5
+ describe Volt::SocketConnectionHandler do
6
+ let(:fake_dispatcher) { double("Dispatcher", volt_app: Volt.current_app)}
7
+
8
+ let(:fake_session) {double("Faye::WebSocket")}
9
+
10
+ before do
11
+ @old_dispatcher = Volt::SocketConnectionHandler.dispatcher
12
+ Volt::SocketConnectionHandler.dispatcher = fake_dispatcher
13
+ end
14
+
15
+ after do
16
+ Volt::SocketConnectionHandler.dispatcher = @old_dispatcher
17
+ end
18
+
19
+ let(:connection_handler) { Volt::SocketConnectionHandler.new(fake_session) }
20
+
21
+ subject!{ connection_handler }
22
+
23
+ describe '#creation' do
24
+
25
+ context 'with valid session' do
26
+
27
+ it 'should append itself to @@channels' do
28
+ expect(Volt::SocketConnectionHandler.channels).to include(subject)
29
+ end
30
+
31
+ it 'should trigger a client_connect event' do
32
+ val = 0
33
+
34
+ Volt.current_app.on("client_connect") do
35
+ val = 1
36
+ end
37
+
38
+ # TODO: change the way this is handled, we shouldn't have to instantiate a new SocketConnectionHandler just for this test
39
+ expect{Volt::SocketConnectionHandler.new(fake_session)}.to change{val}.by(1)
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '#update' do
45
+ context 'with nil user_id' do
46
+ it 'should trigger a user_connect event when given a valid user_id' do
47
+ id = 0
48
+ Volt.current_app.on("user_connect") do |user_id|
49
+ id = user_id
50
+ end
51
+
52
+ expect{subject.update_user_id(123)}.to change{id}.by(123)
53
+ end
54
+ end
55
+
56
+ context 'with valid user_id' do
57
+ it 'should trigger a user_disconnect event when given a nil user_id' do
58
+ id = 0
59
+ Volt.current_app.on("user_disconnect") do |user_id|
60
+ id = user_id
61
+ end
62
+
63
+ subject.user_id = 123
64
+
65
+ expect{subject.update_user_id(nil)}.to change{id}.by(123)
66
+ end
67
+ end
68
+ end
69
+
70
+ describe '#close' do
71
+ it 'should trigger a client_disconnect event' do
72
+ allow(Volt::SocketConnectionHandler.dispatcher).to receive(:close_channel).and_return true
73
+
74
+ val = 0
75
+
76
+ Volt.current_app.on("client_disconnect") do
77
+ val = 1
78
+ end
79
+
80
+ expect{subject.closed}.to change{val}.by(1)
81
+ end
82
+ context 'with valid user_id' do
83
+ it 'should trigger a user_disconnect event' do
84
+ allow(Volt::SocketConnectionHandler.dispatcher).to receive(:close_channel).and_return true
85
+
86
+ subject.user_id = 123
87
+
88
+ id = 0
89
+
90
+ Volt.current_app.on("user_disconnect") do |user_id|
91
+ id = user_id
92
+ end
93
+
94
+ expect{subject.closed}.to change{id}.by(123)
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -76,7 +76,7 @@ if RUBY_PLATFORM != 'opal'
76
76
  it 'should let you set a cookie' do
77
77
  channel = double('channel')
78
78
 
79
- allow(channel).to receive(:send_message).with('response', 0, 'yes it works', {:something=>"awesome"})
79
+ allow(channel).to receive(:send_message).with('response', 0, 'yes it works', {something:"awesome"})
80
80
  expect(Volt.logger).to receive(:log_dispatch)
81
81
 
82
82
  dispatcher.dispatch(channel, [0, 'TestTask', :set_cookie, {}])
@@ -9,7 +9,7 @@ if RUBY_PLATFORM != 'opal'
9
9
  double('FakeUsersCollection', where: fake_response)
10
10
  end
11
11
 
12
- let(:fake_store) { double('FakeStore', :_users => fake_users_collection) }
12
+ let(:fake_store) { double('FakeStore', _users: fake_users_collection) }
13
13
 
14
14
  let(:login_info) { { 'login' => 'Marty', 'password' => 'McFly' } }
15
15
 
@@ -16,7 +16,7 @@ if RUBY_PLATFORM != 'opal'
16
16
 
17
17
  it 'should create and run a new TaskArgumentFilterer when its filter method is called' do
18
18
  filtered_args = TaskArgumentFilterer.filter([{login: 'jam@jam.com', password: 'some password'}])
19
- expect(filtered_args).to eq([{:login=>"jam@jam.com", :password=>"[FILTERED]"}])
19
+ expect(filtered_args).to eq([{login:"jam@jam.com", password:"[FILTERED]"}])
20
20
  end
21
21
 
22
22
  end
@@ -38,7 +38,7 @@ group :test do
38
38
  end
39
39
 
40
40
  # Server for MRI
41
- platform :mri, :mingw do
41
+ platform :mri, :mingw, :x64_mingw do
42
42
  # The implementation of ReadWriteLock in Volt uses concurrent ruby and ext helps performance.
43
43
  gem 'concurrent-ruby-ext', '~> 0.8.0'
44
44
 
@@ -1,4 +1,4 @@
1
1
  # Place your app's docs here.
2
2
 
3
3
  ## New to Volt?
4
- Be sure to read the volt docs at http://docs.voltframework.com
4
+ Be sure to read the volt docs at http://voltframework.com/docs
@@ -51,6 +51,16 @@ Volt.configure do |config|
51
51
  # have rack deflate all files.
52
52
  # config.deflate = true
53
53
 
54
+ #########################
55
+ # Websocket configuration
56
+ #########################
57
+ # If you need to use a different domain or path for the websocket connection,
58
+ # you can set it here. Volt provides the socket connection url at /socket,
59
+ # but if for example you are using a proxy server that doesn't support
60
+ # websockets, you can point the websocket connection at the app server
61
+ # directly.
62
+ # config.public.websocket_url = '/socket'
63
+
54
64
  #######################
55
65
  # Public configurations
56
66
  #######################
@@ -2,4 +2,4 @@
2
2
  <%= config[:view_name] %> index
3
3
 
4
4
  <:Body>
5
- <h1>Find me in app/<%= config[:component] %>/<%= config[:view_name] %>/index.html</h1>
5
+ <h1>Find me in app/<%= config[:component] %>/views/<%= config[:view_name] %>/index.html</h1>
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.5
4
+ version: 0.9.6.pre1
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-09-01 00:00:00.000000000 Z
11
+ date: 2015-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -415,7 +415,9 @@ files:
415
415
  - lib/volt/cli/base_index_renderer.rb
416
416
  - lib/volt/cli/bundle.rb
417
417
  - lib/volt/cli/console.rb
418
+ - lib/volt/cli/destroy.rb
418
419
  - lib/volt/cli/generate.rb
420
+ - lib/volt/cli/generators.rb
419
421
  - lib/volt/cli/new_gem.rb
420
422
  - lib/volt/cli/runner.rb
421
423
  - lib/volt/config.rb
@@ -600,7 +602,6 @@ files:
600
602
  - lib/volt/utils/promise_extensions.rb
601
603
  - lib/volt/utils/read_write_lock.rb
602
604
  - lib/volt/utils/recursive_exists.rb
603
- - lib/volt/utils/set_patch.rb
604
605
  - lib/volt/utils/tilt_patch.rb
605
606
  - lib/volt/utils/time_patch.rb
606
607
  - lib/volt/utils/timers.rb
@@ -646,6 +647,7 @@ files:
646
647
  - spec/apps/kitchen_sink/app/main/views/events/index.html
647
648
  - spec/apps/kitchen_sink/app/main/views/mailers/welcome.email
648
649
  - spec/apps/kitchen_sink/app/main/views/main/bindings.html
650
+ - spec/apps/kitchen_sink/app/main/views/main/callbacks.html
649
651
  - spec/apps/kitchen_sink/app/main/views/main/cookie_test.html
650
652
  - spec/apps/kitchen_sink/app/main/views/main/first_last.html
651
653
  - spec/apps/kitchen_sink/app/main/views/main/flash.html
@@ -679,6 +681,7 @@ files:
679
681
  - spec/extra_core/string_transformations_spec.rb
680
682
  - spec/extra_core/symbol_spec.rb
681
683
  - spec/integration/bindings_spec.rb
684
+ - spec/integration/callbacks_spec.rb
682
685
  - spec/integration/client_require_spec.rb
683
686
  - spec/integration/cookies_spec.rb
684
687
  - spec/integration/event_spec.rb
@@ -706,6 +709,7 @@ files:
706
709
  - spec/models/model_state_spec.rb
707
710
  - spec/models/permissions_spec.rb
708
711
  - spec/models/persistors/flash_spec.rb
712
+ - spec/models/persistors/page_spec.rb
709
713
  - spec/models/persistors/params_spec.rb
710
714
  - spec/models/persistors/store_spec.rb
711
715
  - spec/models/url_spec.rb
@@ -757,6 +761,7 @@ files:
757
761
  - spec/server/rack/quite_common_logger_spec.rb
758
762
  - spec/server/rack/rack_requests_spec.rb
759
763
  - spec/server/rack/sprockets_helpers_setup.rb
764
+ - spec/server/socket_connection_handler_spec.rb
760
765
  - spec/spec_helper.rb
761
766
  - spec/store/mongo_spec.rb
762
767
  - spec/tasks/dispatcher_spec.rb
@@ -875,9 +880,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
875
880
  version: '2.1'
876
881
  required_rubygems_version: !ruby/object:Gem::Requirement
877
882
  requirements:
878
- - - ">="
883
+ - - ">"
879
884
  - !ruby/object:Gem::Version
880
- version: '0'
885
+ version: 1.3.1
881
886
  requirements: []
882
887
  rubyforge_project:
883
888
  rubygems_version: 2.4.5
@@ -917,6 +922,7 @@ test_files:
917
922
  - spec/apps/kitchen_sink/app/main/views/events/index.html
918
923
  - spec/apps/kitchen_sink/app/main/views/mailers/welcome.email
919
924
  - spec/apps/kitchen_sink/app/main/views/main/bindings.html
925
+ - spec/apps/kitchen_sink/app/main/views/main/callbacks.html
920
926
  - spec/apps/kitchen_sink/app/main/views/main/cookie_test.html
921
927
  - spec/apps/kitchen_sink/app/main/views/main/first_last.html
922
928
  - spec/apps/kitchen_sink/app/main/views/main/flash.html
@@ -950,6 +956,7 @@ test_files:
950
956
  - spec/extra_core/string_transformations_spec.rb
951
957
  - spec/extra_core/symbol_spec.rb
952
958
  - spec/integration/bindings_spec.rb
959
+ - spec/integration/callbacks_spec.rb
953
960
  - spec/integration/client_require_spec.rb
954
961
  - spec/integration/cookies_spec.rb
955
962
  - spec/integration/event_spec.rb
@@ -977,6 +984,7 @@ test_files:
977
984
  - spec/models/model_state_spec.rb
978
985
  - spec/models/permissions_spec.rb
979
986
  - spec/models/persistors/flash_spec.rb
987
+ - spec/models/persistors/page_spec.rb
980
988
  - spec/models/persistors/params_spec.rb
981
989
  - spec/models/persistors/store_spec.rb
982
990
  - spec/models/url_spec.rb
@@ -1028,6 +1036,7 @@ test_files:
1028
1036
  - spec/server/rack/quite_common_logger_spec.rb
1029
1037
  - spec/server/rack/rack_requests_spec.rb
1030
1038
  - spec/server/rack/sprockets_helpers_setup.rb
1039
+ - spec/server/socket_connection_handler_spec.rb
1031
1040
  - spec/spec_helper.rb
1032
1041
  - spec/store/mongo_spec.rb
1033
1042
  - spec/tasks/dispatcher_spec.rb