imap-backup 2.0.0 → 2.2.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/.rspec +0 -1
- data/.rspec-all +2 -0
- data/.rubocop.yml +15 -2
- data/.rubocop_todo.yml +58 -0
- data/.travis.yml +15 -2
- data/README.md +14 -22
- data/Rakefile +6 -3
- data/bin/imap-backup +5 -11
- data/imap-backup.gemspec +10 -6
- data/lib/email/mboxrd/message.rb +16 -16
- data/lib/imap/backup/account/connection.rb +38 -22
- data/lib/imap/backup/account/folder.rb +23 -7
- data/lib/imap/backup/configuration/account.rb +25 -21
- data/lib/imap/backup/configuration/asker.rb +3 -2
- data/lib/imap/backup/configuration/connection_tester.rb +1 -1
- data/lib/imap/backup/configuration/folder_chooser.rb +32 -5
- data/lib/imap/backup/configuration/list.rb +2 -0
- data/lib/imap/backup/configuration/setup.rb +2 -1
- data/lib/imap/backup/configuration/store.rb +3 -6
- data/lib/imap/backup/downloader.rb +8 -7
- data/lib/imap/backup/serializer/mbox.rb +44 -25
- data/lib/imap/backup/serializer/mbox_enumerator.rb +31 -0
- data/lib/imap/backup/serializer/mbox_store.rb +35 -32
- data/lib/imap/backup/uploader.rb +11 -2
- data/lib/imap/backup/utils.rb +11 -9
- data/lib/imap/backup/version.rb +2 -2
- data/spec/features/backup_spec.rb +6 -5
- data/spec/features/helper.rb +1 -1
- data/spec/features/restore_spec.rb +75 -27
- data/spec/features/support/backup_directory.rb +7 -7
- data/spec/features/support/email_server.rb +15 -11
- data/spec/features/support/shared/connection_context.rb +2 -2
- data/spec/features/support/shared/message_fixtures.rb +8 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/fixtures.rb +2 -2
- data/spec/support/higline_test_helpers.rb +1 -1
- data/spec/unit/email/mboxrd/message_spec.rb +73 -53
- data/spec/unit/email/provider_spec.rb +3 -5
- data/spec/unit/imap/backup/account/connection_spec.rb +82 -59
- data/spec/unit/imap/backup/account/folder_spec.rb +75 -37
- data/spec/unit/imap/backup/configuration/account_spec.rb +95 -61
- data/spec/unit/imap/backup/configuration/asker_spec.rb +43 -45
- data/spec/unit/imap/backup/configuration/connection_tester_spec.rb +21 -22
- data/spec/unit/imap/backup/configuration/folder_chooser_spec.rb +66 -33
- data/spec/unit/imap/backup/configuration/list_spec.rb +32 -11
- data/spec/unit/imap/backup/configuration/setup_spec.rb +97 -56
- data/spec/unit/imap/backup/configuration/store_spec.rb +30 -25
- data/spec/unit/imap/backup/downloader_spec.rb +28 -26
- data/spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb +45 -0
- data/spec/unit/imap/backup/serializer/mbox_spec.rb +109 -51
- data/spec/unit/imap/backup/serializer/mbox_store_spec.rb +232 -20
- data/spec/unit/imap/backup/uploader_spec.rb +23 -9
- data/spec/unit/imap/backup/utils_spec.rb +14 -15
- data/spec/unit/imap/backup_spec.rb +28 -0
- metadata +13 -7
@@ -1,10 +1,10 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
1
|
describe Imap::Backup::Uploader do
|
4
2
|
subject { described_class.new(folder, serializer) }
|
5
3
|
|
6
4
|
let(:folder) do
|
7
|
-
instance_double(
|
5
|
+
instance_double(
|
6
|
+
Imap::Backup::Account::Folder, uids: [2, 3], append: 99, name: "foo"
|
7
|
+
)
|
8
8
|
end
|
9
9
|
let(:serializer) do
|
10
10
|
instance_double(
|
@@ -13,27 +13,41 @@ describe Imap::Backup::Uploader do
|
|
13
13
|
update_uid: nil
|
14
14
|
)
|
15
15
|
end
|
16
|
+
let(:missing_message) do
|
17
|
+
instance_double(Email::Mboxrd::Message, supplied_body: "missing message")
|
18
|
+
end
|
19
|
+
let(:existing_message) do
|
20
|
+
instance_double(Email::Mboxrd::Message, supplied_body: "existing message")
|
21
|
+
end
|
22
|
+
|
23
|
+
def message_enumerator
|
24
|
+
yield [1, missing_message]
|
25
|
+
end
|
16
26
|
|
17
27
|
describe "#run" do
|
18
28
|
before do
|
19
|
-
allow(serializer).to receive(:
|
20
|
-
allow(serializer).to receive(:load).with(2) { "existing message" }
|
21
|
-
subject.run
|
29
|
+
allow(serializer).to receive(:each_message).and_return(enum_for(:message_enumerator))
|
22
30
|
end
|
23
31
|
|
24
32
|
context "with messages that are missing" do
|
25
33
|
it "restores them" do
|
26
|
-
expect(folder).to
|
34
|
+
expect(folder).to receive(:append).with(missing_message)
|
35
|
+
|
36
|
+
subject.run
|
27
37
|
end
|
28
38
|
|
29
39
|
it "updates the local message id" do
|
30
|
-
expect(serializer).to
|
40
|
+
expect(serializer).to receive(:update_uid).with(1, 99)
|
41
|
+
|
42
|
+
subject.run
|
31
43
|
end
|
32
44
|
end
|
33
45
|
|
34
46
|
context "with messages that are present on server" do
|
35
47
|
it "does nothing" do
|
36
|
-
expect(folder).to_not
|
48
|
+
expect(folder).to_not receive(:append).with(existing_message)
|
49
|
+
|
50
|
+
subject.run
|
37
51
|
end
|
38
52
|
end
|
39
53
|
end
|
@@ -1,19 +1,18 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
1
|
describe Imap::Backup::Utils do
|
4
2
|
let(:filename) { "foobar" }
|
5
|
-
let(:stat) {
|
3
|
+
let(:stat) { instance_double(File::Stat, mode: mode) }
|
6
4
|
let(:mode) { 0o777 }
|
7
5
|
let(:exists) { true }
|
8
6
|
|
9
7
|
before do
|
10
|
-
allow(File).to receive(:stat)
|
11
|
-
allow(File).to receive(:exist?).with(filename)
|
8
|
+
allow(File).to receive(:stat) { stat }
|
9
|
+
allow(File).to receive(:exist?).with(filename) { exists }
|
12
10
|
end
|
13
11
|
|
14
|
-
|
12
|
+
describe ".check_permissions" do
|
15
13
|
let(:requested) { 0o345 }
|
16
14
|
|
15
|
+
# rubocop:disable RSpec/EmptyExampleGroup
|
17
16
|
context "with existing files" do
|
18
17
|
[
|
19
18
|
[0o100, "less than the limit", true],
|
@@ -38,6 +37,7 @@ describe Imap::Backup::Utils do
|
|
38
37
|
end
|
39
38
|
end
|
40
39
|
end
|
40
|
+
# rubocop:enable RSpec/EmptyExampleGroup
|
41
41
|
|
42
42
|
context "with non-existent files" do
|
43
43
|
let(:exists) { false }
|
@@ -49,7 +49,7 @@ describe Imap::Backup::Utils do
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
|
52
|
+
describe ".mode" do
|
53
53
|
context "with existing files" do
|
54
54
|
let(:mode) { 0o2345 }
|
55
55
|
|
@@ -67,29 +67,28 @@ describe Imap::Backup::Utils do
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
|
70
|
+
describe ".make_folder" do
|
71
71
|
before do
|
72
72
|
allow(FileUtils).to receive(:mkdir_p)
|
73
73
|
allow(FileUtils).to receive(:chmod)
|
74
74
|
end
|
75
75
|
|
76
76
|
it "does nothing if an empty path is supplied" do
|
77
|
-
|
77
|
+
expect(FileUtils).to_not receive(:mkdir_p)
|
78
78
|
|
79
|
-
|
79
|
+
described_class.make_folder("aaa", "", 0o222)
|
80
80
|
end
|
81
81
|
|
82
82
|
it "creates the path" do
|
83
|
-
|
83
|
+
expect(FileUtils).to receive(:mkdir_p).with("/base/path/new/folder")
|
84
84
|
|
85
|
-
|
85
|
+
described_class.make_folder("/base/path", "new/folder", 0o222)
|
86
86
|
end
|
87
87
|
|
88
88
|
it "sets permissions on the path" do
|
89
|
-
|
89
|
+
expect(FileUtils).to receive(:chmod).with(0o222, "/base/path/new/folder")
|
90
90
|
|
91
|
-
|
92
|
-
to have_received(:chmod).with(0o222, "/base/path/new/folder")
|
91
|
+
described_class.make_folder("/base/path/new", "folder", 0o222)
|
93
92
|
end
|
94
93
|
end
|
95
94
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "ostruct"
|
2
|
+
require "imap/backup"
|
3
|
+
|
4
|
+
describe Imap::Backup do
|
5
|
+
describe ".setup_logging" do
|
6
|
+
let!(:previous) { described_class.logger.level }
|
7
|
+
|
8
|
+
before { described_class.setup_logging(config) }
|
9
|
+
|
10
|
+
after { described_class.logger.level = previous }
|
11
|
+
|
12
|
+
context "when config.debug?" do
|
13
|
+
let(:config) { OpenStruct.new(debug?: true) }
|
14
|
+
|
15
|
+
it "sets logger level to debug" do
|
16
|
+
expect(described_class.logger.level).to eq(::Logger::Severity::DEBUG)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "when not config.debug?" do
|
21
|
+
let(:config) { OpenStruct.new(debug?: false) }
|
22
|
+
|
23
|
+
it "sets logger level to debug" do
|
24
|
+
expect(described_class.logger.level).to eq(::Logger::Severity::ERROR)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imap-backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Yates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: highline
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: mail
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- ".rspec"
|
135
135
|
- ".rspec-all"
|
136
136
|
- ".rubocop.yml"
|
137
|
+
- ".rubocop_todo.yml"
|
137
138
|
- ".travis.yml"
|
138
139
|
- Gemfile
|
139
140
|
- LICENSE
|
@@ -158,6 +159,7 @@ files:
|
|
158
159
|
- lib/imap/backup/downloader.rb
|
159
160
|
- lib/imap/backup/serializer.rb
|
160
161
|
- lib/imap/backup/serializer/mbox.rb
|
162
|
+
- lib/imap/backup/serializer/mbox_enumerator.rb
|
161
163
|
- lib/imap/backup/serializer/mbox_store.rb
|
162
164
|
- lib/imap/backup/uploader.rb
|
163
165
|
- lib/imap/backup/utils.rb
|
@@ -188,10 +190,12 @@ files:
|
|
188
190
|
- spec/unit/imap/backup/configuration/setup_spec.rb
|
189
191
|
- spec/unit/imap/backup/configuration/store_spec.rb
|
190
192
|
- spec/unit/imap/backup/downloader_spec.rb
|
193
|
+
- spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb
|
191
194
|
- spec/unit/imap/backup/serializer/mbox_spec.rb
|
192
195
|
- spec/unit/imap/backup/serializer/mbox_store_spec.rb
|
193
196
|
- spec/unit/imap/backup/uploader_spec.rb
|
194
197
|
- spec/unit/imap/backup/utils_spec.rb
|
198
|
+
- spec/unit/imap/backup_spec.rb
|
195
199
|
- tmp/.gitkeep
|
196
200
|
homepage: https://github.com/joeyates/imap-backup
|
197
201
|
licenses: []
|
@@ -208,14 +212,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
208
212
|
requirements:
|
209
213
|
- - ">="
|
210
214
|
- !ruby/object:Gem::Version
|
211
|
-
version: 2.
|
215
|
+
version: 2.4.0
|
212
216
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
217
|
requirements:
|
214
218
|
- - ">="
|
215
219
|
- !ruby/object:Gem::Version
|
216
220
|
version: '0'
|
217
221
|
requirements: []
|
218
|
-
rubygems_version: 3.
|
222
|
+
rubygems_version: 3.1.2
|
219
223
|
signing_key:
|
220
224
|
specification_version: 4
|
221
225
|
summary: Backup GMail (or other IMAP) accounts to disk
|
@@ -246,7 +250,9 @@ test_files:
|
|
246
250
|
- spec/unit/imap/backup/configuration/setup_spec.rb
|
247
251
|
- spec/unit/imap/backup/configuration/store_spec.rb
|
248
252
|
- spec/unit/imap/backup/downloader_spec.rb
|
253
|
+
- spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb
|
249
254
|
- spec/unit/imap/backup/serializer/mbox_spec.rb
|
250
255
|
- spec/unit/imap/backup/serializer/mbox_store_spec.rb
|
251
256
|
- spec/unit/imap/backup/uploader_spec.rb
|
252
257
|
- spec/unit/imap/backup/utils_spec.rb
|
258
|
+
- spec/unit/imap/backup_spec.rb
|