dassets 0.13.0 → 0.13.1
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 +7 -0
- data/lib/dassets/asset_file.rb +4 -0
- data/lib/dassets/server/response.rb +1 -1
- data/lib/dassets/source.rb +2 -1
- data/lib/dassets/source_file.rb +4 -0
- data/lib/dassets/source_proxy.rb +4 -0
- data/lib/dassets/version.rb +1 -1
- data/test/helper.rb +1 -0
- data/test/unit/asset_file_tests.rb +3 -1
- data/test/unit/server/response_tests.rb +2 -2
- data/test/unit/source_file_tests.rb +22 -17
- data/test/unit/source_proxy_tests.rb +25 -13
- data/test/unit/source_tests.rb +9 -1
- metadata +23 -62
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA512:
|
3
|
+
metadata.gz: 7402d80d36dfa89d1f68c64a739ffbc516eb1901694e9638ee930835f8b68807fa8dd56245265f8c68af4719633d4b273f13c67ff744f60904f66c5ec27231c5
|
4
|
+
data.tar.gz: 657e6338f28159a89ef32225be168b3ca03379b26b73a6db01f0f3b0c0b11a01c3659286185d9d01471dc06aadcb308cbd51700ccf8bdfd0f0261f358fa9f27a
|
5
|
+
SHA1:
|
6
|
+
metadata.gz: 98e6907a11c2dc4e0409f14c0361094ecffa8396
|
7
|
+
data.tar.gz: fafaeb2c34ac116922f469b2ec7317f2688de99e
|
data/lib/dassets/asset_file.rb
CHANGED
@@ -21,7 +21,7 @@ class Dassets::Server
|
|
21
21
|
@asset_file.digest!
|
22
22
|
body = Body.new(env, @asset_file)
|
23
23
|
[ body.partial? ? 206 : 200,
|
24
|
-
Rack::Utils::HeaderHash.new.tap do |h|
|
24
|
+
Rack::Utils::HeaderHash.new.merge(@asset_file.response_headers).tap do |h|
|
25
25
|
h['Last-Modified'] = mtime
|
26
26
|
h['Content-Type'] = @asset_file.mime_type.to_s
|
27
27
|
h['Content-Length'] = body.size.to_s
|
data/lib/dassets/source.rb
CHANGED
@@ -3,12 +3,13 @@ require 'dassets/engine'
|
|
3
3
|
module Dassets; end
|
4
4
|
class Dassets::Source
|
5
5
|
|
6
|
-
attr_reader :path, :engines
|
6
|
+
attr_reader :path, :engines, :response_headers
|
7
7
|
|
8
8
|
def initialize(path)
|
9
9
|
@path = path.to_s
|
10
10
|
@filter = proc{ |paths| paths }
|
11
11
|
@engines = Hash.new{ |h,k| Dassets::NullEngine.new }
|
12
|
+
@response_headers = Hash.new
|
12
13
|
end
|
13
14
|
|
14
15
|
def filter(&block)
|
data/lib/dassets/source_file.rb
CHANGED
data/lib/dassets/source_proxy.rb
CHANGED
@@ -35,6 +35,10 @@ class Dassets::SourceProxy
|
|
35
35
|
@source_files.map{ |f| f.mtime }.compact.max
|
36
36
|
end
|
37
37
|
|
38
|
+
def response_headers
|
39
|
+
@source_files.inject(Hash.new){ |hash, f| hash.merge!(f.response_headers) }
|
40
|
+
end
|
41
|
+
|
38
42
|
def exists?
|
39
43
|
@source_files.inject(true){ |res, f| res && f.exists? }
|
40
44
|
end
|
data/lib/dassets/version.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -25,10 +25,11 @@ class Dassets::AssetFile
|
|
25
25
|
assert_equal 'file1', subject.basename
|
26
26
|
end
|
27
27
|
|
28
|
-
should "use its source
|
28
|
+
should "use its source proxy attrs as its own" do
|
29
29
|
assert_equal subject.source_proxy.mtime.httpdate, subject.mtime
|
30
30
|
assert_equal Rack::Utils.bytesize(subject.content), subject.size
|
31
31
|
assert_equal "text/plain", subject.mime_type
|
32
|
+
assert_equal subject.source_proxy.response_headers, subject.response_headers
|
32
33
|
assert subject.exists?
|
33
34
|
|
34
35
|
null_file = Dassets::AssetFile.new('')
|
@@ -36,6 +37,7 @@ class Dassets::AssetFile
|
|
36
37
|
assert_nil null_file.size
|
37
38
|
assert_nil null_file.mime_type
|
38
39
|
assert_not null_file.exists?
|
40
|
+
assert_equal null_file.source_proxy.response_headers, null_file.response_headers
|
39
41
|
end
|
40
42
|
|
41
43
|
should "know its source proxy" do
|
@@ -40,11 +40,11 @@ class Dassets::Server::Response
|
|
40
40
|
exp_body = Body.new(@env, @asset_file)
|
41
41
|
assert_equal exp_body, resp.body
|
42
42
|
|
43
|
-
exp_headers = {
|
43
|
+
exp_headers = @asset_file.response_headers.merge({
|
44
44
|
'Content-Type' => 'text/plain',
|
45
45
|
'Content-Length' => Rack::Utils.bytesize(@asset_file.content).to_s,
|
46
46
|
'Last-Modified' => @asset_file.mtime.to_s
|
47
|
-
}
|
47
|
+
})
|
48
48
|
assert_equal exp_headers, resp.headers
|
49
49
|
|
50
50
|
assert_equal [200, exp_headers, exp_body], resp.to_rack
|
@@ -17,33 +17,43 @@ class Dassets::SourceFile
|
|
17
17
|
|
18
18
|
should have_readers :file_path
|
19
19
|
should have_imeths :source, :asset_file, :digest_path
|
20
|
-
should have_imeths :compiled, :exists?, :mtime
|
20
|
+
should have_imeths :compiled, :exists?, :mtime, :response_headers
|
21
21
|
should have_cmeth :find_by_digest_path
|
22
22
|
|
23
23
|
should "know its file path" do
|
24
24
|
assert_equal @file_path.to_s, subject.file_path
|
25
25
|
end
|
26
26
|
|
27
|
-
should "know
|
28
|
-
|
27
|
+
should "know its configured source" do
|
28
|
+
exp_source = Dassets.config.sources.select{ |s| @file_path.include?(s.path) }.last
|
29
|
+
assert_equal exp_source, subject.source
|
29
30
|
end
|
30
31
|
|
31
|
-
should "
|
32
|
-
|
32
|
+
should "know its asset file" do
|
33
|
+
assert_kind_of Dassets::AssetFile, subject.asset_file
|
34
|
+
assert_equal Dassets::AssetFile.new(subject.digest_path), subject.asset_file
|
33
35
|
end
|
34
36
|
|
35
37
|
should "know its digest path" do
|
36
38
|
assert_equal 'file1.txt', subject.digest_path
|
37
39
|
end
|
38
40
|
|
39
|
-
should "
|
40
|
-
|
41
|
-
|
41
|
+
should "not memoize its compiled source" do
|
42
|
+
compiled1 = subject.compiled
|
43
|
+
compiled2 = subject.compiled
|
44
|
+
assert_not_same compiled2, compiled1
|
42
45
|
end
|
43
46
|
|
44
|
-
should "know
|
45
|
-
|
46
|
-
|
47
|
+
should "know if it exists" do
|
48
|
+
assert subject.exists?
|
49
|
+
end
|
50
|
+
|
51
|
+
should "use the mtime of its file as its mtime" do
|
52
|
+
assert_equal File.mtime(subject.file_path), subject.mtime
|
53
|
+
end
|
54
|
+
|
55
|
+
should "use the response headers of its source as its response headers" do
|
56
|
+
assert_same subject.source.response_headers, subject.response_headers
|
47
57
|
end
|
48
58
|
|
49
59
|
should "be findable by its digest path" do
|
@@ -53,12 +63,6 @@ class Dassets::SourceFile
|
|
53
63
|
assert_not_same subject, found
|
54
64
|
end
|
55
65
|
|
56
|
-
should "not memoize its compiled source" do
|
57
|
-
compiled1 = subject.compiled
|
58
|
-
compiled2 = subject.compiled
|
59
|
-
assert_not_same compiled2, compiled1
|
60
|
-
end
|
61
|
-
|
62
66
|
end
|
63
67
|
|
64
68
|
class NullSourceTests < UnitTests
|
@@ -80,6 +84,7 @@ class Dassets::SourceFile
|
|
80
84
|
assert_equal false, null_src.exists?
|
81
85
|
assert_nil null_src.compiled
|
82
86
|
assert_nil null_src.mtime
|
87
|
+
assert_equal Hash.new, null_src.response_headers
|
83
88
|
end
|
84
89
|
|
85
90
|
should "pass options to a null src when finding by an unknown digest path" do
|
@@ -17,7 +17,8 @@ class Dassets::SourceProxy
|
|
17
17
|
|
18
18
|
should have_readers :digest_path, :content_cache, :fingerprint_cache
|
19
19
|
should have_readers :source_files
|
20
|
-
should have_imeths :key, :content, :fingerprint, :mtime, :
|
20
|
+
should have_imeths :key, :content, :fingerprint, :mtime, :response_headers
|
21
|
+
should have_imeths :exists?
|
21
22
|
|
22
23
|
end
|
23
24
|
|
@@ -38,13 +39,13 @@ class Dassets::SourceProxy
|
|
38
39
|
|
39
40
|
should "have a single source file" do
|
40
41
|
assert_equal 1, subject.source_files.size
|
41
|
-
|
42
|
-
assert_equal
|
42
|
+
exp = Dassets::SourceFile.find_by_digest_path('file1.txt')
|
43
|
+
assert_equal exp, subject.source_files.first
|
43
44
|
end
|
44
45
|
|
45
46
|
should "use its digest path and mtime as its key" do
|
46
|
-
|
47
|
-
assert_equal
|
47
|
+
exp = "#{subject.digest_path} -- #{subject.mtime}"
|
48
|
+
assert_equal exp, subject.key
|
48
49
|
end
|
49
50
|
|
50
51
|
should "get its content from the compiled source of the single source file" do
|
@@ -52,14 +53,18 @@ class Dassets::SourceProxy
|
|
52
53
|
end
|
53
54
|
|
54
55
|
should "get its fingerprint by MD5 hashing the content" do
|
55
|
-
|
56
|
-
assert_equal
|
56
|
+
exp = Digest::MD5.new.hexdigest(subject.content)
|
57
|
+
assert_equal exp, subject.fingerprint
|
57
58
|
end
|
58
59
|
|
59
60
|
should "use its single source file's max mtime as its mtime" do
|
60
61
|
assert_equal subject.source_files.first.mtime, subject.mtime
|
61
62
|
end
|
62
63
|
|
64
|
+
should "use its single source file's response headers as its resonse headers" do
|
65
|
+
assert_equal subject.source_files.first.response_headers, subject.response_headers
|
66
|
+
end
|
67
|
+
|
63
68
|
should "exist if its single source file exists" do
|
64
69
|
assert_equal subject.source_files.first.exists?, subject.exists?
|
65
70
|
end
|
@@ -100,18 +105,25 @@ class Dassets::SourceProxy
|
|
100
105
|
end
|
101
106
|
|
102
107
|
should "get its content from the compiled source of its source files" do
|
103
|
-
|
104
|
-
assert_equal
|
108
|
+
exp = subject.source_files.map{ |f| f.compiled }.join("\n")
|
109
|
+
assert_equal exp, subject.content
|
105
110
|
end
|
106
111
|
|
107
112
|
should "use its source files' max mtime as its mtime" do
|
108
|
-
|
109
|
-
assert_equal
|
113
|
+
exp = subject.source_files.map{ |f| f.mtime }.max
|
114
|
+
assert_equal exp, subject.mtime
|
115
|
+
end
|
116
|
+
|
117
|
+
should "use its source files' merged response headers as its response headers" do
|
118
|
+
exp = subject.source_files.inject(Hash.new) do |hash, file|
|
119
|
+
hash.merge!(file.response_headers)
|
120
|
+
end
|
121
|
+
assert_equal exp, subject.response_headers
|
110
122
|
end
|
111
123
|
|
112
124
|
should "exist if its all its source files exist" do
|
113
|
-
|
114
|
-
assert_equal
|
125
|
+
exp = subject.source_files.inject(true){ |res, f| res && f.exists? }
|
126
|
+
assert_equal exp, subject.exists?
|
115
127
|
end
|
116
128
|
|
117
129
|
end
|
data/test/unit/source_tests.rb
CHANGED
@@ -13,7 +13,7 @@ class Dassets::Source
|
|
13
13
|
end
|
14
14
|
subject{ @source }
|
15
15
|
|
16
|
-
should have_reader :path, :engines
|
16
|
+
should have_reader :path, :engines, :response_headers
|
17
17
|
should have_imeth :files, :filter, :engine
|
18
18
|
|
19
19
|
should "know its path and default filter" do
|
@@ -49,6 +49,14 @@ class Dassets::Source
|
|
49
49
|
assert_kind_of Dassets::NullEngine, subject.engines['something']
|
50
50
|
end
|
51
51
|
|
52
|
+
should "know its response headers" do
|
53
|
+
assert_equal Hash.new, subject.response_headers
|
54
|
+
|
55
|
+
name, value = Factory.string, Factory.string
|
56
|
+
subject.response_headers[name] = value
|
57
|
+
assert_equal value, subject.response_headers[name]
|
58
|
+
end
|
59
|
+
|
52
60
|
end
|
53
61
|
|
54
62
|
class EmptySourceTests < UnitTests
|
metadata
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dassets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 13
|
9
|
-
- 0
|
10
|
-
version: 0.13.0
|
4
|
+
version: 0.13.1
|
11
5
|
platform: ruby
|
12
6
|
authors:
|
13
7
|
- Kelly Redding
|
@@ -16,83 +10,57 @@ autorequire:
|
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
12
|
|
19
|
-
date:
|
13
|
+
date: 2016-02-23 00:00:00 Z
|
20
14
|
dependencies:
|
21
15
|
- !ruby/object:Gem::Dependency
|
16
|
+
name: assert
|
17
|
+
prerelease: false
|
22
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
-
none: false
|
24
19
|
requirements:
|
25
20
|
- - ~>
|
26
21
|
- !ruby/object:Gem::Version
|
27
|
-
hash: 29
|
28
|
-
segments:
|
29
|
-
- 2
|
30
|
-
- 15
|
31
22
|
version: "2.15"
|
32
23
|
type: :development
|
33
|
-
name: assert
|
34
24
|
version_requirements: *id001
|
35
|
-
prerelease: false
|
36
25
|
- !ruby/object:Gem::Dependency
|
26
|
+
name: assert-rack-test
|
27
|
+
prerelease: false
|
37
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
29
|
requirements:
|
40
30
|
- - ~>
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
hash: 15
|
43
|
-
segments:
|
44
|
-
- 1
|
45
|
-
- 0
|
31
|
+
- &id005 !ruby/object:Gem::Version
|
46
32
|
version: "1.0"
|
47
33
|
type: :development
|
48
|
-
name: assert-rack-test
|
49
34
|
version_requirements: *id002
|
50
|
-
prerelease: false
|
51
35
|
- !ruby/object:Gem::Dependency
|
36
|
+
name: sinatra
|
37
|
+
prerelease: false
|
52
38
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
39
|
requirements:
|
55
40
|
- - ~>
|
56
41
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 7
|
58
|
-
segments:
|
59
|
-
- 1
|
60
|
-
- 4
|
61
42
|
version: "1.4"
|
62
43
|
type: :development
|
63
|
-
name: sinatra
|
64
44
|
version_requirements: *id003
|
65
|
-
prerelease: false
|
66
45
|
- !ruby/object:Gem::Dependency
|
46
|
+
name: ns-options
|
47
|
+
prerelease: false
|
67
48
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
-
none: false
|
69
49
|
requirements:
|
70
50
|
- - ~>
|
71
51
|
- !ruby/object:Gem::Version
|
72
|
-
hash: 13
|
73
|
-
segments:
|
74
|
-
- 1
|
75
|
-
- 1
|
76
52
|
version: "1.1"
|
77
53
|
type: :runtime
|
78
|
-
name: ns-options
|
79
54
|
version_requirements: *id004
|
80
|
-
prerelease: false
|
81
55
|
- !ruby/object:Gem::Dependency
|
82
|
-
|
83
|
-
|
56
|
+
name: rack
|
57
|
+
prerelease: false
|
58
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
84
59
|
requirements:
|
85
60
|
- - ~>
|
86
|
-
-
|
87
|
-
hash: 15
|
88
|
-
segments:
|
89
|
-
- 1
|
90
|
-
- 0
|
91
|
-
version: "1.0"
|
61
|
+
- *id005
|
92
62
|
type: :runtime
|
93
|
-
|
94
|
-
version_requirements: *id005
|
95
|
-
prerelease: false
|
63
|
+
version_requirements: *id006
|
96
64
|
description: Digest and serve HTML asset files
|
97
65
|
email:
|
98
66
|
- kelly@kellyredding.com
|
@@ -158,35 +126,28 @@ files:
|
|
158
126
|
homepage: http://github.com/redding/dassets
|
159
127
|
licenses:
|
160
128
|
- MIT
|
129
|
+
metadata: {}
|
130
|
+
|
161
131
|
post_install_message:
|
162
132
|
rdoc_options: []
|
163
133
|
|
164
134
|
require_paths:
|
165
135
|
- lib
|
166
136
|
required_ruby_version: !ruby/object:Gem::Requirement
|
167
|
-
none: false
|
168
137
|
requirements:
|
169
|
-
-
|
138
|
+
- &id007
|
139
|
+
- ">="
|
170
140
|
- !ruby/object:Gem::Version
|
171
|
-
hash: 3
|
172
|
-
segments:
|
173
|
-
- 0
|
174
141
|
version: "0"
|
175
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
|
-
none: false
|
177
143
|
requirements:
|
178
|
-
-
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
hash: 3
|
181
|
-
segments:
|
182
|
-
- 0
|
183
|
-
version: "0"
|
144
|
+
- *id007
|
184
145
|
requirements: []
|
185
146
|
|
186
147
|
rubyforge_project:
|
187
|
-
rubygems_version:
|
148
|
+
rubygems_version: 2.5.1
|
188
149
|
signing_key:
|
189
|
-
specification_version:
|
150
|
+
specification_version: 4
|
190
151
|
summary: Digested asset files
|
191
152
|
test_files:
|
192
153
|
- test/helper.rb
|