volt 0.9.3.pre1 → 0.9.3.pre2

Sign up to get free protection for your applications and to get access to all the features.
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)