volt 0.9.3.pre1 → 0.9.3.pre2

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 (123) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +15 -1
  4. data/Gemfile +30 -3
  5. data/README.md +7 -2
  6. data/Rakefile +17 -0
  7. data/app/volt/models/user.rb +1 -1
  8. data/app/volt/tasks/live_query/live_query.rb +0 -1
  9. data/app/volt/tasks/live_query/live_query_pool.rb +8 -2
  10. data/app/volt/tasks/live_query/query_tracker.rb +2 -2
  11. data/app/volt/tasks/query_tasks.rb +10 -27
  12. data/app/volt/tasks/store_tasks.rb +6 -5
  13. data/app/volt/tasks/user_tasks.rb +2 -2
  14. data/docs/UPGRADE_GUIDE.md +14 -0
  15. data/lib/volt/boot.rb +1 -0
  16. data/lib/volt/cli/asset_compile.rb +25 -7
  17. data/lib/volt/cli/console.rb +6 -5
  18. data/lib/volt/cli/generate.rb +2 -2
  19. data/lib/volt/config.rb +2 -1
  20. data/lib/volt/controllers/http_controller.rb +4 -3
  21. data/lib/volt/controllers/model_controller.rb +41 -19
  22. data/lib/volt/controllers/template_helpers.rb +19 -0
  23. data/lib/volt/extra_core/array.rb +6 -0
  24. data/lib/volt/extra_core/hash.rb +8 -26
  25. data/lib/volt/extra_core/string.rb +1 -1
  26. data/lib/volt/models/array_model.rb +12 -4
  27. data/lib/volt/models/associations.rb +11 -13
  28. data/lib/volt/models/buffer.rb +1 -1
  29. data/lib/volt/models/model.rb +22 -13
  30. data/lib/volt/models/model_helpers/model_change_helpers.rb +0 -1
  31. data/lib/volt/models/model_helpers/model_helpers.rb +11 -0
  32. data/lib/volt/models/permissions.rb +9 -12
  33. data/lib/volt/models/persistors/array_store.rb +7 -7
  34. data/lib/volt/models/persistors/base.rb +9 -0
  35. data/lib/volt/models/persistors/cookies.rb +0 -4
  36. data/lib/volt/models/persistors/flash.rb +0 -4
  37. data/lib/volt/models/persistors/local_store.rb +0 -4
  38. data/lib/volt/models/persistors/model_store.rb +13 -21
  39. data/lib/volt/models/persistors/page.rb +22 -0
  40. data/lib/volt/models/persistors/params.rb +0 -4
  41. data/lib/volt/models/persistors/query/query_listener.rb +3 -2
  42. data/lib/volt/models/url.rb +2 -2
  43. data/lib/volt/models/validators/unique_validator.rb +1 -1
  44. data/lib/volt/models.rb +1 -0
  45. data/lib/volt/page/bindings/attribute_binding.rb +2 -2
  46. data/lib/volt/page/bindings/base_binding.rb +7 -3
  47. data/lib/volt/page/bindings/bindings.rb +9 -0
  48. data/lib/volt/page/bindings/content_binding.rb +2 -2
  49. data/lib/volt/page/bindings/each_binding.rb +16 -12
  50. data/lib/volt/page/bindings/event_binding.rb +4 -4
  51. data/lib/volt/page/bindings/if_binding.rb +3 -3
  52. data/lib/volt/page/bindings/view_binding.rb +4 -4
  53. data/lib/volt/page/bindings/yield_binding.rb +3 -3
  54. data/lib/volt/page/channel.rb +6 -0
  55. data/lib/volt/page/channel_stub.rb +1 -1
  56. data/lib/volt/page/page.rb +20 -54
  57. data/lib/volt/page/path_string_renderer.rb +5 -6
  58. data/lib/volt/page/string_template_renderer.rb +2 -2
  59. data/lib/volt/page/targets/attribute_section.rb +47 -0
  60. data/lib/volt/page/targets/base_section.rb +5 -5
  61. data/lib/volt/page/targets/binding_document/component_node.rb +6 -1
  62. data/lib/volt/page/template_renderer.rb +4 -4
  63. data/lib/volt/reactive/computation.rb +32 -3
  64. data/lib/volt/router/routes.rb +5 -5
  65. data/lib/volt/server/component_templates.rb +30 -2
  66. data/lib/volt/server/forking_server.rb +2 -2
  67. data/lib/volt/server/message_bus/base_message_bus.rb +52 -0
  68. data/lib/volt/server/message_bus/message_encoder.rb +64 -0
  69. data/lib/volt/server/message_bus/peer_to_peer/peer_connection.rb +186 -0
  70. data/lib/volt/server/message_bus/peer_to_peer/peer_server.rb +78 -0
  71. data/lib/volt/server/message_bus/peer_to_peer/server_tracker.rb +57 -0
  72. data/lib/volt/server/message_bus/peer_to_peer/socket_with_timeout.rb +27 -0
  73. data/lib/volt/server/message_bus/peer_to_peer.rb +198 -0
  74. data/lib/volt/server/message_bus/redis.rb +1 -0
  75. data/lib/volt/server/rack/asset_files.rb +2 -2
  76. data/lib/volt/server/rack/component_paths.rb +1 -1
  77. data/lib/volt/server/rack/http_resource.rb +3 -2
  78. data/lib/volt/server/rack/opal_files.rb +6 -9
  79. data/lib/volt/server/websocket/websocket_handler.rb +0 -3
  80. data/lib/volt/server.rb +5 -3
  81. data/lib/volt/spec/setup.rb +11 -12
  82. data/lib/volt/tasks/dispatcher.rb +8 -12
  83. data/lib/volt/tasks/task_handler.rb +3 -2
  84. data/lib/volt/utils/csso_patch.rb +24 -0
  85. data/lib/volt/utils/promise_patch.rb +2 -0
  86. data/lib/volt/version.rb +1 -1
  87. data/lib/volt/volt/app.rb +73 -36
  88. data/lib/volt/volt/server_setup/app.rb +81 -0
  89. data/lib/volt.rb +22 -1
  90. data/spec/apps/kitchen_sink/Gemfile +1 -1
  91. data/spec/controllers/http_controller_spec.rb +5 -3
  92. data/spec/controllers/model_controller_spec.rb +2 -2
  93. data/spec/extra_core/hash_spec.rb +9 -0
  94. data/spec/integration/list_spec.rb +3 -3
  95. data/spec/models/associations_spec.rb +10 -2
  96. data/spec/models/dirty_spec.rb +7 -7
  97. data/spec/models/model_spec.rb +10 -2
  98. data/spec/models/permissions_spec.rb +9 -0
  99. data/spec/models/persistors/store_spec.rb +8 -0
  100. data/spec/page/bindings/content_binding_spec.rb +6 -2
  101. data/spec/page/bindings/each_binding_spec.rb +59 -0
  102. data/spec/page/bindings/if_binding_spec.rb +57 -0
  103. data/spec/page/path_string_renderer_spec.rb +5 -5
  104. data/spec/reactive/computation_spec.rb +65 -1
  105. data/spec/router/routes_spec.rb +1 -1
  106. data/spec/server/html_parser/sandlebars_parser_spec.rb +12 -22
  107. data/spec/server/message_bus/message_encoder_spec.rb +49 -0
  108. data/spec/server/message_bus/peer_to_peer/peer_connection_spec.rb +108 -0
  109. data/spec/server/message_bus/peer_to_peer/peer_server_spec.rb +66 -0
  110. data/spec/server/message_bus/peer_to_peer/socket_with_timeout_spec.rb +11 -0
  111. data/spec/server/message_bus/peer_to_peer_spec.rb +11 -0
  112. data/spec/server/rack/asset_files_spec.rb +1 -1
  113. data/spec/server/rack/http_resource_spec.rb +4 -4
  114. data/spec/spec_helper.rb +16 -3
  115. data/spec/tasks/dispatcher_spec.rb +17 -5
  116. data/spec/tasks/live_query_spec.rb +1 -1
  117. data/spec/tasks/query_tracker_spec.rb +34 -34
  118. data/spec/tasks/user_tasks_spec.rb +4 -2
  119. data/templates/project/Gemfile.tt +14 -3
  120. data/templates/project/config/app.rb.tt +27 -2
  121. data/volt.gemspec +3 -8
  122. metadata +32 -101
  123. data/docs/FAQ.md +0 -7
