volt 0.9.5 → 0.9.6.pre1

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.
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