file-dependencies 0.1.2 → 0.1.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWFmYzZiYWUyY2Q5Njc4NDE4ZDdmYjAxYzllZjAzZTJiOTAzMTU3Mg==
4
+ OGVkNDBkYmY4NWM4N2UxOTRiODhiM2QwN2QwZGM2ZjEwM2Q4YzFiZQ==
5
5
  data.tar.gz: !binary |-
6
- ZTFhNGU3MTAxMmMyMjQxZTVlZTgzZTUzZTE4OTcwZDBkZmFiOGZmOA==
6
+ YmZjNmFlMWU3YWFiOGYwNWU4NjM0ZWI0Yjc5Y2U1YjBlM2JkNjlkYw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZThhMzA1NTkwMzY2MjZmZDdkNjlkNjFlNGQ2NDMxNGJhZDBlMDk2ZmZmYzA0
10
- ZmVjMTcwNDc4NjNiMGM2NjllY2U2ZWM0NDhhMmM4ZTBiNWMwZmZjYjBlM2Ez
11
- MDZiMmRlYzYzNzg0MmFkZjA3ZWQ4ZmI2Y2ZjNTBhM2I4YmE3Yzc=
9
+ YWJlMmU3NmI5OTdiNTUxNjQ3Y2E2NWZjMzE0YWYwNjQxMTNlZGJkM2E1YjIw
10
+ MzdiN2IyN2Q2Y2YxNTVhNDAzODU4MWY0ZTNjZDVkZDcxNDY2NTFiZmEzMjEx
11
+ ZjAxMjY4YWQ4YzU2ZTBkZDRjZWU3MjUxMDY0YmNjMmM1ZTAyNDg=
12
12
  data.tar.gz: !binary |-
13
- ODFkNTc5Mzg1NDc4YzY1MGEwNzM4MDRlNjJkN2M2N2RjZDU4YmUwYjYzMTUx
14
- Nzc0YzdjZDY5YjgyM2U5YTFjMTYzMzhmMjM3OTA4OWEzMGE4MGUxZTFkZjg1
15
- OWU3NTFhMWYzODNlNGM0M2E5NTQwODYwZTY1NTEzM2E2Y2E3M2Q=
13
+ NGMxMDlmMzg0MTgzNjVlYjQxM2Q0MjI1YjE4OWUzNjU4ZWQ0MGI1YjkwYTA5
14
+ NGVmMzg1MjYxYTZmNDBjYjk1YjMwZmI0MTZiMzEzMDA0MGFiNmVlY2UxMGIw
15
+ OWVlMjZlMzg5NmU0NWNmNTUwNGM5OTcwNzE0NGNlZWJiYmQ3Mzk=
data/.gitignore CHANGED
@@ -6,3 +6,4 @@ pkg
6
6
  target
7
7
  build.log
8
8
  *.swp