data/spec/spec_helper.rb CHANGED
@@ -2,7 +2,11 @@
2
2
  require 'volt/spec/setup'
3
3
 
4
4
  unless RUBY_PLATFORM == 'opal'
5
- require 'pry-byebug'
5
+ begin
6
+ require 'pry-byebug'
7
+ rescue LoadError => e
8
+ # Ignore if not installed
9
+ end
6
10
  require 'coveralls'
7
11
  Coveralls.wear!
8
12
 
@@ -13,7 +17,16 @@ unless RUBY_PLATFORM == 'opal'
13
17
 
14
18
  SimpleCov.start do
15
19
  add_filter 'spec/'
16
- add_filter 'lib/volt/page/bindings' # all Opal / Front end stuff.
20
+
21
+ # all Opal / Front end stuff.
22
+ add_filter 'lib/volt/page/bindings'
23
+ add_filter 'lib/volt/page/document_events'
24
+ add_filter 'lib/volt/page/targets/dom_template'
25
+ add_filter 'lib/volt/utils/local_storage'
26
+ add_filter 'lib/volt/benchmark'
27
+
28
+ # Copied in from concurrent-ruby, waiting for gem release
29
+ add_filter 'lib/volt/utils/read_write_lock.rb'
17
30
  end
18
31
  end
