imap-backup 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 75e9eecc039c7cd2b76fc1fbc1acfbe2e07009fa
4
+ data.tar.gz: ce731fe2f0cc8db8af5fb70ce77d5464b46b7066
5
+ SHA512:
6
+ metadata.gz: 4135cd6ab9a7bd60d5f2e8ea9be63aaad5754621f87b809b6ac611390f1a906faec4019f7289a953509c2d1785f0891018cbd83c2e64da8ae6a30bf6ca8515a4
7
+ data.tar.gz: 439df924e96c91c571dc9943f23ccd77a939a83f396e235bf4ca5b5f123a2b1abdffd28f11fb313e1d235625ac681027057b8ef6f3b544560c5d1a92d5688127
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
data/README.md CHANGED
@@ -91,8 +91,8 @@ Altertatively, add it to your crontab.
91
91
  # Result
92
92
 
93
93
  Each folder is saved to an mbox file.
94
- Alongside each mbox is a fine *.imap which lists the source IMAP UIDs to allow
95
- a full restore.
94
+ Alongside each mbox is a file with extension '.imap', which lists the source IMAP
95
+ UIDs to allow a full restore.
96
96
 
97
97
  # Other Usage
98
98
 
data/bin/imap-backup CHANGED
@@ -65,7 +65,12 @@ when 'backup'
65
65
  when 'folders'
66
66
  configuration.each_connection do |connection|
67
67
  puts connection.username
68
- connection.folders.each { |f| puts "\t" + f.name }
68
+ folders = connection.folders
69
+ if folders.nil?
70
+ warn 'Unable to list account folders'
71
+ exit 1
72
+ end
73
+ folders.each { |f| puts "\t" + f.name }
69
74
  end
70
75
  when 'setup'
71
76
  Imap::Backup::Configuration::Setup.new.run
data/imap-backup.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |gem|
25
25
 
26
26
  gem.add_development_dependency 'pry'
27
27
  gem.add_development_dependency 'pry-doc'
28
- gem.add_development_dependency 'rspec', '>= 2.3.0'
28
+ gem.add_development_dependency 'rspec', '>= 2.12.0'
29
29
  if RUBY_VERSION < '1.9'
30
30
  gem.add_development_dependency 'rcov'
31
31
  else
@@ -4,42 +4,77 @@ module Imap
4
4
  module Backup
5
5
  module Account
6
6
  class Connection
7
- attr_reader :username
8
- attr_reader :imap
7
+ attr_reader :username, :local_path, :backup_folders
9
8
 
10
9
  def initialize(options)
11
- @username = options[:username]
10
+ @username, @password = options[:username], options[:password]
12
11
  @local_path, @backup_folders = options[:local_path], options[:folders]
13
- @imap = Net::IMAP.new(options[:server] || 'imap.gmail.com', 993, true)
14
- @imap.login(@username, options[:password])
15
- end
16
-
17
- def disconnect
18
- @imap.disconnect
19
12
  end
20
13
 
21
14
  def folders
22
- @imap.list('/', '*')
15
+ root = root_for(username)
16
+ imap.list(root, '*')
23
17
  end
24
18
 
25
19
  def status
26
- @backup_folders.map do |folder|
20
+ backup_folders.map do |folder|
27
21
  f = Imap::Backup::Account::Folder.new(self, folder[:name])
28
- s = Imap::Backup::Serializer::Directory.new(@local_path, folder[:name])
22
+ s = Imap::Backup::Serializer::Directory.new(local_path, folder[:name])
29
23
  {:name => folder[:name], :local => s.uids, :remote => f.uids}
30
24
  end
31
25
  end
32
26
 
33
27
  def run_backup
34
- @backup_folders.each do |folder|
28
+ backup_folders.each do |folder|
35
29
  f = Imap::Backup::Account::Folder.new(self, folder[:name])
36
- s = Imap::Backup::Serializer::Mbox.new(@local_path, folder[:name])
30
+ s = Imap::Backup::Serializer::Mbox.new(local_path, folder[:name])
37
31
  d = Imap::Backup::Downloader.new(f, s)
