dassets 0.14.3 → 0.15.2

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.
Files changed (40) hide show
  1. checksums.yaml +7 -7
  2. data/Gemfile +5 -1
  3. data/README.md +15 -17
  4. data/dassets.gemspec +14 -9
  5. data/lib/dassets.rb +51 -13
  6. data/lib/dassets/asset_file.rb +27 -24
  7. data/lib/dassets/cache.rb +27 -33
  8. data/lib/dassets/config.rb +55 -50
  9. data/lib/dassets/engine.rb +11 -23
  10. data/lib/dassets/file_store.rb +27 -28
  11. data/lib/dassets/server.rb +27 -27
  12. data/lib/dassets/server/request.rb +44 -41
  13. data/lib/dassets/server/response.rb +101 -80
  14. data/lib/dassets/source.rb +24 -9
  15. data/lib/dassets/source_file.rb +110 -81
  16. data/lib/dassets/source_proxy.rb +36 -20
  17. data/lib/dassets/version.rb +3 -1
  18. data/test/helper.rb +31 -25
  19. data/test/support/app.rb +5 -5
  20. data/test/support/empty/{.gitkeep → .keep} +0 -0
  21. data/test/support/factory.rb +3 -2
  22. data/test/support/linked_source_files/linked_file.txt +0 -0
  23. data/test/support/source_files/linked +1 -0
  24. data/test/support/source_files/linked_file2.txt +1 -0
  25. data/test/system/rack_tests.rb +65 -61
  26. data/test/unit/asset_file_tests.rb +68 -60
  27. data/test/unit/cache_tests.rb +15 -34
  28. data/test/unit/config_tests.rb +58 -51
  29. data/test/unit/dassets_tests.rb +31 -24
  30. data/test/unit/engine_tests.rb +9 -43
  31. data/test/unit/file_store_tests.rb +34 -24
  32. data/test/unit/server/request_tests.rb +57 -59
  33. data/test/unit/server/response_tests.rb +82 -82
  34. data/test/unit/server_tests.rb +5 -9
  35. data/test/unit/source_file_tests.rb +86 -74
  36. data/test/unit/source_proxy_tests.rb +84 -90
  37. data/test/unit/source_tests.rb +89 -50
  38. data/tmp/.gitkeep +0 -0
  39. metadata +92 -64
  40. data/.gitignore +0 -19
@@ -1,17 +1,19 @@
1
- require 'assert'
2
- require 'dassets/config'
1
+ # frozen_string_literal: true
3
2
 
4
- require 'dassets/cache'
5
- require 'dassets/file_store'
3
+ require "assert"
4
+ require "dassets/config"
6
5
 
7
- class Dassets::Config
6
+ require "dassets/cache"
7
+ require "dassets/file_store"
8
8
 
9
+ class Dassets::Config
9
10
  class UnitTests < Assert::Context
10
11
  desc "Dassets::Config"
12
+ subject{ @config }
13
+
11
14
  setup do
12
15
  @config = Dassets::Config.new
13
16
  end
14
- subject{ @config }
15
17
 
16
18
  should have_readers :combinations
17
19
  should have_imeths :reset
@@ -20,119 +22,124 @@ class Dassets::Config
20
22
  should have_imeths :source, :combination, :combination?
21
23
 
22
24
  should "reset its sources and combination on `reset`" do
23
- assert_empty subject.sources
24
- assert_empty subject.combinations
25
+ assert_that(subject.sources).is_empty
26
+ assert_that(subject.combinations).is_empty
25
27
 
26
28
  path = Factory.path
27
29
  subject.source(path)
28
30
  subject.combination path, [Factory.path]
29
- assert_equal 1, subject.sources.size
30
- assert_equal 1, subject.combinations.size
31
+ assert_that(subject.sources.size).equals(1)
32
+ assert_that(subject.combinations.size).equals(1)
31
33
 
32
34
  subject.reset
33
- assert_empty subject.sources
34
- assert_empty subject.combinations
35
+ assert_that(subject.sources).is_empty
36
+ assert_that(subject.combinations).is_empty
35
37
  end