19
32
 
@@ -31,7 +44,7 @@ unless RUBY_PLATFORM == 'opal'
31
44
  # the seed, which is printed after each run.
32
45
  # --seed 1234
33
46
  config.order = 'random'
34
- # config.seed = '31241'
47
+ config.seed = '45091'
35
48
  end
36
49
 
37
50
  end
@@ -1,3 +1,5 @@
1
+ require 'spec_helper'
2
+
1
3
  if RUBY_PLATFORM != 'opal'
2
4
  class TestTask < Volt::Task
3
5
  def allowed_method(arg1, arg2)
@@ -10,6 +12,8 @@ if RUBY_PLATFORM != 'opal'
10
12
  Volt.logger = spy('Volt::VoltLogger')
11
13
  end
12
14
 
15
+ let(:dispatcher) { Volt::Dispatcher.new(Volt.current_app) }
16
+
13
17
  after do
14
18
  # Cleanup, make volt make a new logger. Otherwise this will leak out.
15
19
  Volt.logger = nil
@@ -20,7 +24,7 @@ if RUBY_PLATFORM != 'opal'
20
24
 
21
25
  expect(channel).to receive(:send_message).with('response', 0, 'yes it works', nil)
22
26
 
23
- Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :allowed_method, {}, ' it', ' works'])
27
+ dispatcher.dispatch(channel, [0, 'TestTask', :allowed_method, {}, ' it', ' works'])
24
28
  end
25
29
 
26
30
  it 'should not allow eval' do
@@ -28,7 +32,7 @@ if RUBY_PLATFORM != 'opal'
28
32
 
29
33
  expect(channel).to receive(:send_message).with('response', 0, nil, RuntimeError.new('unsafe method: eval'))
30
34
 
31
- Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :eval, '5 + 10'])
35
+ dispatcher.dispatch(channel, [0, 'TestTask', :eval, '5 + 10'])
32
36
  end
33
37
 
34
38
  it 'should not allow instance_eval' do
@@ -36,7 +40,7 @@ if RUBY_PLATFORM != 'opal'
36
40
 
37
41
  expect(channel).to receive(:send_message).with('response', 0, nil, RuntimeError.new('unsafe method: instance_eval'))
38
42
 
39
- Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :instance_eval, '5 + 10'])
43
+ dispatcher.dispatch(channel, [0, 'TestTask', :instance_eval, '5 + 10'])
40
44
  end
41
45
 
42
46
  it 'should not allow #methods' do
@@ -44,7 +48,7 @@ if RUBY_PLATFORM != 'opal'
44
48
 
45
49
  expect(channel).to receive(:send_message).with('response', 0, nil, RuntimeError.new('unsafe method: methods'))
46
50
 
47
- Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :methods])
51
+ dispatcher.dispatch(channel, [0, 'TestTask', :methods])
48
52
  end
49
53
 
50
54
  it 'should log an info message before and after the dispatch' do
@@ -53,7 +57,15 @@ if RUBY_PLATFORM != 'opal'
53
57
  allow(channel).to receive(:send_message).with('response', 0, 'yes it works', nil)
54
58
  expect(Volt.logger).to receive(:log_dispatch)
55
59
 
56
- Volt::Dispatcher.new.dispatch(channel, [0, 'TestTask', :allowed_method, {}, ' it', ' works'])
60
+ dispatcher.dispatch(channel, [0, 'TestTask', :allowed_method, {}, ' it', ' works'])
61
+ end
62
+
63
+ it 'closes the channel' do
64
+ disp = dispatcher
65
+ channel = Volt::ChannelStub.new
66
+ # This doesn't do much except find typos, which is the only reason
67
+ # I haven't deleted it. Work in progress -@RickCarlino
68
+ this_spec_needs_improvement = disp.close_channel(channel)
57
69
  end
58
70
  end
59
71
  end
@@ -9,7 +9,7 @@ if RUBY_PLATFORM != 'opal'
9
9
  data_store = double('volt/data store')
10
10
 
11
11
  expect(data_store).to receive(:query).with('_items', {}).and_return([
12
- { '_id' => 0, '_name' => 'one' }
12
+ { 'id' => 0, '_name' => 'one' }
13
13
  ])
14
14
 
15
15
  live_query = LiveQuery.new(pool, data_store, '_items', {})
@@ -18,7 +18,7 @@ if RUBY_PLATFORM != 'opal'
18
18
 
19
19
  def notify_removed(ids, skip_channel)
20
20
  # Remove the id's that need to be removed
21
- @items.reject! { |item| ids.include?(item['_id']) }
21
+ @items.reject! { |item| ids.include?(item[:id]) }
22
22
  end
23
23
 
24
24
  def notify_added(index, data, skip_channel)