38
32
  d.run
39
33
  end
40
34
  end
35
+
36
+ def disconnect
37
+ imap.disconnect
38
+ end
39
+
40
+ def imap
41
+ return @imap unless @imap.nil?
42
+ host = host_for(username)
43
+ options = options_for(username)
44
+ @imap = Net::IMAP.new(host, options)
45
+ @imap.login(username, @password)
46
+ @imap
47
+ end
48
+
49
+ private
50
+
51
+ def host_for(username)
52
+ case username
53
+ when /@gmail\.com/
54
+ 'imap.gmail.com'
55
+ when /@fastmail\.fm/
56
+ 'mail.messagingengine.com'
57
+ end
58
+ end
59
+
60
+ def root_for(username)
61
+ case username
62
+ when /@gmail\.com/
63
+ '/'
64
+ when /@fastmail\.fm/
65
+ 'INBOX'
66
+ end
67
+ end
68
+
69
+ def options_for(username)
70
+ case username
71
+ when /@gmail\.com/
72
+ {:port => 993, :ssl => true}
73
+ when /@fastmail\.fm/
74
+ {:port => 993, :ssl => true}
75
+ end
76
+ end
41
77
  end
42
78
  end
43
79
  end
44
80
  end
45
-
@@ -17,6 +17,11 @@ module Imap
17
17
  return
18
18
  end
19
19
  @folders = @connection.folders
20
+ if @folders.nil?
21
+ puts 'Unable to get folder list'
22
+ Setup.highline.ask 'Press a key '
23
+ return
24
+ end
20
25
  loop do
21
26
  system('clear')
22
27
  Setup.highline.choose do |menu|
@@ -2,7 +2,7 @@ module Imap
2
2
  module Backup
3
3
  MAJOR = 1
4
4
  MINOR = 0
5
- REVISION = 3
5
+ REVISION = 4
6
6
  VERSION = [MAJOR, MINOR, REVISION].map(&:to_s).join('.')
7
7
  end
8
8
  end
@@ -2,114 +2,121 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Imap::Backup::Account::Connection do
5
- context '#initialize' do
6
- it 'should login to the imap server' do
7
- imap = stub('Net::IMAP')
8
- Net::IMAP.should_receive(:new).with('imap.gmail.com', 993, true).and_return(imap)
9
- imap.should_receive('login').with('myuser', 'secret')
10
-
11
- Imap::Backup::Account::Connection.new(:username => 'myuser', :password => 'secret')
12
- end
5
+ def self.folder_config
6
+ {:name => 'backup_folder'}
7
+ end
13
8
 
14
- context "with specific server" do
15
- it 'should login to the imap server' do
16
- imap = stub('Net::IMAP')
17
- Net::IMAP.should_receive(:new).with('my.imap.example.com', 993, true).and_return(imap)
18
- imap.should_receive('login').with('myuser', 'secret')
9
+ let(:imap) { double('Net::IMAP', :login => nil, :list => []) }
10
+ let(:options) do
11
+ {
12
+ :username => username,
13
+ :password => 'password',
14
+ :local_path => 'local_path',
15
+ :folders => [self.class.folder_config]
16
+ }
17
+ end
18
+ let(:username) { 'username@gmail.com' }
19
19
 
20
- Imap::Backup::Account::Connection.new(:username => 'myuser', :password => 'secret', :server => 'my.imap.example.com')
21
- end
22
- end
20
+ before do
21
+ allow(Net::IMAP).to receive(:new).and_return(imap)
23
22
  end
24
23
 
25
- context 'instance methods' do
26
- before :each do
27
- @imap = stub('Net::IMAP', :login => nil)
28
- Net::IMAP.stub!(:new).and_return(@imap)
29
- @account = {
30
- :username => 'myuser',
31
- :password => 'secret',
32
- :folders => [{:name => 'my_folder'}],
33
- :local_path => '/base/path',
34
- }
35
- end
24
+ subject { Imap::Backup::Account::Connection.new(options) }
36
25
 