36
38
 
37
39
  should "have no base url by default" do
38
- assert_nil subject.base_url
40
+ assert_that(subject.base_url).is_nil
39
41
  end
40
42
 
41
43
  should "set non-nil base urls" do
42
44
  url = Factory.url
43
45
  subject.base_url url
44
- assert_equal url, subject.base_url
46
+ assert_that(subject.base_url).equals(url)
45
47
 
46
48
  subject.base_url(nil)
47
- assert_equal url, subject.base_url
49
+ assert_that(subject.base_url).equals(url)
48
50
  end
49
51
 
50
52
  should "force set any base urls" do
51
53
  url = Factory.url
52
54
  subject.set_base_url url
53
- assert_equal url, subject.base_url
55
+ assert_that(subject.base_url).equals(url)
54
56
 
55
57
  subject.set_base_url(nil)
56
- assert_nil subject.base_url
58
+ assert_that(subject.base_url).is_nil
57
59
  end
58
60
 
59
61
  should "default the file store option to a null file store" do
60
- assert_kind_of Dassets::FileStore::NullStore, subject.file_store
62
+ assert_that(subject.file_store).is_kind_of(Dassets::NullFileStore)
61
63
  end
62
64
 
63
65
  should "configure non-nil file stores" do
64
66
  store_root = Factory.path
65
67
  subject.file_store(store_root)
66
- assert_equal store_root, subject.file_store.root
68
+ assert_that(subject.file_store.root).equals(store_root)
67
69
 
68
70
  store = Dassets::FileStore.new(Factory.path)
69
71
  subject.file_store(store)
70
- assert_equal store, subject.file_store
72
+ assert_that(subject.file_store).equals(store)
71
73
 
72
74
  subject.file_store(nil)
73
- assert_equal store, subject.file_store
75
+ assert_that(subject.file_store).equals(store)
74
76
  end
75
77
 
76
78
  should "default its content cache" do
77
- assert_instance_of Dassets::Cache::NoCache, subject.content_cache
79
+ assert_that(subject.content_cache).is_instance_of(Dassets::NoCache)
78
80
  end
79
81
 
80
82
  should "configure non-nil content caches" do
81
- cache = Dassets::Cache::MemCache.new
83
+ cache = Dassets::MemCache.new
82
84
  subject.content_cache(cache)
83
- assert_equal cache, subject.content_cache
85
+ assert_that(subject.content_cache).equals(cache)
84
86
 
85
87
  subject.content_cache(nil)
86
- assert_equal cache, subject.content_cache
88
+ assert_that(subject.content_cache).equals(cache)
87
89
  end
88
90
 
89
91
  should "default its fingerprint cache" do
90
- assert_instance_of Dassets::Cache::NoCache, subject.fingerprint_cache
92
+ assert_instance_of Dassets::NoCache, subject.fingerprint_cache
91
93
  end
92
94
 
93
95
  should "configure non-nil fingerprint caches" do
94
- cache = Dassets::Cache::MemCache.new
96
+ cache = Dassets::MemCache.new
95
97
  subject.fingerprint_cache(cache)
96
- assert_equal cache, subject.fingerprint_cache
98
+ assert_that(subject.fingerprint_cache).equals(cache)
97
99
 
98
100
  subject.fingerprint_cache(nil)
99
- assert_equal cache, subject.fingerprint_cache
101
+ assert_that(subject.fingerprint_cache).equals(cache)
100
102
  end
101
103
 
102
104
  should "register new sources with the `source` method" do
103
105
  path = Factory.path
104
- filter = proc{ |paths| [] }
106
+ filter = proc{ |_paths| [] }
105
107
  subject.source(path){ |s| s.filter(&filter) }
106
108
 
107
- assert_equal 1, subject.sources.size
108
- assert_kind_of Dassets::Source, subject.sources.first
109
- assert_equal path, subject.sources.first.path
110
- assert_equal filter, subject.sources.first.filter
109
+ assert_that(subject.sources.size).equals(1)
110
+ assert_that(subject.sources.first).is_kind_of(Dassets::Source)
111
+ assert_that(subject.sources.first.path).equals(path)
112
+ assert_that(subject.sources.first.filter).equals(filter)
111
113
  end
