volt 0.9.5.pre1 → 0.9.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a75b8e5c26d8b7a65f1db6e74aa3a439409b9dd
4
- data.tar.gz: d672f1462c31eb1dfc1cc757019445290648ba96
3
+ metadata.gz: a5ad03d3fbc695e769889222bdd6657b969c8f0c
4
+ data.tar.gz: 71b3134705638ac491e1cdb37859aefafe44d159
5
5
  SHA512:
6
- metadata.gz: e9462ea295ea9bf43b4e5acdebec5fd6962451a68c2cb656316b0cca67f259f85442df3c1d9ecb7175f8ecbbf9a5402032c552479b5e0164f2e15414c75abf07
7
- data.tar.gz: 78804d64f6f96755c02cf27b980e4a831a5cd86fb43679d5dacea621381f0c848a3960510fea4e6da39f0392aec60a85b81652feb5781b285fe81fc59e636624
6
+ metadata.gz: 97fb9fafd89425cd8a137b9758ebb488a289af1f88b25b4b893693852138a6325e354863d4a737155191f386166af62b54d7e88799b3feef17e74f3f9ef5a9dc
7
+ data.tar.gz: 8ea29521ba220cfdf866db220bca6e6afc62c2e4086fe4d72b10cbc3964ed7545974ba199ba03a0514c1c620515bc3e139b94506214b6910934dd5a6871823e6
@@ -3,6 +3,8 @@
3
3
  ## 0.9.5
4
4
  ### Added
5
5
  - You can now disable auto-import of JS/CSS with ```disable_auto_import``` in a dependencies.rb file
6
+ - Opal was upgraded to 0.8, which brings sourcemaps back (yah!)
7
+ - Page load performance was improved, and more of sprockets was used for component loading.
6
8
 
7
9
  ## 0.9.4
8
10
  ### Lingo Change