37
- subject { Imap::Backup::Account::Connection.new(@account) }
26
+ shared_examples 'connects to IMAP' do |username = 'username@gmail.com', server = 'imap.gmail.com'|
27
+ it 'sets up the IMAP connection' do
28
+ expect(Net::IMAP).to have_received(:new).with(server, {:port => 993, :ssl => true})
29
+ end
38
30
 
39
- context '#disconnect' do
40
- it 'should disconnect from the server' do
41
- @imap.should_receive(:disconnect)
31
+ it 'logs in to the imap server' do
32
+ expect(imap).to have_received(:login).with(username, 'password')
33
+ end
34
+ end
42
35
 
43
- subject.disconnect
44
- end
36
+ context '#initialize' do
37
+ [
38
+ [:username, 'username@gmail.com'],
39
+ [:local_path, 'local_path'],
40
+ [:backup_folders, [folder_config]]
41
+ ].each do |attr, expected|
42
+ its(attr) { should eq(expected) }
45
43
  end
44
+ end
46
45
 
47
- context '#folders' do
48
- it 'should list all folders' do
49
- @imap.should_receive(:list).with('/', '*')
46
+ [
47
+ ['GMail', 'user@gmail.com', 'imap.gmail.com'],
48
+ ['Fastmail', 'user@fastmail.fm', 'mail.messagingengine.com'],
49
+ ].each do |service, email_username, server|
50
+ context service do
51
+ let(:username) { email_username }
50
52
 
51
- subject.folders
52
- end
53
+ before { allow(imap).to receive(:disconnect) }
54
+ before { subject.disconnect }
55
+
56
+ include_examples 'connects to IMAP', [email_username, server]
53
57
  end
58
+ end
54
59
 
55
- context '#status' do
56
- before :each do
57
- @folder = stub('Imap::Backup::Account::Folder', :uids => [])
58
- Imap::Backup::Account::Folder.stub!(:new).with(subject, 'my_folder').and_return(@folder)
59
- @serializer = stub('Imap::Backup::Serializer', :uids => [])
60
- Imap::Backup::Serializer::Directory.stub!(:new).with('/base/path', 'my_folder').and_return(@serializer)
61
- end
60
+ context '#folders' do
61
+ let(:folders) { 'folders' }
62
62
 
63
- it 'should return the names of folders' do
64
- subject.status[0][:name].should == 'my_folder'
65
- end
63
+ before { allow(imap).to receive(:list).and_return(folders) }
66
64
 
67
- it 'should list local message uids' do
68
- @serializer.should_receive(:uids).and_return([321, 456])
65
+ it 'returns the list of folders' do
66
+ expect(subject.folders).to eq(folders)
67
+ end
68
+ end
69
69
 
70
- subject.status[0][:local].should == [321, 456]
71
- end
70
+ context '#status' do
71
+ let(:folder) { double('folder', :uids => [remote_uid]) }
72
+ let(:local_uid) { 'local_uid' }
73
+ let(:serializer) { double('serializer', :uids => [local_uid]) }
74
+ let(:remote_uid) { 'remote_uid' }
72
75
 
73
- it 'should retrieve the available uids' do
74
- @folder.should_receive(:uids).and_return([101, 234])
76
+ before do
77
+ allow(Imap::Backup::Account::Folder).to receive(:new).and_return(folder)
78
+ allow(Imap::Backup::Serializer::Directory).to receive(:new).and_return(serializer)
79
+ end
75
80
 
76
- subject.status[0][:remote].should == [101, 234]
77
- end
81
+ it 'should return the names of folders' do
82
+ expect(subject.status[0][:name]).to eq('backup_folder')
78
83
  end
79
84
 
