eff 0.0.1 → 0.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +0 -5
- data/README.md +3 -1
- data/eff.gemspec +1 -0
- data/lib/eff/downloader.rb +9 -9
- data/lib/eff/package.rb +44 -15
- data/lib/eff/package/semantic_version.rb +13 -1
- data/lib/eff/verifier.rb +10 -2
- data/lib/eff/version.rb +1 -1
- data/spec/eff/downloader_spec.rb +89 -0
- data/spec/eff/package/semantic_version_spec.rb +66 -0
- data/spec/eff/package_spec.rb +124 -0
- data/spec/{template_spec.rb → eff/template_spec.rb} +0 -0
- data/spec/eff/verifier_spec.rb +27 -0
- metadata +26 -12
- data/spec/downloader_spec.rb +0 -130
- data/spec/package_semantic_version_spec.rb +0 -34
- data/spec/package_spec.rb +0 -58
- data/spec/verifier_spec.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0425334fa0adbd66e98d2b270d4eed0e0dd7000
|
4
|
+
data.tar.gz: 234c51413119612b6776ea5d0f789cb1930a94fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3505f441176e2e01e3a7d636aecf5630fe576cb586173df3cd0dfcf4b1fc3f3a43e39a6336e1bf7307d9a2a45b5df3dc0dc15c858688a33f62ec84e8b49e739
|
7
|
+
data.tar.gz: d97639c74a95774d24f504f44c75a1cee841aa3f7b70c064ed812d9e650db1b07991d4bddbc13589bc03c88069e7ab344c5dd7bea822f04abe9cf21ba683c7f6
|
data/.travis.yml
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 1.9.3
|
4
3
|
- 2.0.0
|
5
|
-
- jruby-19mode
|
6
4
|
- jruby-head
|
7
|
-
- rbx-19mode
|
8
5
|
script: bundle exec rspec spec
|
9
6
|
branches:
|
10
7
|
only:
|
@@ -12,6 +9,4 @@ branches:
|
|
12
9
|
matrix:
|
13
10
|
fast_finish: true
|
14
11
|
allow_failures:
|
15
|
-
- rvm: jruby-19mode
|
16
12
|
- rvm: jruby-head
|
17
|
-
- rvm: rbx-19mode
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Eff
|
2
2
|
|
3
|
-
|
3
|
+
[](http://badge.fury.io/rb/eff) [](https://travis-ci.org/Toady00/eff) [](https://codeclimate.com/github/Toady00/eff) [](https://coveralls.io/r/Toady00/eff) [](https://gemnasium.com/Toady00/eff)
|
4
|
+
|
5
|
+
This gems aims to be a way to help simplify the task of building multiple packages with [FPM](https://github.com/jordansissel/fpm).
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
data/eff.gemspec
CHANGED
data/lib/eff/downloader.rb
CHANGED
@@ -11,18 +11,11 @@ module Eff
|
|
11
11
|
|
12
12
|
def get
|
13
13
|
@response = Faraday.get(uri)
|
14
|
+
save
|
14
15
|
end
|
15
16
|
|
16
|
-
def save
|
17
|
-
File.open(file, 'wb') do |f|
|
18
|
-
f.write(response_body)
|
19
|
-
end if success?
|
20
|
-
end
|
21
|
-
|
22
|
-
# TODO: should this really trigger it to download?
|
23
17
|
def success?
|
24
|
-
|
25
|
-
@response.success?
|
18
|
+
response ? response.success? : false
|
26
19
|
end
|
27
20
|
|
28
21
|
def file=(value)
|
@@ -36,6 +29,13 @@ module Eff
|
|
36
29
|
end
|
37
30
|
|
38
31
|
private
|
32
|
+
def save
|
33
|
+
File.open(file, 'wb') do |f|
|
34
|
+
f.write(response_body)
|
35
|
+
end if success?
|
36
|
+
success?
|
37
|
+
end
|
38
|
+
|
39
39
|
def response_body
|
40
40
|
response.body
|
41
41
|
end
|
data/lib/eff/package.rb
CHANGED
@@ -1,45 +1,65 @@
|
|
1
1
|
require 'eff/downloader'
|
2
2
|
require 'eff/template'
|
3
3
|
require 'eff/package/semantic_version'
|
4
|
+
require 'eff/verifier'
|
4
5
|
|
5
6
|
module Eff
|
6
7
|
class Package
|
7
|
-
attr_accessor :save_file, :version
|
8
|
+
attr_accessor :name, :save_file, :version, :checksum, :hash_function
|
8
9
|
|
9
10
|
def initialize(options = {})
|
11
|
+
@name = options[:name]
|
10
12
|
@url_template = options[:url_template]
|
11
|
-
|
13
|
+
@file_template = options[:file_template]
|
12
14
|
self.version = options[:version]
|
13
|
-
|
15
|
+
@checksum = options[:checksum]
|
16
|
+
@hash_function = options[:hash_function]
|
17
|
+
|
18
|
+
after_init_hook
|
14
19
|
end
|
15
20
|
|
16
21
|
def download
|
17
22
|
downloader.get
|
18
23
|
end
|
19
24
|
|
20
|
-
def save
|
21
|
-
downloader.save
|
22
|
-
end
|
23
|
-
|
24
|
-
# TODO: should this really trigger it to download?
|
25
25
|
def downloaded?
|
26
|
-
|
26
|
+
downloader_success?
|
27
27
|
end
|
28
28
|
|
29
29
|
def url
|
30
|
-
|
31
|
-
template.result
|
30
|
+
template_for(:url).result
|
32
31
|
end
|
33
32
|
|
34
|
-
def
|
35
|
-
|
33
|
+
def file_name
|
34
|
+
template_for(:file).result
|
35
|
+
end
|
36
|
+
|
37
|
+
def save_file
|
38
|
+
File.expand_path(file_name, Dir.pwd)
|
36
39
|
end
|
37
40
|
|
38
41
|
def version=(value)
|
39
42
|
@version = SemanticVersion.new(value)
|
43
|
+
clear_download!
|
44
|
+
end
|
45
|
+
|
46
|
+
def ==(other)
|
47
|
+
(name == other.name) && (version == other.version)
|
48
|
+
end
|
49
|
+
|
50
|
+
def verified?
|
51
|
+
verifiable? ? Verifier.check(save_file, checksum, hash_function) : false
|
52
|
+
end
|
53
|
+
|
54
|
+
def verifiable?
|
55
|
+
checksum && hash_function
|
40
56
|
end
|
41
57
|
|
42
58
|
private
|
59
|
+
def after_init_hook
|
60
|
+
new_downloader
|
61
|
+
end
|
62
|
+
|
43
63
|
def downloader
|
44
64
|
@downloader
|
45
65
|
end
|
@@ -48,8 +68,17 @@ module Eff
|
|
48
68
|
@downloader = Eff::Downloader.new(url, save_file)
|
49
69
|
end
|
50
70
|
|
51
|
-
def
|
52
|
-
downloader.
|
71
|
+
def downloader_success?
|
72
|
+
downloader.success?
|
73
|
+
end
|
74
|
+
|
75
|
+
def clear_download!
|
76
|
+
new_downloader if downloader
|
77
|
+
end
|
78
|
+
|
79
|
+
def template_for(sym)
|
80
|
+
template = instance_variable_get("@#{sym}_template".to_sym)
|
81
|
+
Eff::Template.new(template, version)
|
53
82
|
end
|
54
83
|
end
|
55
84
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
module Eff
|
2
2
|
class Package
|
3
3
|
class SemanticVersion
|
4
|
-
|
4
|
+
include Comparable
|
5
|
+
|
6
|
+
BASE_PARTS = %i(major minor patch)
|
7
|
+
PARTS = BASE_PARTS + %i(release identity)
|
5
8
|
|
6
9
|
PARTS.each do |part|
|
7
10
|
attr_accessor part
|
@@ -18,6 +21,15 @@ module Eff
|
|
18
21
|
]
|
19
22
|
end
|
20
23
|
|
24
|
+
def <=>(other)
|
25
|
+
result = 0
|
26
|
+
BASE_PARTS.each do |part|
|
27
|
+
result = self.public_send(part).to_i <=> other.public_send(part).to_i
|
28
|
+
break unless result == 0
|
29
|
+
end
|
30
|
+
result
|
31
|
+
end
|
32
|
+
|
21
33
|
private
|
22
34
|
def parse!
|
23
35
|
remaining, @identity = @version_string.split("+")
|
data/lib/eff/verifier.rb
CHANGED
@@ -1,10 +1,18 @@
|
|
1
1
|
module Eff
|
2
2
|
class Verifier
|
3
3
|
class << self
|
4
|
-
def check(file, checksum,
|
5
|
-
|
4
|
+
def check(file, checksum, hash_function)
|
5
|
+
return unless File.exists?(file)
|
6
|
+
function = function_const_get(hash_function)
|
7
|
+
file_digest = function.file(file).hexdigest
|
6
8
|
file_digest == checksum
|
7
9
|
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def function_const_get(value)
|
13
|
+
hash_function = value.to_s.upcase
|
14
|
+
Digest.const_get(hash_function)
|
15
|
+
end
|
8
16
|
end
|
9
17
|
end
|
10
18
|
end
|
data/lib/eff/version.rb
CHANGED
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'eff/downloader'
|
3
|
+
require 'ostruct'
|
4
|
+
require 'fakefs/spec_helpers'
|
5
|
+
|
6
|
+
describe Eff::Downloader do
|
7
|
+
include FakeFS::SpecHelpers
|
8
|
+
|
9
|
+
let(:url) { "http://google.com" }
|
10
|
+
let(:file) { "test.tmp" }
|
11
|
+
let(:full_path) { File.expand_path(file, Dir.pwd) }
|
12
|
+
let(:fake_success) { OpenStruct.new(body: "I'm a fake response!", success?: true) }
|
13
|
+
let(:fake_failure) { OpenStruct.new(body: "I'm a fake response!", success?: false) }
|
14
|
+
let(:downloader) { Eff::Downloader.new(url, file) }
|
15
|
+
|
16
|
+
before do
|
17
|
+
Faraday.stub(:get).and_return(fake_success)
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'for successfull request' do
|
21
|
+
before do
|
22
|
+
downloader.get
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#get' do
|
26
|
+
it 'saves the file' do
|
27
|
+
File.exists?(File.expand_path(file, Dir.pwd)).should be_true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#success?' do
|
32
|
+
it 'returns true' do
|
33
|
+
downloader.should be_success
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'for unsuccessfull request' do
|
39
|
+
before do
|
40
|
+
Faraday.stub(:get).and_return(fake_failure)
|
41
|
+
downloader.get
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#get' do
|
45
|
+
it 'does not save a file' do
|
46
|
+
File.exists?(File.expand_path(file, Dir.pwd)).should_not be_true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#success?' do
|
51
|
+
it 'returns false' do
|
52
|
+
downloader.should_not be_success
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#uri=' do
|
58
|
+
let(:another_url) { "http://example.com" }
|
59
|
+
let(:another_uri) { URI(another_url) }
|
60
|
+
|
61
|
+
it 'resets response to nil' do
|
62
|
+
downloader.get
|
63
|
+
downloader.response.should_not be_nil
|
64
|
+
downloader.uri = another_url
|
65
|
+
downloader.response.should be_nil
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'sets the new uri' do
|
69
|
+
downloader.uri = another_url
|
70
|
+
downloader.uri.should eq(another_uri)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#file=' do
|
75
|
+
let(:another_file) { '~/some_other_file' }
|
76
|
+
|
77
|
+
it 'resets response to nil' do
|
78
|
+
downloader.get
|
79
|
+
downloader.response.should_not be_nil
|
80
|
+
downloader.file = another_file
|
81
|
+
downloader.response.should be_nil
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'sets the new file' do
|
85
|
+
downloader.file = another_file
|
86
|
+
downloader.file.should eq(File.expand_path(another_file, Dir.pwd))
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'eff/package/semantic_version'
|
3
|
+
|
4
|
+
describe Eff::Package::SemanticVersion do
|
5
|
+
describe '#to_h' do
|
6
|
+
let(:version_hash) {
|
7
|
+
Hash[
|
8
|
+
:major, "1",
|
9
|
+
:minor, "2",
|
10
|
+
:patch, "3",
|
11
|
+
:release, "p456",
|
12
|
+
:identity, "7890"
|
13
|
+
]
|
14
|
+
}
|
15
|
+
let(:valid_versions) { %w(1 1.2 1.2.3 1.2.3-p456 1.2.3-p456+7890) }
|
16
|
+
|
17
|
+
it 'should return the correct hash' do
|
18
|
+
valid_versions.each do |version_string|
|
19
|
+
semver = Eff::Package::SemanticVersion.new version_string
|
20
|
+
hash = semver.to_h
|
21
|
+
first_nil = false
|
22
|
+
version_hash.each do |part, value|
|
23
|
+
hash_value = hash[part]
|
24
|
+
first_nil ||= hash_value.nil?
|
25
|
+
if first_nil
|
26
|
+
hash[part].should be_nil
|
27
|
+
else
|
28
|
+
hash[part].should eq(value)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#<=>' do
|
36
|
+
before do
|
37
|
+
@versions = []
|
38
|
+
%w(0.0.1 0.0.5 0.1.0 1.0.0 1.0.1 1.2.0 2.0.0).each do |version|
|
39
|
+
@versions << Eff::Package::SemanticVersion.new(version)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'compares versions correctly' do
|
44
|
+
@versions.each_with_index do |version, index|
|
45
|
+
@versions.each_with_index do |other, other_index|
|
46
|
+
if index > other_index
|
47
|
+
(version > other).should be_true
|
48
|
+
(version < other).should be_false
|
49
|
+
(version == other).should be_false
|
50
|
+
(version != other).should be_true
|
51
|
+
elsif index < other_index
|
52
|
+
(version > other).should be_false
|
53
|
+
(version < other).should be_true
|
54
|
+
(version == other).should be_false
|
55
|
+
(version != other).should be_true
|
56
|
+
else
|
57
|
+
(version > other).should be_false
|
58
|
+
(version < other).should be_false
|
59
|
+
(version == other).should be_true
|
60
|
+
(version != other).should be_false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'eff/package'
|
3
|
+
require 'fakefs/spec_helpers'
|
4
|
+
|
5
|
+
describe Eff::Package do
|
6
|
+
include FakeFS::SpecHelpers
|
7
|
+
|
8
|
+
let(:url_template) { '<%= "http://example.com/package-#{@major}.#{@minor}.#{@patch}.deb" %>' }
|
9
|
+
let(:file_template) { '<%= "package-#{@major}.#{@minor}.#{@patch}.deb" %>' }
|
10
|
+
let(:version) { '1.2.3'}
|
11
|
+
let(:options) { { url_template: url_template, file_template: file_template, version: version } }
|
12
|
+
let(:package) { Eff::Package.new options }
|
13
|
+
|
14
|
+
let(:fake_success) { OpenStruct.new(body: "I'm a fake response!", success?: true) }
|
15
|
+
let(:fake_failure) { OpenStruct.new(body: "I'm a fake response!", success?: false) }
|
16
|
+
|
17
|
+
subject { package }
|
18
|
+
|
19
|
+
before { Faraday.stub(:get).and_return(fake_success) }
|
20
|
+
|
21
|
+
it { should respond_to :name }
|
22
|
+
it { should respond_to :download }
|
23
|
+
it { should respond_to :downloaded? }
|
24
|
+
it { should respond_to :url }
|
25
|
+
it { should respond_to :file_name }
|
26
|
+
it { should respond_to :save_file }
|
27
|
+
it { should respond_to :version }
|
28
|
+
it { should respond_to :checksum }
|
29
|
+
it { should respond_to :hash_function }
|
30
|
+
it { should respond_to :verified? }
|
31
|
+
it { should respond_to :verifiable? }
|
32
|
+
|
33
|
+
describe 'downloader wrapper method' do
|
34
|
+
describe '#download' do
|
35
|
+
it 'calls Eff::Downloader#get' do
|
36
|
+
Eff::Downloader.any_instance.should_receive(:get)
|
37
|
+
package.download
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#downloaded?' do
|
42
|
+
it 'calls Eff::Downloader#success?' do
|
43
|
+
Eff::Downloader.stub(:previously_downloaded?)
|
44
|
+
Eff::Downloader.any_instance.should_receive(:success?)
|
45
|
+
package.downloaded?
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#url' do
|
51
|
+
let(:url) { 'http://example.com/package-1.2.3.deb' }
|
52
|
+
|
53
|
+
it 'returns the correct url' do
|
54
|
+
package.url.should eq(url)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#version=' do
|
59
|
+
before do
|
60
|
+
package.download
|
61
|
+
package.should be_downloaded
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:new_version) { '4.5.6' }
|
65
|
+
let(:package_name) { "package-#{new_version}.deb"}
|
66
|
+
let(:url) { "http://example.com/#{package_name}" }
|
67
|
+
let(:full_save_path) { File.expand_path(package_name, Dir.pwd) }
|
68
|
+
|
69
|
+
it 'forgets about previous downloads' do
|
70
|
+
package.version = new_version
|
71
|
+
package.should_not be_downloaded
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'updates the url' do
|
75
|
+
old_url = package.url
|
76
|
+
package.version = new_version
|
77
|
+
package.url.should_not eq old_url
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'creates a new downloader with the correct url' do
|
81
|
+
Eff::Downloader.should_receive(:new).with(url, full_save_path)
|
82
|
+
package.version = new_version
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'verification' do
|
87
|
+
let(:package) { Eff::Package.new @options }
|
88
|
+
|
89
|
+
describe '#verifiable?' do
|
90
|
+
it 'returns false without checksum or hash_function' do
|
91
|
+
@options = options
|
92
|
+
package.should_not be_verifiable
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'returns false without checksum' do
|
96
|
+
@options = options.merge(hash_function: 'sha1')
|
97
|
+
package.should_not be_verifiable
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'returns false without hash_function' do
|
101
|
+
@options = options.merge(checksum: 'some_string')
|
102
|
+
package.should_not be_verifiable
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'returns tru with checksum and hash_function' do
|
106
|
+
@options = options.merge(checksum: 'some_string', hash_function: 'sha1')
|
107
|
+
package.should be_verifiable
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#verified?' do
|
112
|
+
it 'returns false if not verifiable' do
|
113
|
+
@options = options
|
114
|
+
package.should_not be_verified
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'calls Verifier.check if verifiable' do
|
118
|
+
@options = options.merge(checksum: 'some_string', hash_function: 'sha1')
|
119
|
+
Eff::Verifier.should_receive(:check).with(package.save_file, package.checksum, package.hash_function)
|
120
|
+
package.verified?
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'eff/verifier'
|
3
|
+
|
4
|
+
describe Eff::Verifier do
|
5
|
+
let(:file) { "spec/support/static_file_for_digesting.txt" }
|
6
|
+
let(:sha1) { "75cfdde12aeb435fd0c68c99df1027190953997e" }
|
7
|
+
let(:md5) { "1c0b1fcddc0cd9677ecfb79e1d127e03" }
|
8
|
+
let(:hashes) { { sha1: sha1, md5: md5 } }
|
9
|
+
|
10
|
+
describe '.check' do
|
11
|
+
it 'returns true if the hashes match' do
|
12
|
+
hashes.each do |hash_function, value|
|
13
|
+
Eff::Verifier.check(file, value, hash_function).should be_true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns false if the hashes do not match' do
|
18
|
+
hashes.each do |hash_function, value|
|
19
|
+
Eff::Verifier.check(file, "this doesn't match", hash_function).should be_false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns false if the file does not exist' do
|
24
|
+
Eff::Verifier.check('non-existant-file.txt', sha1, :sha1).should be_false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Dennis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fpm
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - '>='
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: coveralls
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: fakefs
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,14 +218,14 @@ files:
|
|
204
218
|
- lib/eff/template.rb
|
205
219
|
- lib/eff/verifier.rb
|
206
220
|
- lib/eff/version.rb
|
207
|
-
- spec/downloader_spec.rb
|
221
|
+
- spec/eff/downloader_spec.rb
|
222
|
+
- spec/eff/package/semantic_version_spec.rb
|
223
|
+
- spec/eff/package_spec.rb
|
224
|
+
- spec/eff/template_spec.rb
|
225
|
+
- spec/eff/verifier_spec.rb
|
208
226
|
- spec/eff_spec.rb
|
209
|
-
- spec/package_semantic_version_spec.rb
|
210
|
-
- spec/package_spec.rb
|
211
227
|
- spec/spec_helper.rb
|
212
228
|
- spec/support/static_file_for_digesting.txt
|
213
|
-
- spec/template_spec.rb
|
214
|
-
- spec/verifier_spec.rb
|
215
229
|
homepage: ''
|
216
230
|
licenses:
|
217
231
|
- MIT
|
@@ -237,12 +251,12 @@ signing_key:
|
|
237
251
|
specification_version: 4
|
238
252
|
summary: Wrapper around fpm (effing package manager)
|
239
253
|
test_files:
|
240
|
-
- spec/downloader_spec.rb
|
254
|
+
- spec/eff/downloader_spec.rb
|
255
|
+
- spec/eff/package/semantic_version_spec.rb
|
256
|
+
- spec/eff/package_spec.rb
|
257
|
+
- spec/eff/template_spec.rb
|
258
|
+
- spec/eff/verifier_spec.rb
|
241
259
|
- spec/eff_spec.rb
|
242
|
-
- spec/package_semantic_version_spec.rb
|
243
|
-
- spec/package_spec.rb
|
244
260
|
- spec/spec_helper.rb
|
245
261
|
- spec/support/static_file_for_digesting.txt
|
246
|
-
- spec/template_spec.rb
|
247
|
-
- spec/verifier_spec.rb
|
248
262
|
has_rdoc:
|
data/spec/downloader_spec.rb
DELETED
@@ -1,130 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'eff/downloader'
|
3
|
-
require 'ostruct'
|
4
|
-
require 'fakefs/spec_helpers'
|
5
|
-
|
6
|
-
describe Eff::Downloader do
|
7
|
-
include FakeFS::SpecHelpers
|
8
|
-
|
9
|
-
let(:url) { "http://google.com" }
|
10
|
-
let(:file) { "test.tmp" }
|
11
|
-
let(:full_path) { File.expand_path(file, Dir.pwd) }
|
12
|
-
let(:fake_success) { OpenStruct.new(body: "I'm a fake response!", success?: true) }
|
13
|
-
let(:fake_failure) { OpenStruct.new(body: "I'm a fake response!", success?: false) }
|
14
|
-
|
15
|
-
# describe '.get' do
|
16
|
-
# it 'returns the body if response is successful' do
|
17
|
-
# Faraday.stub(:get).and_return(fake_success)
|
18
|
-
# Eff::Downloader.get(url, file).should eq(fake_success.body)
|
19
|
-
# end
|
20
|
-
|
21
|
-
# it 'returns nil if the response is not successful' do
|
22
|
-
# Faraday.stub(:get).and_return(fake_failure)
|
23
|
-
# Eff::Downloader.get(url, file).should be_nil
|
24
|
-
# end
|
25
|
-
# end
|
26
|
-
|
27
|
-
# describe '.get!' do
|
28
|
-
# it 'writes the appropriate file' do
|
29
|
-
# Faraday.stub(:get).and_return(fake_success)
|
30
|
-
# Eff::Downloader.get!(url, file)
|
31
|
-
# File.exists?(File.expand_path(file, Dir.pwd)).should be_true
|
32
|
-
# end
|
33
|
-
|
34
|
-
# it 'downloads the appropriate file' do
|
35
|
-
# Faraday.should_receive(:get).with(URI(url)).and_return(fake_success)
|
36
|
-
# Eff::Downloader.get!(url, file)
|
37
|
-
# end
|
38
|
-
|
39
|
-
# it 'returns the location of the saved file' do
|
40
|
-
# Faraday.stub(:get).and_return(fake_success)
|
41
|
-
# Eff::Downloader.get!(url, file).should be_true
|
42
|
-
# end
|
43
|
-
# end
|
44
|
-
|
45
|
-
describe 'instance' do
|
46
|
-
before { Faraday.stub(:get).and_return(fake_success) }
|
47
|
-
|
48
|
-
let(:downloader) { Eff::Downloader.new(url, file) }
|
49
|
-
|
50
|
-
describe '#get' do
|
51
|
-
it 'returns a response' do
|
52
|
-
downloader.get.should respond_to :success?
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe '#uri=' do
|
57
|
-
let(:another_url) { "http://example.com" }
|
58
|
-
let(:another_uri) { URI(another_url) }
|
59
|
-
it 'resets response to nil' do
|
60
|
-
downloader.get
|
61
|
-
downloader.response.should_not be_nil
|
62
|
-
downloader.uri = another_url
|
63
|
-
downloader.response.should be_nil
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'sets the new uri' do
|
67
|
-
downloader.uri = another_url
|
68
|
-
downloader.uri.should eq(another_uri)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe '#file' do
|
73
|
-
let(:another_file) { '~/some_other_file' }
|
74
|
-
|
75
|
-
it 'resets response to nil' do
|
76
|
-
downloader.get
|
77
|
-
downloader.response.should_not be_nil
|
78
|
-
downloader.file = another_file
|
79
|
-
downloader.response.should be_nil
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'sets the new file' do
|
83
|
-
downloader.file = another_file
|
84
|
-
downloader.file.should eq(File.expand_path(another_file, Dir.pwd))
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
context 'successfully downloaded' do
|
89
|
-
describe '#save' do
|
90
|
-
it 'gets the response if it has not already' do
|
91
|
-
Faraday.should_receive(:get).with(URI(url)).and_return(fake_success)
|
92
|
-
downloader.save
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'writes the file to disk' do
|
96
|
-
downloader.save
|
97
|
-
File.exists?(File.expand_path(file, Dir.pwd)).should be_true
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
describe '#success?' do
|
102
|
-
it 'returns true' do
|
103
|
-
downloader.should be_success
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context 'unsuccessfully downloaded' do
|
109
|
-
before { Faraday.stub(:get).and_return(fake_failure) }
|
110
|
-
|
111
|
-
describe '#save' do
|
112
|
-
it 'gets the response if it has not already' do
|
113
|
-
Faraday.should_receive(:get).with(URI(url)).and_return(fake_success)
|
114
|
-
downloader.save
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'does not write the file to disk' do
|
118
|
-
downloader.save
|
119
|
-
File.exists?(File.expand_path(file, Dir.pwd)).should_not be_true
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe '#success?' do
|
124
|
-
it 'returns false' do
|
125
|
-
downloader.should_not be_success
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'eff/package/semantic_version'
|
3
|
-
|
4
|
-
describe Eff::Package::SemanticVersion do
|
5
|
-
describe '#to_h' do
|
6
|
-
let(:version_hash) {
|
7
|
-
Hash[
|
8
|
-
:major, "1",
|
9
|
-
:minor, "2",
|
10
|
-
:patch, "3",
|
11
|
-
:release, "p456",
|
12
|
-
:identity, "7890"
|
13
|
-
]
|
14
|
-
}
|
15
|
-
let(:valid_versions) { %w(1 1.2 1.2.3 1.2.3-p456 1.2.3-p456+7890) }
|
16
|
-
|
17
|
-
it 'should return the correct hash' do
|
18
|
-
valid_versions.each do |version_string|
|
19
|
-
semver = Eff::Package::SemanticVersion.new version_string
|
20
|
-
hash = semver.to_h
|
21
|
-
first_nil = false
|
22
|
-
version_hash.each do |part, value|
|
23
|
-
hash_value = hash[part]
|
24
|
-
first_nil ||= hash_value.nil?
|
25
|
-
if first_nil
|
26
|
-
hash[part].should be_nil
|
27
|
-
else
|
28
|
-
hash[part].should eq(value)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
data/spec/package_spec.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'eff/package'
|
3
|
-
require 'fakefs/spec_helpers'
|
4
|
-
|
5
|
-
describe Eff::Package do
|
6
|
-
include FakeFS::SpecHelpers
|
7
|
-
|
8
|
-
let(:url_template) { '<%= "http://example.com/package-#{@major}.#{@minor}.#{@patch}.deb" %>' }
|
9
|
-
let(:url) { 'http://example.com/package-1.2.3.deb' }
|
10
|
-
let(:save_file) { '~/example.txt' }
|
11
|
-
let(:full_save_path) { File.expand_path(save_file, Dir.pwd) }
|
12
|
-
let(:version) { '1.2.3'}
|
13
|
-
let(:options) { { url_template: url_template, save_file: save_file, version: version } }
|
14
|
-
let(:package) { Eff::Package.new options }
|
15
|
-
|
16
|
-
let(:fake_success) { OpenStruct.new(body: "I'm a fake response!", success?: true) }
|
17
|
-
let(:fake_failure) { OpenStruct.new(body: "I'm a fake response!", success?: false) }
|
18
|
-
|
19
|
-
subject { package }
|
20
|
-
|
21
|
-
before { Faraday.stub(:get).and_return(fake_success) }
|
22
|
-
|
23
|
-
it { should respond_to :download }
|
24
|
-
it { should respond_to :save }
|
25
|
-
it { should respond_to :downloaded? }
|
26
|
-
it { should respond_to :url }
|
27
|
-
it { should respond_to :save_file }
|
28
|
-
it { should respond_to :version }
|
29
|
-
|
30
|
-
describe 'downloader wrapper method' do
|
31
|
-
describe '#download' do
|
32
|
-
it 'calls #get' do
|
33
|
-
Eff::Downloader.any_instance.should_receive(:get)
|
34
|
-
package.download
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe '#save' do
|
39
|
-
it 'calls #save' do
|
40
|
-
Eff::Downloader.any_instance.should_receive(:save)
|
41
|
-
package.save
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe '#downloaded?' do
|
46
|
-
it 'calls success?' do
|
47
|
-
Eff::Downloader.any_instance.should_receive(:success?)
|
48
|
-
package.downloaded?
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe '#url' do
|
54
|
-
it 'returns the correct url' do
|
55
|
-
package.url.should eq(url)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
data/spec/verifier_spec.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'eff/verifier'
|
3
|
-
|
4
|
-
describe Eff::Verifier do
|
5
|
-
let(:file) { "spec/support/static_file_for_digesting.txt" }
|
6
|
-
let(:sha1) { "75cfdde12aeb435fd0c68c99df1027190953997e" }
|
7
|
-
let(:md5) { "1c0b1fcddc0cd9677ecfb79e1d127e03" }
|
8
|
-
|
9
|
-
it 'returns true if the hashes match' do
|
10
|
-
Eff::Verifier.check(file, sha1).should be_true
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'returns false if the hashes do not match' do
|
14
|
-
Eff::Verifier.check(file, "this doesn't match").should_not be_true
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'can validate with md5' do
|
18
|
-
Eff::Verifier.check(file, md5, Digest::MD5).should be_true
|
19
|
-
end
|
20
|
-
end
|