@@ -26,14 +26,14 @@ if RUBY_PLATFORM != 'opal'
26
26
  end
27
27
 
28
28
  def notify_moved(id, index, skip_channel)
29
- item = @items.find { |item| item['_id'] == id }
29
+ item = @items.find { |item| item[:id] == id }
30
30
  @items.delete(item)
31
31
 
32
32
  @items.insert(index, item)
33
33
  end
34
34
 
35
35
  def notify_changed(id, data, skip_channel)
36
- item = @items.find { |item| item['_id'] == id }
36
+ item = @items.find { |item| item[:id] == id }
37
37
  idx = @items.index(item)
38
38
  @items.delete(item)
39
39
  @items.insert(idx, data)
@@ -55,7 +55,7 @@ if RUBY_PLATFORM != 'opal'
55
55
 
56
56
  it 'should add items' do
57
57
  @items = [
58
- { '_id' => 1, '_name' => 'one' }
58
+ { id: 1, name: 'one' }
59
59
  ]
60
60
 
61
61
  expect(@live_query.items).to eq([])
@@ -67,14 +67,14 @@ if RUBY_PLATFORM != 'opal'
67
67
 
68
68
  it 'should remove items' do
69
69
  @items = [
70
- { '_id' => 1, '_name' => 'one' },
71
- { '_id' => 2, '_name' => 'two' }
70
+ { id: 1, name: 'one' },
71
+ { id: 2, name: 'two' }
72
72
  ]
73
73
  @query_tracker.run
74
74
  expect(@live_query.items).to eq(@items)
75
75
 
76
76
  @items = [
77
- { '_id' => 2, '_name' => 'two' }
77
+ { id: 2, name: 'two' }
78
78
  ]
79
79
  @query_tracker.run
80
80
  expect(@live_query.items).to eq(@items)
@@ -82,17 +82,17 @@ if RUBY_PLATFORM != 'opal'
82
82
 
83
83
  it 'should move items' do
84
84
  @items = [
85
- { '_id' => 1, '_name' => 'one' },
86
- { '_id' => 2, '_name' => 'two' },
87
- { '_id' => 3, '_name' => 'three' }
85
+ { id: 1, name: 'one' },
86
+ { id: 2, name: 'two' },
87
+ { id: 3, name: 'three' }
88
88
  ]
89
89
  @query_tracker.run
90
90
  expect(@live_query.items).to eq(@items)
91
91
 
92
92
  @items = [
93
- { '_id' => 2, '_name' => 'two' },
94
- { '_id' => 3, '_name' => 'three' },
95
- { '_id' => 1, '_name' => 'one' }
93
+ { id: 2, name: 'two' },
94
+ { id: 3, name: 'three' },
95
+ { id: 1, name: 'one' }
96
96
  ]
97
97
  @query_tracker.run
98
98
  expect(@live_query.items).to eq(@items)
@@ -100,22 +100,22 @@ if RUBY_PLATFORM != 'opal'
100
100
 
101
101
  it 'should handle complex transforms' do
102
102
  @items = [
103
- { '_id' => 1, '_name' => 'one' },
104
- { '_id' => 2, '_name' => 'two' },
105
- { '_id' => 3, '_name' => 'three' },
106
- { '_id' => 4, '_name' => 'four' },
107
- { '_id' => 5, '_name' => 'five' }
103
+ { id: 1, name: 'one' },
104
+ { id: 2, name: 'two' },
105
+ { id: 3, name: 'three' },
106
+ { id: 4, name: 'four' },
107
+ { id: 5, name: 'five' }
108
108
  ]
109
109
  @query_tracker.run
110
110
  expect(@live_query.items).to eq(@items)
111
111
 
112
112
  @items = [
113
- { '_id' => 7, '_name' => 'seven' },
114
- { '_id' => 4, '_name' => 'four' },
115
- { '_id' => 1, '_name' => 'one' },
116
- { '_id' => 5, '_name' => 'five' },
117
- { '_id' => 3, '_name' => 'three' },
118
- { '_id' => 6, '_name' => 'five' }
113
+ { id: 7, name: 'seven' },
114
+ { id: 4, name: 'four' },
115
+ { id: 1, name: 'one' },
116
+ { id: 5, name: 'five' },
117
+ { id: 3, name: 'three' },
118
+ { id: 6, name: 'five' }
119
119
  ]
120
120
  @query_tracker.run
121
121
  expect(@live_query.items).to eq(@items)
@@ -123,19 +123,19 @@ if RUBY_PLATFORM != 'opal'
123
123
 
124
124
  it 'should notify data hash has changed' do
