imap-backup 1.0.3 → 1.0.4

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 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