imap-backup 4.0.4 → 4.1.1

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/bin/imap-backup +5 -2
  3. data/lib/email/provider/apple_mail.rb +2 -2
  4. data/lib/email/provider/base.rb +8 -0
  5. data/lib/email/provider/fastmail.rb +2 -2
  6. data/lib/email/provider/gmail.rb +2 -2
  7. data/lib/email/provider/{default.rb → unknown.rb} +2 -3
  8. data/lib/email/provider.rb +2 -2
  9. data/lib/imap/backup/account/connection.rb +70 -58
  10. data/lib/imap/backup/account/folder.rb +23 -3
  11. data/lib/imap/backup/account.rb +102 -0
  12. data/lib/imap/backup/cli/accounts.rb +43 -0
  13. data/lib/imap/backup/cli/folders.rb +3 -1
  14. data/lib/imap/backup/cli/helpers.rb +8 -9
  15. data/lib/imap/backup/cli/local.rb +4 -2
  16. data/lib/imap/backup/cli/setup.rb +1 -1
  17. data/lib/imap/backup/cli/utils.rb +3 -2
  18. data/lib/imap/backup/{configuration/store.rb → configuration.rb} +49 -14
  19. data/lib/imap/backup/downloader.rb +26 -12
  20. data/lib/imap/backup/logger.rb +42 -0
  21. data/lib/imap/backup/sanitizer.rb +42 -0
  22. data/lib/imap/backup/serializer/mbox_store.rb +2 -2
  23. data/lib/imap/backup/setup/account.rb +177 -0
  24. data/lib/imap/backup/{configuration → setup}/asker.rb +5 -5
  25. data/lib/imap/backup/setup/connection_tester.rb +26 -0
  26. data/lib/imap/backup/{configuration → setup}/folder_chooser.rb +25 -17
  27. data/lib/imap/backup/setup/helpers.rb +15 -0
  28. data/lib/imap/backup/{configuration/setup.rb → setup.rb} +33 -25
  29. data/lib/imap/backup/uploader.rb +2 -2
  30. data/lib/imap/backup/version.rb +2 -2
  31. data/lib/imap/backup.rb +7 -33
  32. data/lib/retry_on_error.rb +1 -1
  33. data/spec/features/backup_spec.rb +1 -0
  34. data/spec/features/support/email_server.rb +5 -2
  35. data/spec/features/support/shared/connection_context.rb +7 -5
  36. data/spec/support/higline_test_helpers.rb +1 -1
  37. data/spec/support/silence_logging.rb +1 -1
  38. data/spec/unit/email/provider/{default_spec.rb → base_spec.rb} +1 -7
  39. data/spec/unit/email/provider_spec.rb +2 -2
  40. data/spec/unit/imap/backup/account/connection_spec.rb +22 -26
  41. data/spec/unit/imap/backup/cli/accounts_spec.rb +47 -0
  42. data/spec/unit/imap/backup/cli/local_spec.rb +15 -4
  43. data/spec/unit/imap/backup/cli/utils_spec.rb +54 -42
  44. data/spec/unit/imap/backup/{configuration/store_spec.rb → configuration_spec.rb} +23 -24
  45. data/spec/unit/imap/backup/downloader_spec.rb +1 -1
  46. data/spec/unit/imap/backup/logger_spec.rb +48 -0
  47. data/spec/unit/imap/backup/{configuration → setup}/account_spec.rb +78 -70
  48. data/spec/unit/imap/backup/{configuration → setup}/asker_spec.rb +2 -2
  49. data/spec/unit/imap/backup/{configuration → setup}/connection_tester_spec.rb +10 -10
  50. data/spec/unit/imap/backup/{configuration → setup}/folder_chooser_spec.rb +25 -26
  51. data/spec/unit/imap/backup/{configuration/setup_spec.rb → setup_spec.rb} +81 -52
  52. metadata +54 -51
  53. data/lib/imap/backup/configuration/account.rb +0 -159
  54. data/lib/imap/backup/configuration/connection_tester.rb +0 -14
  55. data/lib/imap/backup/configuration/list.rb +0 -53
  56. data/spec/support/shared_examples/account_flagging.rb +0 -23
  57. data/spec/unit/imap/backup/configuration/list_spec.rb +0 -89
  58. data/spec/unit/imap/backup_spec.rb +0 -28