125
125
  @items = [
126
- { '_id' => 1, '_name' => 'one' },
127
- { '_id' => 2, '_name' => 'two' },
128
- { '_id' => 3, '_name' => 'three' },
129
- { '_id' => 4, '_name' => 'four' },
130
- { '_id' => 5, '_name' => 'five' }
126
+ { id: 1, name: 'one' },
127
+ { id: 2, name: 'two' },
128
+ { id: 3, name: 'three' },
129
+ { id: 4, name: 'four' },
130
+ { id: 5, name: 'five' }
131
131
  ]
132
132
  @query_tracker.run
133
133
  @items = [
134
- { '_id' => 1, '_name' => 'some' },
135
- { '_id' => 2, '_name' => 'values' },
136
- { '_id' => 3, '_name' => 'have' },
137
- { '_id' => 4, '_name' => 'changed' },
138
- { '_id' => 5, '_name' => 'other' }
134
+ { id: 1, name: 'some' },
135
+ { id: 2, name: 'values' },
136
+ { id: 3, name: 'have' },
137
+ { id: 4, name: 'changed' },
138
+ { id: 5, name: 'other' }
139
139
  ]
140
140
  expect(@live_query.items).to_not eq(@items)
141
141
  @query_tracker.run
@@ -18,6 +18,8 @@ if RUBY_PLATFORM != 'opal'
18
18
  allow(fake_response).to receive(:fetch_first).and_yield(user)
19
19
  end
20
20
 
21
+ subject { UserTasks.new(Volt.current_app) }
22
+
21
23
  describe '#login' do
22
24
  context 'with no matching user' do
23
25
  let(:user) { false }
@@ -30,7 +32,7 @@ if RUBY_PLATFORM != 'opal'
30
32
 
31
33
  context 'with a matching user' do
32
34
  let(:password) { BCrypt::Password.create(login_info['password']) }
33
- let(:user) { double('User', _id: 1, _hashed_password: password) }
35
+ let(:user) { double('User', id: 1, _hashed_password: password) }
34
36
 
35
37
  it 'fails on bad password' do
36
38
  expect { subject.login(login_info.merge 'password' => 'Not McFly') }.
@@ -50,7 +52,7 @@ if RUBY_PLATFORM != 'opal'
50
52
  subject.login(login_info)
51
53
 
52
54
  expect(Digest::SHA256).to have_received(:hexdigest).with(
53
- "#{Volt.config.app_secret}::#{user._id}"
55
+ "#{Volt.config.app_secret}::#{user.id}"
54
56
  )
55
57
  end
56
58
  end
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
3
3
  gem 'volt', '<%= config[:version] %>'
4
4
 
5
5
  # volt uses mongo as the default data store.
6
- gem 'volt-mongo', '~> 0.0.1'
6
+ gem 'volt-mongo', '~> 0.0.2'
7
7
 
8
8
  # The following gem's are optional for themeing
9
9
  # Twitter bootstrap
@@ -13,10 +13,19 @@ gem 'volt-bootstrap', '~> 0.0.10'
13
13
  gem 'volt-bootstrap_jumbotron_theme', '~> 0.1.0'
14
14
 
15
15
  # User templates for login, signup, and logout menu.
16
- gem 'volt-user_templates', '~> 0.2.0'
16
+ gem 'volt-user_templates', '~> 0.3.0'
17
17
 
18
18
  # Add ability to send e-mail from apps.
19
- gem 'volt-mailer', '~> 0.0.2'
19
+ gem 'volt-mailer', '~> 0.1.0'
20
+
21
+ # Use rbnacl for message bus encrpytion
22
+ # (optional, if you don't need encryption, disable in app.rb and remove)
23
+ gem 'rbnacl', require: false
24
+ gem 'rbnacl-libsodium', require: false
25
+
26
+ # Asset compilation gems, they will be required when needed.
27
+ gem 'csso-rails', '~> 0.3.4', require: false
28
+ gem 'uglifier', '>= 2.4.0', require: false
20
29
 
21
30
  group :test do
22
31
  # Testing dependencies
@@ -32,6 +41,8 @@ end
32
41
  platform :mri do
33
42
  # The implementation of ReadWriteLock in Volt uses concurrent ruby and ext helps performance.
34
43
  gem 'concurrent-ruby-ext', '~> 0.8.0'
44
+
45
+ # Thin is the default volt server, you Puma is also supported
35
46
  gem 'thin', '~> 1.6.0'
36
47
  gem 'bson_ext', '~> 1.9.0'
37
48
  end
@@ -84,6 +84,31 @@ Volt.configure do |config|
84
84
  # :domain => "localhost.localdomain" # the HELO domain provided by the client to the server
85
85
  # }
86
86
 