80
- context '#run_backup' do
81
- before :each do
82
- @folder = stub('Imap::Backup::Account::Folder', :uids => [])
83
- Imap::Backup::Account::Folder.stub!(:new).with(subject, 'my_folder').and_return(@folder)
84
- @serializer = stub('Imap::Backup::Serializer')
85
- Imap::Backup::Serializer::Mbox.stub!(:new).with('/base/path', 'my_folder').and_return(@serializer)
86
- @downloader = stub('Imap::Backup::Downloader', :run => nil)
87
- Imap::Backup::Downloader.stub!(:new).with(@folder, @serializer).and_return(@downloader)
88
- end
85
+ it 'returns local message uids' do
86
+ expect(subject.status[0][:local]).to eq([local_uid])
87
+ end
89
88
 
90
- it 'should instantiate folders' do
91
- Imap::Backup::Account::Folder.should_receive(:new).with(subject, 'my_folder').and_return(@folder)
89
+ it 'should retrieve the available uids' do
90
+ expect(subject.status[0][:remote]).to eq([remote_uid])
91
+ end
92
+ end
92
93
 
93
- subject.run_backup
94
- end
94
+ context '#disconnect' do
95
+ before { allow(imap).to receive(:disconnect) }
96
+ before { subject.disconnect }
95
97
 
96
- it 'should instantiate serializers' do
97
- Imap::Backup::Serializer::Mbox.should_receive(:new).with('/base/path', 'my_folder').and_return(@serializer)
98
+ it 'disconnects from the server' do
99
+ expect(imap).to have_received(:disconnect).with()
100
+ end
98
101
 
99
- subject.run_backup
100
- end
102
+ include_examples 'connects to IMAP'
103
+ end
101
104
 
102
- it 'should instantiate downloaders' do
103
- Imap::Backup::Downloader.should_receive(:new).with(@folder, @serializer).and_return(@downloader)
105
+ context '#run_backup' do
106
+ let(:folder) { double('folder') }
107
+ let(:serializer) { double('serializer') }
108
+ let(:downloader) { double('downloader', run: nil) }
104
109
 
105
- subject.run_backup
106
- end
110
+ before do
111
+ allow(Imap::Backup::Account::Folder).to receive(:new).and_return(folder)
112
+ allow(Imap::Backup::Serializer::Mbox).to receive(:new).and_return(serializer)
113
+ allow(Imap::Backup::Downloader).to receive(:new).and_return(downloader)
114
+ end
107
115
 
108
- it 'should run downloaders' do
109
- @downloader.should_receive(:run)
116
+ before { subject.run_backup }
110
117
 
111
- subject.run_backup
112
- end
118
+ it 'runs downloaders' do
119
+ expect(downloader).to have_received(:run)
113
120
  end
114
121
  end
115
122
  end
@@ -4,28 +4,25 @@ require 'spec_helper'
4
4
  describe Imap::Backup::Account::Folder do
5
5
  include InputOutputTestHelpers
6
6
 
7
+ let(:imap) { stub('Net::IMAP') }
8
+ let(:connection) { stub('Imap::Backup::Account::Connection', :imap => imap) }
7
9
  let(:missing_mailbox_data) { stub('Data', :text => 'Unknown Mailbox: my_folder') }
8
10
  let(:missing_mailbox_response) { stub('Response', :data => missing_mailbox_data) }
9
11
  let(:missing_mailbox_error) { Net::IMAP::NoResponseError.new(missing_mailbox_response) }
10
12
 
11
13
  context 'with instance' do
12
- before :each do
13
- @imap = stub('Net::IMAP')
14
- @connection = stub('Imap::Backup::Account::Connection', :imap => @imap)
15
- end
16
-
17
- subject { Imap::Backup::Account::Folder.new(@connection, 'my_folder') }
14
+ subject { Imap::Backup::Account::Folder.new(connection, 'my_folder') }
18
15
 
19
16
  context '#uids' do
20
- it 'should list available messages' do
21
- @imap.should_receive(:examine).with('my_folder')
22
- @imap.should_receive(:uid_search).with(['ALL']).and_return([5678, 123])
17
+ it 'lists available messages' do
18
+ imap.should_receive(:examine).with('my_folder')
19
+ imap.should_receive(:uid_search).with(['ALL']).and_return([5678, 123])
23
20
 
