sinatra-bundles 0.5.2 → 0.5.3
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.
- data/Gemfile +1 -2
- data/Gemfile.1.2 +3 -0
- data/Gemfile.1.3 +3 -0
- data/Gemfile.lock +20 -25
- data/Rakefile +0 -1
- data/lib/sinatra/bundles.rb +2 -2
- data/lib/sinatra/bundles/bundle.rb +11 -10
- data/lib/sinatra/bundles/javascript_bundle.rb +1 -1
- data/lib/sinatra/bundles/stylesheet_bundle.rb +1 -1
- data/sinatra-bundles.gemspec +7 -6
- data/spec/public/javascripts/test2.js +1 -1
- data/spec/sinatra-bundles_spec.rb +37 -56
- metadata +18 -29
data/Gemfile
CHANGED
data/Gemfile.1.2
ADDED
data/Gemfile.1.3
ADDED
data/Gemfile.lock
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
sinatra-bundles (0.5.
|
|
4
|
+
sinatra-bundles (0.5.2)
|
|
5
5
|
packr (~> 3.1.0)
|
|
6
6
|
rack (~> 1.0)
|
|
7
7
|
rainpress (~> 1.0)
|
|
8
|
-
sinatra (~> 1.
|
|
8
|
+
sinatra (~> 1.2)
|
|
9
9
|
|
|
10
10
|
GEM
|
|
11
11
|
remote: http://rubygems.org/
|
|
12
12
|
specs:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
rack-test (0.6.
|
|
13
|
+
diff-lcs (1.1.3)
|
|
14
|
+
oyster (0.9.5)
|
|
15
|
+
packr (3.1.1)
|
|
16
|
+
oyster (>= 0.9.5)
|
|
17
|
+
rack (1.3.5)
|
|
18
|
+
rack-protection (1.1.4)
|
|
19
|
+
rack
|
|
20
|
+
rack-test (0.6.1)
|
|
21
21
|
rack (>= 1.0)
|
|
22
22
|
rainpress (1.0)
|
|
23
|
-
rake (0.9.2)
|
|
24
|
-
require_relative (1.0.
|
|
23
|
+
rake (0.9.2.2)
|
|
24
|
+
require_relative (1.0.3)
|
|
25
25
|
rspec (2.6.0)
|
|
26
26
|
rspec-core (~> 2.6.0)
|
|
27
27
|
rspec-expectations (~> 2.6.0)
|
|
@@ -30,25 +30,20 @@ GEM
|
|
|
30
30
|
rspec-expectations (2.6.0)
|
|
31
31
|
diff-lcs (~> 1.1.2)
|
|
32
32
|
rspec-mocks (2.6.0)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
rack (~> 1.1)
|
|
40
|
-
tilt (< 2.0, >= 1.2.2)
|
|
41
|
-
tilt (1.3.2)
|
|
42
|
-
yard (0.7.2)
|
|
33
|
+
sinatra (1.3.1)
|
|
34
|
+
rack (>= 1.3.4, ~> 1.3)
|
|
35
|
+
rack-protection (>= 1.1.2, ~> 1.1)
|
|
36
|
+
tilt (>= 1.3.3, ~> 1.3)
|
|
37
|
+
tilt (1.3.3)
|
|
38
|
+
yard (0.7.3)
|
|
43
39
|
|
|
44
40
|
PLATFORMS
|
|
45
41
|
ruby
|
|
46
42
|
|
|
47
43
|
DEPENDENCIES
|
|
48
|
-
rack-test (
|
|
44
|
+
rack-test (~> 0.6.0)
|
|
49
45
|
rake
|
|
50
46
|
require_relative
|
|
51
|
-
rspec (~> 2.6)
|
|
52
|
-
ruby-debug
|
|
47
|
+
rspec (~> 2.6.0)
|
|
53
48
|
sinatra-bundles!
|
|
54
49
|
yard
|
data/Rakefile
CHANGED
data/lib/sinatra/bundles.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Sinatra
|
|
2
2
|
# Main Bundles Module
|
|
3
3
|
module Bundles
|
|
4
|
-
Version = '0.5.
|
|
4
|
+
Version = '0.5.3'
|
|
5
5
|
|
|
6
6
|
mypath = File.dirname(__FILE__)
|
|
7
7
|
autoload :Helpers, "#{mypath}/bundles/helpers"
|
|
@@ -62,7 +62,7 @@ module Sinatra
|
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
app.get(%r{/#{Regexp.quote(app.javascripts)}/bundles/(\w+)(?:/(\d+))?\.js}) do |bundle, stamp| # Don't really care about the stamp.
|
|
65
|
-
content_type('
|
|
65
|
+
content_type('application/javascript')
|
|
66
66
|
headers['Vary'] = 'Accept-Encoding'
|
|
67
67
|
if settings.cache_bundles
|
|
68
68
|
expires(settings.bundle_cache_time, :public, :must_revalidate)
|
|
@@ -21,17 +21,14 @@ module Sinatra
|
|
|
21
21
|
def files
|
|
22
22
|
@files ||= @names.map do |f|
|
|
23
23
|
full_path = path(f)
|
|
24
|
-
if File.file?(full_path)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if File.exists?(file)
|
|
30
|
-
file.chomp(ext).gsub("#{root}/", '')
|
|
31
|
-
end
|
|
24
|
+
next f if File.file?(full_path)
|
|
25
|
+
ext = File.extname(full_path)
|
|
26
|
+
Dir[full_path].sort.map do |file|
|
|
27
|
+
if File.exists?(file)
|
|
28
|
+
file.chomp(ext).gsub("#{root}/", '')
|
|
32
29
|
end
|
|
33
30
|
end
|
|
34
|
-
end.flatten.uniq
|
|
31
|
+
end.flatten.compact.uniq
|
|
35
32
|
end
|
|
36
33
|
|
|
37
34
|
# Since we pass Bundles back as the body,
|
|
@@ -82,6 +79,10 @@ module Sinatra
|
|
|
82
79
|
|
|
83
80
|
private
|
|
84
81
|
|
|
82
|
+
def public_folder
|
|
83
|
+
@public ||= @app.respond_to?(:public_folder) ? @app.public_folder : @app.public
|
|
84
|
+
end
|
|
85
|
+
|
|
85
86
|
def options_hash
|
|
86
87
|
{
|
|
87
88
|
:compress => @app.compress_bundles,
|
|
@@ -94,7 +95,7 @@ module Sinatra
|
|
|
94
95
|
#
|
|
95
96
|
# @return [Integer] The timestamp of the bundle
|
|
96
97
|
def stamp
|
|
97
|
-
files.map { |f| File.mtime(path(f)) }.
|
|
98
|
+
files.map { |f| File.mtime(path(f)) }.max.to_i
|
|
98
99
|
end
|
|
99
100
|
end
|
|
100
101
|
end
|
data/sinatra-bundles.gemspec
CHANGED
|
@@ -15,8 +15,8 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
## If your rubyforge_project name is different, then edit it and comment out
|
|
16
16
|
## the sub! line in the Rakefile
|
|
17
17
|
s.name = 'sinatra-bundles'
|
|
18
|
-
s.version = '0.5.
|
|
19
|
-
s.date = '2011-
|
|
18
|
+
s.version = '0.5.3'
|
|
19
|
+
s.date = '2011-10-30'
|
|
20
20
|
|
|
21
21
|
## Make sure your summary is short. The description may be as long
|
|
22
22
|
## as you like.
|
|
@@ -39,15 +39,14 @@ Gem::Specification.new do |s|
|
|
|
39
39
|
s.add_dependency('rainpress', ['~> 1.0'])
|
|
40
40
|
s.add_dependency('packr', ['~> 3.1.0'])
|
|
41
41
|
s.add_dependency('rack', ['~> 1.0'])
|
|
42
|
-
s.add_dependency('sinatra', ['~> 1.
|
|
42
|
+
s.add_dependency('sinatra', ['~> 1.2'])
|
|
43
43
|
|
|
44
44
|
## List your development dependencies here. Development dependencies are
|
|
45
45
|
## those that are only needed during development
|
|
46
|
-
s.add_development_dependency('rspec', ['~> 2.6'])
|
|
47
|
-
s.add_development_dependency('rack-test', ['
|
|
46
|
+
s.add_development_dependency('rspec', ['~> 2.6.0'])
|
|
47
|
+
s.add_development_dependency('rack-test', ['~> 0.6.0'])
|
|
48
48
|
s.add_development_dependency('yard')
|
|
49
49
|
s.add_development_dependency('rake')
|
|
50
|
-
s.add_development_dependency('ruby-debug')
|
|
51
50
|
s.add_development_dependency('require_relative')
|
|
52
51
|
|
|
53
52
|
## Leave this section as-is. It will be automatically generated from the
|
|
@@ -56,6 +55,8 @@ Gem::Specification.new do |s|
|
|
|
56
55
|
# = MANIFEST =
|
|
57
56
|
s.files = %w[
|
|
58
57
|
Gemfile
|
|
58
|
+
Gemfile.1.2
|
|
59
|
+
Gemfile.1.3
|
|
59
60
|
Gemfile.lock
|
|
60
61
|
LICENSE
|
|
61
62
|
README.md
|
|
@@ -9,15 +9,17 @@ require 'base_app'
|
|
|
9
9
|
describe 'sinatra-bundles' do
|
|
10
10
|
def app(env = :test)
|
|
11
11
|
case env
|
|
12
|
-
when :production
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
CustomApp
|
|
16
|
-
else
|
|
17
|
-
TestApp
|
|
12
|
+
when :production then ProductionApp
|
|
13
|
+
when :custom then CustomApp
|
|
14
|
+
else TestApp
|
|
18
15
|
end
|
|
19
16
|
end
|
|
20
17
|
|
|
18
|
+
def get_base_app(a)
|
|
19
|
+
return a if a.is_a?(Sinatra::Base)
|
|
20
|
+
get_base_app(a.instance_eval { @app })
|
|
21
|
+
end
|
|
22
|
+
|
|
21
23
|
def stamp(type, ext, names)
|
|
22
24
|
names.map do |name|
|
|
23
25
|
File.expand_path(File.join(File.dirname(__FILE__), 'public', type, "#{name}.#{ext}"))
|
|
@@ -86,37 +88,30 @@ describe 'sinatra-bundles' do
|
|
|
86
88
|
end
|
|
87
89
|
|
|
88
90
|
it 'should create a tag without a stamp if stamps are disabled' do
|
|
89
|
-
app.new.instance_eval do
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
javascript_bundle_include_tag(:test)
|
|
93
|
-
end
|
|
91
|
+
get_base_app(app.new).instance_eval do
|
|
92
|
+
settings.disable(:stamp_bundles)
|
|
93
|
+
javascript_bundle_include_tag(:test)
|
|
94
94
|
end.should == "<script type='text/javascript' src='/javascripts/bundles/test.js'></script>"
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
it 'should create cusomized tag if path is CUSTOM' do
|
|
98
|
-
app(:custom).new.instance_eval do
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
javascript_bundle_include_tag(:test)
|
|
102
|
-
end
|
|
98
|
+
get_base_app(app(:custom).new).instance_eval do
|
|
99
|
+
settings.disable(:stamp_bundles)
|
|
100
|
+
javascript_bundle_include_tag(:test)
|
|
103
101
|
end.should == "<script type='text/javascript' src='/s/js/bundles/test.js'></script>"
|
|
104
102
|
end
|
|
105
103
|
|
|
106
104
|
it 'should stamp bundles with the timestamp of the newest file in the bundle' do
|
|
107
|
-
app.new.instance_eval do
|
|
108
|
-
|
|
109
|
-
javascript_bundle_include_tag(:test)
|
|
110
|
-
end
|
|
105
|
+
get_base_app(app.new).instance_eval do
|
|
106
|
+
javascript_bundle_include_tag(:test)
|
|
111
107
|
end.should == "<script type='text/javascript' src='/javascripts/bundles/test/#{js_stamp(%w(eval test1 test2))}.js'></script>"
|
|
112
108
|
end
|
|
113
109
|
|
|
114
110
|
it 'should serve bundles' do
|
|
115
|
-
get '/javascripts/bundles/test.js'
|
|
116
111
|
# Bogus stamp
|
|
117
112
|
get '/javascripts/bundles/test/987654.js'
|
|
118
113
|
last_response.should be_ok
|
|
119
|
-
last_response.headers['Content-Type'].should == '
|
|
114
|
+
last_response.headers['Content-Type'].should == 'application/javascript;charset=utf-8'
|
|
120
115
|
end
|
|
121
116
|
|
|
122
117
|
it 'should concat files in order with newlines including one at the end' do
|
|
@@ -130,7 +125,7 @@ describe 'sinatra-bundles' do
|
|
|
130
125
|
last_response.should be_ok
|
|
131
126
|
last_response.headers['Vary'].should == 'Accept-Encoding'
|
|
132
127
|
last_response.headers['Cache-Control'].should == 'public, must-revalidate, max-age=31536000'
|
|
133
|
-
last_response.headers['Etag'].should == '"
|
|
128
|
+
last_response.headers['Etag'].should == '"02e4d9bd148e31bb3dc4fdc1c1d7037e"'
|
|
134
129
|
end
|
|
135
130
|
|
|
136
131
|
it 'should not shrink vars on javascript files that use eval' do
|
|
@@ -146,7 +141,7 @@ describe 'sinatra-bundles' do
|
|
|
146
141
|
get '/javascripts/bundles/test2.js'
|
|
147
142
|
last_response.should be_ok
|
|
148
143
|
last_response.body.include?('eval').should be_false
|
|
149
|
-
last_response.body.should == @scripts.reject { |s| s.match(/eval|splat/) }.
|
|
144
|
+
last_response.body.should == @scripts.reject { |s| s.match(/eval|splat/) }.map { |path| File.read(path) }.join("\n") + "\n"
|
|
150
145
|
end
|
|
151
146
|
|
|
152
147
|
it 'should handle the all scripts wildcard' do
|
|
@@ -193,11 +188,9 @@ describe 'sinatra-bundles' do
|
|
|
193
188
|
end
|
|
194
189
|
|
|
195
190
|
it 'should return a path' do
|
|
196
|
-
app.new.instance_eval do
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
settings.javascript_bundles[:test].to_path
|
|
200
|
-
end
|
|
191
|
+
get_base_app(app.new).instance_eval do
|
|
192
|
+
settings.disable(:stamp_bundles)
|
|
193
|
+
settings.javascript_bundles[:test].to_path
|
|
201
194
|
end.should == '/javascripts/bundles/test.js'
|
|
202
195
|
end
|
|
203
196
|
|
|
@@ -237,44 +230,34 @@ describe 'sinatra-bundles' do
|
|
|
237
230
|
end
|
|
238
231
|
|
|
239
232
|
it 'should create a tag without a stamp if stamps are disabled' do
|
|
240
|
-
app.new.instance_eval do
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
stylesheet_bundle_link_tag(:test)
|
|
244
|
-
end
|
|
233
|
+
get_base_app(app.new).instance_eval do
|
|
234
|
+
settings.disable(:stamp_bundles)
|
|
235
|
+
stylesheet_bundle_link_tag(:test)
|
|
245
236
|
end.should == "<link type='text/css' href='/stylesheets/bundles/test.css' rel='stylesheet' media='all' />"
|
|
246
237
|
end
|
|
247
238
|
|
|
248
239
|
it 'should create a tag without a stamp if stamps are disabled CUSTOM' do
|
|
249
|
-
app(:custom).new.instance_eval do
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
stylesheet_bundle_link_tag(:test)
|
|
253
|
-
end
|
|
240
|
+
get_base_app(app(:custom).new).instance_eval do
|
|
241
|
+
settings.disable(:stamp_bundles)
|
|
242
|
+
stylesheet_bundle_link_tag(:test)
|
|
254
243
|
end.should == "<link type='text/css' href='/s/css/bundles/test.css' rel='stylesheet' media='all' />"
|
|
255
244
|
end
|
|
256
245
|
|
|
257
246
|
it 'should stamp bundles with the timestamp of the newest file in the bundle' do
|
|
258
|
-
app.new.instance_eval do
|
|
259
|
-
|
|
260
|
-
stylesheet_bundle_link_tag(:test)
|
|
261
|
-
end
|
|
247
|
+
get_base_app(app.new).instance_eval do
|
|
248
|
+
stylesheet_bundle_link_tag(:test)
|
|
262
249
|
end.should == "<link type='text/css' href='/stylesheets/bundles/test/#{css_stamp(%w(test1 test2))}.css' rel='stylesheet' media='all' />"
|
|
263
250
|
end
|
|
264
251
|
|
|
265
252
|
it 'should create a tag with default media attribute set to all' do
|
|
266
|
-
app.new.instance_eval do
|
|
267
|
-
|
|
268
|
-
stylesheet_bundle_link_tag(:test)
|
|
269
|
-
end
|
|
253
|
+
get_base_app(app.new).instance_eval do
|
|
254
|
+
stylesheet_bundle_link_tag(:test)
|
|
270
255
|
end.include?("media='all'").should be_true
|
|
271
256
|
end
|
|
272
257
|
|
|
273
258
|
it 'should create a tag with specified media attributes' do
|
|
274
|
-
app.new.instance_eval do
|
|
275
|
-
|
|
276
|
-
stylesheet_bundle_link_tag(:test, [:screen, :print])
|
|
277
|
-
end
|
|
259
|
+
get_base_app(app.new).instance_eval do
|
|
260
|
+
stylesheet_bundle_link_tag(:test, [:screen, :print])
|
|
278
261
|
end.include?("media='screen, print'").should be_true
|
|
279
262
|
end
|
|
280
263
|
|
|
@@ -335,11 +318,9 @@ describe 'sinatra-bundles' do
|
|
|
335
318
|
end
|
|
336
319
|
|
|
337
320
|
it 'should return a path' do
|
|
338
|
-
app.new.instance_eval do
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
settings.stylesheet_bundles[:test].to_path
|
|
342
|
-
end
|
|
321
|
+
get_base_app(app.new).instance_eval do
|
|
322
|
+
settings.disable(:stamp_bundles)
|
|
323
|
+
settings.stylesheet_bundles[:test].to_path
|
|
343
324
|
end.should == '/stylesheets/bundles/test.css'
|
|
344
325
|
end
|
|
345
326
|
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sinatra-bundles
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 13
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 5
|
|
9
|
-
-
|
|
10
|
-
version: 0.5.
|
|
9
|
+
- 3
|
|
10
|
+
version: 0.5.3
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Daniel Huckstep
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-
|
|
18
|
+
date: 2011-10-30 00:00:00 -06:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
@@ -72,11 +72,11 @@ dependencies:
|
|
|
72
72
|
requirements:
|
|
73
73
|
- - ~>
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
hash:
|
|
75
|
+
hash: 11
|
|
76
76
|
segments:
|
|
77
77
|
- 1
|
|
78
|
-
-
|
|
79
|
-
version: "1.
|
|
78
|
+
- 2
|
|
79
|
+
version: "1.2"
|
|
80
80
|
type: :runtime
|
|
81
81
|
version_requirements: *id004
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
@@ -87,11 +87,12 @@ dependencies:
|
|
|
87
87
|
requirements:
|
|
88
88
|
- - ~>
|
|
89
89
|
- !ruby/object:Gem::Version
|
|
90
|
-
hash:
|
|
90
|
+
hash: 23
|
|
91
91
|
segments:
|
|
92
92
|
- 2
|
|
93
93
|
- 6
|
|
94
|
-
|
|
94
|
+
- 0
|
|
95
|
+
version: 2.6.0
|
|
95
96
|
type: :development
|
|
96
97
|
version_requirements: *id005
|
|
97
98
|
- !ruby/object:Gem::Dependency
|
|
@@ -100,14 +101,14 @@ dependencies:
|
|
|
100
101
|
requirement: &id006 !ruby/object:Gem::Requirement
|
|
101
102
|
none: false
|
|
102
103
|
requirements:
|
|
103
|
-
- -
|
|
104
|
+
- - ~>
|
|
104
105
|
- !ruby/object:Gem::Version
|
|
105
|
-
hash:
|
|
106
|
+
hash: 7
|
|
106
107
|
segments:
|
|
107
108
|
- 0
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
version: 0.
|
|
109
|
+
- 6
|
|
110
|
+
- 0
|
|
111
|
+
version: 0.6.0
|
|
111
112
|
type: :development
|
|
112
113
|
version_requirements: *id006
|
|
113
114
|
- !ruby/object:Gem::Dependency
|
|
@@ -139,7 +140,7 @@ dependencies:
|
|
|
139
140
|
type: :development
|
|
140
141
|
version_requirements: *id008
|
|
141
142
|
- !ruby/object:Gem::Dependency
|
|
142
|
-
name:
|
|
143
|
+
name: require_relative
|
|
143
144
|
prerelease: false
|
|
144
145
|
requirement: &id009 !ruby/object:Gem::Requirement
|
|
145
146
|
none: false
|
|
@@ -152,20 +153,6 @@ dependencies:
|
|
|
152
153
|
version: "0"
|
|
153
154
|
type: :development
|
|
154
155
|
version_requirements: *id009
|
|
155
|
-
- !ruby/object:Gem::Dependency
|
|
156
|
-
name: require_relative
|
|
157
|
-
prerelease: false
|
|
158
|
-
requirement: &id010 !ruby/object:Gem::Requirement
|
|
159
|
-
none: false
|
|
160
|
-
requirements:
|
|
161
|
-
- - ">="
|
|
162
|
-
- !ruby/object:Gem::Version
|
|
163
|
-
hash: 3
|
|
164
|
-
segments:
|
|
165
|
-
- 0
|
|
166
|
-
version: "0"
|
|
167
|
-
type: :development
|
|
168
|
-
version_requirements: *id010
|
|
169
156
|
description: Bundle CSS and Javascript assets to a single file, compress, and cache them for snappier web experiences.
|
|
170
157
|
email: darkhelmet@darkhelmetlive.com
|
|
171
158
|
executables: []
|
|
@@ -176,6 +163,8 @@ extra_rdoc_files: []
|
|
|
176
163
|
|
|
177
164
|
files:
|
|
178
165
|
- Gemfile
|
|
166
|
+
- Gemfile.1.2
|
|
167
|
+
- Gemfile.1.3
|
|
179
168
|
- Gemfile.lock
|
|
180
169
|
- LICENSE
|
|
181
170
|
- README.md
|