87
-
88
-
87
+ #############
88
+ # Message Bus
89
+ #############
90
+ # Volt provides a "Message Bus" out of the box. The message bus provides
91
+ # a pub/sub service between any volt instance (server, client, runner, etc..)
92
+ # that share the same database. The message bus can be used by app code. It
93
+ # is also used internally to push data to any listening clients.
94
+ #
95
+ # The default message bus (called "peer_to_peer") uses the database to sync
96
+ # socket ip's/ports.
97
+ # config.message_bus.bus_name = 'peer_to_peer'
98
+ #
99
+ # Encrypt message bus - messages on the message bus are encrypted by default
100
+ # using rbnacl.
101
+ # config.message_bus.disable_encryption = true
102
+ #
103
+ # ## MessageBus Server -- the message bus binds to a port and ip which the
104
+ # other volt instances need to be able to connect to. You can customize
105
+ # the server below:
106
+ #
107
+ # Port range - you can specify a range of ports that an instance can bind the
108
+ # message bus on. You can specify a range, an array of Integers, or an array
109
+ # of ranges.
110
+ # config.message_bus.bind_port_ranges = (58000..61000)
111
+ #
112
+ # Bind Ip - specifies the ip address the message bus server should bind on.
113
+ # config.message_bus.bind_ip = '127.0.0.1'
89
114
  end
data/volt.gemspec CHANGED
@@ -25,9 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'sprockets-sass', '~> 1.0.0'
26
26
  spec.add_dependency 'sass', '~> 3.2.5'
27
27
  spec.add_dependency 'listen', '~> 2.8.0'
28
- spec.add_dependency 'uglifier', '>= 2.4.0'
29
28
  spec.add_dependency 'configurations', '~> 2.0.0.pre'
30
- spec.add_dependency 'ruby-clean-css', '~> 1.0.0'
31
29
  spec.add_dependency 'opal', '~> 0.7.2'
32
30
  spec.add_dependency 'bundler', '>= 1.5'
33
31
  spec.add_dependency 'faye-websocket', '~> 0.9.2'
@@ -55,12 +53,9 @@ Gem::Specification.new do |spec|
55
53
 
56
54
  # Yard and formatting
57
55
  spec.add_development_dependency 'yard', '~> 0.8.7.0'
58
- spec.add_development_dependency 'redcarpet', '~> 3.2.2'
59
- spec.add_development_dependency 'github-markup', '~> 1.3.1'
60
-
61
- spec.add_development_dependency 'sauce', '~> 3.5.3'
62
- spec.add_development_dependency 'sauce-connect', '~> 3.5.0'
63
- spec.add_development_dependency 'pry-byebug', '~> 2.0.0'
64
56
 
65
57
  spec.add_development_dependency 'rubocop', '~> 0.31.0'
58
+
59
+ # NOTE: Some development dependencies are specified in the Gemfile because
60
+ # bundler has platform support.
66
61
  end
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.3.pre1
4
+ version: 0.9.3.pre2
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-05-14 00:00:00.000000000 Z
11
+ date: 2015-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -94,20 +94,6 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 2.8.0
97
- - !ruby/object:Gem::Dependency
98
- name: uglifier
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: 2.4.0
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: 2.4.0
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: configurations
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +108,6 @@ dependencies:
122
108
  - - "~>"
123
109
  - !ruby/object:Gem::Version
124
110
  version: 2.0.0.pre
125
- - !ruby/object:Gem::Dependency
126
- name: ruby-clean-css
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 1.0.0
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 1.0.0
139
111
  - !ruby/object:Gem::Dependency
140
112
  name: opal
141
113
  requirement: !ruby/object:Gem::Requirement
@@ -374,76 +346,6 @@ dependencies:
374
346
  - - "~>"
375
347
  - !ruby/object:Gem::Version
376
348
  version: 0.8.7.0
377
- - !ruby/object:Gem::Dependency
378
- name: redcarpet
379
- requirement: !ruby/object:Gem::Requirement
380
- requirements:
381
- - - "~>"
382
- - !ruby/object:Gem::Version
383
- version: 3.2.2
384
- type: :development
385
- prerelease: false
386
- version_requirements: !ruby/object:Gem::Requirement
387
- requirements:
388
- - - "~>"
389
- - !ruby/object:Gem::Version
390
- version: 3.2.2
391
- - !ruby/object:Gem::Dependency
392
- name: github-markup
393
- requirement: !ruby/object:Gem::Requirement
394
- requirements:
395
- - - "~>"
396
- - !ruby/object:Gem::Version
397
- version: 1.3.1
398
- type: :development
399
- prerelease: false
400
- version_requirements: !ruby/object:Gem::Requirement
401
- requirements:
402
- - - "~>"
403
- - !ruby/object:Gem::Version
404
- version: 1.3.1
405
- - !ruby/object:Gem::Dependency
406
- name: sauce
407
- requirement: !ruby/object:Gem::Requirement
408
- requirements:
409
- - - "~>"
410
- - !ruby/object:Gem::Version
411
- version: 3.5.3
412
- type: :development
413
- prerelease: false
414
- version_requirements: !ruby/object:Gem::Requirement
415
- requirements:
416
- - - "~>"
417
- - !ruby/object:Gem::Version
418
- version: 3.5.3
419
- - !ruby/object:Gem::Dependency
420
- name: sauce-connect
421
- requirement: !ruby/object:Gem::Requirement
422
- requirements:
423
- - - "~>"
424
- - !ruby/object:Gem::Version
425
- version: 3.5.0
426
- type: :development
427
- prerelease: false
428
- version_requirements: !ruby/object:Gem::Requirement
429
- requirements:
430
- - - "~>"
431
- - !ruby/object:Gem::Version
432
- version: 3.5.0
433
- - !ruby/object:Gem::Dependency
434
- name: pry-byebug
435
- requirement: !ruby/object:Gem::Requirement
436
- requirements:
437
- - - "~>"
438
- - !ruby/object:Gem::Version
439
- version: 2.0.0
440
- type: :development
441
- prerelease: false
442
- version_requirements: !ruby/object:Gem::Requirement
443
- requirements:
444
- - - "~>"
445
- - !ruby/object:Gem::Version
446
- version: 2.0.0
447
349
  - !ruby/object:Gem::Dependency