24
21
  subject.uids.should == [123, 5678]
25
22
  end
26
23
 
27
24
  it 'returns an empty array for missing mailboxes' do
28
- @imap.
25
+ imap.
29
26
  should_receive(:examine).
30
27
  with('my_folder').
31
28
  and_raise(missing_mailbox_error)
@@ -37,25 +34,25 @@ describe Imap::Backup::Account::Folder do
37
34
  end
38
35
 
39
36
  context '#fetch' do
40
- before :each do
41
- @message_body = 'the body'
42
- @message = {
43
- 'RFC822' => @message_body,
37
+ let(:message_body) { 'the body' }
38
+ let(:message) do
39
+ {
40
+ 'RFC822' => message_body,
44
41
  'other' => 'xxx'
45
42
  }
46
43
  end
47
44
 
48
- it 'should request the message, the flags and the date' do
49
- @imap.should_receive(:examine).with('my_folder')
50
- @imap.should_receive(:uid_fetch).
45
+ it 'requests the message, the flags and the date' do
46
+ imap.should_receive(:examine).with('my_folder')
47
+ imap.should_receive(:uid_fetch).
51
48
  with([123], ['RFC822', 'FLAGS', 'INTERNALDATE']).
52
- and_return([[nil, @message]])
49
+ and_return([[nil, message]])
53
50
 
54
51
  subject.fetch(123)
55
52
  end
56
53
 
57
54
  it "returns nil if the mailbox doesn't exist" do
58
- @imap.
55
+ imap.
59
56
  should_receive(:examine).
60
57
  with('my_folder').
61
58
  and_raise(missing_mailbox_error)
@@ -66,10 +63,10 @@ describe Imap::Backup::Account::Folder do
66
63
  end
67
64
 
68
65
  if RUBY_VERSION > '1.9'
69
- it 'should set the encoding on the message' do
70
- @imap.stub!(:examine => nil, :uid_fetch => [[nil, @message]])
66
+ it 'sets the encoding on the message' do
67
+ imap.stub!(:examine => nil, :uid_fetch => [[nil, message]])
71
68
 
72
- @message_body.should_receive(:force_encoding).with('utf-8')
69
+ message_body.should_receive(:force_encoding).with('utf-8')
73
70
 
74
71
  subject.fetch(123)
75
72
  end
@@ -3,55 +3,60 @@ require 'spec_helper'
3
3
 
4
4
  describe Imap::Backup::Downloader do
5
5
  context 'with account and downloader' do
6
- before :each do
7
- local_path = '/base/path'
8
- stat = stub('File::Stat', :mode => 0700)
9
- File.stub!(:stat).with(local_path).and_return(stat)
10
-
11
- @message = {
6
+ let(:local_path) { '/base/path' }
7
+ let(:stat) { stub('File::Stat', :mode => 0700) }
8
+ let(:message) do
9
+ {
12
10
  'RFC822' => 'the body',
13
11
  'other' => 'xxx'
14
12
  }
15
- @folder = stub('Imap::Backup::Account::Folder', :fetch => @message)
16
- @serializer = stub('Imap::Backup::Serializer', :prepare => nil,
17
- :exist? => true,
18
- :uids => [],
19
- :save => nil)
20
13
  end
14
+ let(:folder) { stub('Imap::Backup::Account::Folder', :fetch => message) }
15
+ let(:serializer) do
16
+ stub(
17
+ 'Imap::Backup::Serializer',
18
+ :prepare => nil,
19
+ :exist? => true,
20
+ :uids => [],
21
+ :save => nil
22
+ )
23
+ end
24
+
25
+ before { File.stub!(:stat).with(local_path).and_return(stat) }
21
26
 
22
- subject { Imap::Backup::Downloader.new(@folder, @serializer) }
27
+ subject { Imap::Backup::Downloader.new(folder, serializer) }
23
28
 
24
29
  context '#run' do
25
30
  context 'with folder' do
26
31
  it 'should list messages' do
27
- @folder.should_receive(:uids).and_return([])
32
+ folder.should_receive(:uids).and_return([])
28
33
 
29
34
  subject.run
30
35
  end
31
36
 
32
37
  context 'with messages' do
33
38
  before :each do
34
- @folder.stub!(:uids).and_return(['123', '999', '1234'])
39
+ folder.stub!(:uids).and_return(['123', '999', '1234'])
35
40
  end
36
41
 
37
42
  it 'should skip messages that are downloaded' do
38
43
  File.stub!(:exist?).and_return(true)
39
44
 
40
- @serializer.should_not_receive(:fetch)
45
+ serializer.should_not_receive(:fetch)
41
46
 
42
47
  subject.run
43
48
  end
44
49
 
45
50
  it 'skips failed fetches' do
46
- @folder.should_receive(:fetch).with('999').and_return(nil)
47
- @serializer.should_not_receive(:save).with('999', anything)
51
+ folder.should_receive(:fetch).with('999').and_return(nil)
52
+ serializer.should_not_receive(:save).with('999', anything)
48
53
 
49
54
  subject.run
50
55
  end
51
56
 
52
57
  context 'to download' do
53
58
  before :each do
54
- @serializer.stub!(:exist?) do |uid|
59
+ serializer.stub!(:exist?) do |uid|
55
60
  if uid == '123'
56
61
  true
57
62
  else
@@ -61,15 +66,15 @@ describe Imap::Backup::Downloader do
61
66
  end
62
67
 
63
68
  it 'should request messages' do
64
- @folder.should_receive(:fetch).with('999')
65
- @folder.should_receive(:fetch).with('1234')
69
+ folder.should_receive(:fetch).with('999')
70
+ folder.should_receive(:fetch).with('1234')
66
71
 
67
72
  subject.run
68
73
  end
69
74
 
70
75
  it 'should save messages' do
71
- @serializer.should_receive(:save).with('999', @message)
72
- @serializer.should_receive(:save).with('1234', @message)
76
+ serializer.should_receive(:save).with('999', message)
77
+ serializer.should_receive(:save).with('1234', message)
73
78
 
74
79
  subject.run
75
80
  end
metadata CHANGED
@@ -1,126 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imap-backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
5
- prerelease:
4
+ version: 1.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Joe Yates
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-10 00:00:00.000000000 Z
11
+ date: 2013-12-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: highline
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: mail
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: pry
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: pry-doc
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rspec
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
- version: 2.3.0
89
+ version: 2.12.0
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
- version: 2.3.0
96
+ version: 2.12.0
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: simplecov
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  description: Backup GMail, or any other IMAP email service, to disk.
@@ -175,33 +160,26 @@ files:
175
160
  - spec/unit/utils_spec.rb
176
161
  homepage: https://github.com/joeyates/imap-backup
177
162
  licenses: []
163
+ metadata: {}
178
164
  post_install_message:
179
165
  rdoc_options: []
180
166
  require_paths:
181
167
  - lib
182
168
  required_ruby_version: !ruby/object:Gem::Requirement
183
- none: false
184
169
  requirements:
185
- - - ! '>='
170
+ - - '>='
186
171
  - !ruby/object:Gem::Version
187
172
  version: '0'
188
- segments:
189
- - 0
190
- hash: 1167713560722086376
191
173
  required_rubygems_version: !ruby/object:Gem::Requirement
192
- none: false
193
174
  requirements:
194
- - - ! '>='
175
+ - - '>='
195
176
  - !ruby/object:Gem::Version
196
177
  version: '0'
197
- segments:
198
- - 0
199
- hash: 1167713560722086376
200
178
  requirements: []
201
179
  rubyforge_project:
202
- rubygems_version: 1.8.23
180
+ rubygems_version: 2.0.3
203
181
  signing_key:
204
- specification_version: 3
182
+ specification_version: 4
205
183
  summary: Backup GMail (or other IMAP) accounts to disk
206
184
  test_files:
207
185
  - spec/gather_rspec_coverage.rb