9
+ coverage/
@@ -3,7 +3,7 @@ require File.expand_path('../lib/file-dependencies/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'file-dependencies'
6
- s.version = APP_VERSION
6
+ s.version = FileDependencies::VERSION
7
7
  s.author = 'Richard Pijnenburg'
8
8
  s.email = ['richard.pijnenburg@elasticsearch.com']
9
9
  s.summary = 'manage file dependencies for gems'
@@ -10,34 +10,34 @@ module FileDependencies
10
10
  if ::File.exist?(vendor_file)
11
11
  vendor_file_content = IO.read(vendor_file)
12
12
  file_list = JSON.load(vendor_file_content)
13
- FileDependencies.download(file_list, ::File.join(dir, target), tmpdir)
13
+ FileDependencies.process_downloads(file_list, ::File.join(dir, target), tmpdir)
14
14
  else
15
15
  puts "vendor.json not found, looked for the file at #{vendor_file}"
16
16
  end
17
17
  end # def process_vendor
18
18
  module_function :process_vendor
19
19
 
20
- def download(files, target, tmpdir)
20
+ def process_downloads(files, target, tmpdir)
21
21
  FileUtils.mkdir_p(target) unless ::File.directory?(target)
22
22
  files.each do |file|
23
- target = ::File.join(target, file['target']) unless file['target'].nil?
23
+ full_target = file['target'] ? ::File.join(target, file['target']) : target
24
24
  download = FileDependencies::File.fetch_file(file['url'], file['sha1'], tmpdir)
25
- if (res = download.match(/(\S+?)(\.tar\.gz|\.tgz)/))
25
+ if (res = download.match(/(\S+?)(\.tar\.gz|\.tgz)$/))
26
26
  prefix = res.captures.first.gsub("#{tmpdir}/", '')
27
27
  FileDependencies::Archive.untar(download) do |entry|
28
- if file['extract'].nil?
29
- ::File.join(target, entry.full_name.gsub(prefix, ''))
28
+ next unless FileDependencies::Archive.extract_file?(entry.full_name, file['extract'], file['exclude'], prefix)
29
+ if file['flatten'] == true
30
+ ::File.join(full_target, entry.full_name.split("/").last)
30
31
  else
31
- next unless FileDependencies::Archive.eval_file(entry.full_name, file['extract'], prefix)
32
- ::File.join(target, entry.full_name.split("/").last)
32
+ ::File.join(full_target, entry.full_name.gsub(prefix, ''))
33
33
  end
34
34
  end
35
- elsif download =~ /.gz/
36
- FileDependencies::Archive.ungzip(download, target)
35
+ elsif download =~ /.gz$/
36
+ FileDependencies::Archive.ungzip(download, full_target)
37
37
  else
38
- FileUtils.mv(download, ::File.join(target, download.split("/").last))
38
+ FileUtils.mv(download, ::File.join(full_target, download.split("/").last))
39
39
  end
40
40
  end
41
41
  end # def download
42
- module_function :download
42
+ module_function :process_downloads
43
43
  end
@@ -64,20 +64,42 @@ module FileDependencies
64
64
  end # def untar
65
65
  module_function :untar
66
66
 
67
- def eval_file(entry, files, prefix)
67
+ def extract_file?(entry, extract=nil, exclude=nil, prefix)
68
+ return true if extract.nil? && exclude.nil?
68
69
  return false if tar_header?(entry)
69
- if files.is_a?(Array)
70
- return true if files.include?(entry.gsub(prefix, ''))
71
- elsif files.is_a?(String)
72
- return true if entry =~ Regexp.new(files)
70
+
71
+ if extract
72
+ return match?(entry, extract, prefix)
73
+ elsif exclude
74
+ return !match?(entry, exclude, prefix)
75
+ end
76
+ end
77
+ module_function :extract_file?
78
+
79
+ def match?(entry, list, prefix)
80
+ return false if list.nil?
81
+
82
+ if list.is_a?(Array)
83
+ list.each do |pattern|
84
+ if pattern.is_a?(Regexp) or regexp_string?(pattern)
85
+ return true if entry =~ Regexp.new(pattern)
86
+ elsif pattern.is_a?(String)
87
+ return true if pattern == entry.gsub(prefix, '')
88
+ end
89
+ end
73
90
  end
74
91
  false
75
92
  end
76
- module_function :eval_file
93
+ module_function :match?
77
94
 
78
95
  def tar_header?(entry)
79
96
  entry =~ /PaxHeaders/
80
97
  end
81
98
  module_function :tar_header?
99
+
100
+ def regexp_string?(pattern)
101
+ pattern.to_s.match('^\(\?-mix:.+\)$')
102
+ end
103
+ module_function :regexp_string?
82
104
  end
83
105
  end
@@ -24,17 +24,17 @@ module FileDependencies
24
24
  def validate_sha1(local_file, remote_sha1)
25
25
  return true if remote_sha1 == 'none'
26
26
  sha1 = fetch_sha1(remote_sha1)
27
- local_sha1 = calc_sha1(local_file)
27
+ local_sha1 = calculate_sha1(local_file)
28
28
 
29
29
  raise("SHA1 did not match. Expected #{sha1} but computed #{local_sha1}") if sha1 != local_sha1
30
30
  true
31
31
  end # def validate_sha1
32
32
  module_function :validate_sha1
33
33
 
34
- def calc_sha1(path)
34
+ def calculate_sha1(path)
35
35
  Digest::SHA1.file(path).hexdigest
36
36
  end # def calc__sha1
37
- module_function :calc_sha1
37
+ module_function :calculate_sha1
38
38
 
39
39
  def fetch_file(url, sha1, target)
40
40
  puts "Downloading #{url}" if $DEBUG
@@ -1,3 +1,5 @@
1
1
  # Note to authors: this should not include dashes because 'gem' barfs if
2
2
  # you include a dash in the version string.
3
- APP_VERSION = '0.1.2'
3
+ module FileDependencies
4
+ VERSION = '0.1.3'
5
+ end
@@ -0,0 +1,138 @@
1
+ require 'spec_helper'
2
+ require 'file-dependencies/archive'
3
+
4
+ describe FileDependencies::Archive do
5
+
6
+ describe ".ungzip" do
7
+
8
+ after do
9
+ FileUtils.remove_entry_secure(gzipfile) if ::File.exist?(gzipfile)
10
+ FileUtils.remove_entry_secure(expected_file)
11
+ FileUtils.remove_entry_secure(tmpdir)
12
+ end
13
+ let(:gzipfile) { Assist.generate_gzip('some_content') }
14
+ let(:expected_file) { gzipfile.gsub('.gz', '') }
15
+ let(:tmpdir) { Stud::Temporary.directory }
16
+
17
+ it 'decompresses a gzip file'do
18
+ expect { FileDependencies::Archive.ungzip(gzipfile, tmpdir) }.to_not(raise_error)
19
+ expect(File.exist?(expected_file))
20
+ end
21
+
22
+ let(:expected_file) { Assist.generate_file('some_content') }
23
+ it 'raises error extracting non gzip file' do
24
+ expect { FileDependencies::Archive.ungzip(expected_file, tmpdir) }.to(raise_error(Zlib::GzipFile::Error))
25
+ end
26
+ end
27
+
28
+ describe ".untar" do
29
+
30
+ after do
31
+ FileUtils.remove_entry_secure(tmpdir)
32
+ FileUtils.remove_entry_secure(file)
33
+ end
34
+
35
+ let(:file) { Assist.generate_file('some_content') }
36
+ let(:tarball) { Assist.generate_tarball('some/file' => 'content1', 'some/other/file' => 'content2', 'other' => 'content3') }
37
+ let(:tmpdir) { Stud::Temporary.directory }
38
+
39
+ it 'extracts a full tarball' do
40
+ entries = ['some/file', 'some/other/file', 'other']
41
+
42
+ FileDependencies::Archive.untar(tarball) do |entry|
43
+ ::File.join(tmpdir, entry.full_name)
44
+ end
45
+ found_files = Dir.glob(File.join(tmpdir, '**', '*')).reject { |entry| File.directory?(entry) }.sort
46
+ expected_files = entries.map { |k| ::File.join(tmpdir, k) }.sort
47
+ expect(expected_files).to(eq(found_files))
48
+ end
49
+
50
+ it 'extracts some files' do
51
+ entries = ['some/file', 'some/other/file']
52
+
53
+ FileDependencies::Archive.untar(tarball) do |entry|
54
+ if entries.include?(entry.full_name)
55
+ ::File.join(tmpdir, entry.full_name)
56
+ end
57
+ end
58
+ found_files = Dir.glob(File.join(tmpdir, '**', '*')).reject { |entry| File.directory?(entry) }.sort
59
+ expected_files = entries.map { |k| ::File.join(tmpdir, k) }.sort
60
+ expect(expected_files).to(eq(found_files))
61
+ end
62
+
63
+ it 'raises error when invalid file is provided' do
64
+ expect do
65
+ FileDependencies::Archive.untar(file) do |entry|
66
+ ::File.join(tmpdir, entry.full_name)
67
+ end
68
+ end.to(raise_error(Zlib::GzipFile::Error))
69
+ end
70
+ end
71
+
72
+ describe ".extract_file?" do
73
+
74
+ describe "with extract" do
75
+
76
+ let(:entries) { ['sometar/PaxHeaders', 'sometar/some/dir/PaxHeaders', 'sometar/some/dir/somefile', 'sometar/somefile', 'sometar/some/other/file', 'sometar/some/jars/file1.jar', 'sometar/some/jars/file2.jar', 'sometar/other/jars/file3.jar'] }
77
+ let(:prefix) { 'sometar' }
78
+
79
+ it 'returns all files based on a regex' do
80
+ extract1 = [/.jar/]
81
+ expect1 = ['file1.jar', 'file2.jar', 'file3.jar']
82
+
83
+ filelist = entries.reject { |entry| FileDependencies::Archive.extract_file?(entry, extract1, '', prefix) == false }.map { |entry| entry.gsub(prefix, '').split("/").last }
84
+ expect(filelist.sort).to(eq(expect1.sort))
85
+ end
86
+
87
+ it 'returns all files based on an array' do
88
+ extract2 = ['/some/other/file', '/somefile', '/other/jars/file3.jar']
89
+ expect2 = ['file', 'somefile', 'file3.jar']
90
+
91
+ filelist = entries.reject { |entry| FileDependencies::Archive.extract_file?(entry, extract2, '', prefix) == false }.map { |entry| entry.gsub(prefix, '').split("/").last }
92
+ expect(filelist.sort).to(eq(expect2.sort))
93
+ end
94
+
95
+ it 'returns all files from directories' do
96
+ extract3 = [/\/some\/jars/, /^sometar\/other/]
97
+ expect3 = ['file1.jar', 'file2.jar', 'file3.jar']
98
+
99
+ filelist = entries.reject { |entry| FileDependencies::Archive.extract_file?(entry, extract3, '', prefix) == false }.map { |entry| entry.gsub(prefix, '').split("/").last }
100
+ expect(filelist.sort).to(eq(expect3.sort))
101
+ end
102
+
103
+ end
104
+
105
+ describe "with exclude" do
106
+
107
+ let(:entries) { ['sometar/PaxHeaders', 'sometar/some/dir/PaxHeaders', 'sometar/some/dir/somefile', 'sometar/somefile', 'sometar/some/other/file', 'sometar/some/jars/file1.jar', 'sometar/some/jars/file2.jar', 'sometar/other/jars/file3.jar'] }
108
+ let(:prefix) { 'sometar' }
109
+
110
+ it 'returns all non matching files based on a regex' do
111
+ extract1 = [/.jar/]
112
+ expect1 = ["file", "somefile", "somefile"]
113
+
114
+ filelist = entries.reject { |entry| FileDependencies::Archive.extract_file?(entry, nil, extract1, prefix) == false }.map { |entry| entry.gsub(prefix, '').split("/").last }
115
+ expect(filelist.sort).to(eq(expect1.sort))
116
+ end
117
+
118
+ it 'returns all non matching files based on an array' do
119
+ extract2 = ['/some/other/file', '/somefile', '/other/jars/file3.jar']
120
+ expect2 = ['file1.jar', 'file2.jar', 'somefile']
121
+
122
+ filelist = entries.reject { |entry| FileDependencies::Archive.extract_file?(entry, nil, extract2, prefix) == false }.map { |entry| entry.gsub(prefix, '').split("/").last }
123
+ expect(filelist.sort).to(eq(expect2.sort))
124
+ end
125
+
126
+ it 'returns all except the directories' do
127
+ extract3 = [/^sometar\/some\/jars/, /^sometar\/other/]
128
+ expect3 = ['somefile', 'somefile', 'file']
129
+
130
+ filelist = entries.reject { |entry| FileDependencies::Archive.extract_file?(entry, nil, extract3, prefix) == false }.map { |entry| entry.gsub(prefix, '').split("/").last }
131
+ expect(filelist.sort).to(eq(expect3.sort))
132
+ end
133
+
134
+ end
135
+
136
+ end
137
+
138
+ end
@@ -3,7 +3,7 @@ require 'file-dependencies/file'
3
3
  include WebMock::API
4
4
  describe FileDependencies::File do
5
5
 
6
- describe ".calc_sha1" do
6
+ describe ".calculate_sha1" do
7
7
 
8
8
  after do
9
9
  ::File.unlink(file)
@@ -11,11 +11,11 @@ describe FileDependencies::File do
11
11
 
12
12
  let(:file) { Assist.generate_file('some_content') }
13
13
  it 'gives back correct sha1 value' do
14
- expect(FileDependencies::File.calc_sha1(file)).to(eq('778164c23fae5935176254d2550619cba8abc262'))
14
+ expect(FileDependencies::File.calculate_sha1(file)).to(eq('778164c23fae5935176254d2550619cba8abc262'))
15
15
  end
16
16
 
17
17
  it 'raises an error when the file doesnt exist' do
18
- expect { FileDependencies::File.calc_sha1('dont_exist') }.to(raise_error(Errno::ENOENT))
18
+ expect { FileDependencies::File.calculate_sha1('dont_exist') }.to(raise_error(Errno::ENOENT))
19
19
  end
20
20
  end
21
21
 
@@ -5,7 +5,7 @@ require 'file-dependencies'
5
5
  include WebMock::API
6
6
  describe FileDependencies do
7
7
 
8
- describe '.download' do
8
+ describe '.process_downloads' do
9
9
  after do
10
10
  [tmpdir, target, file1, file2, file3, file4].each do |entry|
11
11
  FileUtils.remove_entry_secure(entry)
@@ -18,30 +18,34 @@ describe FileDependencies do
18
18
  let(:file1) { Assist.generate_tarball('some/file' => 'content1', 'some/other/file' => 'content2', 'other' => 'content3') }
19
19
  let(:file2) { Assist.generate_file('some_content') }
20
20
  let(:file3) { Assist.generate_gzip('some_content_for_gzip') }
21
- let(:file4) { Assist.generate_tarball('jars/some.jar' => 'content10', 'jars/someother.jar' => 'content11') }
21
+ let(:file4) { Assist.generate_tarball('jars/some.jar' => 'content10', 'jars/someother.jar' => 'content11', 'somefile.txt' => 'bla') }
22
+ let(:file5) { Assist.generate_tarball('src/types.db' => 'typesdb') }
22
23
 
23
- let(:sha1) { FileDependencies::File.calc_sha1(file1) }
24
- let(:sha2) { FileDependencies::File.calc_sha1(file2) }
25
- let(:sha3) { FileDependencies::File.calc_sha1(file3) }
26
- let(:sha4) { FileDependencies::File.calc_sha1(file4) }
24
+ let(:sha1) { FileDependencies::File.calculate_sha1(file1) }
25
+ let(:sha2) { FileDependencies::File.calculate_sha1(file2) }
26
+ let(:sha3) { FileDependencies::File.calculate_sha1(file3) }
27
+ let(:sha4) { FileDependencies::File.calculate_sha1(file4) }
28
+ let(:sha5) { FileDependencies::File.calculate_sha1(file5) }
27
29
 
28
30
  let(:url1) { 'http://www.example.com/somefile1.tar.gz' }
29
31
  let(:url2) { 'http://www.example.com/somefile2.txt' }
30
32
  let(:url3) { 'http://www.example.com/somefile3.gz' }
31
33
  let(:url4) { 'http://www.example.com/somefile4.tar.gz' }
34
+ let(:url5) { 'http://www.example.com/somefile5.tar.gz' }
32
35
 
33
- let(:entries) { ['somefile2.txt', 'somefile3', 'some/file', 'some/other/file', 'other', 'jars/some.jar', 'jars/someother.jar'] }
36
+ let(:entries) { ['somefile2.txt', 'somefile3', 'some/file', 'some/other/file', 'other', 'jarfiles/jars/some.jar', 'jarfiles/jars/someother.jar', 'jarfiles/somefile.txt', 'types.db'] }
34
37
 
35
- let(:files) { [{ 'url' => url1, 'sha1' => sha1 }, { 'url' => url2, 'sha1' => sha2 }, { 'url' => url3, 'sha1' => sha3 }, { 'url' => url4, 'sha1' => sha4, 'extract' => '.jar', 'target' => 'jars' }] }
38
+ let(:files) { [{ 'url' => url1, 'sha1' => sha1 }, { 'url' => url2, 'sha1' => sha2 }, { 'url' => url3, 'sha1' => sha3 }, { 'url' => url4, 'sha1' => sha4, 'extract' => [/\.jar/, /\.txt/], 'target' => 'jarfiles' }, { 'url' => url5, 'sha1' => sha5, 'flatten' => true }] }
36
39
 
37
40
  it 'processes file list' do
38
41
  stub_request(:get, url1).to_return(:body => File.new(file1), :status => 200)
39
42
  stub_request(:get, url2).to_return(:body => File.new(file2), :status => 200)
40
43
  stub_request(:get, url3).to_return(:body => File.new(file3), :status => 200)
41
44
  stub_request(:get, url4).to_return(:body => File.new(file4), :status => 200)
45
+ stub_request(:get, url5).to_return(:body => File.new(file5), :status => 200)
42
46
 
43
47
  # we should not have any errors
44
- expect { FileDependencies.download(files, target, tmpdir) }.to_not(raise_error)
48
+ expect { FileDependencies.process_downloads(files, target, tmpdir) }.to_not(raise_error)
45
49
 
46
50
  # check if we got all the expected files
47
51
  found_files = Dir.glob(File.join(target, '**', '*')).reject { |entry| File.directory?(entry) }.sort
@@ -64,27 +68,32 @@ describe FileDependencies do
64
68
  let(:file1) { Assist.generate_tarball('some/file' => 'content1', 'some/other/file' => 'content2', 'other' => 'content3') }
65
69
  let(:file2) { Assist.generate_file('some_content') }
66
70
  let(:file3) { Assist.generate_gzip('some_content_for_gzip') }
67
- let(:file4) { Assist.generate_tarball('jars/some.jar' => 'content10', 'jars/someother.jar' => 'content11') }
71
+ let(:file4) { Assist.generate_tarball('jars/some.jar' => 'content10', 'jars/someother.jar' => 'content11', 'somefile.txt' => 'bla') }
72
+ let(:file5) { Assist.generate_tarball('src/types.db' => 'typesdb') }
68
73
 
69
- let(:sha1) { FileDependencies::File.calc_sha1(file1) }
70
- let(:sha2) { FileDependencies::File.calc_sha1(file2) }
71
- let(:sha3) { FileDependencies::File.calc_sha1(file3) }
72
- let(:sha4) { FileDependencies::File.calc_sha1(file4) }
74
+ let(:sha1) { FileDependencies::File.calculate_sha1(file1) }
75
+ let(:sha2) { FileDependencies::File.calculate_sha1(file2) }
76
+ let(:sha3) { FileDependencies::File.calculate_sha1(file3) }
77
+ let(:sha4) { FileDependencies::File.calculate_sha1(file4) }
78
+ let(:sha5) { FileDependencies::File.calculate_sha1(file5) }
73
79
 
74
80
  let(:url1) { 'http://www.example.com/somefile1.tar.gz' }
75
81
  let(:url2) { 'http://www.example.com/somefile2.txt' }
76
82
  let(:url3) { 'http://www.example.com/somefile3.gz' }
77
83
  let(:url4) { 'http://www.example.com/somefile4.tar.gz' }
84
+ let(:url5) { 'http://www.example.com/somefile5.tar.gz' }
85
+
86
+ let(:files) { [{ 'url' => url1, 'sha1' => sha1 }, { 'url' => url2, 'sha1' => sha2 }, { 'url' => url3, 'sha1' => sha3 }, { 'url' => url4, 'sha1' => sha4, 'extract' => [/\.jar/, /\.txt/], 'target' => 'jarfiles' }, { 'url' => url5, 'sha1' => sha5, 'flatten' => true }].to_json }
78
87
 
79
- let(:files) { [{ 'url' => url1, 'sha1' => sha1 }, { 'url' => url2, 'sha1' => sha2 }, { 'url' => url3, 'sha1' => sha3 }, { 'url' => url4, 'sha1' => sha4, 'extract' => '.jar', 'target' => 'jars' }].to_json }
80
88
  let(:vendorfile) { File.write(File.join(target, 'vendor.json'), files) }
81
- let(:entries) { ['somefile2.txt', 'somefile3', 'some/file', 'some/other/file', 'other', 'jars/some.jar', 'jars/someother.jar'] }
89
+ let(:entries) { ['somefile2.txt', 'somefile3', 'some/file', 'some/other/file', 'other', 'jarfiles/jars/some.jar', 'jarfiles/jars/someother.jar', 'jarfiles/somefile.txt', 'types.db'] }
82
90
 
83
91
  it 'processes the vendor.json file' do
84
92
  stub_request(:get, url1).to_return(:body => File.new(file1), :status => 200)
85
93
  stub_request(:get, url2).to_return(:body => File.new(file2), :status => 200)
86
94
  stub_request(:get, url3).to_return(:body => File.new(file3), :status => 200)
87
95
  stub_request(:get, url4).to_return(:body => File.new(file4), :status => 200)
96
+ stub_request(:get, url5).to_return(:body => File.new(file5), :status => 200)
88
97
  File.write(File.join(target, 'vendor.json'), files)
89
98
 
90
99
  # we should not have any errors
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file-dependencies
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Pijnenburg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-15 00:00:00.000000000 Z
11
+ date: 2015-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitar
@@ -127,11 +127,11 @@ files:
127
127
  - lib/file-dependencies/file.rb
128
128
  - lib/file-dependencies/gem.rb
129
129
  - lib/file-dependencies/rake_tasks.rb
130
- - lib/file-dependencies/rubygems_plugin.rb
131
130
  - lib/file-dependencies/version.rb
132
- - spec/archive_spec.rb
131
+ - lib/rubygems_plugin.rb
132
+ - spec/file-dependencies/archive_spec.rb
133
+ - spec/file-dependencies/file_spec.rb
133
134
  - spec/file-dependencies_spec.rb
134
- - spec/file_spec.rb
135
135
  - spec/spec_assist.rb
136
136
  - spec/spec_helper.rb
137
137
  homepage: https://github.com/electrical/file-dependencies
data/spec/archive_spec.rb DELETED
@@ -1,94 +0,0 @@
1
- require 'spec_helper'
2
- require 'file-dependencies/archive'
3
-
4
- describe FileDependencies::Archive do
5
-
6
- describe ".ungzip" do
7
-
8
- after do
9
- FileUtils.remove_entry_secure(gzipfile) if ::File.exist?(gzipfile)
10
- FileUtils.remove_entry_secure(expected_file)
11
- FileUtils.remove_entry_secure(tmpdir)
12
- end
13
- let(:gzipfile) { Assist.generate_gzip('some_content') }
14
- let(:expected_file) { gzipfile.gsub('.gz', '') }
15
- let(:tmpdir) { Stud::Temporary.directory }
16
-
17
- it 'decompresses a gzip file'do
18
- expect { FileDependencies::Archive.ungzip(gzipfile, tmpdir) }.to_not(raise_error)
19
- expect(File.exist?(expected_file))
20
- end
21
-
22
- let(:expected_file) { Assist.generate_file('some_content') }
23
- it 'raises error extracting non gzip file' do
24
- expect { FileDependencies::Archive.ungzip(expected_file, tmpdir) }.to(raise_error(Zlib::GzipFile::Error))
25
- end
26
- end
27
-
28
- describe ".untar" do
29
-
30
- after do
31
- FileUtils.remove_entry_secure(tmpdir)
32
- FileUtils.remove_entry_secure(file)
33
- end
34
-
35
- let(:file) { Assist.generate_file('some_content') }
36
- let(:tarball) { Assist.generate_tarball('some/file' => 'content1', 'some/other/file' => 'content2', 'other' => 'content3') }
37
- let(:tmpdir) { Stud::Temporary.directory }
38
-
39
- it 'extracts a full tarball' do
40
- entries = ['some/file', 'some/other/file', 'other']
41
-
42
- FileDependencies::Archive.untar(tarball) do |entry|
43
- ::File.join(tmpdir, entry.full_name)
44
- end
45
- found_files = Dir.glob(File.join(tmpdir, '**', '*')).reject { |entry| File.directory?(entry) }.sort
46
- expected_files = entries.map { |k| ::File.join(tmpdir, k) }.sort
47
- expect(expected_files).to(eq(found_files))
48
- end
49
-
50
- it 'extracts some files' do
51
- entries = ['some/file', 'some/other/file']
52
-
53
- FileDependencies::Archive.untar(tarball) do |entry|
54
- if entries.include?(entry.full_name)
55
- ::File.join(tmpdir, entry.full_name)
56
- end
57
- end
58
- found_files = Dir.glob(File.join(tmpdir, '**', '*')).reject { |entry| File.directory?(entry) }.sort
59
- expected_files = entries.map { |k| ::File.join(tmpdir, k) }.sort
60
- expect(expected_files).to(eq(found_files))
61
- end
62
-
63
- it 'raises error when invalid file is provided' do
64
- expect do
65
- FileDependencies::Archive.untar(file) do |entry|
66
- ::File.join(tmpdir, entry.full_name)
67
- end
68
- end.to(raise_error(Zlib::GzipFile::Error))
69
- end
70
- end
71
-
72
- describe ".eval_file" do
73
-
74
- let(:entries) { ['sometar/PaxHeaders', 'sometar/some/dir/PaxHeaders', 'sometar/some/dir/somefile', 'sometar/somefile', 'sometar/some/other/file', 'sometar/some/jars/file1.jar', 'sometar/some/jars/file2.jar', 'sometar/other/jars/file3.jar'] }
75
- let(:prefix) { 'sometar' }
76
-
77
- let(:extract1) { '.jars' }
78
- let(:expect1) { ['file1.jar', 'file2.jar', 'file3.jar'] }
79
- let(:extract2) { ['/some/other/file', '/somefile', '/other/jars/file3.jar'] }
80
- let(:expect2) { ['file', 'somefile', 'file3.jar'] }
81
-
82
- it 'returns all files based on a wildcard' do
83
- filelist = entries.reject { |entry| FileDependencies::Archive.eval_file(entry, extract1, prefix) == false }.map { |entry| entry.gsub(prefix, '').split("/").last }
84
- expect(filelist.sort).to(eq(expect1.sort))
85
- end
86
-
87
- it 'returns all files based on an array' do
88
- filelist = entries.reject { |entry| FileDependencies::Archive.eval_file(entry, extract2, prefix) == false }.map { |entry| entry.gsub(prefix, '').split("/").last }
89
- expect(filelist.sort).to(eq(expect2.sort))
90
- end
91
-
92
- end
93
-
94
- end