@@ -1,23 +1,46 @@
1
- describe Imap::Backup::Configuration::Setup do
1
+ describe Imap::Backup::Setup do
2
2
  include HighLineTestHelpers
3
3
 
4
4
  subject { described_class.new }
5
5
 
6
- let(:normal) { {username: "account@example.com"} }
7
- let(:accounts) { [normal] }
6
+ let(:normal_account) do
7
+ instance_double(
8
+ Imap::Backup::Account,
9
+ username: "account@example.com",
10
+ marked_for_deletion?: false,
11
+ modified?: false
12
+ )
13
+ end
14
+ let(:modified_account) do
15
+ instance_double(
16
+ Imap::Backup::Account,
17
+ username: "modified@example.com",
18
+ marked_for_deletion?: false,
19
+ modified?: true
20
+ )
21
+ end
22
+ let(:deleted_account) do
23
+ instance_double(
24
+ Imap::Backup::Account,
25
+ username: "delete@example.com",
26
+ marked_for_deletion?: true,
27
+ modified?: false
28
+ )
29
+ end
30
+ let(:accounts) { [normal_account] }
8
31
  let(:store) do
9
32
  instance_double(
10
- Imap::Backup::Configuration::Store,
33
+ Imap::Backup::Configuration,
11
34
  "accounts": accounts,
12
35
  "path": "/base/path",
13
36
  "save": nil,
14
37
  "debug?": debug,
15
38
  "debug=": nil,
16
- "modified?": modified
39
+ "modified?": config_modified
17
40
  )
18
41
  end
19
42
  let(:debug) { false }
20
- let(:modified) { false }
43
+ let(:config_modified) { false }
21
44
  let!(:highline_streams) { prepare_highline }
22
45
  let(:input) { highline_streams[0] }
23
46
  let(:output) { highline_streams[1] }
@@ -33,39 +56,48 @@ describe Imap::Backup::Configuration::Setup do
33
56
 
34
57
  describe "#run" do
35
58
  before do
36
- allow(Imap::Backup::Configuration::Store).to receive(:new) { store }
37
- allow(Imap::Backup).to receive(:setup_logging)
59
+ allow(Imap::Backup::Configuration).to receive(:new) { store }
60
+ allow(Imap::Backup::Logger).to receive(:setup_logging)
38
61
  allow(input).to receive(:eof?) { false }
39
- allow(input).to receive(:gets) { "exit\n" }
62
+ allow(input).to receive(:gets) { "q\n" }
40
63
  allow(Kernel).to receive(:system)
41
64
  end
42
65
 
43
66
  describe "main menu" do
44
- before { subject.run }
67
+ context "when changes have not been made" do
68
+ before { subject.run }
45
69
 
46
- ["add account", "save and exit", "exit without saving"].each do |choice|
47
- it "includes #{choice}" do
48
- expect(output.string).to include(choice)
70
+ ["add account", "quit"].each do |choice|
71
+ it "includes #{choice}" do
72
+ expect(output.string).to include(choice)
73
+ end
49
74
  end
50
75
  end
51
- end
52
76
 
53
- it "clears the screen" do
54
- expect(Kernel).to receive(:system).with("clear")
77
+ context "when changes have been made" do
78
+ let(:config_modified) { true }
55
79
 
56
- subject.run
80
+ before do
81
+ allow(input).to receive(:gets) { "exit\n" }
82
+ subject.run
83
+ end
84
+
85
+ ["save and exit", "exit without saving"].each do |choice|
86
+ it "includes '#{choice}'" do
87
+ expect(output.string).to include(choice)
88
+ end
89
+ end
90
+ end
57
91
  end