112
114
 
113
- should "know its combinations and return the keyed digest path by default" do
114
- assert_kind_of ::Hash, subject.combinations
115
- assert_equal ['some/digest.path'], subject.combinations['some/digest.path']
115
+ should "know its combinations and return the keyed digest path by "\
116
+ "default" do
117
+ assert_that(subject.combinations).is_kind_of(::Hash)
118
+ assert_that(subject.combinations["some/digest.path"])
119
+ .equals(["some/digest.path"])
116
120
  end
117
121
 
118
122
  should "allow registering new combinations" do
119
- assert_equal ['some/digest.path'], subject.combinations['some/digest.path']
120
- exp_combination = ['some/other.path', 'and/another.path']
121
- subject.combination 'some/digest.path', exp_combination
122
- assert_equal exp_combination, subject.combinations['some/digest.path']
123
-
124
- assert_equal ['test/digest.path'], subject.combinations['test/digest.path']
125
- subject.combination 'test/digest.path', ['some/other.path']
126
- assert_equal ['some/other.path'], subject.combinations['test/digest.path']
123
+ assert_that(subject.combinations["some/digest.path"])
124
+ .equals(["some/digest.path"])
125
+ exp_combination = ["some/other.path", "and/another.path"]
126
+ subject.combination "some/digest.path", exp_combination
127
+ assert_that(subject.combinations["some/digest.path"])
128
+ .equals(exp_combination)
129
+
130
+ assert_that(subject.combinations["test/digest.path"])
131
+ .equals(["test/digest.path"])
132
+ subject.combination "test/digest.path", ["some/other.path"]
133
+ assert_that(subject.combinations["test/digest.path"])
134
+ .equals(["some/other.path"])
127
135
  end
128
136
 
129
- should "know which digest paths are actual combinations and which are just pass-thrus" do
130
- subject.combination 'some/combination.path', ['some.path', 'another.path']
137
+ should "know which digest paths are actual combinations and which are "\
138
+ "just pass-thrus" do
139
+ subject.combination "some/combination.path", ["some.path", "another.path"]
131
140
 
132
- assert subject.combination? 'some/combination.path'
133
- assert_not subject.combination? 'some/non-combo.path'
141
+ assert_that(subject.combination?("some/combination.path")).is_true
142
+ assert_that(subject.combination?("some/non-combo.path")).is_false
134
143
  end
135
-
136
144
  end
137
-
138
145
  end
@@ -1,60 +1,67 @@
1
- require 'assert'
2
- require 'dassets'
1
+ # frozen_string_literal: true
3
2
 
4
- require 'fileutils'
5
- require 'dassets/asset_file'
3
+ require "assert"
4
+ require "dassets"
6
5
 
7
- module Dassets
6
+ require "fileutils"
7
+ require "dassets/asset_file"
8
8
 
9
+ module Dassets
9
10
  class UnitTests < Assert::Context
10
11
  desc "Dassets"
11
12
  subject{ Dassets }
12
13
 
13
14
  should have_imeths :config, :configure, :init, :reset
14
- should have_imeths :[], :source_files
15
+ should have_imeths :asset_file, :[], :source_files, :combinations
15
16
 
16
17
  should "return a `Config` instance with the `config` method" do
17
- assert_kind_of Config, subject.config
18
+ assert_that(subject.config).is_kind_of(Dassets::Config)
18
19
  end
19
20
 
20
21
  should "know how to reset itself" do
21
22
  config_reset_called = false
22
23
  Assert.stub(subject.config, :reset){ config_reset_called = true }
23
24
 
24
- file1 = subject['nested/file3.txt']
25
+ file1 = subject["nested/file3.txt"]
25
26
 
26
27
  subject.reset
27
28
 
