imap_archiver 0.0.6 → 0.0.7
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.
- data/VERSION +1 -1
- data/lib/imap_archiver/archiver.rb +4 -3
- data/spec/archiver_spec.rb +30 -16
- data/spec/imap_archiver_spec.rb +1 -1
- data/spec/integration_spec.rb +17 -11
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
@@ -73,7 +73,7 @@ module ImapArchiver
|
|
73
73
|
begin
|
74
74
|
connection.select(folder)
|
75
75
|
# puts "will search 1"
|
76
|
-
msgs_to_archive = connection.
|
76
|
+
msgs_to_archive = connection.uid_search(conditions)
|
77
77
|
@logger.debug "#{msgs_to_archive.size} msgs to archive"
|
78
78
|
if msgs_to_archive.size > 0
|
79
79
|
@logger.debug "will archive #{msgs_to_archive.size} messages"
|
@@ -87,9 +87,10 @@ module ImapArchiver
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
while !msgs_to_archive.empty? && (msgs = msgs_to_archive.slice!(0,100))
|
90
|
-
connection.
|
91
|
-
connection.
|
90
|
+
connection.uid_copy(msgs, current_archive_folder)
|
91
|
+
connection.uid_store(msgs, "+FLAGS",[:Deleted])
|
92
92
|
@msg_count += msgs.size
|
93
|
+
@logger.info "archived #{msg_count} messages"
|
93
94
|
end
|
94
95
|
connection.expunge
|
95
96
|
end
|
data/spec/archiver_spec.rb
CHANGED
@@ -41,11 +41,12 @@ describe ImapArchiver::Archiver do
|
|
41
41
|
it "should reconnect when an IOError is raised during archiving" do
|
42
42
|
@archiver.instance_variable_set(:@msg_count, 0)
|
43
43
|
@archiver.connection.expects(:select).times(2)
|
44
|
-
@archiver.connection.expects(:
|
44
|
+
@archiver.connection.expects(:uid_search).times(2).returns([1],[1])
|
45
|
+
@archiver.connection.expects(:search).returns([])
|
45
46
|
@archiver.connection.expects(:list).times(2).returns(true)
|
46
|
-
@archiver.connection.stubs(:
|
47
|
+
@archiver.connection.stubs(:uid_copy).raises(IOError).then.returns(nil)
|
47
48
|
@archiver.expects(:reconnect).times(1)
|
48
|
-
@archiver.connection.expects(:
|
49
|
+
@archiver.connection.expects(:uid_store)
|
49
50
|
@archiver.connection.expects(:expunge)
|
50
51
|
@archiver.archive_folder_between_dates('Public Folders/test',Date.today,Date.today)
|
51
52
|
end
|
@@ -78,7 +79,8 @@ describe ImapArchiver::Archiver do
|
|
78
79
|
@archiver.folders_to_archive = ["Public Folders/test1", "test2"]
|
79
80
|
@archiver.connection.expects(:list).with('',"Public Folders/test1").returns([stub(:name => 'Public Folders/test1')])
|
80
81
|
@archiver.connection.expects(:list).with('',"test2").returns([stub(:name => 'test2')])
|
81
|
-
@archiver.connection.expects(:search).times(
|
82
|
+
@archiver.connection.expects(:search).times(2).returns([])
|
83
|
+
@archiver.connection.expects(:uid_search).times(2).returns([])
|
82
84
|
@archiver.start
|
83
85
|
end
|
84
86
|
|
@@ -125,7 +127,7 @@ describe ImapArchiver::Archiver do
|
|
125
127
|
@archiver.connection.stubs(:capability).returns([])
|
126
128
|
@archiver.connection.stubs(:list).returns(mock)
|
127
129
|
@archiver.connection.stubs(:select)
|
128
|
-
|
130
|
+
#@archiver.connection.stubs(:store)
|
129
131
|
@archiver.connection.stubs(:expunge)
|
130
132
|
@archiver.instance_variable_set("@msg_count",0)
|
131
133
|
end
|
@@ -136,18 +138,30 @@ describe ImapArchiver::Archiver do
|
|
136
138
|
since_date = Date.today.months_ago(3).beginning_of_month
|
137
139
|
before_date= Date.today.months_ago(2).beginning_of_month
|
138
140
|
conditions = ["SINCE", since_date.strftime("%d-%b-%Y"), "BEFORE", before_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]
|
139
|
-
@archiver.connection.expects(:
|
141
|
+
@archiver.connection.expects(:uid_search).with(conditions).returns((1..996).to_a)
|
140
142
|
@archiver.connection.expects(:search).with(["BEFORE", since_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([])
|
141
|
-
@archiver.connection.expects(:
|
142
|
-
@archiver.connection.expects(:
|
143
|
-
@archiver.connection.expects(:
|
144
|
-
@archiver.connection.expects(:
|
145
|
-
@archiver.connection.expects(:
|
146
|
-
@archiver.connection.expects(:
|
147
|
-
@archiver.connection.expects(:
|
148
|
-
@archiver.connection.expects(:
|
149
|
-
@archiver.connection.expects(:
|
150
|
-
@archiver.connection.expects(:
|
143
|
+
@archiver.connection.expects(:uid_copy).with((1..100).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
144
|
+
@archiver.connection.expects(:uid_copy).with((101..200).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
145
|
+
@archiver.connection.expects(:uid_copy).with((201..300).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
146
|
+
@archiver.connection.expects(:uid_copy).with((301..400).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
147
|
+
@archiver.connection.expects(:uid_copy).with((401..500).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
148
|
+
@archiver.connection.expects(:uid_copy).with((501..600).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
149
|
+
@archiver.connection.expects(:uid_copy).with((601..700).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
150
|
+
@archiver.connection.expects(:uid_copy).with((701..800).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
151
|
+
@archiver.connection.expects(:uid_copy).with((801..900).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
152
|
+
@archiver.connection.expects(:uid_copy).with((901..996).to_a, "archive/test1/#{since_date.strftime("%b %Y")}")
|
153
|
+
|
154
|
+
@archiver.connection.expects(:uid_store).with((1..100).to_a, "+FLAGS",[:Deleted])
|
155
|
+
@archiver.connection.expects(:uid_store).with((101..200).to_a, "+FLAGS",[:Deleted])
|
156
|
+
@archiver.connection.expects(:uid_store).with((201..300).to_a, "+FLAGS",[:Deleted])
|
157
|
+
@archiver.connection.expects(:uid_store).with((301..400).to_a, "+FLAGS",[:Deleted])
|
158
|
+
@archiver.connection.expects(:uid_store).with((401..500).to_a, "+FLAGS",[:Deleted])
|
159
|
+
@archiver.connection.expects(:uid_store).with((501..600).to_a, "+FLAGS",[:Deleted])
|
160
|
+
@archiver.connection.expects(:uid_store).with((601..700).to_a, "+FLAGS",[:Deleted])
|
161
|
+
@archiver.connection.expects(:uid_store).with((701..800).to_a, "+FLAGS",[:Deleted])
|
162
|
+
@archiver.connection.expects(:uid_store).with((801..900).to_a, "+FLAGS",[:Deleted])
|
163
|
+
@archiver.connection.expects(:uid_store).with((901..996).to_a, "+FLAGS",[:Deleted])
|
164
|
+
|
151
165
|
@archiver.archive_folder_between_dates("Public Folders/test1",since_date,before_date) #if folder.name =~ /^Public Folders\/Team\//
|
152
166
|
@archiver.instance_variable_get("@msg_count").should == 996
|
153
167
|
end
|
data/spec/imap_archiver_spec.rb
CHANGED
data/spec/integration_spec.rb
CHANGED
@@ -37,14 +37,16 @@ describe "imap_archiver" do
|
|
37
37
|
it "should select and search the matching mailboxes" do
|
38
38
|
@connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
|
39
39
|
@connection.expects(:select).with('testfolder')
|
40
|
-
@connection.expects(:search).
|
40
|
+
@connection.expects(:search).returns([])
|
41
|
+
@connection.expects(:uid_search).returns([])
|
41
42
|
ImapArchiver::CLI.execute(STDOUT,STDIN,["-F",@config_file.path])
|
42
43
|
end
|
43
44
|
|
44
45
|
it "should create a mailbox for archiving if it does not exist" do
|
45
46
|
@connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
|
46
47
|
@connection.expects(:select).with('testfolder')
|
47
|
-
@connection.expects(:search).
|
48
|
+
@connection.expects(:search).returns([])
|
49
|
+
@connection.expects(:uid_search).returns([1,2])
|
48
50
|
@connection.expects(:list).with('',"/Archive/test/testfolder/#{@archive_date.strftime("%b %Y")}")
|
49
51
|
@connection.expects(:create).with("/Archive/test/testfolder/#{@archive_date.strftime("%b %Y")}")
|
50
52
|
|
@@ -54,7 +56,8 @@ describe "imap_archiver" do
|
|
54
56
|
it "should not create a mailbox for archiving if it does exist" do
|
55
57
|
@connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
|
56
58
|
@connection.expects(:select).with('testfolder')
|
57
|
-
@connection.expects(:search).
|
59
|
+
@connection.expects(:search).returns([])
|
60
|
+
@connection.expects(:uid_search).returns([1,2])
|
58
61
|
@connection.expects(:list).with('',"/Archive/test/testfolder/#{@archive_date.strftime("%b %Y")}").returns(stub_everything('archive folder'))
|
59
62
|
@connection.expects(:create).never
|
60
63
|
|
@@ -65,10 +68,10 @@ describe "imap_archiver" do
|
|
65
68
|
@connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
|
66
69
|
@connection.expects(:select).with('testfolder')
|
67
70
|
# @connection.expects(:search).twice.returns([1,2],[])
|
68
|
-
@connection.expects(:
|
71
|
+
@connection.expects(:uid_search).with(["SINCE", @archive_date.strftime("%d-%b-%Y"), "BEFORE", @archive_date.next_month.beginning_of_month.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([1,2])
|
69
72
|
@connection.expects(:search).with(["BEFORE", @archive_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([])
|
70
73
|
|
71
|
-
@connection.expects(:
|
74
|
+
@connection.expects(:uid_copy).with([1,2],"/Archive/test/testfolder/#{@archive_date.strftime("%b %Y")}")
|
72
75
|
|
73
76
|
ImapArchiver::CLI.execute(STDOUT,STDIN,["-F",@config_file.path])
|
74
77
|
|
@@ -77,8 +80,9 @@ describe "imap_archiver" do
|
|
77
80
|
it "should delete the copied messages" do
|
78
81
|
@connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
|
79
82
|
@connection.expects(:select).with('testfolder')
|
80
|
-
@connection.expects(:search).
|
81
|
-
@connection.expects(:
|
83
|
+
@connection.expects(:search).returns([])
|
84
|
+
@connection.expects(:uid_search).returns([1,2])
|
85
|
+
@connection.expects(:uid_store).with([1,2],"+FLAGS",[:Deleted])
|
82
86
|
@connection.expects(:expunge)
|
83
87
|
ImapArchiver::CLI.execute(STDOUT,STDIN,["-F",@config_file.path])
|
84
88
|
|
@@ -87,10 +91,10 @@ describe "imap_archiver" do
|
|
87
91
|
it "should search for messages older then the archiving period" do
|
88
92
|
@connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
|
89
93
|
@connection.expects(:select).with('testfolder').twice
|
90
|
-
@connection.expects(:
|
94
|
+
@connection.expects(:uid_search).with(["SINCE", @archive_date.strftime("%d-%b-%Y"), "BEFORE", @archive_date.next_month.beginning_of_month.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([1,2])
|
91
95
|
@connection.expects(:search).with(["BEFORE", @archive_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([3,4])
|
92
96
|
@archive_date = @archive_date.prev_month
|
93
|
-
@connection.expects(:
|
97
|
+
@connection.expects(:uid_search).with(["SINCE", @archive_date.strftime("%d-%b-%Y"), "BEFORE", @archive_date.next_month.beginning_of_month.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([1,2])
|
94
98
|
@connection.expects(:search).with(["BEFORE", @archive_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([])
|
95
99
|
|
96
100
|
ImapArchiver::CLI.execute(STDOUT,STDIN,["-F",@config_file.path])
|
@@ -99,7 +103,8 @@ describe "imap_archiver" do
|
|
99
103
|
it "should set the correct acl on newly created archive folders" do
|
100
104
|
@connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
|
101
105
|
@connection.expects(:select).with('testfolder')
|
102
|
-
@connection.expects(:search).
|
106
|
+
@connection.expects(:search).returns([])
|
107
|
+
@connection.expects(:uid_search).returns([1,2])
|
103
108
|
@connection.expects(:list).with('',"/Archive/test/testfolder/#{@archive_date.strftime("%b %Y")}")
|
104
109
|
@connection.expects(:create).with("/Archive/test/testfolder/#{@archive_date.strftime("%b %Y")}")
|
105
110
|
@connection.expects(:setacl).with("/Archive/test/testfolder/#{@archive_date.strftime("%b %Y")}",'jhelsen','lrswpcda')
|
@@ -133,7 +138,8 @@ describe "imap_archiver" do
|
|
133
138
|
it "should select and search the matching mailboxes" do
|
134
139
|
@connection.expects(:list).with("","test1").returns([mock1=stub(:name=>'test1')])
|
135
140
|
@connection.expects(:select).with('test1')
|
136
|
-
@connection.expects(:
|
141
|
+
@connection.expects(:uid_search).returns([]) #search current range
|
142
|
+
@connection.expects(:search).returns([]) #and before
|
137
143
|
ImapArchiver::CLI.execute(STDOUT,STDIN,["-F",@config_file.path])
|
138
144
|
end
|
139
145
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imap_archiver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 7
|
10
|
+
version: 0.0.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jelle Helsen
|