58
92
 
59
- it "updates logging status" do
60
- expect(Imap::Backup).to receive(:setup_logging)
93
+ it "clears the screen" do
94
+ expect(Kernel).to receive(:system).with("clear")
61
95
 
62
96
  subject.run
63
97
  end
64
98
 
65
99
  describe "listing" do
66
- let(:accounts) { [normal, modified, deleted] }
67
- let(:modified) { {username: "modified@example.com", modified: true} }
68
- let(:deleted) { {username: "deleted@example.com", delete: true} }
100
+ let(:accounts) { [normal_account, modified_account, deleted_account] }
69
101
 
70
102
  before { subject.run }
71
103
 
@@ -90,15 +122,16 @@ describe Imap::Backup::Configuration::Setup do
90
122
 
91
123
  context "when editing accounts" do
92
124
  let(:account) do
93
- instance_double(Imap::Backup::Configuration::Account, run: nil)
125
+ instance_double(Imap::Backup::Setup::Account, run: nil)
94
126
  end
127
+ let(:config_modified) { true }
95
128
 
96
129
  before do
97
130
  allow(input).to receive(:gets).and_return("1\n", "exit\n")
98
- allow(Imap::Backup::Configuration::Asker).to receive(:email).
131
+ allow(Imap::Backup::Setup::Asker).to receive(:email).
99
132
  with(no_args) { "new@example.com" }
100
- allow(Imap::Backup::Configuration::Account).to receive(:new).
101
- with(store, normal, anything) { account }
133
+ allow(Imap::Backup::Setup::Account).to receive(:new).
134
+ with(store, normal_account, anything) { account }
102
135
  end
103
136
 
104
137
  it "edits the account" do
@@ -118,35 +151,36 @@ describe Imap::Backup::Configuration::Setup do
118
151
  }
119
152
  end
120
153
  let(:account) do
121
- instance_double(Imap::Backup::Configuration::Account, run: nil)
154
+ instance_double(Imap::Backup::Setup::Account, run: nil)
122
155
  end
156
+ let(:config_modified) { true }
123
157
  let(:added_email) { "new@example.com" }
124
158
  let(:local_path) { "/base/path/new_example.com" }
125
159
 
126
160
  before do
127
161
  allow(input).to receive(:gets).and_return("add\n", "exit\n")
128
- allow(Imap::Backup::Configuration::Asker).to receive(:email).
162
+ allow(Imap::Backup::Setup::Asker).to receive(:email).
129
163
  with(no_args) { added_email }
130
- allow(Imap::Backup::Configuration::Account).to receive(:new).
164
+ allow(Imap::Backup::Setup::Account).to receive(:new).
131
165
  with(store, anything, anything) { account }
132
166
 
133
167
  subject.run
134
168
  end
135
169
 
136
170
  it "sets username" do
137
- expect(accounts[1][:username]).to eq(added_email)
171
+ expect(accounts[1].username).to eq(added_email)
138
172
  end
139
173
 
140
174
  it "sets blank password" do
141
- expect(accounts[1][:password]).to eq("")
175
+ expect(accounts[1].password).to eq("")
142
176
  end
143
177
 
144
178
  it "sets local_path" do
145
- expect(accounts[1][:local_path]).to eq(local_path)
179
+ expect(accounts[1].local_path).to eq(local_path)
146
180
  end
147
181
 
148
182
  it "sets folders" do
149
- expect(accounts[1][:folders]).to eq([])
183
+ expect(accounts[1].folders).to eq([])
150
184
  end
151
185
 
152
186
  context "when the account is a GMail account" do
@@ -154,17 +188,19 @@ describe Imap::Backup::Configuration::Setup do
154
188
  let(:local_path) { "/base/path/new_gmail.com" }
155
189
 