data/README.md CHANGED
@@ -41,7 +41,7 @@ Rick Carlino has been putting together some great volt tutorial videos also.
41
41
  - [Build a Realtime Chat App with Volt](http://datamelon.io/blog/2015/building-a-chat-app-in-volt.html)
42
42
  - [Understanding Volt Views](http://datamelon.io/blog/2015/understanding-views-in-volt-with-a-card-game.html)
43
43
 
44
- @anhbizcad maintains a [playlist of Volt related videos](https://www.youtube.com/watch?v=McxtO8ybxy8&list=PLmQFeDKFCPXatHb-zEXwfeMH01DPiZjP7).
44
+ @ahnbizcad maintains a [playlist of Volt related videos](https://www.youtube.com/watch?v=McxtO8ybxy8&list=PLmQFeDKFCPXatHb-zEXwfeMH01DPiZjP7).
45
45
 
46
46
  # Getting Help
47
47
 
@@ -58,3 +58,7 @@ VoltFramework is currently a labor of love mainly built by a small group of core
58
58
  [![Pledgie](https://pledgie.com/campaigns/26731.png?skin_name=chrome)](https://pledgie.com/campaigns/26731)
59
59
 
60
60
  Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ
61
+
62
+
63
+ Timings:
64
+ - view:
@@ -67,8 +67,8 @@ module Volt
67
67
  # TODO: this is a work around for a bug when switching between
68
68
  # source maps and non-source maps.
69
69
  if File.exist?('config.ru') && File.exist?('Gemfile')
70
- FileUtils.rm_rf('tmp/sass')
71
- FileUtils.rm_rf('tmp/sprockets')
70
+ # FileUtils.rm_rf('tmp/sass')
71
+ # FileUtils.rm_rf('tmp/sprockets')
72
72
  else
73
73
  say('Current folder is not a Volt project', :red)
74
74
  return
@@ -2,7 +2,7 @@ module Volt
2
2
  module Associations
3
3
  module ClassMethods
4
4
  def belongs_to(method_name, options = {})
5
- collection ||= options.fetch(:collection, method_name)
5
+ collection ||= options.fetch(:collection, method_name).pluralize
6
6
  foreign_key ||= options.fetch(:foreign_key, :id)
7
7
  local_key ||= options.fetch(:local_key, "#{method_name}_id")
8
8
 
@@ -16,7 +16,7 @@ module Volt
16
16
  lookup_key = get(local_key)
17
17
 
18
18
  # Return a promise for the belongs_to
19
- root.get(collection.pluralize).where(foreign_key => lookup_key).first
19
+ root.get(collection).where(foreign_key => lookup_key).first
20
20
  end
21
21
  end
22
22
 
@@ -28,9 +28,16 @@ module Volt
28
28
  end
29
29
  end
30
30
 
31
- def has_many(method_name, remote_key_name = nil)
31
+ def has_many(method_name, options = {})
32
+ collection ||= options.fetch(:collection, method_name).pluralize
33
+
34
+ # Use the underscored current class name as the something_id.
35
+ foreign_key ||= options.fetch(:foreign_key, "#{to_s.underscore.singularize}_id")
36
+ local_key ||= options.fetch(:local_key, :id)
37
+
32
38
  define_method(method_name) do
33
- get(method_name.pluralize, true)
39
+ lookup_key = get(local_key)
40
+ get(collection).where(foreign_key => lookup_key)
34
41
  end
35
42
  end
36
43
 
@@ -1,5 +1,7 @@
1
1
  require 'volt/server/html_parser/view_parser'
2
2
  require 'volt/tasks/task'
3
+ require 'volt/server/template_handlers/preprocessors'
4
+
3
5
 
4
6
  # Initialize with the path to a component and returns all the front-end
5
7
  # setup code (for controllers, models, views, and routes)
@@ -11,39 +13,7 @@ module Volt
11
13
  end
12
14
 
13
15
  class ComponentTemplates
14
-
15
- module Handlers #:nodoc:
16
- # Setup default handler on extend
17
- def self.extended(base)
18
- base.register_template_handler :html, BasicHandler.new
19
- base.register_template_handler :email, BasicHandler.new
20
- end
21
-
22
- @@template_handlers = {}
23
-
24
- def self.extensions
25
- @@template_handlers.keys
26
- end
27
-
28
- # Register an object that knows how to handle template files with the given
29
- # extensions. This can be used to implement new template types.
30
- # The handler must respond to +:call+, which will be passed the template
31
- # and should return the rendered template as a String.
32
- def register_template_handler(extension, handler)
33
- @@template_handlers[extension.to_sym] = handler
34
- end
35
-
36
- def registered_template_handler(extension)
37
- extension && @@template_handlers[extension.to_sym]
38
- end
39
-
40
- def handler_for_extension(extension)
41
- registered_template_handler(extension)
42
- end
43
- end
44
-
45
- extend ComponentTemplates::Handlers
46
-
16
+ extend ComponentTemplates::Preprocessors
47
17
 
48
18
  # client is if we are generating for the client or backend
49
19
  def initialize(component_path, component_name, client = true)
@@ -75,52 +45,39 @@ module Volt
75
45
  code = ''
76
46
  views_path = "#{@component_path}/views/"
77
47
 
78
- exts = Handlers.extensions
48
+ exts = Preprocessors.extensions
79
49
 
80
50
  # Load all templates in the folder
81
51
  Dir["#{views_path}*/*.{#{exts.join(',')}}"].sort.each do |view_path|
82
- path_parts = view_path.scan(/([^\/]+)\/([^\/]+)\/[^\/]+\/([^\/]+)[.](html|email)$/)
83
- component_name, controller_name, view, _ = path_parts[0]
84
-
85
- # file extension
86
- format = File.extname(view_path).downcase.delete('.').to_sym
87
-
88
- # Get the path for the template, supports templates in folders
89
- template_path = view_path[views_path.size..-1].gsub(/[.](#{exts.join('|')})$/, '')
90
- template_path = "#{@component_name}/#{template_path}"
52
+ if @client
53
+ require_path = view_path.split('/')[-4..-1].join('/').gsub(/[.][^.]*$/, '')
91
54
 
92
- file_contents = File.read(view_path)
93
-
94
- # template_calls = []
95
-
96
- # Process template if we have a handler for this file type
97
- if handler = ComponentTemplates.handler_for_extension(format)
98
- file_contents = handler.call(file_contents)
55
+ # On the client side, we can just require the file and let sprockets
56
+ # handle things.
57
+ code << "\nrequire '#{require_path}'\n"
58
+ else
59
+ # On the sever side, we eval the compiled code
60
+ path_parts = view_path.scan(/([^\/]+)\/([^\/]+)\/[^\/]+\/([^\/]+)[.](html|email)$/)
61
+ component_name, controller_name, view, _ = path_parts[0]
99
62
 
100
- all_templates = ViewParser.new(file_contents, template_path)
63
+ # file extension
64
+ format = File.extname(view_path).downcase.delete('.').to_sym
101
65
 
102
- binding_initializers = []
103
- all_templates.templates.each_pair do |name, template|
104
- binding_code = []
66
+ # Get the path for the template, supports templates in folders
67
+ template_path = view_path[views_path.size..-1].gsub(/[.](#{exts.join('|')})$/, '')
68
+ template_path = "#{@component_name}/#{template_path}"
105
69
 
106
- if template['bindings']
107
- template['bindings'].each_pair do |key, value|
108
- binding_code << "#{key.inspect} => [#{value.join(', ')}]"
109
- end
110
- end
70
+ html = File.read(view_path)
111
71
 
112
- binding_code = "{#{binding_code.join(', ')}}"
72
+ if handler = ComponentTemplates.handler_for_extension(format)
73
+ html = handler.call(html)
113
74
 
114
- code << "#{app_reference}.add_template(#{name.inspect}, #{template['html'].inspect}, #{binding_code})\n"
115
- # template_calls << "template(#{name.inspect}, #{template['html'].inspect}, #{binding_code})"
75
+ code << ViewParser.new(html, template_path).code(app_reference)
116
76
  end
117
77
  end
118
-
119
- # puts "module #{component_name.camelize}\n class #{controller_name.camelize}\n class VoltTemplates < VoltTemplates\n #{template_calls.join("\n")}\n end\n end\nend"
120
78
  end
121
79
 
122
80
  code
123
-
124
81
  end
125
82
 
126
83
  def generate_controller_code
@@ -141,7 +98,7 @@ module Volt
141
98
 
142
99
  controllers.each do |path|
143
100
  if File.exists?(path)
144
- code << "require '#{localize_path(path)}'\n"
101
+ code << "\nrequire '#{localize_path(path)}'\n"
145
102
  else
146
103
  # parts = path.scan(/([^\/]+)\/controllers\/([^\/]+)_controller[.]rb$/)
147
104
  # component, controller = parts[0]
@@ -31,6 +31,9 @@ module Volt
31
31
 
32
32
  @server = server
33
33
 
34
+ # Set the mod time on boot
35
+ update_mod_time
36
+
34
37
  start_child
35
38
  end
36
39
 
@@ -216,6 +219,14 @@ module Volt
216
219
 
217
220
  Volt.logger.log_with_color(msg, :light_blue)
218
221
 
222
+
223
+ # Figure out if any views or routes were changed:
224
+ # TODO: Might want to only check for /config/ under the CWD
225
+ if changed_files.any? {|path| path =~ /\/config\// }
226
+ update_mod_time
227
+ sync_mod_time
228
+ end
229
+
219
230
  begin
220
231
  SocketConnectionHandler.send_message_all(nil, 'reload')
221
232
  rescue => e
@@ -227,11 +238,25 @@ module Volt
227
238
  @child_lock.with_write_lock do
228
239
  stop_child
229
240
  start_child
241
+ sync_mod_time
230
242
  end
231
243
  end
232
244
  end
233
245
 
246
+ def update_mod_time
247
+ @last_mod_time = Time.now.to_i.to_s
248
+ end
249
+
250
+ def sync_mod_time
251
+ disp = SocketConnectionHandler.dispatcher
252
+
253
+ unless disp.is_a?(ErrorDispatcher)
254
+ disp.component_modified(@last_mod_time)
255
+ end
256
+ end
257
+
234
258
  def start_change_listener
259
+ sync_mod_time
235
260
  # Setup the listeners for file changes
236
261
  @listener = Listen.to("#{@server.app_path}/") do |modified, added, removed|
237
262
  Thread.new do
@@ -42,5 +42,25 @@ module Volt
42
42
 
43
43
  templates
44
44
  end
45
+
46
+ # Generate code for the view that can be evaled.
47
+ def code(app_reference)
48
+ code = ''
49
+ templates.each_pair do |name, template|
50
+ binding_code = []
51
+
52
+ if template['bindings']
53
+ template['bindings'].each_pair do |key, value|
54
+ binding_code << "#{key.inspect} => [#{value.join(', ')}]"
55
+ end
56
+ end
57
+
58
+ binding_code = "{#{binding_code.join(', ')}}"
59
+
60
+ code << "#{app_reference}.add_template(#{name.inspect}, #{template['html'].inspect}, #{binding_code})\n"
61
+ end
62
+
63
+ code
64
+ end
45
65
  end
46
66
  end
@@ -20,7 +20,9 @@ class QuietCommonLogger < Rack::CommonLogger
20
20
 
21
21
  body = BodyProxy.new(body) do
22
22
  # Don't log on ignored extensions
23
- if !@@ignore_extensions.include?(ext) && !@logged
23
+ if !@@ignore_extensions.include?(ext) &&
24
+ !path.start_with?('/__OPAL_SOURCE_MAPS__/') &&
25
+ !@logged
24
26
  log(env, status, header, began_at)
25
27
  end
26
28
  end
@@ -0,0 +1,33 @@
1
+ module Volt
2
+ class ComponentTemplates
3
+ module Preprocessors #:nodoc:
4
+ # Setup default handler on extend
5
+ def self.extended(base)
6
+ base.register_template_handler :html, BasicHandler.new
7
+ base.register_template_handler :email, BasicHandler.new
8
+ end
9
+
10
+ @@template_handlers = {}
11
+
12
+ def self.extensions
13
+ @@template_handlers.keys
14
+ end
15
+
16
+ # Register an object that knows how to handle template files with the given
17
+ # extensions. This can be used to implement new template types.
18
+ # The handler must respond to +:call+, which will be passed the template
19
+ # and should return the rendered template as a String.
20
+ def register_template_handler(extension, handler)
21
+ @@template_handlers[extension.to_sym] = handler
22
+ end
23
+
24
+ def registered_template_handler(extension)
25
+ extension && @@template_handlers[extension.to_sym]
26
+ end
27
+
28
+ def handler_for_extension(extension)
29
+ registered_template_handler(extension)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,6 @@
1
+ require 'volt/server/template_handlers/view_processor'
2
+ require 'sprockets'
3
+
1
4
  # This file Monkeypatches sprockets to provide custom file loading (from volt
2
5
  # instead disk) for component root files. These files then require in all parts
3
6
  # or include generated ruby for templates, routes, and tasks.
@@ -19,9 +22,9 @@ module Volt
19
22
  "stub-digest-#{mtime}"
20
23
  end
21
24
 
25
+ # Get the mtime from the forking server
22
26
  def mtime
23
- # return a random mtime so it always reloads
24
- rand(2_000_000_000)
27
+ Volt::Dispatcher.component_last_modified_time.to_s
25
28
  end
26
29
  end
27
30
  end
@@ -45,7 +48,8 @@ module Sprockets
45
48
  stats[path] = Volt::StatStub.new
46
49
 
47
50
  # Working with a component path
48
- data = Volt::ComponentCode.new(component_name, $volt_app.component_paths, true).code
51
+ volt_app = Thread.current['volt_app'] || $volt_app
52
+ data = Volt::ComponentCode.new(component_name, volt_app.component_paths, true).code
49
53
  else
50
54
  data = env.read_file(input[:filename], input[:content_type])
51
55
  end
@@ -72,10 +76,6 @@ module Sprockets
72
76
  #
73
77
  # Returns true path exists and is a file.
74
78
  def file?(path)
75
- # if path =~ /\/components\/[^.]+[.]rb$/
76
- # return true
77
- # end
78
-
79
79
  if stat = self.stat(path)
80
80
  stat.file?
81
81
  elsif path =~ /^#{Volt.root}\/app\/components\/[^\/]+[.]rb$/
@@ -85,27 +85,6 @@ module Sprockets
85
85
  false
86
86
  end
87
87
  end
88
-
89
- # Public: Like `File.directory?`.
90
- #
91
- # path - String file path.
92
- #
93
- # Returns true path exists and is a directory.
94
- def directory?(path)
95
- # if path == '/Users/ryanstout/Sites/volt/volt/app/components/main'
96
- # return true
97
- # end
98
-
99
- if stat = self.stat(path)
100
- stat.directory?
101
- # else
102
- elsif path =~ /^#{Volt.root}\/app\/components\/[^\/]+$/
103
- # Matches a component
104
- return true
105
- else
106
- false
107
- end
108
- end
109
88
  end
110
89
  end
111
90
 
@@ -128,6 +107,30 @@ module Sprockets
128
107
  end
129
108
  end
130
109
 
110
+ module Sprockets
111
+ class Base
112
+ def file_digest(path)
113
+ if stat = self.stat(path)
114
+ # Caveat: Digests are cached by the path's current mtime. Its possible
115
+ # for a files contents to have changed and its mtime to have been
116
+ # negligently reset thus appearing as if the file hasn't changed on
117
+ # disk. Also, the mtime is only read to the nearest second. Its
118
+ # also possible the file was updated more than once in a given second.
119
+ cache.fetch("file_digest:#{path}:#{stat.mtime.to_i}") do
120
+ self.stat_digest(path, stat)
121
+ end
122
+ elsif path =~ /^#{Volt.root}\/app\/components\/[^\/]+$/
123
+ # Return a random mtime
124
+ # puts "LMT: #{Volt::Dispatcher.last_modified_time.inspect}"
125
+ mtime = Volt::Dispatcher.component_last_modified_time.to_s
126
+
127
+ # puts "STUB: #{mtime}"
128
+ "stub-digest-#{mtime}"
129
+ end
130
+ end
131
+ end
132
+ end
133
+
131
134
  module Sprockets
132
135
  module Resolve
133
136
  def path_matches(load_path, logical_name, logical_basename)
@@ -0,0 +1,77 @@
1
+ require 'volt/server/component_templates'
2
+ require 'opal/sprockets/processor'
3
+ require 'sprockets'
4
+ require 'tilt'
5
+ require 'opal/sprockets/processor'
6
+
7
+ module Volt
8
+
9
+
10
+
11
+ class ViewProcessor < ::Opal::TiltTemplate
12
+
13
+ def initialize(client)
14
+ @client = client
15
+ end
16
+
17
+ def app_reference
18
+ if @client
19
+ 'Volt.current_app'
20
+ else
21
+ 'volt_app'
22
+ end
23
+ end
24
+
25
+ def cache_key
26
+ @cache_key ||= "#{self.class.name}:0.1".freeze
27
+ end
28
+
29
+ # def evaluate(context, locals, &block)
30
+ # binding.pry
31
+ # @data = compile(@data)
32
+ # super
33
+ # end
34
+
35
+ def call(input)
36
+ # pp input
37
+ data = input[:data]
38
+
39
+ # input[:accept] = 'application/javascript'
40
+ # input[:content_type] = 'application/javascript'
41
+ # input[:environment].content_type = 'application/javascript'
42
+ input[:cache].fetch([self.cache_key, data]) do
43
+ filename = input[:filename]
44
+ # puts input[:data].inspect
45
+ # Remove all semicolons from source
46
+ # input[:content_type] = 'application/javascript'
47
+ compile(filename, input[:data])
48
+ end
49
+ end
50
+
51
+ def compile(view_path, html)
52
+ exts = ComponentTemplates::Preprocessors.extensions
53
+ template_path = view_path.split('/')[-4..-1].join('/').gsub('/views/', '/').gsub(/[.](#{exts.join('|')})$/, '')
54
+
55
+ exts = ComponentTemplates::Preprocessors.extensions
56
+
57
+ format = File.extname(view_path).downcase.delete('.').to_sym
58
+ code = ''
59
+
60
+ # Process template if we have a handler for this file type
61
+ if handler = ComponentTemplates.handler_for_extension(format)
62
+ html = handler.call(html)
63
+
64
+ code = ViewParser.new(html, template_path).code(app_reference)
65
+ end
66
+
67
+ Opal.compile(code)
68
+ end
69
+
70
+ def self.setup
71
+ sprockets = $volt_app.sprockets
72
+ sprockets.register_mime_type 'application/vtemplate', extensions: ['.html', '.email']
73
+ sprockets.register_transformer 'application/vtemplate', 'application/javascript', Volt::ViewProcessor.new(true)
74
+ end
75
+ end
76
+ end
77
+
@@ -30,6 +30,23 @@ module Volt
30
30
  @worker_timeout = Volt.config.worker_timeout || 60
31
31
  end
32
32
 
33
+ # Mark the last time of the component modification for caching in sprockets
34
+ def self.component_modified(time)
35
+ @last_modified_time = time
36
+ end
37
+
38
+ def component_modified(time)
39
+ self.class.component_modified(time)
40
+ end
41
+
42
+ def self.component_last_modified_time
43
+ unless @last_modified_time
44
+ component_modified(Time.now.to_i.to_s)
45
+ end
46
+
47
+ @last_modified_time
48
+ end
49
+
33
50
  # Dispatch takes an incoming Task from the client and runs it on the
34
51
  # server, returning the result to the client.
35
52
  # Tasks returning a promise will wait to return.
@@ -1,5 +1,5 @@
1
1
  module Volt
2
2
  module Version
3
- STRING = '0.9.5.pre1'
3
+ STRING = '0.9.5.pre2'
4
4
  end
5
5
  end
@@ -30,6 +30,7 @@ if RUBY_PLATFORM == 'opal'
30
30
  require 'volt/volt/client_setup/browser'
31
31
  else
32
32
  require 'volt/volt/server_setup/app'
33
+ require 'volt/server/template_handlers/view_processor'
33
34
  end
34
35
 
35
36
  module Volt
@@ -51,6 +52,9 @@ module Volt
51
52
  raise "Volt::App.new requires an app path to boot"
52
53
  end
53
54
 
55
+ # Expand to a full path
56
+ app_path = File.expand_path(app_path)
57
+
54
58
  @app_path = app_path
55
59
  $volt_app = self
56
60
 
@@ -90,6 +94,8 @@ module Volt
90
94
  setup_postboot_middleware
91
95
 
92
96
  start_message_bus
97
+
98
+ Volt::ViewProcessor.setup
93
99
  end
94
100
  end
95
101
 
@@ -30,6 +30,7 @@ describe Volt::Associations do
30
30
  it 'should associate via belongs_to' do
31
31
  address = store.addresses.first.sync
32
32
 
33
+ expect(address.person_id).to eq(@person.id)
33
34
  expect(address.person.sync.id).to eq(@person.id)
34
35
  end
35
36
 
@@ -83,6 +84,7 @@ describe Volt::Associations do
83
84
  it 'should assign the reference_id for has_many' do
84
85
  bob = store.people.create.sync
85
86
  address = bob.addresses.create({:street => '1234 awesome street'})
87
+
86
88
  expect(bob.addresses[0].sync.person_id).to eq(bob.id)
87
89
  expect(bob.id).to_not eq(nil)
88
90
  end
@@ -5,16 +5,16 @@ else
5
5
  require 'volt/server/component_templates'
6
6
 
7
7
  describe Volt::ComponentTemplates do
8
- let(:haml_handler) do
8
+ let(:haml_handler) do
9
9
  double(:haml_handler)
10
10
  end
11
11
 
12
12
  it 'can be extended' do
13
- expect( Volt::ComponentTemplates::Handlers.extensions ).to eq([ :html, :email ])
13
+ expect( Volt::ComponentTemplates::Preprocessors.extensions ).to eq([ :html, :email ])
14
14
 
15
- Volt::ComponentTemplates.register_template_handler(:haml, haml_handler)
15
+ Volt::ComponentTemplates.register_template_handler(:haml, haml_handler)
16
16
 
17
- expect( Volt::ComponentTemplates::Handlers.extensions ).to eq([ :html, :email, :haml ])
17
+ expect( Volt::ComponentTemplates::Preprocessors.extensions ).to eq([ :html, :email, :haml ])
18
18
  end
19
19
  end
20
20
 
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.pre1
4
+ version: 0.9.5.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-07-16 00:00:00.000000000 Z
11
+ date: 2015-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -549,7 +549,9 @@ files:
549
549
  - lib/volt/server/rack/source_map_server.rb
550
550
  - lib/volt/server/socket_connection_handler.rb
551
551
  - lib/volt/server/socket_connection_handler_stub.rb
552
+ - lib/volt/server/template_handlers/preprocessors.rb
552
553
  - lib/volt/server/template_handlers/sprockets_component_handler.rb
554
+ - lib/volt/server/template_handlers/view_processor.rb
553
555
  - lib/volt/server/websocket/rack_server_adaptor.rb
554
556
  - lib/volt/server/websocket/websocket_handler.rb
555
557
  - lib/volt/spec/capybara.rb