448
350
  name: rubocop
449
351
  requirement: !ruby/object:Gem::Requirement
@@ -494,7 +396,7 @@ files:
494
396
  - app/volt/tasks/user_tasks.rb
495
397
  - app/volt/views/notices/index.html
496
398
  - bin/volt
497
- - docs/FAQ.md
399
+ - docs/UPGRADE_GUIDE.md
498
400
  - docs/volt-logo.jpg
499
401
  - lib/volt.rb
500
402
  - lib/volt/assets/test.rb
@@ -510,6 +412,7 @@ files:
510
412
  - lib/volt/controllers/actions.rb
511
413
  - lib/volt/controllers/http_controller.rb
512
414
  - lib/volt/controllers/model_controller.rb
415
+ - lib/volt/controllers/template_helpers.rb
513
416
  - lib/volt/data_stores/base_adaptor_client.rb
514
417
  - lib/volt/data_stores/base_adaptor_server.rb
515
418
  - lib/volt/data_stores/data_store.rb
@@ -550,6 +453,7 @@ files:
550
453
  - lib/volt/models/persistors/local_store.rb
551
454
  - lib/volt/models/persistors/model_identity_map.rb
552
455
  - lib/volt/models/persistors/model_store.rb
456
+ - lib/volt/models/persistors/page.rb
553
457
  - lib/volt/models/persistors/params.rb
554
458
  - lib/volt/models/persistors/query/normalizer.rb
555
459
  - lib/volt/models/persistors/query/query_listener.rb
@@ -572,6 +476,7 @@ files:
572
476
  - lib/volt/models/validators/user_validation.rb
573
477
  - lib/volt/page/bindings/attribute_binding.rb
574
478
  - lib/volt/page/bindings/base_binding.rb
479
+ - lib/volt/page/bindings/bindings.rb
575
480
  - lib/volt/page/bindings/component_binding.rb
576
481
  - lib/volt/page/bindings/content_binding.rb
577
482
  - lib/volt/page/bindings/each_binding.rb
@@ -627,6 +532,14 @@ files:
627
532
  - lib/volt/server/html_parser/view_handler.rb
628
533
  - lib/volt/server/html_parser/view_parser.rb
629
534
  - lib/volt/server/html_parser/view_scope.rb
535
+ - lib/volt/server/message_bus/base_message_bus.rb
536
+ - lib/volt/server/message_bus/message_encoder.rb
537
+ - lib/volt/server/message_bus/peer_to_peer.rb
538
+ - lib/volt/server/message_bus/peer_to_peer/peer_connection.rb
539
+ - lib/volt/server/message_bus/peer_to_peer/peer_server.rb
540
+ - lib/volt/server/message_bus/peer_to_peer/server_tracker.rb
541
+ - lib/volt/server/message_bus/peer_to_peer/socket_with_timeout.rb
542
+ - lib/volt/server/message_bus/redis.rb
630
543
  - lib/volt/server/rack/asset_files.rb
631
544
  - lib/volt/server/rack/component_code.rb
632
545
  - lib/volt/server/rack/component_paths.rb
@@ -650,6 +563,7 @@ files:
650
563
  - lib/volt/tasks/dispatcher.rb
651
564
  - lib/volt/tasks/task_handler.rb
652
565
  - lib/volt/utils/boolean_patch.rb
566
+ - lib/volt/utils/csso_patch.rb
653
567
  - lib/volt/utils/ejson.rb
654
568
  - lib/volt/utils/event_counter.rb
655
569
  - lib/volt/utils/generic_counting_pool.rb
@@ -668,6 +582,7 @@ files:
668
582
  - lib/volt/volt/app.rb
669
583
  - lib/volt/volt/core.rb