156
190
  it "sets the server" do
157
- expect(accounts[1][:server]).to eq(gmail_imap_server)
191
+ expect(accounts[1].server).to eq(gmail_imap_server)
158
192
  end
159
193
  end
160
194
 
161
195
  it "doesn't flag the unedited account as modified" do
162
- expect(accounts[1][:modified]).to be_nil
196
+ expect(accounts[1].modified?).to be_falsey
163
197
  end
164
198
  end
165
199
 
166
200
  describe "logging" do
167
201
  context "when debug logging is disabled" do
202
+ let(:config_modified) { true }
203
+
168
204
  before do
169
205
  allow(input).to receive(:gets).and_return("start\n", "exit\n")
170
206
  end
@@ -183,7 +219,7 @@ describe Imap::Backup::Configuration::Setup do
183
219
  end
184
220
 
185
221
  it "updates logging status" do
186
- expect(Imap::Backup).to receive(:setup_logging).twice
222
+ expect(Imap::Backup::Logger).to receive(:setup_logging)
187
223
 
188
224
  subject.run
189
225
  end
@@ -192,6 +228,7 @@ describe Imap::Backup::Configuration::Setup do
192
228
 
193
229
  context "when debug logging is enabled" do
194
230
  let(:debug) { true }
231
+ let(:config_modified) { true }
195
232
 
196
233
  before do
197
234
  allow(input).to receive(:gets).and_return("stop\n", "exit\n")
@@ -215,7 +252,7 @@ describe Imap::Backup::Configuration::Setup do
215
252
  end
216
253
 
217
254
  it "updates logging status" do
218
- expect(Imap::Backup).to receive(:setup_logging).twice
255
+ expect(Imap::Backup::Logger).to receive(:setup_logging)
219
256
 
220
257
  subject.run
221
258
  end
@@ -224,6 +261,8 @@ describe Imap::Backup::Configuration::Setup do
224
261
  end
225
262
 
226
263
  context "when 'save' is selected" do
264
+ let(:config_modified) { true }
265
+
227
266
  before do
228
267
  allow(input).to receive(:gets) { "save\n" }
229
268
  end
@@ -241,6 +280,8 @@ describe Imap::Backup::Configuration::Setup do
241
280
  end
242
281
 
243
282
  context "when 'exit without saving' is selected" do
283
+ let(:config_modified) { true }
284
+
244
285
  before do
245
286
  allow(input).to receive(:gets) { "exit\n" }
246
287
  end
@@ -250,22 +291,10 @@ describe Imap::Backup::Configuration::Setup do
250
291
  subject.run
251
292
  end
252
293
 
253
- context "when the configuration is modified" do
254
- let(:modified) { true }
294
+ it "doesn't save the configuration" do
295
+ expect(store).to_not receive(:save)
255
296
 
256
- it "doesn't save the configuration" do
257
- expect(store).to_not receive(:save)
258
-
259
- subject.run
260
- end
261
- end
262
-
263
- context "when the configuration isn't modified" do
264
- it "doesn't save the configuration" do
265
- expect(store).to_not receive(:save)
266
-
267
- subject.run
268
- end
297
+ subject.run
269
298
  end
270
299
  end
271
300
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imap-backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.4
4
+ version: 4.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Yates
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-21 00:00:00.000000000 Z
11
+ date: 2022-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -182,13 +182,16 @@ files:
182
182
  - lib/email/mboxrd/message.rb
183
183
  - lib/email/provider.rb
184
184
  - lib/email/provider/apple_mail.rb
185
- - lib/email/provider/default.rb
185
+ - lib/email/provider/base.rb
186
186
  - lib/email/provider/fastmail.rb
187
187
  - lib/email/provider/gmail.rb
188
+ - lib/email/provider/unknown.rb
188
189
  - lib/imap/backup.rb
190
+ - lib/imap/backup/account.rb
189
191
  - lib/imap/backup/account/connection.rb