28
- file2 = subject['nested/file3.txt']
29
- assert_not_same file2, file1
30
- assert_true config_reset_called
29
+ file2 = subject["nested/file3.txt"]
30
+ assert_that(file2).is_not(file1)
31
+ assert_that(config_reset_called).is_true
31
32
  end
32
33
 
33
- should "return asset files given a their digest path using the index operator" do
34
- file = subject['nested/file3.txt']
34
+ should "return asset files given their digest path " do
35
+ file = subject.asset_file("nested/file3.txt")
35
36
 
36
- assert_kind_of subject::AssetFile, file
37
- assert_equal 'nested/file3.txt', file.digest_path
38
- assert_equal 'd41d8cd98f00b204e9800998ecf8427e', file.fingerprint
37
+ assert_that(file).is_kind_of(subject::AssetFile)
38
+ assert_that(file.digest_path).equals("nested/file3.txt")
39
+ assert_that(file.fingerprint).equals("d41d8cd98f00b204e9800998ecf8427e")
39
40
  end
40
41
 
41
42
  should "cache asset files" do
42
- file1 = subject['nested/file3.txt']
43
- file2 = subject['nested/file3.txt']
43
+ file1 = subject.asset_file("nested/file3.txt")
44
+ file2 = subject.asset_file("nested/file3.txt")
44
45
 
45
- assert_same file2, file1
46
+ assert_that(file2).is(file1)
46
47
  end
47
48
 
48
- should "return an asset file that doesn't exist if digest path not found" do
49
- file = subject['path/not/found.txt']
50
- assert_not file.exists?
49
+ should "complain if digest path is not found using the index operator" do
50
+ assert_that(->{
51
+ subject.asset_file("path/not/found.txt")
52
+ }).does_not_raise
53
+
54
+ assert_that{ subject["path/not/found.txt"] }.raises(AssetFileError)
51
55
  end
52
56
 
53
57
  should "know its list of configured source files" do
54
58
  exp = Dassets::SourceFiles.new(subject.config.sources)
55
- assert_equal exp, subject.source_files
59
+ assert_that(subject.source_files).equals(exp)
56
60
  end
57
61
 
62
+ should "know its configured combinations" do
63
+ exp = subject.config.combinations
64
+ assert_that(subject.combinations).equals(exp)
65
+ end
58
66
  end
59
-
60
67
  end
@@ -1,59 +1,25 @@
1
- require 'assert'
2
- require 'dassets/engine'
1
+ # frozen_string_literal: true
3
2
 
4
- class Dassets::Engine
3
+ require "assert"
4
+ require "dassets/engine"
5
5
 
6
+ class Dassets::Engine
6
7
  class UnitTests < Assert::Context
7
8
  desc "Dassets::Engine"
8
- setup do
9
- @engine = Dassets::Engine.new
10
- end
11
- subject{ @engine }
9
+ subject{ Dassets::Engine.new }
12
10
 
13
11
  should have_reader :opts
14
12
  should have_imeths :ext, :compile
15
13
 
16
14
  should "default the opts if none given" do
17
15
  exp_opts = {}
18
- assert_equal exp_opts, subject.opts
16
+ assert_that(subject.opts).equals(exp_opts)
19
17
  end
20
18
 
21
19
  should "raise NotImplementedError on `ext` and `compile`" do
22
- assert_raises NotImplementedError do
23
- subject.ext('foo')
24
- end
25
-
26
- assert_raises NotImplementedError do
27
- subject.compile('some content')
28
- end
29
- end
30
-
31
- end
32
-
33
- class NullEngineTests < Assert::Context
34
- desc "Dassets::NullEngine"
35
- setup do
36
- @engine = Dassets::NullEngine.new('some' => 'opts')
37
- end
38
- subject{ @engine }
39
-
40
- should "be a Engine" do
41
- assert_kind_of Dassets::Engine, subject
42
- end
43
-
44
- should "know its opts" do
45
- exp_opts = {'some' => 'opts'}
46
- assert_equal exp_opts, subject.opts
47
- end
48
-
49
- should "return the given extension on `ext`" do
50
- assert_equal 'foo', subject.ext('foo')
20
+ assert_that{ subject.ext("foo") }.raises(NotImplementedError)
21
+ assert_that{ subject.compile("some content") }
22
+ .raises(NotImplementedError)
51
23
  end