670
584
  - lib/volt/volt/environment.rb
585
+ - lib/volt/volt/server_setup/app.rb
671
586
  - lib/volt/volt/users.rb
672
587
  - spec/apps/file_loading/app/bootstrap/assets/js/bootstrap.js
673
588
  - spec/apps/file_loading/app/main/assets/js/test1.js
@@ -713,6 +628,7 @@ files:
713
628
  - spec/extra_core/array_spec.rb
714
629
  - spec/extra_core/blank_spec.rb
715
630
  - spec/extra_core/class_spec.rb
631
+ - spec/extra_core/hash_spec.rb
716
632
  - spec/extra_core/inflector_spec.rb
717
633
  - spec/extra_core/logger_spec.rb
718
634
  - spec/extra_core/object_spec.rb
@@ -755,6 +671,8 @@ files:
755
671
  - spec/models/validators/shared_examples_for_validators.rb
756
672
  - spec/models/validators/unique_validator_spec.rb
757
673
  - spec/page/bindings/content_binding_spec.rb
674
+ - spec/page/bindings/each_binding_spec.rb
675
+ - spec/page/bindings/if_binding_spec.rb
758
676
  - spec/page/bindings/template_binding/view_lookup_for_path_spec.rb
759
677
  - spec/page/bindings/template_binding_spec.rb
760
678
  - spec/page/path_string_renderer_spec.rb
@@ -771,6 +689,11 @@ files:
771
689
  - spec/server/html_parser/sandlebars_parser_spec.rb
772
690
  - spec/server/html_parser/view_handler_spec.rb
773
691
  - spec/server/html_parser/view_parser_spec.rb
692
+ - spec/server/message_bus/message_encoder_spec.rb
693
+ - spec/server/message_bus/peer_to_peer/peer_connection_spec.rb
694
+ - spec/server/message_bus/peer_to_peer/peer_server_spec.rb
695
+ - spec/server/message_bus/peer_to_peer/socket_with_timeout_spec.rb
696
+ - spec/server/message_bus/peer_to_peer_spec.rb
774
697
  - spec/server/rack/asset_files_spec.rb
775
698
  - spec/server/rack/component_paths_spec.rb
776
699
  - spec/server/rack/http_request_spec.rb
@@ -937,6 +860,7 @@ test_files:
937
860
  - spec/extra_core/array_spec.rb
938
861
  - spec/extra_core/blank_spec.rb
939
862
  - spec/extra_core/class_spec.rb
863
+ - spec/extra_core/hash_spec.rb
940
864
  - spec/extra_core/inflector_spec.rb
941
865
  - spec/extra_core/logger_spec.rb
942
866
  - spec/extra_core/object_spec.rb
@@ -979,6 +903,8 @@ test_files:
979
903
  - spec/models/validators/shared_examples_for_validators.rb
980
904
  - spec/models/validators/unique_validator_spec.rb
981
905
  - spec/page/bindings/content_binding_spec.rb
906
+ - spec/page/bindings/each_binding_spec.rb
907
+ - spec/page/bindings/if_binding_spec.rb
982
908
  - spec/page/bindings/template_binding/view_lookup_for_path_spec.rb
983
909
  - spec/page/bindings/template_binding_spec.rb
984
910
  - spec/page/path_string_renderer_spec.rb
@@ -995,6 +921,11 @@ test_files:
995
921
  - spec/server/html_parser/sandlebars_parser_spec.rb
996
922
  - spec/server/html_parser/view_handler_spec.rb
997
923
  - spec/server/html_parser/view_parser_spec.rb
924
+ - spec/server/message_bus/message_encoder_spec.rb
925
+ - spec/server/message_bus/peer_to_peer/peer_connection_spec.rb
926
+ - spec/server/message_bus/peer_to_peer/peer_server_spec.rb
927
+ - spec/server/message_bus/peer_to_peer/socket_with_timeout_spec.rb
928
+ - spec/server/message_bus/peer_to_peer_spec.rb
998
929
  - spec/server/rack/asset_files_spec.rb
999
930
  - spec/server/rack/component_paths_spec.rb
1000
931
  - spec/server/rack/http_request_spec.rb
data/docs/FAQ.md DELETED
@@ -1,7 +0,0 @@
1
- # FAQ
2
-
3
- ## How do I include/call JavaScript from Volt?
4
-
5
- 1. If you have a url outside of your project you want to include with a component, see dependencies under https://github.com/voltrb/volt/blob/master/Readme.md#Dependencies. This is useful for including assets from a shared CDN and will place a script tag on the page.
6
- 2. You can also place script tags in public/index.html (though it's better to put them in the components). Any JS files in app/{component_name}/assets/js will be loaded automatically.
7
- 3. Lastly, you can also embed javascript inline in any controllers since they run in opal (see opalrb.org for info on that)