190
192
  - lib/imap/backup/account/folder.rb
191
193
  - lib/imap/backup/cli.rb
194
+ - lib/imap/backup/cli/accounts.rb
192
195
  - lib/imap/backup/cli/backup.rb
193
196
  - lib/imap/backup/cli/folders.rb
194
197
  - lib/imap/backup/cli/helpers.rb
@@ -199,18 +202,20 @@ files:
199
202
  - lib/imap/backup/cli/utils.rb
200
203
  - lib/imap/backup/client/apple_mail.rb
201
204
  - lib/imap/backup/client/default.rb
202
- - lib/imap/backup/configuration/account.rb
203
- - lib/imap/backup/configuration/asker.rb
204
- - lib/imap/backup/configuration/connection_tester.rb
205
- - lib/imap/backup/configuration/folder_chooser.rb
206
- - lib/imap/backup/configuration/list.rb
207
- - lib/imap/backup/configuration/setup.rb
208
- - lib/imap/backup/configuration/store.rb
205
+ - lib/imap/backup/configuration.rb
209
206
  - lib/imap/backup/downloader.rb
207
+ - lib/imap/backup/logger.rb
208
+ - lib/imap/backup/sanitizer.rb
210
209
  - lib/imap/backup/serializer.rb
211
210
  - lib/imap/backup/serializer/mbox.rb
212
211
  - lib/imap/backup/serializer/mbox_enumerator.rb
213
212
  - lib/imap/backup/serializer/mbox_store.rb
213
+ - lib/imap/backup/setup.rb
214
+ - lib/imap/backup/setup/account.rb
215
+ - lib/imap/backup/setup/asker.rb
216
+ - lib/imap/backup/setup/connection_tester.rb
217
+ - lib/imap/backup/setup/folder_chooser.rb
218
+ - lib/imap/backup/setup/helpers.rb
214
219
  - lib/imap/backup/thunderbird/mailbox_exporter.rb
215
220
  - lib/imap/backup/uploader.rb
216
221
  - lib/imap/backup/utils.rb
@@ -235,33 +240,32 @@ files:
235
240
  - spec/spec_helper.rb
236
241
  - spec/support/fixtures.rb
237
242
  - spec/support/higline_test_helpers.rb
238
- - spec/support/shared_examples/account_flagging.rb
239
243
  - spec/support/silence_logging.rb
240
244
  - spec/unit/email/mboxrd/message_spec.rb
241
245
  - spec/unit/email/provider/apple_mail_spec.rb
242
- - spec/unit/email/provider/default_spec.rb
246
+ - spec/unit/email/provider/base_spec.rb
243
247
  - spec/unit/email/provider/fastmail_spec.rb
244
248
  - spec/unit/email/provider/gmail_spec.rb
245
249
  - spec/unit/email/provider_spec.rb
246
250
  - spec/unit/imap/backup/account/connection_spec.rb
247
251
  - spec/unit/imap/backup/account/folder_spec.rb
252
+ - spec/unit/imap/backup/cli/accounts_spec.rb
248
253
  - spec/unit/imap/backup/cli/local_spec.rb
249
254
  - spec/unit/imap/backup/cli/utils_spec.rb
250
255
  - spec/unit/imap/backup/client/default_spec.rb
251
- - spec/unit/imap/backup/configuration/account_spec.rb
252
- - spec/unit/imap/backup/configuration/asker_spec.rb
253
- - spec/unit/imap/backup/configuration/connection_tester_spec.rb
254
- - spec/unit/imap/backup/configuration/folder_chooser_spec.rb
255
- - spec/unit/imap/backup/configuration/list_spec.rb
256
- - spec/unit/imap/backup/configuration/setup_spec.rb
257
- - spec/unit/imap/backup/configuration/store_spec.rb
256
+ - spec/unit/imap/backup/configuration_spec.rb
258
257
  - spec/unit/imap/backup/downloader_spec.rb
