euromail 0.5.0 → 0.6.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/lib/euromail/sftp_service.rb +6 -4
- data/spec/euromail/sftp_connection_spec.rb +4 -4
- data/spec/euromail/sftp_development_spec.rb +22 -14
- data/spec/euromail/sftp_service_spec.rb +32 -21
- data/spec/euromail/sftp_test_spec.rb +11 -9
- data/spec/sftp_mock.rb +6 -11
- data/spec/spec_helper.rb +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7310e9a1f83998fbb895d06f34dd0ec9292fdd7a
|
4
|
+
data.tar.gz: 462798a9e3ac58a3d2d56f8a74317e78e5ae0762
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5feb196cfd433982b982c30e2ea38b87b083f917265f19b1f836e1a7e8dffd67f0da531ac27b2c4d2e62a8f5512be65ab0c0ee9203f1130228caa79992bb93f1
|
7
|
+
data.tar.gz: b3b8d8591ae0699fb0b24a45b9bb6f598712d7c1967c71b311c3f1e6f57dd25761775ba822bc3a4ec4fa2918fdb551de5f42152b96374aca7761c094b72509d6
|
@@ -5,12 +5,13 @@ module Euromail
|
|
5
5
|
|
6
6
|
attr_reader :application, :customer, :host, :username, :password, :current_mode
|
7
7
|
|
8
|
-
def initialize application, customer, host, username, password
|
8
|
+
def initialize application, customer, host, username, password, net_ssh_options={}
|
9
9
|
@application = application
|
10
10
|
@customer = customer
|
11
11
|
@host = host
|
12
12
|
@username = username
|
13
13
|
@password = password
|
14
|
+
@net_ssh_options = net_ssh_options
|
14
15
|
@current_mode = :production
|
15
16
|
end
|
16
17
|
|
@@ -37,7 +38,7 @@ module Euromail
|
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
40
|
-
# Attempt to remove the file for the given identifier.
|
41
|
+
# Attempt to remove the file for the given identifier.
|
41
42
|
def remove! identifier
|
42
43
|
connect do |connection|
|
43
44
|
connection.remove( identifier )
|
@@ -51,7 +52,8 @@ module Euromail
|
|
51
52
|
# connection.remove('3')
|
52
53
|
# end
|
53
54
|
def connect &block
|
54
|
-
|
55
|
+
options = {password: password }.merge(@net_ssh_options)
|
56
|
+
Net::SFTP.start(host, username, options) do |sftp|
|
55
57
|
connection = Euromail::SFTPConnection.new(self, sftp)
|
56
58
|
block.call(connection)
|
57
59
|
end
|
@@ -65,4 +67,4 @@ module Euromail
|
|
65
67
|
end
|
66
68
|
|
67
69
|
end
|
68
|
-
end
|
70
|
+
end
|
@@ -13,7 +13,7 @@ describe Euromail::SFTPConnection do
|
|
13
13
|
|
14
14
|
describe "#upload" do
|
15
15
|
it "use the generated filename" do
|
16
|
-
@net_sftp_session.
|
16
|
+
expect(@net_sftp_session).to receive(:upload!).with( @string_io, euromail.filename('1') )
|
17
17
|
euromail.connect do |connection|
|
18
18
|
connection.upload('some-client-code', '1')
|
19
19
|
end
|
@@ -29,8 +29,8 @@ describe Euromail::SFTPConnection do
|
|
29
29
|
|
30
30
|
it "can upload several pdf files within the same connection" do
|
31
31
|
expect(@net_sftp_session).to receive(:upload!).exactly(2).times
|
32
|
-
StringIO.
|
33
|
-
StringIO.
|
32
|
+
expect(StringIO).to receive(:new).with('some-client-code-1')
|
33
|
+
expect(StringIO).to receive(:new).with('some-client-code-2')
|
34
34
|
|
35
35
|
euromail.connect do |connection|
|
36
36
|
connection.upload("some-client-code-1", '1')
|
@@ -41,7 +41,7 @@ describe Euromail::SFTPConnection do
|
|
41
41
|
|
42
42
|
describe "#remove" do
|
43
43
|
it "removes the file with the generated filename" do
|
44
|
-
@net_sftp_session.
|
44
|
+
expect(@net_sftp_session).to receive(:remove!).with( euromail.filename('1') )
|
45
45
|
euromail.connect do |connection|
|
46
46
|
connection.remove('1')
|
47
47
|
end
|
@@ -17,19 +17,23 @@ describe Euromail::SFTPService do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "the current mode is development" do
|
20
|
-
euromail.current_mode.
|
20
|
+
expect(euromail.current_mode).to eql :development
|
21
21
|
end
|
22
22
|
|
23
23
|
describe "#upload" do
|
24
24
|
it "does not upload anything" do
|
25
|
-
@file_hander.
|
25
|
+
expect(@file_hander).not_to receive(:write)
|
26
|
+
allow($stdout).to receive(:puts)
|
27
|
+
euromail.connect do |connection|
|
28
|
+
connection.upload('come-client-code', '3')
|
29
|
+
end
|
26
30
|
end
|
27
31
|
|
28
32
|
it "logs uploads" do
|
29
|
-
Net::SFTP.
|
30
|
-
$stdout.
|
31
|
-
$stdout.
|
32
|
-
$stdout.
|
33
|
+
expect(Net::SFTP).not_to receive(:start)
|
34
|
+
expect($stdout).to receive(:puts).with("Connecting to some-cheapass-domain.com")
|
35
|
+
expect($stdout).to receive(:puts).with("Uploaded ./moves_nedap_3.pdf")
|
36
|
+
expect($stdout).to receive(:puts).with("Connection to some-cheapass-domain.com closed")
|
33
37
|
euromail.connect do |connection|
|
34
38
|
connection.upload('come-client-code', '3')
|
35
39
|
end
|
@@ -38,14 +42,18 @@ describe Euromail::SFTPService do
|
|
38
42
|
|
39
43
|
describe "#remove" do
|
40
44
|
it "does not remove anything" do
|
41
|
-
@net_sftp_session.
|
45
|
+
expect(@net_sftp_session).not_to receive(:remove!)
|
46
|
+
allow($stdout).to receive(:puts)
|
47
|
+
euromail.connect do |connection|
|
48
|
+
connection.remove('3')
|
49
|
+
end
|
42
50
|
end
|
43
51
|
|
44
52
|
it "logs deletes" do
|
45
|
-
Net::SFTP.
|
46
|
-
$stdout.
|
47
|
-
$stdout.
|
48
|
-
$stdout.
|
53
|
+
expect(Net::SFTP).not_to receive(:start)
|
54
|
+
expect($stdout).to receive(:puts).with("Connecting to some-cheapass-domain.com")
|
55
|
+
expect($stdout).to receive(:puts).with("Removed ./moves_nedap_3.pdf")
|
56
|
+
expect($stdout).to receive(:puts).with("Connection to some-cheapass-domain.com closed")
|
49
57
|
euromail.connect do |connection|
|
50
58
|
connection.remove('3')
|
51
59
|
end
|
@@ -54,9 +62,9 @@ describe Euromail::SFTPService do
|
|
54
62
|
|
55
63
|
describe "#connect" do
|
56
64
|
it "logs the connection" do
|
57
|
-
Net::SFTP.
|
58
|
-
$stdout.
|
59
|
-
$stdout.
|
65
|
+
expect(Net::SFTP).not_to receive(:start)
|
66
|
+
expect($stdout).to receive(:puts).with("Connecting to some-cheapass-domain.com")
|
67
|
+
expect($stdout).to receive(:puts).with("Connection to some-cheapass-domain.com closed")
|
60
68
|
euromail.connect {}
|
61
69
|
end
|
62
70
|
end
|
@@ -11,71 +11,82 @@ describe Euromail::SFTPService do
|
|
11
11
|
Euromail::SFTPService.new('moves', 'nedap', 'some-cheapass-domain.com', "stefan", "super_secret")
|
12
12
|
end
|
13
13
|
|
14
|
+
let(:euromail_with_option) do
|
15
|
+
Euromail::SFTPService.new('moves', 'nedap', 'some-cheapass-domain.com', "stefan", "super_secret", {
|
16
|
+
some_option: "test option"
|
17
|
+
})
|
18
|
+
end
|
19
|
+
|
14
20
|
context "when creating" do
|
15
21
|
it "has an application, customer, host, username and password" do
|
16
|
-
euromail.application.
|
17
|
-
euromail.customer.
|
18
|
-
euromail.host.
|
19
|
-
euromail.username.
|
20
|
-
euromail.password.
|
22
|
+
expect(euromail.application).to eql('moves')
|
23
|
+
expect(euromail.customer).to eql('nedap')
|
24
|
+
expect(euromail.host).to eql('some-cheapass-domain.com')
|
25
|
+
expect(euromail.username).to eql('stefan')
|
26
|
+
expect(euromail.password).to eql('super_secret')
|
21
27
|
end
|
22
28
|
|
23
29
|
it "the current mode is production" do
|
24
|
-
euromail.current_mode.
|
30
|
+
expect(euromail.current_mode).to eql :production
|
25
31
|
end
|
26
32
|
end
|
27
33
|
|
28
34
|
describe "#connect" do
|
29
35
|
it "connects to euromail using the given username and pass" do
|
30
|
-
Net::SFTP.
|
36
|
+
expect(Net::SFTP).to receive(:start).with('some-cheapass-domain.com', 'stefan', :password => 'super_secret')
|
31
37
|
euromail.connect {}
|
32
38
|
end
|
39
|
+
|
40
|
+
it "connects using additional net_ssh options passed from the user" do
|
41
|
+
expect(Net::SFTP).to receive(:start).with('some-cheapass-domain.com', 'stefan', :password => 'super_secret', :some_option => "test option")
|
42
|
+
euromail_with_option.connect {}
|
43
|
+
end
|
33
44
|
end
|
34
45
|
|
35
46
|
describe "#upload!" do
|
36
47
|
it "uploads pdf data" do
|
37
|
-
StringIO.
|
38
|
-
@net_sftp_session.
|
48
|
+
expect(StringIO).to receive(:new).with('some-client-code')
|
49
|
+
expect(@net_sftp_session).to receive(:upload!).with(@string_io, euromail.filename('1'))
|
39
50
|
euromail.upload!('some-client-code', '1')
|
40
51
|
end
|
41
52
|
|
42
53
|
it "does not remove the remote file after an upload succeeds" do
|
43
|
-
euromail.
|
54
|
+
expect(euromail).not_to receive(:remove!).with('1')
|
44
55
|
euromail.upload!('some-client-code', '1')
|
45
56
|
end
|
46
57
|
|
47
58
|
it "tries to remove the remote file after an upload fails" do
|
48
|
-
@net_sftp_session.
|
49
|
-
euromail.
|
50
|
-
expect{ euromail.upload!('some-client-code', '1') }.to raise_error
|
59
|
+
expect(@net_sftp_session).to receive(:upload!).and_raise("Connection dropped")
|
60
|
+
expect(euromail).to receive(:remove!).with('1')
|
61
|
+
expect{ euromail.upload!('some-client-code', '1') }.to raise_error("Connection dropped")
|
51
62
|
end
|
52
63
|
|
53
64
|
it "raises if some error occurs" do
|
54
|
-
@net_sftp_session.
|
55
|
-
expect{ euromail.upload!('some-client-code', '2') }.to raise_error
|
65
|
+
expect(@net_sftp_session).to receive(:upload!).and_raise("Some error")
|
66
|
+
expect{ euromail.upload!('some-client-code', '2') }.to raise_error("Some error")
|
56
67
|
end
|
57
68
|
end
|
58
69
|
|
59
70
|
describe "#remove!" do
|
60
71
|
it "removes the file from the sftp server" do
|
61
|
-
@net_sftp_session.
|
72
|
+
expect(@net_sftp_session).to receive(:remove!).with( euromail.filename('2') )
|
62
73
|
euromail.remove!('2')
|
63
74
|
end
|
64
75
|
|
65
76
|
it "raises if some error occurs" do
|
66
|
-
@net_sftp_session.
|
67
|
-
expect{ euromail.remove!('2') }.to raise_error
|
77
|
+
expect(@net_sftp_session).to receive(:remove!).and_raise("Some error")
|
78
|
+
expect{ euromail.remove!('2') }.to raise_error("Some error")
|
68
79
|
end
|
69
80
|
end
|
70
81
|
|
71
82
|
describe "#filename" do
|
72
83
|
it "generates a string with application, customer and the given identifier" do
|
73
|
-
euromail.filename('123').
|
84
|
+
expect(euromail.filename('123')).to eql('./moves_nedap_123.pdf')
|
74
85
|
end
|
75
86
|
|
76
87
|
it "requires a non empty identifier" do
|
77
|
-
expect{ euromail.filename('') }.to raise_error
|
78
|
-
expect{ euromail.filename(nil) }.to raise_error
|
88
|
+
expect{ euromail.filename('') }.to raise_error("An identifier is required")
|
89
|
+
expect{ euromail.filename(nil) }.to raise_error("An identifier is required")
|
79
90
|
end
|
80
91
|
end
|
81
92
|
|
@@ -17,37 +17,39 @@ describe Euromail::SFTPService do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "the current mode is test" do
|
20
|
-
euromail.current_mode.
|
20
|
+
expect(euromail.current_mode).to eql :test
|
21
21
|
end
|
22
22
|
|
23
23
|
describe "#upload" do
|
24
24
|
it "does not upload anything" do
|
25
|
-
@file_hander.
|
25
|
+
expect(@file_hander).not_to receive(:write)
|
26
|
+
euromail.upload!('some-client-code', '1')
|
26
27
|
end
|
27
28
|
|
28
29
|
it "stores uploaded filenames" do
|
29
|
-
euromail.uploaded_files.
|
30
|
+
expect(euromail.uploaded_files).to eql([])
|
30
31
|
euromail.upload!('some-client-code', '1')
|
31
|
-
euromail.uploaded_files.
|
32
|
+
expect(euromail.uploaded_files).to eql([euromail.filename('1')])
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
36
|
describe "#remove" do
|
36
37
|
it "does not remove anything" do
|
37
|
-
@net_sftp_session.
|
38
|
+
expect(@net_sftp_session).not_to receive(:remove!)
|
39
|
+
euromail.remove!('2')
|
38
40
|
end
|
39
41
|
|
40
42
|
it "stores deleted filenames" do
|
41
|
-
euromail.removed_files.
|
43
|
+
expect(euromail.removed_files).to eql([])
|
42
44
|
euromail.remove!('2')
|
43
|
-
euromail.removed_files.
|
45
|
+
expect(euromail.removed_files).to eql([euromail.filename('2')])
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
49
|
describe "#connect" do
|
48
50
|
it "only calls the block" do
|
49
|
-
Net::SFTP.
|
50
|
-
$stdout.
|
51
|
+
expect(Net::SFTP).not_to receive(:start)
|
52
|
+
expect($stdout).not_to receive(:puts)
|
51
53
|
euromail.connect {}
|
52
54
|
end
|
53
55
|
end
|
data/spec/sftp_mock.rb
CHANGED
@@ -3,18 +3,13 @@ module SFTPMock
|
|
3
3
|
@net_sftp_session = double("Net::SFTP::Session")
|
4
4
|
@string_io = double("StringIO")
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@net_sftp_session.
|
10
|
-
|
11
|
-
|
12
|
-
@net_sftp_session.stub(:upload!) do |filename|
|
13
|
-
end
|
14
|
-
|
15
|
-
StringIO.stub(:new).and_return(@string_io)
|
6
|
+
RSpec::Mocks.configuration.allow_message_expectations_on_nil
|
7
|
+
allow(@file_hander).to receive(:write)
|
8
|
+
allow(@net_sftp_session).to receive(:remove!)
|
9
|
+
allow(@net_sftp_session).to receive(:upload!)
|
10
|
+
allow(StringIO).to receive(:new).and_return(@string_io)
|
16
11
|
|
17
|
-
Net::SFTP.
|
12
|
+
allow(Net::SFTP).to receive(:start) do |host, username, password_hash, &block|
|
18
13
|
block.call(@net_sftp_session) if block
|
19
14
|
end
|
20
15
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: euromail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Teijgeler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-sftp
|
@@ -61,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
61
|
version: '0'
|
62
62
|
requirements: []
|
63
63
|
rubyforge_project:
|
64
|
-
rubygems_version: 2.
|
64
|
+
rubygems_version: 2.6.14
|
65
65
|
signing_key:
|
66
66
|
specification_version: 4
|
67
67
|
summary: Gem to upload pdf data to an SFTP server
|