vitrine 0.0.11 → 0.0.12
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 +4 -4
- data/README.md +8 -2
- data/bin/vitrine +18 -3
- data/lib/server.rb +76 -0
- data/lib/sourcemaps.rb +2 -2
- data/lib/version.rb +1 -1
- data/lib/vitrine.rb +21 -73
- data/test/helper.rb +31 -0
- data/test/test_vitrine.rb +28 -31
- data/test/test_vitrine_in_rack_stack.rb +35 -0
- data/vitrine.gemspec +4 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad38905bb36040591304042eb96301dd54844848
|
4
|
+
data.tar.gz: df1a08482625e54ba47255a640913d288898a79b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 104b112da1f12d430e449d1ecc59ed80ff07045c9f8141ee91c3be7f6dba79570b3108c674702d638ab7ca3a61a17c9435a89c651960a63a679b05bd9ae7f619
|
7
|
+
data.tar.gz: 89d843fd806e0f41b95e438ba3cdef583cdb7d1ea105405f99c18a8a393862a6a70fbcb491f5f43db897b0604866b2e026f4d4549893033ca16879b20a68a428
|
data/README.md
CHANGED
@@ -67,12 +67,18 @@ Vitrine will `etag` all the precompiled assets for faster reloading.
|
|
67
67
|
|
68
68
|
At this point the best way to bake a Vitrine site is to crawl it externally, but we are going to implement
|
69
69
|
baking at some point. The idea is that you will end up upgrading the site to either a Node app or a Ruby app
|
70
|
-
with it's own
|
70
|
+
with it's own `config.ru` - if after that point you still wish to use Vitrine, you can use it like a Rack
|
71
71
|
middleware.
|
72
72
|
|
73
73
|
## Using as a middleware
|
74
74
|
|
75
|
-
Most actions in Vitrine will fall through to 404, so `Vitrine::App` can be used
|
75
|
+
Most actions in Vitrine will fall through to 404, so `Vitrine::App` can be used as a middleware handler.
|
76
|
+
Put Vitrine into your application stack and it will complement your main application very nicely. But don't
|
77
|
+
forget to set `:root` - like so:
|
78
|
+
|
79
|
+
use Vitrine::App.new do | vitrine |
|
80
|
+
vitrine.settings.set :root => File.dirname(__FILE__)
|
81
|
+
end
|
76
82
|
|
77
83
|
## Contributing to vitrine
|
78
84
|
|
data/bin/vitrine
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
2
|
lib = File.dirname(__FILE__) + '/../lib'
|
4
|
-
require lib + '/
|
5
|
-
|
3
|
+
require lib + '/server'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
options = {}
|
7
|
+
|
8
|
+
op = OptionParser.new
|
9
|
+
op.banner = "Usage: cd ~/sites/my-glorious-app; vitrine -p 9292"
|
10
|
+
op.on("-p", "--port NUMBER", Integer, "Run on the specified port (default is 4000)") do | port |
|
11
|
+
options[:port] = port
|
12
|
+
end
|
13
|
+
|
14
|
+
op.on("-r", "--root DIR", String, "Override the root directory (defaults to CWD)") do | rootdir |
|
15
|
+
options[:root] = rootdir
|
16
|
+
end
|
17
|
+
|
18
|
+
op.parse!
|
19
|
+
|
20
|
+
Vitrine::Server.start(options)
|
data/lib/server.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
require_relative 'vitrine'
|
2
|
+
require 'rack-livereload'
|
3
|
+
|
4
|
+
module Vitrine::Server
|
5
|
+
DEFAULTS = { root: Dir.getwd, port: 4000, :address => '127.0.0.1' }
|
6
|
+
|
7
|
+
def self.check_dirs_present!(options)
|
8
|
+
views = options[:root] + '/views'
|
9
|
+
unless File.exist?(views) and File.directory?(views)
|
10
|
+
$stderr.puts "WARNING: `views' directory not found under the current tree, you might want to create it"
|
11
|
+
end
|
12
|
+
|
13
|
+
public_folder = options[:root] + '/public'
|
14
|
+
unless File.exist?(public_folder) and File.directory?(public_folder)
|
15
|
+
$stderr.puts "ERROR: `public' directory not found under the current tree, you should create it. Vitrine won't run without it"
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Builds the Rack application with all the wrappers
|
21
|
+
def self.build_app(options)
|
22
|
+
Rack::Builder.new do
|
23
|
+
use Rack::ShowStatus
|
24
|
+
use Rack::ShowExceptions
|
25
|
+
|
26
|
+
guardfile_path = options[:root] + '/Guardfile'
|
27
|
+
if File.exist?(guardfile_path)
|
28
|
+
$stderr.puts "Attaching LiveReload via Guardfile at #{guardfile_path.inspect}"
|
29
|
+
# Assume livereload is engaged
|
30
|
+
use Rack::LiveReload
|
31
|
+
else
|
32
|
+
$stderr.puts "No Guardfile found, so there won't be any livereload injection"
|
33
|
+
end
|
34
|
+
|
35
|
+
vitrine = Vitrine::App.new
|
36
|
+
vitrine.settings.set :root, options[:root]
|
37
|
+
run vitrine
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Pick a server handler engine and run the passed
|
42
|
+
# app on it, honoring the passed options
|
43
|
+
def self.start_server(app, options)
|
44
|
+
begin
|
45
|
+
# Try Thin
|
46
|
+
thin = Rack::Handler.get('thin')
|
47
|
+
thin.run app, :Port => options[:port], :Host => options[:address] do |server|
|
48
|
+
puts "Thin #{Thin::VERSION::STRING} available at http://#{options[:address]}:#{options[:port]}"
|
49
|
+
end
|
50
|
+
rescue LoadError
|
51
|
+
begin
|
52
|
+
# Then Mongrel
|
53
|
+
mongrel = Rack::Handler.get('mongrel')
|
54
|
+
mongrel.run app, :Port => options[:port], :Host => options[:address] do |server|
|
55
|
+
puts "Mongrel #{Mongrel::Const::MONGREL_VERSION} available at http://#{options[:address]}:#{options[:port]}"
|
56
|
+
end
|
57
|
+
rescue LoadError
|
58
|
+
# Then WEBrick
|
59
|
+
puts "Install Mongrel or Thin for better performance."
|
60
|
+
webrick = Rack::Handler.get('webrick')
|
61
|
+
webrick.run app, :Port => options[:port], :Host => options[:address] do |server|
|
62
|
+
trap("INT") { server.shutdown }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Run the server, largely stolen from Serve
|
69
|
+
def self.start(passed_options = {})
|
70
|
+
options = DEFAULTS.merge(passed_options)
|
71
|
+
check_dirs_present!(options)
|
72
|
+
|
73
|
+
app = build_app(options)
|
74
|
+
start_server(app, options)
|
75
|
+
end
|
76
|
+
end
|
data/lib/sourcemaps.rb
CHANGED
@@ -2,14 +2,14 @@ require 'pathname'
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
module Vitrine
|
5
|
-
def self.build_coffeescript_source_map_body(full_coffeescript_file_path,
|
5
|
+
def self.build_coffeescript_source_map_body(full_coffeescript_file_path, public_folder_path)
|
6
6
|
|
7
7
|
script = File.read(full_coffeescript_file_path)
|
8
8
|
|
9
9
|
# We need to feed paths ON THE SERVER so that the browser can connect the coffee file, the map and the JS file
|
10
10
|
# - specify coffee source file explicitly (see http://coffeescript.org/documentation/docs/sourcemap.html#section-8)
|
11
11
|
# The paths need to be slash-prepended (server-absolute)
|
12
|
-
relative_path = '/' + Pathname.new(full_coffeescript_file_path).relative_path_from(Pathname.new(
|
12
|
+
relative_path = '/' + Pathname.new(full_coffeescript_file_path).relative_path_from(Pathname.new(public_folder_path)).to_s
|
13
13
|
relative_js_path = '/' + relative_path.gsub(/\.coffee$/, '.js')
|
14
14
|
|
15
15
|
options = {sourceMap: true}
|
data/lib/version.rb
CHANGED
data/lib/vitrine.rb
CHANGED
@@ -8,71 +8,6 @@ require_relative 'version'
|
|
8
8
|
require_relative 'atomic_write'
|
9
9
|
require_relative 'sourcemaps'
|
10
10
|
|
11
|
-
module Vitrine
|
12
|
-
DEFAULTS = { root: Dir.getwd, port: 4000, host: '127.0.0.1' }
|
13
|
-
|
14
|
-
def self.check_dirs_present!
|
15
|
-
views = DEFAULTS[:root] + '/views'
|
16
|
-
unless File.exist?(views) and File.directory?(views)
|
17
|
-
$stderr.puts "WARNING: `views' directory not found under the current tree, you might want to create it"
|
18
|
-
end
|
19
|
-
|
20
|
-
public_dir = DEFAULTS[:root] + '/public'
|
21
|
-
unless File.exist?(public_dir) and File.directory?(public_dir)
|
22
|
-
$stderr.puts "ERROR: `public' directory not found under the current tree, you should create it. Vitrine won't run without it"
|
23
|
-
exit 1
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Run the server, largely stolen from Serve
|
28
|
-
def self.run(options = DEFAULTS)
|
29
|
-
check_dirs_present!
|
30
|
-
|
31
|
-
app = Rack::Builder.new do
|
32
|
-
use Rack::ShowStatus
|
33
|
-
use Rack::ShowExceptions
|
34
|
-
|
35
|
-
guardfile_path = options[:root] + '/Guardfile'
|
36
|
-
if File.exist?(guardfile_path)
|
37
|
-
$stderr.puts "Attaching LiveReload via Guardfile at #{guardfile_path.inspect}"
|
38
|
-
# Assume livereload is engaged
|
39
|
-
use Rack::LiveReload
|
40
|
-
else
|
41
|
-
$stderr.puts "No Guardfile found, so there won't be any livereload injection"
|
42
|
-
end
|
43
|
-
|
44
|
-
vitrine = Vitrine::App.new
|
45
|
-
vitrine.settings.set :root, options[:root]
|
46
|
-
run vitrine
|
47
|
-
end
|
48
|
-
|
49
|
-
begin
|
50
|
-
# Try Thin
|
51
|
-
thin = Rack::Handler.get('thin')
|
52
|
-
thin.run app, :Port => options[:port], :Host => options[:address] do |server|
|
53
|
-
puts "Thin #{Thin::VERSION::STRING} available at http://#{options[:address]}:#{options[:port]}"
|
54
|
-
end
|
55
|
-
rescue LoadError
|
56
|
-
begin
|
57
|
-
# Then Mongrel
|
58
|
-
mongrel = Rack::Handler.get('mongrel')
|
59
|
-
mongrel.run app, :Port => options[:port], :Host => options[:address] do |server|
|
60
|
-
puts "Mongrel #{Mongrel::Const::MONGREL_VERSION} available at http://#{options[:address]}:#{options[:port]}"
|
61
|
-
end
|
62
|
-
rescue LoadError
|
63
|
-
# Then WEBrick
|
64
|
-
puts "Install Mongrel or Thin for better performance."
|
65
|
-
webrick = Rack::Handler.get('webrick')
|
66
|
-
webrick.run app, :Port => options[:port], :Host => options[:address] do |server|
|
67
|
-
trap("INT") { server.shutdown }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
require 'rack-livereload'
|
75
|
-
|
76
11
|
# A little idiosyncrastic asset server.
|
77
12
|
# Does very simple things:
|
78
13
|
# * sensible detector for default pages (they render from Sinatra view templates)
|
@@ -80,11 +15,13 @@ require 'rack-livereload'
|
|
80
15
|
# and Vitrine will find them and compile them for you on the spot
|
81
16
|
class Vitrine::App < Sinatra::Base
|
82
17
|
set :static, true
|
18
|
+
|
83
19
|
set :show_exceptions, false
|
84
20
|
set :raise_errors, true
|
85
|
-
|
86
|
-
|
87
|
-
set :
|
21
|
+
|
22
|
+
# Sets whether Vitrine will output messages about dynamic assets
|
23
|
+
set :silent, true
|
24
|
+
set :public_folder, ->{ File.join(settings.root, 'public') }
|
88
25
|
|
89
26
|
# For extensionless things try to pick out the related templates
|
90
27
|
# from the views directory, and render them with a default layout.
|
@@ -101,8 +38,11 @@ class Vitrine::App < Sinatra::Base
|
|
101
38
|
|
102
39
|
def render_template_or_static(extensionless_path)
|
103
40
|
probable_html = extensionless_path + "/index.html"
|
104
|
-
|
41
|
+
|
42
|
+
html_path = File.join(settings.public_folder, probable_html)
|
105
43
|
if File.exist? html_path
|
44
|
+
# Might want to investigate...
|
45
|
+
# https://github.com/elitheeli/sinatra-index/blob/master/lib/sinatra-index.rb
|
106
46
|
send_file html_path
|
107
47
|
else
|
108
48
|
render_template(extensionless_path)
|
@@ -129,15 +69,19 @@ class Vitrine::App < Sinatra::Base
|
|
129
69
|
# Try the first template that has been found
|
130
70
|
template_path = possibilites.shift
|
131
71
|
|
132
|
-
# If nothing is found
|
72
|
+
# If nothing is found try downstream or bail
|
133
73
|
unless template_path
|
134
74
|
err = possible_globs.map{|e| e.inspect }.join(', ')
|
135
|
-
|
75
|
+
if @app
|
76
|
+
return forward
|
77
|
+
else
|
78
|
+
halt 404, "No template found - tried #{err}, and no downstream Rack handler present"
|
79
|
+
end
|
136
80
|
end
|
137
81
|
|
138
82
|
relative_path = Pathname.new(template_path).relative_path_from(Pathname.new(settings.views))
|
139
83
|
|
140
|
-
|
84
|
+
log "-> #{extensionless_path.inspect} : Rendering via template #{relative_path.to_s.inspect}"
|
141
85
|
|
142
86
|
locals = {}
|
143
87
|
# Auto-pick the template engine out of the extension
|
@@ -153,6 +97,7 @@ class Vitrine::App < Sinatra::Base
|
|
153
97
|
# TODO: has no handling for .sass
|
154
98
|
scss_source_path = File.join(settings.root, 'public', "#{basename}.scss")
|
155
99
|
mtime_cache(scss_source_path) do
|
100
|
+
# TODO: Examine http://sass-lang.com/documentation/file.SASS_REFERENCE.html
|
156
101
|
Sass.compile_file(scss_source_path, cache_location: '/tmp/vitrine/sass-cache')
|
157
102
|
end
|
158
103
|
rescue Errno::ENOENT # Missing SCSS
|
@@ -218,7 +163,7 @@ class Vitrine::App < Sinatra::Base
|
|
218
163
|
else
|
219
164
|
yield.tap do | body |
|
220
165
|
Vitrine.atomic_write(p) do |f|
|
221
|
-
|
166
|
+
log "---> Recompiling #{path} for #{request.path_info}"
|
222
167
|
f.write body
|
223
168
|
end
|
224
169
|
etag File.mtime(p)
|
@@ -231,4 +176,7 @@ class Vitrine::App < Sinatra::Base
|
|
231
176
|
layouts.any? ? :layout : false
|
232
177
|
end
|
233
178
|
|
179
|
+
def log(msg)
|
180
|
+
$stderr.puts(msg) unless settings.silent?
|
181
|
+
end
|
234
182
|
end
|
data/test/helper.rb
CHANGED
@@ -9,3 +9,34 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
9
9
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
10
10
|
|
11
11
|
require 'vitrine'
|
12
|
+
|
13
|
+
module VitrineTesting
|
14
|
+
|
15
|
+
# Wrap the test run in mktimpdir where we will store our temp application
|
16
|
+
def run(runner)
|
17
|
+
Dir.mktmpdir("vitrine-tests") do | dir_path |
|
18
|
+
@tempdir = dir_path
|
19
|
+
super
|
20
|
+
end
|
21
|
+
ensure
|
22
|
+
@tempdir = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def temporary_app_dir
|
26
|
+
raise "Not within a tempdir block" unless @tempdir
|
27
|
+
@tempdir
|
28
|
+
end
|
29
|
+
|
30
|
+
# Write a file out into 'public', creating the subdir tree
|
31
|
+
def write_public(name)
|
32
|
+
location = FileUtils.mkdir_p(File.dirname(File.join(@tempdir, 'public', name)))
|
33
|
+
File.open(File.join(@tempdir, 'public', name), 'w') do | f |
|
34
|
+
yield f
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Return the vitrine default Vitrine app
|
39
|
+
def app
|
40
|
+
Vitrine::App.new.tap { |a| a.settings.set :root, @tempdir }
|
41
|
+
end
|
42
|
+
end
|
data/test/test_vitrine.rb
CHANGED
@@ -1,28 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestVitrine < Test::Unit::TestCase
|
4
|
-
include Rack::Test::Methods
|
5
|
-
|
6
|
-
# Wrap the test run in mktimpdir where we will store our temp application
|
7
|
-
def run(runner)
|
8
|
-
Dir.mktmpdir("vitrine-tests") do | dir_path |
|
9
|
-
@tempdir = dir_path
|
10
|
-
super
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def write_public(name)
|
15
|
-
FileUtils.mkdir_p @tempdir + '/public'
|
16
|
-
File.open(File.join(@tempdir, 'public', name), 'w') do | f |
|
17
|
-
yield f
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def app
|
22
|
-
vitrine = Vitrine::App.new
|
23
|
-
vitrine.settings.set :root, @tempdir
|
24
|
-
vitrine
|
25
|
-
end
|
4
|
+
include Rack::Test::Methods, VitrineTesting
|
26
5
|
|
27
6
|
def test_fetch_index_without_index_should_404
|
28
7
|
get '/'
|
@@ -72,15 +51,15 @@ class TestVitrine < Test::Unit::TestCase
|
|
72
51
|
assert last_response.ok?, "Should have fetched the index.html"
|
73
52
|
end
|
74
53
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
54
|
+
def test_fetches_index_in_subdirectory_if_present
|
55
|
+
write_public 'items/index.html' do | f |
|
56
|
+
f.write 'this just in'
|
57
|
+
end
|
58
|
+
|
59
|
+
get '/items'
|
60
|
+
assert last_response.ok?, "Should have responded with 404 since there is no template"
|
61
|
+
assert_equal 'this just in', last_response.body
|
62
|
+
end
|
84
63
|
|
85
64
|
def test_passes_coffeescript_as_raw_file
|
86
65
|
write_public 'nice.coffee' do | f |
|
@@ -108,6 +87,24 @@ class TestVitrine < Test::Unit::TestCase
|
|
108
87
|
'Should include the reference to the source map'
|
109
88
|
end
|
110
89
|
|
90
|
+
def test_compiles_coffeescript_sourcemap
|
91
|
+
|
92
|
+
FileUtils.mkdir_p File.join(@tempdir, 'public', 'js')
|
93
|
+
|
94
|
+
write_public 'js/nice.coffee' do | f |
|
95
|
+
f.puts 'alert "rockage!"'
|
96
|
+
end
|
97
|
+
|
98
|
+
# Sourcemap will only ever get requested AFTER the corresponding JS file
|
99
|
+
get '/js/nice.js'
|
100
|
+
assert last_response.ok?
|
101
|
+
|
102
|
+
get '/js/nice.js.map'
|
103
|
+
ref = {"version"=>3, "file"=>"", "sourceRoot"=>"", "sources"=>["/js/nice.coffee"],
|
104
|
+
"names"=>[], "mappings"=>"AAAA;CAAA,CAAA,GAAA,KAAA;CAAA"}
|
105
|
+
assert_equal ref, JSON.parse(last_response.body)
|
106
|
+
end
|
107
|
+
|
111
108
|
def test_sends_vanilla_js_if_its_present
|
112
109
|
write_public 'vanilla.js' do | f |
|
113
110
|
f.puts 'vanilla();'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'rack/lobster'
|
3
|
+
|
4
|
+
class TestVitrineInRackStack < Test::Unit::TestCase
|
5
|
+
include Rack::Test::Methods, VitrineTesting
|
6
|
+
|
7
|
+
def app
|
8
|
+
td = temporary_app_dir
|
9
|
+
outer = Rack::Builder.new do
|
10
|
+
use Vitrine::App do | v |
|
11
|
+
v.settings.set root: td
|
12
|
+
end
|
13
|
+
map "/lobster" do
|
14
|
+
run Rack::Lobster.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
outer.to_app
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_lobster
|
21
|
+
get '/lobster'
|
22
|
+
assert last_response.ok?
|
23
|
+
assert_match /Lobstericious/, last_response.body, "Should have forwarded to downstream Lobster"
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_fetch_js
|
27
|
+
write_public('hello.coffee') do | f |
|
28
|
+
f << 'window.alert("Hello Coffee")'
|
29
|
+
end
|
30
|
+
|
31
|
+
get '/hello.js'
|
32
|
+
assert last_response.ok?
|
33
|
+
assert_include last_response.body, 'window.alert("Hello Coffee")', "Should include the JS fragment"
|
34
|
+
end
|
35
|
+
end
|
data/vitrine.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "vitrine"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.12"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Julik Tarkhanov"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-12-19"
|
13
13
|
s.description = " Serves ERB templates with live CoffeeScript and SASS "
|
14
14
|
s.email = "me@julik.nl"
|
15
15
|
s.executables = ["vitrine"]
|
@@ -26,11 +26,13 @@ Gem::Specification.new do |s|
|
|
26
26
|
"Rakefile",
|
27
27
|
"bin/vitrine",
|
28
28
|
"lib/atomic_write.rb",
|
29
|
+
"lib/server.rb",
|
29
30
|
"lib/sourcemaps.rb",
|
30
31
|
"lib/version.rb",
|
31
32
|
"lib/vitrine.rb",
|
32
33
|
"test/helper.rb",
|
33
34
|
"test/test_vitrine.rb",
|
35
|
+
"test/test_vitrine_in_rack_stack.rb",
|
34
36
|
"vitrine.gemspec"
|
35
37
|
]
|
36
38
|
s.homepage = "http://github.com/julik/vitrine"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vitrine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julik Tarkhanov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -223,11 +223,13 @@ files:
|
|
223
223
|
- Rakefile
|
224
224
|
- bin/vitrine
|
225
225
|
- lib/atomic_write.rb
|
226
|
+
- lib/server.rb
|
226
227
|
- lib/sourcemaps.rb
|
227
228
|
- lib/version.rb
|
228
229
|
- lib/vitrine.rb
|
229
230
|
- test/helper.rb
|
230
231
|
- test/test_vitrine.rb
|
232
|
+
- test/test_vitrine_in_rack_stack.rb
|
231
233
|
- vitrine.gemspec
|
232
234
|
homepage: http://github.com/julik/vitrine
|
233
235
|
licenses:
|