imap-backup 1.0.17 → 1.1.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/.travis.yml +6 -1
- data/README.md +34 -1
- data/bin/imap-backup +4 -4
- data/imap-backup.gemspec +7 -1
- data/lib/email/provider.rb +40 -0
- data/lib/imap/backup.rb +1 -0
- data/lib/imap/backup/account/connection.rb +33 -39
- data/lib/imap/backup/configuration/account.rb +5 -5
- data/lib/imap/backup/configuration/store.rb +0 -3
- data/lib/imap/backup/downloader.rb +0 -2
- data/lib/imap/backup/serializer/mbox.rb +4 -0
- data/lib/imap/backup/version.rb +2 -2
- data/spec/spec_helper.rb +7 -8
- data/spec/unit/account/connection_spec.rb +25 -46
- data/spec/unit/configuration/asker_spec.rb +1 -1
- data/spec/unit/email/provider_spec.rb +34 -0
- metadata +20 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b55658c2e579a76e29322a69048814b31069926e
|
4
|
+
data.tar.gz: 43aa7303ba81aaa1318bcb208be7a8ada52437a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19480ec2c72149a8fefc0eeb6930b673072940b92fa6deae405b2318ab3491894dd1b1e29118ac59640561b8b2396d3a21fb4ff82cc8f40ad0830a375a5bed52
|
7
|
+
data.tar.gz: 1e9d3f8d900c3eae69e64484d88e506816a4a791b3f260caab01642ffe53f79ce171f3246cf762e05e81f4390108c663e9b4f4f2a5b0e44169325aeae0dc512f
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
[][Continuous Integration]
|
2
|
+
[](https://codeclimate.com/github/joeyates/imap-backup)
|
3
|
+
[](https://codeclimate.com/github/joeyates/imap-backup/coverage)
|
4
|
+
|
5
|
+
# imap-backup
|
2
6
|
|
3
7
|
*Backup GMail (or other IMAP) accounts to disk*
|
4
8
|
|
@@ -71,6 +75,35 @@ It connects to GMail by default, but you can also specify a server:
|
|
71
75
|
}
|
72
76
|
```
|
73
77
|
|
78
|
+
## Connection options
|
79
|
+
|
80
|
+
You can override the parameters passed to `Net::IMAP` with `connection_options`.
|
81
|
+
|
82
|
+
Specifically, if you are using a self-signed certificate and get SSL errors, e.g.
|
83
|
+
`certificate verify failed`, you can choose to not verify the TLS connection:
|
84
|
+
|
85
|
+
```json
|
86
|
+
{
|
87
|
+
"accounts":
|
88
|
+
[
|
89
|
+
{
|
90
|
+
"username": "my.user@gmail.com",
|
91
|
+
"password": "secret",
|
92
|
+
"server": "my.imap.example.com",
|
93
|
+
"local_path": "/path/to/backup/root",
|
94
|
+
"folders": [
|
95
|
+
{"name": "[Gmail]/All Mail"},
|
96
|
+
{"name": "my_folder"}
|
97
|
+
],
|
98
|
+
"connection_options": {
|
99
|
+
"ssl": {"verify_mode": 0},
|
100
|
+
"port": 993
|
101
|
+
}
|
102
|
+
}
|
103
|
+
]
|
104
|
+
}
|
105
|
+
```
|
106
|
+
|
74
107
|
## Google Apps
|
75
108
|
|
76
109
|
* Enable IMAP access to your account via the GMail interface (Settings/Forwarding and POP/IMAP),
|
data/bin/imap-backup
CHANGED
@@ -7,11 +7,11 @@ $:.unshift(File.expand_path('../../lib/', __FILE__))
|
|
7
7
|
require 'imap/backup'
|
8
8
|
|
9
9
|
KNOWN_COMMANDS = [
|
10
|
-
{:name => 'help', :help => 'Show usage'},
|
11
10
|
{:name => 'setup', :help => 'Create/edit the configuration file'},
|
12
11
|
{:name => 'backup', :help => 'Do the backup (default)'},
|
13
12
|
{:name => 'folders', :help => 'List folders for all (or selected) accounts'},
|
14
13
|
{:name => 'status', :help => 'List count of non backed-up emails per folder'},
|
14
|
+
{:name => 'help', :help => 'Show usage'},
|
15
15
|
]
|
16
16
|
|
17
17
|
options = {:command => 'backup'}
|
@@ -27,7 +27,7 @@ opts = OptionParser.new do |opts|
|
|
27
27
|
opts.separator 'Common options:'
|
28
28
|
|
29
29
|
opts.on('-a', '--accounts ACCOUNT1[,ACCOUNT2,...]', Array, 'only these accounts') do |account|
|
30
|
-
options[:
|
30
|
+
options[:accounts] = account
|
31
31
|
end
|
32
32
|
|
33
33
|
opts.on_tail("-h", "--help", "Show usage") do
|
@@ -60,6 +60,8 @@ end
|
|
60
60
|
configuration.setup_logging
|
61
61
|
|
62
62
|
case options[:command]
|
63
|
+
when 'setup'
|
64
|
+
Imap::Backup::Configuration::Setup.new.run
|
63
65
|
when 'backup'
|
64
66
|
configuration.each_connection do |connection|
|
65
67
|
connection.run_backup
|
@@ -74,8 +76,6 @@ when 'folders'
|
|
74
76
|
end
|
75
77
|
folders.each { |f| puts "\t" + f.name }
|
76
78
|
end
|
77
|
-
when 'setup'
|
78
|
-
Imap::Backup::Configuration::Setup.new.run
|
79
79
|
when 'status'
|
80
80
|
configuration.each_connection do |connection|
|
81
81
|
puts connection.username
|
data/imap-backup.gemspec
CHANGED
@@ -18,8 +18,14 @@ Gem::Specification.new do |gem|
|
|
18
18
|
|
19
19
|
gem.add_runtime_dependency 'rake'
|
20
20
|
gem.add_runtime_dependency 'highline'
|
21
|
-
|
21
|
+
if RUBY_VERSION > '2'
|
22
|
+
gem.add_runtime_dependency 'mail'
|
23
|
+
else
|
24
|
+
gem.add_runtime_dependency 'mime-types', '~> 2.6'
|
25
|
+
gem.add_runtime_dependency 'mail', '~> 2.6.3'
|
26
|
+
end
|
22
27
|
|
28
|
+
gem.add_development_dependency 'codeclimate-test-reporter', '~> 0.4.8'
|
23
29
|
gem.add_development_dependency 'rspec', '>= 3.0.0'
|
24
30
|
gem.add_development_dependency 'simplecov'
|
25
31
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Email; end
|
2
|
+
|
3
|
+
class Email::Provider
|
4
|
+
def self.for_address(address)
|
5
|
+
case
|
6
|
+
when address.end_with?('@gmail.com')
|
7
|
+
new(:gmail)
|
8
|
+
when address.end_with?('@fastmail.fm')
|
9
|
+
new(:fastmail)
|
10
|
+
else
|
11
|
+
new(:default)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :provider
|
16
|
+
|
17
|
+
def initialize(provider)
|
18
|
+
@provider = provider
|
19
|
+
end
|
20
|
+
|
21
|
+
def options
|
22
|
+
case provider
|
23
|
+
when :gmail
|
24
|
+
{port: 993, ssl: true}
|
25
|
+
when :fastmail
|
26
|
+
{port: 993, ssl: true}
|
27
|
+
else
|
28
|
+
{port: 993, ssl: true}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def host
|
33
|
+
case provider
|
34
|
+
when :gmail
|
35
|
+
'imap.gmail.com'
|
36
|
+
when :fastmail
|
37
|
+
'mail.messagingengine.com'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/imap/backup.rb
CHANGED
@@ -6,21 +6,23 @@ module Imap::Backup
|
|
6
6
|
class Account::Connection
|
7
7
|
attr_reader :username
|
8
8
|
attr_reader :local_path
|
9
|
+
attr_reader :connection_options
|
9
10
|
|
10
11
|
def initialize(options)
|
11
12
|
@username, @password = options[:username], options[:password]
|
12
13
|
@local_path = options[:local_path]
|
13
14
|
@backup_folders = options[:folders]
|
14
15
|
@server = options[:server]
|
16
|
+
@connection_options = options[:connection_options] || {}
|
15
17
|
@folders = nil
|
18
|
+
create_account_folder
|
16
19
|
end
|
17
20
|
|
18
21
|
def folders
|
19
22
|
return @folders if @folders
|
20
|
-
|
21
|
-
@folders = imap.list(root, '*')
|
23
|
+
@folders = imap.list('', '*')
|
22
24
|
if @folders.nil?
|
23
|
-
Imap::Backup.logger.warn "Unable to get folder list for account #{username}
|
25
|
+
Imap::Backup.logger.warn "Unable to get folder list for account #{username}"
|
24
26
|
end
|
25
27
|
@folders
|
26
28
|
end
|
@@ -37,12 +39,9 @@ module Imap::Backup
|
|
37
39
|
Imap::Backup.logger.debug "Running backup of account: #{username}"
|
38
40
|
# start the connection so we get logging messages in the right order
|
39
41
|
imap
|
40
|
-
|
41
|
-
Imap::Backup.logger.debug "[#{folder
|
42
|
-
|
43
|
-
s = Serializer::Mbox.new(local_path, folder[:name])
|
44
|
-
d = Downloader.new(f, s)
|
45
|
-
d.run
|
42
|
+
each_folder do |folder, serializer|
|
43
|
+
Imap::Backup.logger.debug "[#{folder.name}] running backup"
|
44
|
+
Downloader.new(folder, serializer).run
|
46
45
|
end
|
47
46
|
end
|
48
47
|
|
@@ -50,13 +49,9 @@ module Imap::Backup
|
|
50
49
|
imap.disconnect
|
51
50
|
end
|
52
51
|
|
53
|
-
def server
|
54
|
-
@server ||= host_for(username)
|
55
|
-
end
|
56
|
-
|
57
52
|
def imap
|
58
53
|
return @imap unless @imap.nil?
|
59
|
-
options =
|
54
|
+
options = provider_options
|
60
55
|
Imap::Backup.logger.debug "Creating IMAP instance: #{server}, options: #{options.inspect}"
|
61
56
|
@imap = Net::IMAP.new(server, options)
|
62
57
|
Imap::Backup.logger.debug "Logging in: #{username}/#{masked_password}"
|
@@ -67,6 +62,22 @@ module Imap::Backup
|
|
67
62
|
|
68
63
|
private
|
69
64
|
|
65
|
+
def each_folder
|
66
|
+
backup_folders.each do |folder_info|
|
67
|
+
folder = Account::Folder.new(self, folder_info[:name])
|
68
|
+
serializer = Serializer::Mbox.new(local_path, folder_info[:name])
|
69
|
+
yield folder, serializer
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def create_account_folder
|
74
|
+
Utils.make_folder(
|
75
|
+
Configuration::Store::CONFIGURATION_DIRECTORY,
|
76
|
+
File.basename(local_path),
|
77
|
+
Serializer::DIRECTORY_PERMISSIONS
|
78
|
+
)
|
79
|
+
end
|
80
|
+
|
70
81
|
def password
|
71
82
|
@password
|
72
83
|
end
|
@@ -80,35 +91,18 @@ module Imap::Backup
|
|
80
91
|
(folders || []).map { |f| {:name => f.name} }
|
81
92
|
end
|
82
93
|
|
83
|
-
def
|
84
|
-
|
85
|
-
when /@gmail\.com/
|
86
|
-
'imap.gmail.com'
|
87
|
-
when /@fastmail\.fm/
|
88
|
-
'mail.messagingengine.com'
|
89
|
-
end
|
94
|
+
def provider
|
95
|
+
@provider ||= Email::Provider.for_address(username)
|
90
96
|
end
|
91
97
|
|
92
|
-
def
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
when /@fastmail\.fm/
|
97
|
-
'INBOX'
|
98
|
-
else
|
99
|
-
'/'
|
100
|
-
end
|
98
|
+
def server
|
99
|
+
return @server if @server
|
100
|
+
return nil if provider.nil?
|
101
|
+
@server = provider.host
|
101
102
|
end
|
102
103
|
|
103
|
-
def
|
104
|
-
|
105
|
-
when 'imap.gmail.com'
|
106
|
-
{:port => 993, :ssl => true}
|
107
|
-
when 'mail.messagingengine.com'
|
108
|
-
{:port => 993, :ssl => true}
|
109
|
-
else
|
110
|
-
{:port => 993, :ssl => true}
|
111
|
-
end
|
104
|
+
def provider_options
|
105
|
+
provider.options.merge(connection_options)
|
112
106
|
end
|
113
107
|
end
|
114
108
|
end
|
@@ -138,12 +138,12 @@ Account:
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def default_server(username)
|
141
|
-
|
142
|
-
|
143
|
-
'
|
144
|
-
|
145
|
-
'mail.messagingengine.com'
|
141
|
+
provider = Email::Provider.for_address(username)
|
142
|
+
if provider.provider == :default
|
143
|
+
puts "Can't decide provider for email address '#{username}'"
|
144
|
+
return nil
|
146
145
|
end
|
146
|
+
provider.host
|
147
147
|
end
|
148
148
|
end
|
149
149
|
end
|
@@ -33,6 +33,10 @@ module Imap::Backup
|
|
33
33
|
Imap::Backup.logger.debug "[#{folder}] message #{uid} already downloaded - skipping"
|
34
34
|
return
|
35
35
|
end
|
36
|
+
|
37
|
+
# invalidate cache
|
38
|
+
@uids = nil
|
39
|
+
|
36
40
|
body = message['RFC822']
|
37
41
|
mboxrd_message = Email::Mboxrd::Message.new(body)
|
38
42
|
mbox = imap = nil
|
data/lib/imap/backup/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
|
+
require "codeclimate-test-reporter"
|
1
2
|
require 'rspec'
|
3
|
+
|
4
|
+
CodeClimate::TestReporter.start
|
5
|
+
|
2
6
|
spec_path = File.dirname(__FILE__)
|
3
7
|
$LOAD_PATH << File.expand_path('../lib', spec_path)
|
4
8
|
|
5
9
|
support_glob = File.join(spec_path, 'support', '**', '*.rb')
|
6
10
|
Dir[support_glob].each { |f| require f }
|
7
11
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
require 'simplecov'
|
12
|
-
SimpleCov.start do
|
13
|
-
add_filter '/spec/'
|
14
|
-
add_filter '/vendor/'
|
15
|
-
end
|
12
|
+
require 'simplecov'
|
13
|
+
SimpleCov.start do
|
14
|
+
add_filter '/spec/'
|
16
15
|
end
|
17
16
|
|
18
17
|
require 'imap/backup'
|
@@ -10,7 +10,7 @@ describe Imap::Backup::Account::Connection do
|
|
10
10
|
{:name => backup_folder}
|
11
11
|
end
|
12
12
|
|
13
|
-
let(:imap) { double('Net::IMAP', :login => nil, :list => imap_folders) }
|
13
|
+
let(:imap) { double('Net::IMAP', :login => nil, :list => imap_folders, :disconnect => nil) }
|
14
14
|
let(:imap_folders) { [] }
|
15
15
|
let(:options) do
|
16
16
|
{
|
@@ -26,21 +26,18 @@ describe Imap::Backup::Account::Connection do
|
|
26
26
|
|
27
27
|
before do
|
28
28
|
allow(Net::IMAP).to receive(:new).and_return(imap)
|
29
|
+
allow(Imap::Backup::Utils).to receive(:make_folder)
|
29
30
|
end
|
30
31
|
|
31
32
|
subject { described_class.new(options) }
|
32
33
|
|
33
|
-
shared_examples 'connects to IMAP' do
|
34
|
-
options ||= {}
|
35
|
-
username = options[:username] || 'username@gmail.com'
|
36
|
-
server = options[:server] || 'imap.gmail.com'
|
37
|
-
|
34
|
+
shared_examples 'connects to IMAP' do
|
38
35
|
it 'sets up the IMAP connection' do
|
39
|
-
expect(Net::IMAP).to have_received(:new)
|
36
|
+
expect(Net::IMAP).to have_received(:new)
|
40
37
|
end
|
41
38
|
|
42
39
|
it 'logs in to the imap server' do
|
43
|
-
expect(imap).to have_received(:login)
|
40
|
+
expect(imap).to have_received(:login)
|
44
41
|
end
|
45
42
|
end
|
46
43
|
|
@@ -55,37 +52,20 @@ describe Imap::Backup::Account::Connection do
|
|
55
52
|
end
|
56
53
|
end
|
57
54
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
options.merge!(:server => 'imap.example.com')
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'uses the supplied value' do
|
65
|
-
expect(subject.server).to eq('imap.example.com')
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
context 'without a supplied value' do
|
70
|
-
it 'uses the guesses the value' do
|
71
|
-
expect(subject.server).to eq('imap.gmail.com')
|
72
|
-
end
|
73
|
-
end
|
55
|
+
it 'creates the path' do
|
56
|
+
subject.username
|
57
|
+
expect(Imap::Backup::Utils).to have_received(:make_folder)
|
74
58
|
end
|
75
59
|
end
|
76
60
|
|
77
|
-
|
78
|
-
|
79
|
-
['Fastmail', 'user@fastmail.fm', 'mail.messagingengine.com'],
|
80
|
-
].each do |service, email_username, server|
|
81
|
-
context service do
|
82
|
-
let(:username) { email_username }
|
61
|
+
describe '#imap' do
|
62
|
+
before { @result = subject.imap }
|
83
63
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
include_examples 'connects to IMAP', {:username => email_username, :server => server}
|
64
|
+
it 'returns the IMAP connection' do
|
65
|
+
expect(@result).to eq(imap)
|
88
66
|
end
|
67
|
+
|
68
|
+
include_examples 'connects to IMAP'
|
89
69
|
end
|
90
70
|
|
91
71
|
context '#folders' do
|
@@ -122,19 +102,8 @@ describe Imap::Backup::Account::Connection do
|
|
122
102
|
end
|
123
103
|
end
|
124
104
|
|
125
|
-
context '#disconnect' do
|
126
|
-
before { allow(imap).to receive(:disconnect) }
|
127
|
-
before { subject.disconnect }
|
128
|
-
|
129
|
-
it 'disconnects from the server' do
|
130
|
-
expect(imap).to have_received(:disconnect)
|
131
|
-
end
|
132
|
-
|
133
|
-
include_examples 'connects to IMAP'
|
134
|
-
end
|
135
|
-
|
136
105
|
context '#run_backup' do
|
137
|
-
let(:folder) { double('folder') }
|
106
|
+
let(:folder) { double('folder', name: 'folder') }
|
138
107
|
let(:serializer) { double('serializer') }
|
139
108
|
let(:downloader) { double('downloader', :run => nil) }
|
140
109
|
|
@@ -197,4 +166,14 @@ describe Imap::Backup::Account::Connection do
|
|
197
166
|
end
|
198
167
|
end
|
199
168
|
end
|
169
|
+
|
170
|
+
context '#disconnect' do
|
171
|
+
before { subject.disconnect }
|
172
|
+
|
173
|
+
it 'disconnects from the server' do
|
174
|
+
expect(imap).to have_received(:disconnect)
|
175
|
+
end
|
176
|
+
|
177
|
+
include_examples 'connects to IMAP'
|
178
|
+
end
|
200
179
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Email::Provider do
|
4
|
+
describe '.for_address' do
|
5
|
+
context 'known providers' do
|
6
|
+
[['gmail.com', :gmail], ['fastmail.fm', :fastmail]].each do |domain, provider|
|
7
|
+
it "recognizes #{provider}" do
|
8
|
+
address = "foo@#{domain}"
|
9
|
+
expect(described_class.for_address(address).provider).to eq(provider)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'with unknown providers' do
|
15
|
+
it 'returns a default provider' do
|
16
|
+
expect(described_class.for_address('foo@unknown.com').provider).to eq(:default)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
subject { described_class.new(:gmail) }
|
22
|
+
|
23
|
+
describe '#options' do
|
24
|
+
it 'returns options' do
|
25
|
+
expect(subject.options).to eq(port: 993, ssl: true)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#host' do
|
30
|
+
it 'returns host' do
|
31
|
+
expect(subject.host).to eq('imap.gmail.com')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
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: 1.0
|
4
|
+
version: 1.1.0
|
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: 2016-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: codeclimate-test-reporter
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.4.8
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.4.8
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,6 +111,7 @@ files:
|
|
97
111
|
- bin/imap-backup
|
98
112
|
- imap-backup.gemspec
|
99
113
|
- lib/email/mboxrd/message.rb
|
114
|
+
- lib/email/provider.rb
|
100
115
|
- lib/imap/backup.rb
|
101
116
|
- lib/imap/backup/account/connection.rb
|
102
117
|
- lib/imap/backup/account/folder.rb
|
@@ -129,6 +144,7 @@ files:
|
|
129
144
|
- spec/unit/configuration/store_spec.rb
|
130
145
|
- spec/unit/downloader_spec.rb
|
131
146
|
- spec/unit/email/mboxrd/message_spec.rb
|
147
|
+
- spec/unit/email/provider_spec.rb
|
132
148
|
- spec/unit/serializer/base_spec.rb
|
133
149
|
- spec/unit/serializer/directory_spec.rb
|
134
150
|
- spec/unit/serializer/mbox_spec.rb
|
@@ -152,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
168
|
version: '0'
|
153
169
|
requirements: []
|
154
170
|
rubyforge_project:
|
155
|
-
rubygems_version: 2.
|
171
|
+
rubygems_version: 2.5.1
|
156
172
|
signing_key:
|
157
173
|
specification_version: 4
|
158
174
|
summary: Backup GMail (or other IMAP) accounts to disk
|
@@ -173,6 +189,7 @@ test_files:
|
|
173
189
|
- spec/unit/configuration/store_spec.rb
|
174
190
|
- spec/unit/downloader_spec.rb
|
175
191
|
- spec/unit/email/mboxrd/message_spec.rb
|
192
|
+
- spec/unit/email/provider_spec.rb
|
176
193
|
- spec/unit/serializer/base_spec.rb
|
177
194
|
- spec/unit/serializer/directory_spec.rb
|
178
195
|
- spec/unit/serializer/mbox_spec.rb
|