258
+ - spec/unit/imap/backup/logger_spec.rb
259
259
  - spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb
260
260
  - spec/unit/imap/backup/serializer/mbox_spec.rb
261
261
  - spec/unit/imap/backup/serializer/mbox_store_spec.rb
262
+ - spec/unit/imap/backup/setup/account_spec.rb
263
+ - spec/unit/imap/backup/setup/asker_spec.rb
264
+ - spec/unit/imap/backup/setup/connection_tester_spec.rb
265
+ - spec/unit/imap/backup/setup/folder_chooser_spec.rb
266
+ - spec/unit/imap/backup/setup_spec.rb
262
267
  - spec/unit/imap/backup/uploader_spec.rb
263
268
  - spec/unit/imap/backup/utils_spec.rb
264
- - spec/unit/imap/backup_spec.rb
265
269
  homepage: https://github.com/joeyates/imap-backup
266
270
  licenses:
267
271
  - MIT
@@ -281,47 +285,46 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
285
  - !ruby/object:Gem::Version
282
286
  version: '0'
283
287
  requirements: []
284
- rubygems_version: 3.1.2
288
+ rubygems_version: 3.1.6
285
289
  signing_key:
286
290
  specification_version: 4
287
291
  summary: Backup GMail (or other IMAP) accounts to disk
288
292
  test_files:
289
- - spec/spec_helper.rb
290
- - spec/fixtures/connection.yml
293
+ - spec/features/helper.rb
294
+ - spec/features/support/backup_directory.rb
295
+ - spec/features/support/shared/message_fixtures.rb
296
+ - spec/features/support/shared/connection_context.rb
297
+ - spec/features/support/email_server.rb
298
+ - spec/features/restore_spec.rb
299
+ - spec/features/backup_spec.rb
300
+ - spec/support/higline_test_helpers.rb
301
+ - spec/support/fixtures.rb
302
+ - spec/support/silence_logging.rb
303
+ - spec/gather_rspec_coverage.rb
291
304
  - spec/unit/email/provider/gmail_spec.rb
292
- - spec/unit/email/provider/apple_mail_spec.rb
293
- - spec/unit/email/provider/default_spec.rb
294
305
  - spec/unit/email/provider/fastmail_spec.rb
295
- - spec/unit/email/provider_spec.rb
306
+ - spec/unit/email/provider/base_spec.rb
307
+ - spec/unit/email/provider/apple_mail_spec.rb
296
308
  - spec/unit/email/mboxrd/message_spec.rb
297
- - spec/unit/imap/backup_spec.rb
309
+ - spec/unit/email/provider_spec.rb
298
310
  - spec/unit/imap/backup/cli/utils_spec.rb
311
+ - spec/unit/imap/backup/cli/accounts_spec.rb
299
312
  - spec/unit/imap/backup/cli/local_spec.rb
313
+ - spec/unit/imap/backup/setup/account_spec.rb
314
+ - spec/unit/imap/backup/setup/connection_tester_spec.rb
315
+ - spec/unit/imap/backup/setup/folder_chooser_spec.rb
316
+ - spec/unit/imap/backup/setup/asker_spec.rb
317
+ - spec/unit/imap/backup/uploader_spec.rb
300
318
  - spec/unit/imap/backup/utils_spec.rb
301
- - spec/unit/imap/backup/client/default_spec.rb
319
+ - spec/unit/imap/backup/configuration_spec.rb
320
+ - spec/unit/imap/backup/setup_spec.rb
321
+ - spec/unit/imap/backup/logger_spec.rb
322
+ - spec/unit/imap/backup/serializer/mbox_store_spec.rb
323
+ - spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb
324
+ - spec/unit/imap/backup/serializer/mbox_spec.rb
302
325
  - spec/unit/imap/backup/downloader_spec.rb
