dassets 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -28
- data/lib/dassets/source_file.rb +25 -6
- data/lib/dassets/source_proxy.rb +4 -4
- data/lib/dassets/version.rb +1 -1
- data/lib/dassets.rb +7 -8
- data/test/unit/config_tests.rb +8 -1
- data/test/unit/dassets_tests.rb +1 -1
- data/test/unit/source_file_tests.rb +26 -4
- metadata +6 -16
- data/bin/dassets +0 -7
- data/lib/dassets/cli.rb +0 -109
- data/lib/dassets/digest_cmd.rb +0 -41
- data/lib/dassets/runner.rb +0 -39
- data/test/system/digest_cmd_run_tests.rb +0 -68
- data/test/unit/digest_cmd_tests.rb +0 -23
- data/test/unit/runner_tests.rb +0 -29
data/README.md
CHANGED
@@ -25,24 +25,6 @@ Dassets.configure do |c|
|
|
25
25
|
end
|
26
26
|
```
|
27
27
|
|
28
|
-
### Digest
|
29
|
-
|
30
|
-
You can use the CLI to digest your source files on demand:
|
31
|
-
|
32
|
-
```
|
33
|
-
$ dassets digest # digest all source files, OR
|
34
|
-
$ dassets digest /path/to/source/file # digest some specific files
|
35
|
-
```
|
36
|
-
|
37
|
-
Or you can programmatically digest files as needed:
|
38
|
-
|
39
|
-
```ruby
|
40
|
-
Dassets.digest_source_files # digest all source files, OR
|
41
|
-
Dassets.digest_source_files ['/path/to/source/file'] # digest just some specific files
|
42
|
-
```
|
43
|
-
|
44
|
-
Digesting involves combining, compiling, fingerprinting, and outputting each source file. Once a source has been digested, it is available for linking, serving, and/or caching.
|
45
|
-
|
46
28
|
### Link To
|
47
29
|
|
48
30
|
```rb
|
@@ -53,7 +35,7 @@ Dassets['img/logos/main.jpg'].href # => "/img/logos/main-a1b2c3.jpg"
|
|
53
35
|
|
54
36
|
### Serve
|
55
37
|
|
56
|
-
|
38
|
+
Use the Dassets middleware to serve your digested asset files:
|
57
39
|
|
58
40
|
```ruby
|
59
41
|
# `app` is a rack application
|
@@ -61,15 +43,6 @@ require 'dassets/server'
|
|
61
43
|
app.use Dassets::Server
|
62
44
|
```
|
63
45
|
|
64
|
-
In production, use the CLI to cache your digested asset files to the public dir:
|
65
|
-
|
66
|
-
```
|
67
|
-
# call the CLI in your deploy scripts or whatever
|
68
|
-
$ dassets cache /path/to/public/dir
|
69
|
-
```
|
70
|
-
|
71
|
-
TODO: programmatically cache asset files
|
72
|
-
|
73
46
|
## Compiling
|
74
47
|
|
75
48
|
Dassets compiles your asset source as part of its digest pipeline using "engines". Engines transform source extensions and content.
|
data/lib/dassets/source_file.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'dassets'
|
3
3
|
require 'dassets/asset_file'
|
4
|
+
require 'dassets/source_proxy'
|
4
5
|
|
5
6
|
module Dassets
|
6
7
|
|
7
8
|
class SourceFile
|
8
9
|
|
9
|
-
def self.find_by_digest_path(path)
|
10
|
+
def self.find_by_digest_path(path, cache = nil)
|
10
11
|
# look in the configured source list
|
11
12
|
source_files = Dassets.source_list.map{ |p| self.new(p) }
|
12
13
|
|
13
14
|
# get the last matching one (in case two source files have the same digest
|
14
15
|
# path the last one *should* be correct since it was last to be configured)
|
15
|
-
source_files.select{ |s| s.digest_path == path }.last || NullSourceFile.new(path)
|
16
|
+
source_files.select{ |s| s.digest_path == path }.last || NullSourceFile.new(path, cache)
|
16
17
|
end
|
17
18
|
|
18
19
|
attr_reader :file_path
|
@@ -80,16 +81,34 @@ module Dassets
|
|
80
81
|
|
81
82
|
end
|
82
83
|
|
84
|
+
# A null source file is used to represent source that either doesn't exist
|
85
|
+
# or source that is a proxy (ie a combination)
|
86
|
+
|
83
87
|
class NullSourceFile < SourceFile
|
84
|
-
|
85
|
-
def initialize(digest_path)
|
86
|
-
@file_path = ''
|
87
|
-
@ext_list = []
|
88
|
+
|
89
|
+
def initialize(digest_path, cache = nil)
|
90
|
+
@file_path, @ext_list = '', []
|
88
91
|
@digest_path = digest_path
|
92
|
+
@source_compiled, @source_exists, @source_mtime = nil, false, nil
|
93
|
+
|
94
|
+
# if the digest path is a combination, build its proxy and use relevent
|
95
|
+
# properties as the source file properties
|
96
|
+
if Dassets.config.combination?(@digest_path)
|
97
|
+
source_proxy = SourceProxy.new(@digest_path, cache)
|
98
|
+
@source_compiled = source_proxy.content
|
99
|
+
@source_exists = source_proxy.exists?
|
100
|
+
@source_mtime = source_proxy.mtime
|
101
|
+
end
|
89
102
|
end
|
103
|
+
|
104
|
+
def compiled; @source_compiled; end
|
105
|
+
def exists?; @source_exists; end
|
106
|
+
def mtime; @source_mtime; end
|
107
|
+
|
90
108
|
def ==(other_source_file)
|
91
109
|
self.file_path == other_source_file.file_path
|
92
110
|
end
|
111
|
+
|
93
112
|
end
|
94
113
|
|
95
114
|
end
|
data/lib/dassets/source_proxy.rb
CHANGED
@@ -6,10 +6,10 @@ class Dassets::SourceProxy
|
|
6
6
|
|
7
7
|
attr_reader :digest_path, :source_files, :cache
|
8
8
|
|
9
|
-
def initialize(digest_path, cache=nil)
|
9
|
+
def initialize(digest_path, cache = nil)
|
10
10
|
@digest_path = digest_path
|
11
|
-
@source_files = get_source_files(@digest_path)
|
12
11
|
@cache = cache || NoCache.new
|
12
|
+
@source_files = get_source_files(@digest_path, @cache)
|
13
13
|
end
|
14
14
|
|
15
15
|
def key
|
@@ -42,9 +42,9 @@ class Dassets::SourceProxy
|
|
42
42
|
@source_fingerprint ||= Digest::MD5.new.hexdigest(source_content)
|
43
43
|
end
|
44
44
|
|
45
|
-
def get_source_files(digest_path)
|
45
|
+
def get_source_files(digest_path, cache)
|
46
46
|
Dassets.config.combinations[digest_path.to_s].map do |source_digest_path|
|
47
|
-
Dassets::SourceFile.find_by_digest_path(source_digest_path)
|
47
|
+
Dassets::SourceFile.find_by_digest_path(source_digest_path, cache)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
data/lib/dassets/version.rb
CHANGED
data/lib/dassets.rb
CHANGED
@@ -32,13 +32,6 @@ module Dassets
|
|
32
32
|
SourceList.new(self.config.sources)
|
33
33
|
end
|
34
34
|
|
35
|
-
# Cmds
|
36
|
-
|
37
|
-
def self.digest_source_files(paths=nil)
|
38
|
-
require 'dassets/digest_cmd'
|
39
|
-
DigestCmd.new(paths).run
|
40
|
-
end
|
41
|
-
|
42
35
|
class Config
|
43
36
|
include NsOptions::Proxy
|
44
37
|
|
@@ -51,7 +44,7 @@ module Dassets
|
|
51
44
|
def initialize
|
52
45
|
super
|
53
46
|
@sources = []
|
54
|
-
@combinations = Hash.new{ |h,k| [k] } # digest pass-thru if none defined
|
47
|
+
@combinations = Hash.new{ |h, k| [k] } # digest pass-thru if none defined
|
55
48
|
@cache = DefaultCache.new
|
56
49
|
end
|
57
50
|
|
@@ -62,6 +55,12 @@ module Dassets
|
|
62
55
|
def combination(key_digest_path, value_digest_paths)
|
63
56
|
@combinations[key_digest_path.to_s] = [*value_digest_paths]
|
64
57
|
end
|
58
|
+
|
59
|
+
def combination?(key_digest_path)
|
60
|
+
# a digest path is only considered a combination is it is not the default
|
61
|
+
# pass-thru above
|
62
|
+
@combinations[key_digest_path.to_s] != [key_digest_path]
|
63
|
+
end
|
65
64
|
end
|
66
65
|
|
67
66
|
module SourceList
|
data/test/unit/config_tests.rb
CHANGED
@@ -16,7 +16,7 @@ class Dassets::Config
|
|
16
16
|
should have_options :file_store
|
17
17
|
|
18
18
|
should have_reader :combinations
|
19
|
-
should have_imeth :source, :combination
|
19
|
+
should have_imeth :source, :combination, :combination?
|
20
20
|
|
21
21
|
should "register new sources with the `source` method" do
|
22
22
|
path = '/path/to/app/assets'
|
@@ -45,6 +45,13 @@ class Dassets::Config
|
|
45
45
|
assert_equal ['some/other.path'], subject.combinations['test/digest.path']
|
46
46
|
end
|
47
47
|
|
48
|
+
should "know which digest paths are actual combinations and which are just pass-thrus" do
|
49
|
+
subject.combination 'some/combination.path', ['some.path', 'another.path']
|
50
|
+
|
51
|
+
assert subject.combination? 'some/combination.path'
|
52
|
+
assert_not subject.combination? 'some/non-combo.path'
|
53
|
+
end
|
54
|
+
|
48
55
|
end
|
49
56
|
|
50
57
|
end
|
data/test/unit/dassets_tests.rb
CHANGED
@@ -9,7 +9,7 @@ module Dassets
|
|
9
9
|
subject{ Dassets }
|
10
10
|
|
11
11
|
should have_imeths :config, :configure, :init, :[]
|
12
|
-
should have_imeths :source_list
|
12
|
+
should have_imeths :source_list
|
13
13
|
|
14
14
|
should "return a `Config` instance with the `config` method" do
|
15
15
|
assert_kind_of Config, subject.config
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'assert'
|
2
|
-
require 'dassets/asset_file'
|
3
2
|
require 'dassets/source_file'
|
4
3
|
|
4
|
+
require 'dassets/asset_file'
|
5
|
+
|
5
6
|
class Dassets::SourceFile
|
6
7
|
|
7
|
-
class
|
8
|
+
class UnitTests < Assert::Context
|
8
9
|
desc "Dassets::SourceFile"
|
9
10
|
setup do
|
10
11
|
@file_path = TEST_SUPPORT_PATH.join('app/assets/file1.txt').to_s
|
@@ -50,17 +51,38 @@ class Dassets::SourceFile
|
|
50
51
|
assert_not_same subject, found
|
51
52
|
end
|
52
53
|
|
54
|
+
end
|
55
|
+
|
56
|
+
class NullSourceTests < UnitTests
|
57
|
+
|
53
58
|
should "find a null src file if finding by an unknown digest path" do
|
54
59
|
null_src = Dassets::NullSourceFile.new('not/found/digest/path')
|
55
60
|
found = Dassets::SourceFile.find_by_digest_path('not/found/digest/path')
|
56
61
|
|
57
|
-
assert_equal
|
62
|
+
assert_equal null_src, found
|
58
63
|
assert_not_same null_src, found
|
64
|
+
|
65
|
+
assert_equal '', null_src.file_path
|
66
|
+
assert_equal false, null_src.exists?
|
67
|
+
assert_nil null_src.compiled
|
68
|
+
assert_nil null_src.mtime
|
69
|
+
end
|
70
|
+
|
71
|
+
should "'proxy' the digest path if the path is a combination" do
|
72
|
+
Dassets.config.combination 'file3.txt', ['file1.txt', 'file2.txt']
|
73
|
+
src_proxy = Dassets::SourceProxy.new('file3.txt')
|
74
|
+
null_combo_src = Dassets::NullSourceFile.new('file3.txt')
|
75
|
+
|
76
|
+
assert_equal src_proxy.exists?, null_combo_src.exists?
|
77
|
+
assert_equal src_proxy.content, null_combo_src.compiled
|
78
|
+
assert_equal src_proxy.mtime, null_combo_src.mtime
|
79
|
+
|
80
|
+
Dassets.config.combinations.delete('file3.txt')
|
59
81
|
end
|
60
82
|
|
61
83
|
end
|
62
84
|
|
63
|
-
class EngineTests <
|
85
|
+
class EngineTests < UnitTests
|
64
86
|
desc "compiled against engines"
|
65
87
|
setup do
|
66
88
|
@file_path = TEST_SUPPORT_PATH.join('app/assets/nested/a-thing.txt.useless.dumb')
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
version: 0.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-
|
19
|
+
date: 2013-08-07 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: assert
|
@@ -97,8 +97,8 @@ description: Digest and serve HTML asset files
|
|
97
97
|
email:
|
98
98
|
- kelly@kellyredding.com
|
99
99
|
- collin.redding@me.com
|
100
|
-
executables:
|
101
|
-
|
100
|
+
executables: []
|
101
|
+
|
102
102
|
extensions: []
|
103
103
|
|
104
104
|
extra_rdoc_files: []
|
@@ -109,16 +109,12 @@ files:
|
|
109
109
|
- LICENSE.txt
|
110
110
|
- README.md
|
111
111
|
- Rakefile
|
112
|
-
- bin/dassets
|
113
112
|
- dassets.gemspec
|
114
113
|
- lib/dassets.rb
|
115
114
|
- lib/dassets/asset_file.rb
|
116
|
-
- lib/dassets/cli.rb
|
117
115
|
- lib/dassets/default_cache.rb
|
118
|
-
- lib/dassets/digest_cmd.rb
|
119
116
|
- lib/dassets/engine.rb
|
120
117
|
- lib/dassets/file_store.rb
|
121
|
-
- lib/dassets/runner.rb
|
122
118
|
- lib/dassets/server.rb
|
123
119
|
- lib/dassets/server/request.rb
|
124
120
|
- lib/dassets/server/response.rb
|
@@ -145,16 +141,13 @@ files:
|
|
145
141
|
- test/support/source_files/nested/_nested_ignored.txt
|
146
142
|
- test/support/source_files/nested/test2.txt
|
147
143
|
- test/support/source_files/test1.txt
|
148
|
-
- test/system/digest_cmd_run_tests.rb
|
149
144
|
- test/system/rack_tests.rb
|
150
145
|
- test/unit/asset_file_tests.rb
|
151
146
|
- test/unit/config_tests.rb
|
152
147
|
- test/unit/dassets_tests.rb
|
153
148
|
- test/unit/default_cache_tests.rb
|
154
|
-
- test/unit/digest_cmd_tests.rb
|
155
149
|
- test/unit/engine_tests.rb
|
156
150
|
- test/unit/file_store_tests.rb
|
157
|
-
- test/unit/runner_tests.rb
|
158
151
|
- test/unit/server/request_tests.rb
|
159
152
|
- test/unit/server/response_tests.rb
|
160
153
|
- test/unit/server_tests.rb
|
@@ -214,16 +207,13 @@ test_files:
|
|
214
207
|
- test/support/source_files/nested/_nested_ignored.txt
|
215
208
|
- test/support/source_files/nested/test2.txt
|
216
209
|
- test/support/source_files/test1.txt
|
217
|
-
- test/system/digest_cmd_run_tests.rb
|
218
210
|
- test/system/rack_tests.rb
|
219
211
|
- test/unit/asset_file_tests.rb
|
220
212
|
- test/unit/config_tests.rb
|
221
213
|
- test/unit/dassets_tests.rb
|
222
214
|
- test/unit/default_cache_tests.rb
|
223
|
-
- test/unit/digest_cmd_tests.rb
|
224
215
|
- test/unit/engine_tests.rb
|
225
216
|
- test/unit/file_store_tests.rb
|
226
|
-
- test/unit/runner_tests.rb
|
227
217
|
- test/unit/server/request_tests.rb
|
228
218
|
- test/unit/server/response_tests.rb
|
229
219
|
- test/unit/server_tests.rb
|
data/bin/dassets
DELETED
data/lib/dassets/cli.rb
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
require 'dassets/version'
|
2
|
-
require 'dassets/runner'
|
3
|
-
|
4
|
-
module Dassets
|
5
|
-
|
6
|
-
class CLI
|
7
|
-
|
8
|
-
def self.run(*args)
|
9
|
-
self.new.run(*args)
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize
|
13
|
-
@cli = CLIRB.new
|
14
|
-
end
|
15
|
-
|
16
|
-
def run(*args)
|
17
|
-
begin
|
18
|
-
@cli.parse!(args)
|
19
|
-
Dassets::Runner.new(@cli.args, @cli.opts).run
|
20
|
-
rescue CLIRB::HelpExit
|
21
|
-
puts help
|
22
|
-
rescue CLIRB::VersionExit
|
23
|
-
puts Dassets::VERSION
|
24
|
-
rescue Dassets::Runner::UnknownCmdError => err
|
25
|
-
$stderr.puts "#{err.message}\n\n"
|
26
|
-
$stderr.puts help
|
27
|
-
exit(1)
|
28
|
-
rescue Dassets::Runner::CmdError => err
|
29
|
-
$stderr.puts "#{err.message}"
|
30
|
-
exit(1)
|
31
|
-
rescue Dassets::Runner::CmdFail => err
|
32
|
-
exit(1)
|
33
|
-
rescue CLIRB::Error => exception
|
34
|
-
$stderr.puts "#{exception.message}\n\n"
|
35
|
-
$stderr.puts help
|
36
|
-
exit(1)
|
37
|
-
rescue Exception => exception
|
38
|
-
$stderr.puts "#{exception.class}: #{exception.message}"
|
39
|
-
$stderr.puts exception.backtrace.join("\n")
|
40
|
-
exit(1)
|
41
|
-
end
|
42
|
-
exit(0)
|
43
|
-
end
|
44
|
-
|
45
|
-
def help
|
46
|
-
"Usage: dassets [options] COMMAND\n"\
|
47
|
-
"\n"\
|
48
|
-
"Options:"\
|
49
|
-
"#{@cli}"
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
class CLIRB # Version 1.0.0, https://github.com/redding/cli.rb
|
55
|
-
Error = Class.new(RuntimeError);
|
56
|
-
HelpExit = Class.new(RuntimeError); VersionExit = Class.new(RuntimeError)
|
57
|
-
attr_reader :argv, :args, :opts, :data
|
58
|
-
|
59
|
-
def initialize(&block)
|
60
|
-
@options = []; instance_eval(&block) if block
|
61
|
-
require 'optparse'
|
62
|
-
@data, @args, @opts = [], [], {}; @parser = OptionParser.new do |p|
|
63
|
-
p.banner = ''; @options.each do |o|
|
64
|
-
@opts[o.name] = o.value; p.on(*o.parser_args){ |v| @opts[o.name] = v }
|
65
|
-
end
|
66
|
-
p.on_tail('--version', ''){ |v| raise VersionExit, v.to_s }
|
67
|
-
p.on_tail('--help', ''){ |v| raise HelpExit, v.to_s }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def option(*args); @options << Option.new(*args); end
|
72
|
-
def parse!(argv)
|
73
|
-
@args = (argv || []).dup.tap do |args_list|
|
74
|
-
begin; @parser.parse!(args_list)
|
75
|
-
rescue OptionParser::ParseError => err; raise Error, err.message; end
|
76
|
-
end; @data = @args + [@opts]
|
77
|
-
end
|
78
|
-
def to_s; @parser.to_s; end
|
79
|
-
def inspect
|
80
|
-
"#<#{self.class}:#{'0x0%x' % (object_id << 1)} @data=#{@data.inspect}>"
|
81
|
-
end
|
82
|
-
|
83
|
-
class Option
|
84
|
-
attr_reader :name, :opt_name, :desc, :abbrev, :value, :klass, :parser_args
|
85
|
-
|
86
|
-
def initialize(name, *args)
|
87
|
-
settings, @desc = args.last.kind_of?(::Hash) ? args.pop : {}, args.pop || ''
|
88
|
-
@name, @opt_name, @abbrev = parse_name_values(name, settings[:abbrev])
|
89
|
-
@value, @klass = gvalinfo(settings[:value])
|
90
|
-
@parser_args = if [TrueClass, FalseClass, NilClass].include?(@klass)
|
91
|
-
["-#{@abbrev}", "--[no-]#{@opt_name}", @desc]
|
92
|
-
else
|
93
|
-
["-#{@abbrev}", "--#{@opt_name} #{@opt_name.upcase}", @klass, @desc]
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
private
|
98
|
-
|
99
|
-
def parse_name_values(name, custom_abbrev)
|
100
|
-
[ (processed_name = name.to_s.strip.downcase), processed_name.gsub('_', '-'),
|
101
|
-
custom_abbrev || processed_name.gsub(/[^a-z]/, '').chars.first || 'a'
|
102
|
-
]
|
103
|
-
end
|
104
|
-
def gvalinfo(v); v.kind_of?(Class) ? [nil,gklass(v)] : [v,gklass(v.class)]; end
|
105
|
-
def gklass(k); k == Fixnum ? Integer : k; end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
data/lib/dassets/digest_cmd.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'dassets'
|
3
|
-
require 'dassets/source_file'
|
4
|
-
|
5
|
-
module Dassets; end
|
6
|
-
class Dassets::DigestCmd
|
7
|
-
|
8
|
-
# TODO: need digest cmd to be aware of and digest combinations as well.
|
9
|
-
# going to wait on this for now b/c there are changes coming to how sources
|
10
|
-
# are obtained and the future of the digest cmd and I want to see how thost
|
11
|
-
# end up first.
|
12
|
-
|
13
|
-
attr_reader :paths
|
14
|
-
|
15
|
-
def initialize(abs_paths)
|
16
|
-
@paths = abs_paths || []
|
17
|
-
end
|
18
|
-
|
19
|
-
def run(io=nil)
|
20
|
-
files = @paths
|
21
|
-
if @paths.empty?
|
22
|
-
# always get the latest source list
|
23
|
-
files = Dassets.source_list
|
24
|
-
end
|
25
|
-
|
26
|
-
log io, "digesting #{files.count} source file(s) ..."
|
27
|
-
digest_the_files(files)
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def digest_the_files(files)
|
33
|
-
files.each{ |f| Dassets::SourceFile.new(f).asset_file.digest! }
|
34
|
-
end
|
35
|
-
|
36
|
-
def log(io, msg)
|
37
|
-
io.puts msg if io
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
data/lib/dassets/runner.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'dassets'
|
2
|
-
|
3
|
-
module Dassets; end
|
4
|
-
class Dassets::Runner
|
5
|
-
UnknownCmdError = Class.new(ArgumentError)
|
6
|
-
CmdError = Class.new(RuntimeError)
|
7
|
-
CmdFail = Class.new(RuntimeError)
|
8
|
-
|
9
|
-
attr_reader :cmd_name, :cmd_args, :opts
|
10
|
-
|
11
|
-
def initialize(args, opts)
|
12
|
-
@opts = opts
|
13
|
-
@cmd_name = args.shift || ""
|
14
|
-
@cmd_args = args
|
15
|
-
@pwd = ENV['PWD']
|
16
|
-
end
|
17
|
-
|
18
|
-
def run
|
19
|
-
Dassets.init
|
20
|
-
|
21
|
-
case @cmd_name
|
22
|
-
when 'digest'
|
23
|
-
require 'dassets/digest_cmd'
|
24
|
-
abs_paths = @cmd_args.map{ |path| File.expand_path(path, @pwd) }
|
25
|
-
Dassets::DigestCmd.new(abs_paths).run($stdout)
|
26
|
-
when 'null'
|
27
|
-
NullCommand.new.run
|
28
|
-
else
|
29
|
-
raise UnknownCmdError, "unknown command `#{@cmd_name}`"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
class NullCommand
|
34
|
-
def run
|
35
|
-
# if this was a real command it would do something here
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
require 'fileutils'
|
3
|
-
require 'dassets'
|
4
|
-
|
5
|
-
module Dassets
|
6
|
-
|
7
|
-
class DigestCmdRunTests < Assert::Context
|
8
|
-
desc "the DigestCmd"
|
9
|
-
setup do
|
10
|
-
Dassets.config.file_store = TEST_SUPPORT_PATH.join('public').to_s
|
11
|
-
clear_store_path(Dassets.config.file_store.root)
|
12
|
-
Dassets.digest_source_files
|
13
|
-
|
14
|
-
@addfile = 'addfile.txt'
|
15
|
-
@addfile_src = source_path(@addfile)
|
16
|
-
|
17
|
-
@rmfile = 'file1.txt'
|
18
|
-
@rmfile_src = source_path(@rmfile)
|
19
|
-
@rmfile_contents = File.read(@rmfile_src)
|
20
|
-
|
21
|
-
FileUtils.touch @addfile_src
|
22
|
-
@addfile_out = store_path(@addfile)
|
23
|
-
|
24
|
-
@rmfile_out = store_path(@rmfile)
|
25
|
-
FileUtils.rm @rmfile_src
|
26
|
-
end
|
27
|
-
teardown do
|
28
|
-
File.open(@rmfile_src, "w"){ |f| f.write @rmfile_contents }
|
29
|
-
FileUtils.rm @addfile_src
|
30
|
-
|
31
|
-
Dassets.digest_source_files
|
32
|
-
clear_store_path(Dassets.config.file_store.root)
|
33
|
-
Dassets.digest_source_files
|
34
|
-
Dassets.config.file_store = NullFileStore.new
|
35
|
-
end
|
36
|
-
|
37
|
-
should "update the digests on all source files when run with no given paths" do
|
38
|
-
clear_store_path(Dassets.config.file_store.root)
|
39
|
-
Dassets.digest_source_files
|
40
|
-
|
41
|
-
assert_file_exists @addfile_out
|
42
|
-
assert_not_file_exists @rmfile_out
|
43
|
-
end
|
44
|
-
|
45
|
-
should "update the digests on a single source file when given its path" do
|
46
|
-
clear_store_path(Dassets.config.file_store.root)
|
47
|
-
Dassets.digest_source_files([@addfile_src])
|
48
|
-
|
49
|
-
assert_file_exists @addfile_out
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def source_path(file)
|
55
|
-
File.join(Dassets.config.sources.first.path, file)
|
56
|
-
end
|
57
|
-
|
58
|
-
def store_path(file)
|
59
|
-
Dassets.config.file_store.store_path(Dassets::AssetFile.new(file).url)
|
60
|
-
end
|
61
|
-
|
62
|
-
def clear_store_path(path)
|
63
|
-
Dir.glob(File.join(path, '*')).each{ |p| FileUtils.rm_r(p) } if path
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
require 'dassets'
|
3
|
-
require 'dassets/digest_cmd'
|
4
|
-
|
5
|
-
class Dassets::DigestCmd
|
6
|
-
|
7
|
-
class BaseTests < Assert::Context
|
8
|
-
desc "Dassets::DigestCmd"
|
9
|
-
setup do
|
10
|
-
@cmd = Dassets::DigestCmd.new(['a/path'])
|
11
|
-
end
|
12
|
-
subject{ @cmd }
|
13
|
-
|
14
|
-
should have_readers :paths
|
15
|
-
should have_instance_method :run
|
16
|
-
|
17
|
-
should "know it's paths" do
|
18
|
-
assert_equal ['a/path'], subject.paths
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
data/test/unit/runner_tests.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
require 'pathname'
|
3
|
-
require 'dassets/runner'
|
4
|
-
|
5
|
-
class Dassets::Runner
|
6
|
-
|
7
|
-
class BaseTests < Assert::Context
|
8
|
-
desc "Dassets::Runner"
|
9
|
-
setup do
|
10
|
-
@runner = Dassets::Runner.new(['null', 1, 2], 'some' => 'opts')
|
11
|
-
end
|
12
|
-
subject{ @runner }
|
13
|
-
|
14
|
-
should have_readers :cmd_name, :cmd_args, :opts
|
15
|
-
|
16
|
-
should "know its cmd, cmd_args, and opts" do
|
17
|
-
assert_equal 'null', subject.cmd_name
|
18
|
-
assert_equal [1,2], subject.cmd_args
|
19
|
-
assert_equal 'opts', subject.opts['some']
|
20
|
-
end
|
21
|
-
|
22
|
-
should "complain about unknown cmds" do
|
23
|
-
runner = Dassets::Runner.new(['unknown'], {})
|
24
|
-
assert_raises(UnknownCmdError) { runner.run }
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|