torba 0.1.1 → 0.2.0
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/CHANGELOG.md +14 -0
- data/Readme.md +6 -0
- data/lib/torba/manifest.rb +7 -1
- data/lib/torba/remote_sources/common.rb +4 -2
- data/lib/torba/remote_sources/github_release.rb +11 -0
- data/lib/torba/remote_sources/zip.rb +2 -9
- data/lib/torba/verify.rb +6 -1
- data/test/Torbafile +2 -0
- data/test/acceptance_test.rb +19 -2
- data/test/manifest_test.rb +15 -10
- data/test/package/import_list_test.rb +3 -23
- data/test/remote_sources/common_test.rb +62 -0
- data/test/remote_sources/github_release_test.rb +11 -3
- data/test/remote_sources/zip_test.rb +6 -1
- data/test/test_helper.rb +23 -1
- data/torba.gemspec +1 -1
- 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: ce67e52a36d478eab2dc503c588b99ff40221fd0
|
4
|
+
data.tar.gz: 9133124e1d23f67c688fddd7d8d58bcaaf68b54a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da460e539b47b1e584543a3449e17acac02ae6dcf32d8c8a18bf0bfd8bed9d9e569b63fbcedbf4a5086b18deaffe5e57898b7049ad6070da41f1c23b15d54b7b
|
7
|
+
data.tar.gz: 4936ecdb12589165bb49a6553f99434833eb2b97595e3dd75fbbd86c888fbd2e5b98175d61f38ad49b750350be1e86eff3876c03e6dfed4f1b79a7108be12590
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
|
+
## Version 0.2.0
|
4
|
+
|
5
|
+
### Enhancements
|
6
|
+
|
7
|
+
* Name for GH releases can be optional
|
8
|
+
* Cached zip remote contains URL filename in path for better introspection
|
9
|
+
* GithubRelease remote: introduce #repository_user, #repository_name
|
10
|
+
|
11
|
+
### Bug fixes
|
12
|
+
|
13
|
+
* Display actual exception (if any) instead of SystemExitError for pow
|
14
|
+
* Remote source always returns absolute path even if Torba.home_path/cache_path
|
15
|
+
is relative to current directory
|
16
|
+
|
3
17
|
## Version 0.1.1
|
4
18
|
|
5
19
|
### Bug fixes
|
data/Readme.md
CHANGED
@@ -129,6 +129,12 @@ i.e. with "v" prefix if present), more on "import" below. For example,
|
|
129
129
|
gh_release "scroll_magic", source: "janpaepke/ScrollMagic", tag: "v.2.0.0"
|
130
130
|
```
|
131
131
|
|
132
|
+
You can omit the name, it will be equal to the repository name:
|
133
|
+
|
134
|
+
```
|
135
|
+
gh_release source: "janpaepke/ScrollMagic", tag: "v.2.0.0" # "ScrollMagic" is assumed
|
136
|
+
```
|
137
|
+
|
132
138
|
### "Packing the torba" process
|
133
139
|
|
134
140
|
When you run `torba pack` the following happens:
|
data/lib/torba/manifest.rb
CHANGED
@@ -37,10 +37,16 @@ module Torba
|
|
37
37
|
end
|
38
38
|
|
39
39
|
# Adds {Package} with {RemoteSources::GithubRelease} to {#packages}
|
40
|
-
def gh_release(name, options = {})
|
40
|
+
def gh_release(name = nil, options = {})
|
41
|
+
if name.is_a?(Hash)
|
42
|
+
options, name = name, nil
|
43
|
+
end
|
44
|
+
|
41
45
|
source = options.fetch(:source)
|
42
46
|
tag = options.fetch(:tag)
|
43
47
|
remote_source = RemoteSources::GithubRelease.new(source, tag)
|
48
|
+
|
49
|
+
name ||= remote_source.repository_name
|
44
50
|
packages << Package.new(name, remote_source, options)
|
45
51
|
end
|
46
52
|
|
@@ -11,10 +11,12 @@ module Torba
|
|
11
11
|
ensure_cached
|
12
12
|
|
13
13
|
Dir.glob(File.join(cache_path, pattern)).reject{ |path| File.directory?(path) }.map do |path|
|
14
|
-
[path, path.sub(/#{cache_path}\/?/, "")]
|
14
|
+
[File.absolute_path(path), path.sub(/#{cache_path}\/?/, "")]
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
# @return [String] unique short name used as a representation of the remote source.
|
19
|
+
# Used by default as a cache folder name.
|
18
20
|
def digest
|
19
21
|
raise NotImplementedError
|
20
22
|
end
|
@@ -22,7 +24,7 @@ module Torba
|
|
22
24
|
private
|
23
25
|
|
24
26
|
def cache_path
|
25
|
-
|
27
|
+
@cache_path ||= File.join(Torba.cache_path, digest)
|
26
28
|
end
|
27
29
|
|
28
30
|
def ensure_cached
|
@@ -7,8 +7,18 @@ module Torba
|
|
7
7
|
# @return [String] repository user and name.
|
8
8
|
# @example
|
9
9
|
# "jashkenas/underscore"
|
10
|
+
# @see #repository_name
|
11
|
+
# @see #repository_user
|
10
12
|
attr_reader :source
|
11
13
|
|
14
|
+
# @return [String]
|
15
|
+
# @since 0.2.0
|
16
|
+
attr_reader :repository_name
|
17
|
+
|
18
|
+
# @return [String]
|
19
|
+
# @since 0.2.0
|
20
|
+
attr_reader :repository_user
|
21
|
+
|
12
22
|
# @return [String] repository tag.
|
13
23
|
# @example
|
14
24
|
# "v1.8.3"
|
@@ -19,6 +29,7 @@ module Torba
|
|
19
29
|
def initialize(source, tag)
|
20
30
|
@source = source
|
21
31
|
@tag = tag
|
32
|
+
@repository_user, @repository_name = source.split("/")
|
22
33
|
super("https://github.com/#{source}/archive/#{tag}.zip")
|
23
34
|
end
|
24
35
|
end
|
@@ -13,22 +13,15 @@ module Torba
|
|
13
13
|
class Zip
|
14
14
|
include Common
|
15
15
|
|
16
|
-
attr_reader :url
|
16
|
+
attr_reader :url, :digest
|
17
17
|
|
18
18
|
def initialize(url)
|
19
19
|
@url = url
|
20
|
-
|
21
|
-
|
22
|
-
def digest
|
23
|
-
Torba.digest(url)
|
20
|
+
@digest = "#{File.basename url, '.zip'}-#{Torba.digest(url)}"
|
24
21
|
end
|
25
22
|
|
26
23
|
private
|
27
24
|
|
28
|
-
def cache_path
|
29
|
-
@cache_path ||= File.join(Torba.cache_path, digest)
|
30
|
-
end
|
31
|
-
|
32
25
|
def ensure_cached
|
33
26
|
unless Dir.exist?(cache_path)
|
34
27
|
FileUtils.mkdir_p(cache_path)
|
data/lib/torba/verify.rb
CHANGED
data/test/Torbafile
CHANGED
data/test/acceptance_test.rb
CHANGED
@@ -6,19 +6,36 @@ module Torba
|
|
6
6
|
@manifest ||= Manifest.build("test/Torbafile")
|
7
7
|
end
|
8
8
|
|
9
|
+
def find(file_path)
|
10
|
+
manifest.load_path.map{ |lp| File.join(lp, file_path) }.find{ |full_path| File.exists?(full_path) }
|
11
|
+
end
|
12
|
+
|
9
13
|
def assert_exists(file_path)
|
10
|
-
|
14
|
+
assert find(file_path)
|
15
|
+
end
|
16
|
+
|
17
|
+
def refute_exists(file_path)
|
18
|
+
refute find(file_path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def read(file_path)
|
22
|
+
File.read(find(file_path))
|
11
23
|
end
|
12
24
|
|
13
25
|
def test_pack
|
14
26
|
manifest.pack
|
15
27
|
|
28
|
+
assert_exists "trumbowyg-from-zip/trumbowyg.js"
|
29
|
+
refute_exists "trumbowyg-from-zip/trumbowyg.css.erb"
|
30
|
+
refute_exists "trumbowyg-from-zip/icons.png"
|
31
|
+
refute_exists "trumbowyg-from-zip/icons-2x.png"
|
32
|
+
|
16
33
|
assert_exists "trumbowyg/trumbowyg.js"
|
17
34
|
assert_exists "trumbowyg/trumbowyg.css.erb"
|
18
35
|
assert_exists "trumbowyg/icons.png"
|
19
36
|
assert_exists "trumbowyg/icons-2x.png"
|
20
37
|
|
21
|
-
css =
|
38
|
+
css = read "trumbowyg/trumbowyg.css.erb"
|
22
39
|
assert_includes css, "background: transparent url('<%= asset_path('trumbowyg/icons.png') %>') no-repeat;"
|
23
40
|
assert_includes css, "background-image: url('<%= asset_path('trumbowyg/icons-2x.png') %>')"
|
24
41
|
end
|
data/test/manifest_test.rb
CHANGED
@@ -6,15 +6,19 @@ module Torba
|
|
6
6
|
@manifest ||= Manifest.new
|
7
7
|
end
|
8
8
|
|
9
|
+
def package
|
10
|
+
manifest.packages.first
|
11
|
+
end
|
12
|
+
|
13
|
+
def remote
|
14
|
+
package.remote_source
|
15
|
+
end
|
16
|
+
|
9
17
|
def test_zip
|
10
18
|
manifest.zip "angular", url: "http://angularjs.com/angularjs.zip"
|
11
19
|
|
12
20
|
assert_equal 1, manifest.packages.size
|
13
|
-
|
14
|
-
package = manifest.packages.first
|
15
21
|
assert_equal "angular", package.name
|
16
|
-
|
17
|
-
remote = package.remote_source
|
18
22
|
assert_instance_of RemoteSources::Zip, remote
|
19
23
|
assert_equal "http://angularjs.com/angularjs.zip", remote.url
|
20
24
|
end
|
@@ -26,19 +30,20 @@ module Torba
|
|
26
30
|
end
|
27
31
|
|
28
32
|
def test_gh_release
|
29
|
-
manifest.gh_release "
|
33
|
+
manifest.gh_release "lo-dash", source: "jashkenas/underscore", tag: "1.8.3"
|
30
34
|
|
31
35
|
assert_equal 1, manifest.packages.size
|
32
|
-
|
33
|
-
package = manifest.packages.first
|
34
|
-
assert_equal "underscore", package.name
|
35
|
-
|
36
|
-
remote = package.remote_source
|
36
|
+
assert_equal "lo-dash", package.name
|
37
37
|
assert_instance_of RemoteSources::GithubRelease, remote
|
38
38
|
assert_equal "jashkenas/underscore", remote.source
|
39
39
|
assert_equal "1.8.3", remote.tag
|
40
40
|
end
|
41
41
|
|
42
|
+
def test_gh_release_implicit_name
|
43
|
+
manifest.gh_release source: "jashkenas/underscore", tag: "1.8.3"
|
44
|
+
assert_equal "underscore", package.name
|
45
|
+
end
|
46
|
+
|
42
47
|
def test_gh_release_wo_source
|
43
48
|
assert_raises(KeyError) do
|
44
49
|
manifest.gh_release "underscore", tag: "1.8.3"
|
@@ -1,37 +1,17 @@
|
|
1
1
|
require "test_helper"
|
2
|
-
require "fileutils"
|
3
|
-
require "torba/remote_sources/common"
|
4
2
|
|
5
3
|
module Torba
|
6
4
|
class PackageImportListTest < Minitest::Test
|
7
5
|
def source_dir
|
8
|
-
@source_dir ||=
|
9
|
-
dir = File.join(Torba.home_path, "source")
|
10
|
-
FileUtils.mkdir_p(dir)
|
11
|
-
dir
|
12
|
-
end
|
6
|
+
@source_dir ||= File.join(Torba.home_path, "source")
|
13
7
|
end
|
14
8
|
|
15
9
|
def touch(path)
|
16
|
-
|
17
|
-
FileUtils.mkdir_p(File.dirname(absolute_path))
|
18
|
-
FileUtils.touch(absolute_path)
|
19
|
-
end
|
20
|
-
|
21
|
-
class RemoteSource
|
22
|
-
include RemoteSources::Common
|
23
|
-
|
24
|
-
attr_reader :cache_path
|
25
|
-
|
26
|
-
def initialize(cache_path)
|
27
|
-
@cache_path = cache_path
|
28
|
-
end
|
29
|
-
|
30
|
-
def ensure_cached; end
|
10
|
+
super File.join(source_dir, path)
|
31
11
|
end
|
32
12
|
|
33
13
|
def remote_source
|
34
|
-
@remote_source ||= RemoteSource.new(source_dir)
|
14
|
+
@remote_source ||= Test::RemoteSource.new(source_dir)
|
35
15
|
end
|
36
16
|
|
37
17
|
def test_single_file_path
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "fileutils"
|
3
|
+
|
4
|
+
module Torba
|
5
|
+
class CommonRemoteSourceTest < Minitest::Test
|
6
|
+
def cache_path
|
7
|
+
Torba.home_path
|
8
|
+
end
|
9
|
+
|
10
|
+
def remote
|
11
|
+
@remote ||= Test::RemoteSource.new(cache_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
def touch(path)
|
15
|
+
super File.join(cache_path, path)
|
16
|
+
end
|
17
|
+
|
18
|
+
def assert_valid_tuple(path, tuple)
|
19
|
+
assert_equal File.join(cache_path, path), tuple[0]
|
20
|
+
assert_equal path, tuple[1]
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_glob
|
24
|
+
touch "one.jpg"
|
25
|
+
touch "two.jpg"
|
26
|
+
|
27
|
+
tuples = remote["*"]
|
28
|
+
assert_equal 2, tuples.size
|
29
|
+
|
30
|
+
tuple1, tuple2 = tuples
|
31
|
+
assert_valid_tuple "one.jpg", tuple1
|
32
|
+
assert_valid_tuple "two.jpg", tuple2
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_no_directories
|
36
|
+
touch "hello/one.jpg"
|
37
|
+
|
38
|
+
tuples = remote["*"]
|
39
|
+
assert_equal 0, remote["*"].size
|
40
|
+
|
41
|
+
tuples = remote["**/*"]
|
42
|
+
assert_equal 1, tuples.size
|
43
|
+
|
44
|
+
assert_valid_tuple "hello/one.jpg", tuples.first
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_always_absolute_path
|
48
|
+
touch "hello/one.jpg"
|
49
|
+
|
50
|
+
Dir.chdir(cache_path) do
|
51
|
+
remote = Test::RemoteSource.new("./hello")
|
52
|
+
|
53
|
+
tuples = remote["*"]
|
54
|
+
assert_equal 1, tuples.size
|
55
|
+
|
56
|
+
tuple = tuples.first
|
57
|
+
assert_equal File.join(cache_path, "hello/one.jpg"), tuple[0]
|
58
|
+
assert_equal "one.jpg", tuple[1]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -3,11 +3,19 @@ require "test_helper"
|
|
3
3
|
module Torba
|
4
4
|
class GithubReleaseTest < Minitest::Test
|
5
5
|
def remote
|
6
|
-
RemoteSources::GithubRelease.new("repo
|
6
|
+
RemoteSources::GithubRelease.new("user/repo", "v.2.0.0")
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_source
|
10
|
-
assert_equal "repo
|
10
|
+
assert_equal "user/repo", remote.source
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_repository_name
|
14
|
+
assert_equal "repo", remote.repository_name
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_repository_user
|
18
|
+
assert_equal "user", remote.repository_user
|
11
19
|
end
|
12
20
|
|
13
21
|
def test_tag
|
@@ -15,7 +23,7 @@ module Torba
|
|
15
23
|
end
|
16
24
|
|
17
25
|
def test_url
|
18
|
-
assert_equal "https://github.com/repo/
|
26
|
+
assert_equal "https://github.com/user/repo/archive/v.2.0.0.zip", remote.url
|
19
27
|
end
|
20
28
|
end
|
21
29
|
end
|
@@ -7,7 +7,7 @@ module Torba
|
|
7
7
|
assert_equal "http://jquery.com/jquery.zip", remote.url
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def test_unique_digest
|
11
11
|
remote = RemoteSources::Zip.new("http://jquery.com/jquery.zip")
|
12
12
|
same_remote = RemoteSources::Zip.new("http://jquery.com/jquery.zip")
|
13
13
|
|
@@ -18,6 +18,11 @@ module Torba
|
|
18
18
|
refute_equal remote.digest, another_remote.digest
|
19
19
|
end
|
20
20
|
|
21
|
+
def test_digest_contains_filename
|
22
|
+
remote = RemoteSources::Zip.new("http://jquery.com/jquery.zip")
|
23
|
+
assert_match /^jquery-/, remote.digest
|
24
|
+
end
|
25
|
+
|
21
26
|
def test_404
|
22
27
|
exception = assert_raises(Errors::ShellCommandFailed) do
|
23
28
|
RemoteSources::Zip.new("http://jquery.com/jquery.zip")["*"]
|
data/test/test_helper.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
require "bundler/setup"
|
2
2
|
require "torba"
|
3
|
+
require "torba/remote_sources/common"
|
3
4
|
|
4
5
|
require "minitest/autorun"
|
5
6
|
require "tmpdir"
|
7
|
+
require "fileutils"
|
6
8
|
|
7
9
|
module Torba
|
8
10
|
module Test
|
9
11
|
module TempHome
|
10
12
|
def before_setup
|
11
|
-
Torba.home_path = @_torba_tmp_dir = Dir.mktmpdir("torba")
|
13
|
+
Torba.home_path = @_torba_tmp_dir = File.realpath(Dir.mktmpdir("torba"))
|
12
14
|
super
|
13
15
|
end
|
14
16
|
|
@@ -28,10 +30,30 @@ module Torba
|
|
28
30
|
refute File.exists?(file_path)
|
29
31
|
end
|
30
32
|
end
|
33
|
+
|
34
|
+
module Touch
|
35
|
+
def touch(path)
|
36
|
+
FileUtils.mkdir_p(File.dirname(path))
|
37
|
+
FileUtils.touch(path)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class RemoteSource
|
42
|
+
include RemoteSources::Common
|
43
|
+
|
44
|
+
attr_reader :cache_path
|
45
|
+
|
46
|
+
def initialize(cache_path)
|
47
|
+
@cache_path = cache_path
|
48
|
+
end
|
49
|
+
|
50
|
+
def ensure_cached; end
|
51
|
+
end
|
31
52
|
end
|
32
53
|
end
|
33
54
|
|
34
55
|
class Minitest::Test
|
35
56
|
include Torba::Test::TempHome
|
36
57
|
include Torba::Test::AssertExists
|
58
|
+
include Torba::Test::Touch
|
37
59
|
end
|
data/torba.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: torba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrii Malyshko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -102,6 +102,7 @@ files:
|
|
102
102
|
- test/import_list_test.rb
|
103
103
|
- test/manifest_test.rb
|
104
104
|
- test/package/import_list_test.rb
|
105
|
+
- test/remote_sources/common_test.rb
|
105
106
|
- test/remote_sources/github_release_test.rb
|
106
107
|
- test/remote_sources/zip_test.rb
|
107
108
|
- test/test_helper.rb
|
@@ -137,6 +138,7 @@ test_files:
|
|
137
138
|
- test/import_list_test.rb
|
138
139
|
- test/manifest_test.rb
|
139
140
|
- test/package/import_list_test.rb
|
141
|
+
- test/remote_sources/common_test.rb
|
140
142
|
- test/remote_sources/github_release_test.rb
|
141
143
|
- test/remote_sources/zip_test.rb
|
142
144
|
- test/test_helper.rb
|