52
-
53
- should "return the given input on `compile" do
54
- assert_equal 'some content', subject.compile('some content')
55
- end
56
-
57
24
  end
58
-
59
25
  end
@@ -1,65 +1,75 @@
1
- require 'assert'
2
- require 'dassets/file_store'
1
+ # frozen_string_literal: true
3
2
 
4
- class Dassets::FileStore
3
+ require "assert"
4
+ require "dassets/file_store"
5
5
 
6
+ class Dassets::FileStore
6
7
  class UnitTests < Assert::Context
7
8
  desc "Dassets::FileStore"
9
+ subject{ Dassets::FileStore.new(@root.to_s) }
10
+
8
11
  setup do
9
- @root = TEST_SUPPORT_PATH.join('public')
12
+ @root = TEST_SUPPORT_PATH.join("public")
10
13
  @url_path = Factory.url
11
14
  @root_path = File.join(@root, @url_path).to_s
12
15
  FileUtils.rm_f(@root_path)
13
-
14
- @store = Dassets::FileStore.new(@root.to_s)
15
16
  end
17
+
16
18
  teardown do
17
19
  FileUtils.rm_rf(@root.to_s)
18
20
  end
19
- subject{ @store }
20
21
 
21
22
  should have_readers :root
22
23
  should have_imeths :save, :store_path
23
24
 
24
25
  should "know its root" do
25
- assert_equal @root.to_s, subject.root
26
+ assert_that(subject.root).equals(@root.to_s)
26
27
  end
27
28
 
28
29
  should "build the store path based on a given url path" do
29
- assert_equal @root_path, subject.store_path(@url_path)
30
+ assert_that(subject.store_path(@url_path)).equals(@root_path)
30
31
  end
31
32
 
32
33
  should "write a file and return the store path on save" do
33
34
  content = Factory.text
34
- assert_not_file_exists @root_path
35
+ assert_that(@root_path).is_not_a_file
36
+
35
37
  path = subject.save(@url_path){ content }
36
38
 
37
- assert_equal @root_path, path
38
- assert_file_exists @root_path
39
- assert_equal content, File.read(@root_path)
39
+ assert_that(path).equals(@root_path)
40
+ assert_that(@root_path).is_a_file
41
+ assert_that(File.read(@root_path)).equals(content)
40
42
  end
41
-
42
43
  end
44
+ end
45
+
46
+ class Dassets::NullFileStore
47
+ class UnitTests < Assert::Context
48
+ desc "Dassets::NullFileStore"
49
+ subject{ Dassets::NullFileStore.new }
43
50
 
44
- class NullStoreTests < UnitTests
45
- desc "NullStore"
46
51
  setup do
47
- @store = Dassets::FileStore::NullStore.new
52
+ @root = TEST_SUPPORT_PATH.join("public")
53
+ @url_path = Factory.url
54
+ @root_path = File.join(@root, @url_path).to_s
55
+ FileUtils.rm_f(@root_path)
48
56
  end
49
57
 
50
- should "be a kind of FileStore" do
51
- assert_kind_of Dassets::FileStore, subject
58
+ teardown do
59
+ FileUtils.rm_rf(@root.to_s)
60
+ end
61
+
62
+ should "be a kind of Dassets::FileStore" do
63
+ assert_that(subject).is_kind_of(Dassets::FileStore)
52
64
  end
53
65
 
54
66
  should "know its root" do
55
- assert_equal '', subject.root
67
+ assert_that(subject.root).equals("")
56
68
  end
57
69
 
58
70
  should "return the store path on save but not save a file" do
59
- assert_equal File.join('', @url_path), subject.save(@url_path)
60
- assert_not_file_exists @root_path
71
+ assert_that(subject.save(@url_path)).equals(File.join("", @url_path))
72
+ assert_that(@root_path).is_not_a_file
61
73
  end
62
-
63
74
  end
64
-
65
75
  end