303
- - spec/unit/imap/backup/configuration/store_spec.rb
304
- - spec/unit/imap/backup/configuration/connection_tester_spec.rb
305
- - spec/unit/imap/backup/configuration/asker_spec.rb
306
- - spec/unit/imap/backup/configuration/setup_spec.rb
307
- - spec/unit/imap/backup/configuration/folder_chooser_spec.rb
308
- - spec/unit/imap/backup/configuration/account_spec.rb
309
- - spec/unit/imap/backup/configuration/list_spec.rb
310
326
  - spec/unit/imap/backup/account/folder_spec.rb
311
327
  - spec/unit/imap/backup/account/connection_spec.rb
312
- - spec/unit/imap/backup/serializer/mbox_spec.rb
313
- - spec/unit/imap/backup/serializer/mbox_store_spec.rb
314
- - spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb
315
- - spec/unit/imap/backup/uploader_spec.rb
316
- - spec/support/fixtures.rb
317
- - spec/support/shared_examples/account_flagging.rb
318
- - spec/support/higline_test_helpers.rb
319
- - spec/support/silence_logging.rb
320
- - spec/gather_rspec_coverage.rb
321
- - spec/features/backup_spec.rb
322
- - spec/features/helper.rb
323
- - spec/features/support/backup_directory.rb
324
- - spec/features/support/shared/message_fixtures.rb
325
- - spec/features/support/shared/connection_context.rb
326
- - spec/features/support/email_server.rb
327
- - spec/features/restore_spec.rb
328
+ - spec/unit/imap/backup/client/default_spec.rb
329
+ - spec/spec_helper.rb
330
+ - spec/fixtures/connection.yml
@@ -1,159 +0,0 @@
1
- module Imap::Backup
2
- module Configuration; end
3
-
4
- Configuration::Account = Struct.new(:store, :account, :highline) do
5
- def initialize(store, account, highline)
6
- super
7
- end
8
-
9
- def run
10
- catch :done do
11
- loop do
12
- Kernel.system("clear")
13
- create_menu
14
- end
15
- end
16
- end
17
-
18
- private
19
-
20
- def create_menu
21
- highline.choose do |menu|
22
- header menu
23
- modify_email menu
24
- modify_password menu
25
- modify_server menu
26
- modify_backup_path menu
27
- choose_folders menu
28
- test_connection menu
29
- delete_account menu
30
- menu.choice("return to main menu") { throw :done }
31
- menu.hidden("quit") { throw :done }
32
- end
33
- end
34
-
35
- def header(menu)
36
- menu.header = <<-HEADER.gsub(/^\s{8}/m, "")
37
- Account:
38
- email: #{account[:username]}
39
- server: #{account[:server]}
40
- path: #{account[:local_path]}
41
- folders: #{folders.map { |f| f[:name] }.join(', ')}
42
- password: #{masked_password}
43
- HEADER
44
- end
45
-
46
- def modify_email(menu)
47
- menu.choice("modify email") do
48
- username = Configuration::Asker.email(username)
49
- Kernel.puts "username: #{username}"
50
- other_accounts = store.accounts.reject { |a| a == account }
51
- others = other_accounts.map { |a| a[:username] }
52
- Kernel.puts "others: #{others.inspect}"
53
- if others.include?(username)
54
- Kernel.puts(
55
- "There is already an account set up with that email address"
56
- )
57
- else
58
- account[:username] = username
59
- # rubocop:disable Style/IfUnlessModifier
60
- if account[:server].nil? || (account[:server] == "")
61
- account[:server] = default_server(username)
62
- end
63
- # rubocop:enable Style/IfUnlessModifier
64
- account[:modified] = true
65
- end
66
- end
67
- end
68
-
69
- def modify_password(menu)
70
- menu.choice("modify password") do
71
- password = Configuration::Asker.password
72
-
73
- if !password.nil?
74
- account[:password] = password
75
- account[:modified] = true
76
- end
77
- end
78
- end
79
-
80
- def modify_server(menu)
81
- menu.choice("modify server") do
82
- server = highline.ask("server: ")
83
- if !server.nil?
84
- account[:server] = server
85
- account[:modified] = true
86
- end
87
- end
88
- end
89
-
90
- def path_modification_validator(path)
91
- same = store.accounts.find do |a|
92
- a[:username] != account[:username] && a[:local_path] == path
93
- end
94
- if same
95
- Kernel.puts "The path '#{path}' is used to backup " \
96
- "the account '#{same[:username]}'"
97
- false
98
- else
99
- true
100
- end
101
- end
102
-
103
- def modify_backup_path(menu)
104
- menu.choice("modify backup path") do
105
- existing = account[:local_path].clone
106
- account[:local_path] = Configuration::Asker.backup_path(
107
- account[:local_path], ->(path) { path_modification_validator(path) }
108
- )
109
- account[:modified] = true if existing != account[:local_path]
110
- end
111
- end
112
-
113
- def choose_folders(menu)
114
- menu.choice("choose backup folders") do
115
- Configuration::FolderChooser.new(account).run
116
- end
117
- end
118
-
119
- def test_connection(menu)
120
- menu.choice("test connection") do
121
- result = Configuration::ConnectionTester.test(account)
122
- Kernel.puts result
123
- highline.ask "Press a key "
124
- end
125
- end
126
-
127
- def delete_account(menu)
128
- menu.choice("delete") do
129
- if highline.agree("Are you sure? (y/n) ")
130
- account[:delete] = true
131
- throw :done
132
- end
133
- end
134
- end
135
-
136
- def folders
137
- account[:folders] || []
138
- end
139
-
140
- def masked_password
141
- if (account[:password] == "") || account[:password].nil?
142
- "(unset)"
143
- else
144
- account[:password].gsub(/./, "x")
145
- end
146
- end
147
-
148
- def default_server(username)
149
- provider = Email::Provider.for_address(username)
150
-
151
- if provider.is_a?(Email::Provider::Default)
152
- Kernel.puts "Can't decide provider for email address '#{username}'"
153
- return nil
154
- end
155
-
156
- provider.host
157
- end
158
- end
159
- end
@@ -1,14 +0,0 @@
1
- module Imap::Backup
2
- module Configuration; end
3
-
4
- module Configuration::ConnectionTester
5
- def self.test(account)
6
- Account::Connection.new(account).client
7
- "Connection successful"
8
- rescue Net::IMAP::NoResponseError
9
- "No response"
10
- rescue StandardError => e
11
- "Unexpected error: #{e}"
12
- end
13
- end
14
- end
@@ -1,53 +0,0 @@
1
- module Imap::Backup
2
- module Configuration; end
3
-
4
- class Configuration::List
5
- attr_reader :required_accounts
6
-
7
- def initialize(required_accounts = [])
8
- @required_accounts = required_accounts
9
- end
10
-
11
- def setup_logging
12
- return if !config_exists?
13
-
14
- Imap::Backup.setup_logging config
15
- Net::IMAP.debug = config.debug?
16
- end
17
-
18
- def each_connection
19
- accounts.each do |account|
20
- connection = Account::Connection.new(account)
21
- yield connection
22
- connection.disconnect
23
- end
24
- end
25
-
26
- def accounts
27
- @accounts ||=
28
- if required_accounts.empty?
29
- config.accounts
30
- else
31
- config.accounts.select do |account|
32
- required_accounts.include?(account[:username])
33
- end
34
- end
35
- end
36
-
37
- private
38
-
39
- def config
40
- return @config if @config
41
-
42
- if !config_exists?
43
- path = Configuration::Store.default_pathname
44
- raise ConfigurationNotFound, "Configuration file '#{path}' not found"
45
- end
46
- @config = Configuration::Store.new
47
- end
48
-
49
- def config_exists?
50
- Configuration::Store.exist?
51
- end
52
- end
53
- end