imap_archiver 0.0.4 → 0.0.5

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/Gemfile CHANGED
@@ -5,7 +5,7 @@ gem 'i18n'
5
5
  group :development do
6
6
  gem 'rake', '~> 0.8.7'
7
7
  gem 'jeweler', '~> 1.5.1'
8
- gem 'rspec', '~> 2.0.0'
8
+ gem 'rspec', '~> 2.3.0'
9
9
  gem 'cucumber', :git => 'http://github.com/aslakhellesoy/cucumber.git'
10
10
  gem 'aruba'
11
11
  gem 'mocha'
data/Gemfile.lock CHANGED
@@ -30,16 +30,14 @@ GEM
30
30
  mocha (0.9.8)
31
31
  rake
32
32
  rake (0.8.7)
33
- rspec (2.0.1)
34
- rspec-core (~> 2.0.1)
35
- rspec-expectations (~> 2.0.1)
36
- rspec-mocks (~> 2.0.1)
37
- rspec-core (2.0.1)
38
- rspec-expectations (2.0.1)
39
- diff-lcs (>= 1.1.2)
40
- rspec-mocks (2.0.1)
41
- rspec-core (~> 2.0.1)
42
- rspec-expectations (~> 2.0.1)
33
+ rspec (2.3.0)
34
+ rspec-core (~> 2.3.0)
35
+ rspec-expectations (~> 2.3.0)
36
+ rspec-mocks (~> 2.3.0)
37
+ rspec-core (2.3.1)
38
+ rspec-expectations (2.3.0)
39
+ diff-lcs (~> 1.1.2)
40
+ rspec-mocks (2.3.0)
43
41
  term-ansicolor (1.0.5)
44
42
  trollop (1.16.2)
45
43
 
@@ -56,4 +54,4 @@ DEPENDENCIES
56
54
  jeweler (~> 1.5.1)
57
55
  mocha
58
56
  rake (~> 0.8.7)
59
- rspec (~> 2.0.0)
57
+ rspec (~> 2.3.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.5
@@ -1,11 +1,21 @@
1
+ require "logger"
1
2
  require "config"
2
3
  module ImapArchiver
3
4
  class Archiver
4
5
  include ::ImapArchiver::Config
5
6
  attr_accessor :connection
6
- def initialize(config_file)
7
+ def initialize(config_file,debug=false)
8
+ @logger = Logger.new(STDOUT)
9
+ @logger.level = Logger::WARN
10
+ if debug
11
+ @logger.level = Logger::DEBUG
12
+ @Logger.debug "Debugging enabled."
13
+ end
14
+ @logger.debug "Loading config"
7
15
  self.load_config(config_file)
16
+ @logger.debug "config loaded"
8
17
  config_valid?
18
+ @logger.debug "config valid"
9
19
  end
10
20
 
11
21
  def connect
@@ -14,18 +24,22 @@ module ImapArchiver
14
24
  end
15
25
 
16
26
  def reconnect
27
+ @logger.debug "reconnect"
17
28
  self.connection = Net::IMAP.new(imap_server) rescue nil
29
+ @logger.debug "connected"
18
30
  capability = self.connection.capability rescue nil
31
+ @logger.debug "capability: #{capability.inspect}"
19
32
  if capability.detect {|c| c =~ /AUTH=(CRAM|DIGEST)-MD5/}
20
- # puts "loging in with #{auth_mech}"
33
+ @logger.debug "loging in with #{auth_mech}"
21
34
  self.connection.authenticate(auth_mech,username,password)
22
35
  else
23
- # puts "plain login"
36
+ @logger.debug "plain login"
24
37
  self.connection.login(username,password) rescue nil
25
38
  end
26
39
  end
27
40
 
28
41
  def folder_list
42
+ @logger.debug "folder_list"
29
43
  connect if connection.nil?
30
44
  if folders_to_archive.is_a? Array
31
45
  folders = folders_to_archive.map {|f| connection.list('',f)}
@@ -39,25 +53,29 @@ module ImapArchiver
39
53
  end
40
54
 
41
55
  def start
56
+ @logger.debug "start"
42
57
  folder_list.each do |folder|
58
+ @logger.debug "starting folder #{folder}"
43
59
  since_date = Date.today.months_ago(3).beginning_of_month
44
- before_date= Date.today.months_ago(3).end_of_month
60
+ before_date= Date.today.months_ago(2).beginning_of_month
45
61
  archive_folder_between_dates(folder.name,since_date,before_date) #if folder.name =~ /^Public Folders\/Team\//
46
62
  end
47
63
  end
48
64
 
49
65
  def archive_folder_between_dates(folder, since_date, before_date)
66
+ @logger.debug "archive_folder_between_dates #{folder}, #{since_date}, #{before_date}"
50
67
  tmp_folder = Pathname.new(folder).relative_path_from(Pathname.new(base_folder)).to_s
51
68
  current_archive_folder = "#{archive_folder}/#{tmp_folder}/#{since_date.strftime("%b %Y")}"
52
- # puts archive_folder
69
+ @logger.debug "archiving to #{archive_folder}"
53
70
  conditions = ["SINCE", since_date.strftime("%d-%b-%Y"), "BEFORE", before_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]
71
+ @logger.debug conditions.join(" ")
54
72
  retry_count = 0
55
73
  begin
56
74
  connection.select(folder)
57
75
  # puts "will search 1"
58
76
  msgs_to_archive = connection.search(conditions)
59
77
  if msgs_to_archive.size > 0
60
- # puts "will archive #{msgs_to_archive.size} messages"
78
+ @logger.debug "will archive #{msgs_to_archive.size} messages"
61
79
  if connection.list("",current_archive_folder).nil?
62
80
  connection.create(current_archive_folder)
63
81
  if connection.capability.include?("ACL")
@@ -72,11 +90,12 @@ module ImapArchiver
72
90
  connection.expunge
73
91
  end
74
92
  if connection.search(["BEFORE", since_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).size > 0
75
- archive_folder_between_dates(folder,since_date.months_ago(1), since_date-1)
93
+ archive_folder_between_dates(folder,since_date.prev_month, since_date)
76
94
  end
77
95
  rescue IOError => e
78
96
  retry_count += 1
79
- # puts "retrying"
97
+ @logger.debug e.backtrace
98
+ @logger.debug "retrying"
80
99
  if retry_count < 3
81
100
  reconnect
82
101
  retry
@@ -98,8 +117,8 @@ module ImapArchiver
98
117
  end
99
118
  end
100
119
 
101
- def self.run(config_file)
120
+ def self.run(config_file,debug=false)
102
121
  self.new(config_file).start
103
122
  end
104
123
  end
105
- end
124
+ end
@@ -6,7 +6,8 @@ module ImapArchiver
6
6
 
7
7
  # NOTE: the option -p/--path= is given as an example, and should be replaced in your application.
8
8
  options = {
9
- :config_file => "~/.imap_archiver.rb"
9
+ :config_file => "~/.imap_archiver.rb",
10
+ :debug => false
10
11
  }
11
12
  mandatory_options = %w( )
12
13
 
@@ -19,6 +20,7 @@ module ImapArchiver
19
20
  opts.separator ""
20
21
  opts.on("-h", "--help",
21
22
  "Show this help message.") { stdout.puts opts; exit }
23
+ opts.on("-d", "--debug", "Enable debugging.") { options[:debug] = true}
22
24
  opts.on("-F PATH", "", String, "Configuration file", "Default: ~/.imap_archiver.yml"){|arg| options[:config_file] = arg}
23
25
  opts.parse!(arguments)
24
26
 
@@ -28,9 +30,9 @@ module ImapArchiver
28
30
  end
29
31
 
30
32
  # Config.load_config(options[:config_file])
31
- Archiver.run(options[:config_file])
33
+ Archiver.run(options[:config_file],options[:debug])
32
34
 
33
35
  return 0
34
36
  end
35
37
  end
36
- end
38
+ end
data/spec/cli_spec.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  describe ImapArchiver::CLI do
3
3
  it "should start the archiver with the default config file if no options are given" do
4
- ImapArchiver::Archiver.expects(:run).with('~/.imap_archiver.rb')
4
+ ImapArchiver::Archiver.expects(:run).with('~/.imap_archiver.rb',false)
5
5
  ImapArchiver::CLI.execute(STDOUT,STDIN,[])
6
6
  end
7
7
 
@@ -11,6 +11,7 @@ describe ImapArchiver::CLI do
11
11
  Options are:
12
12
 
13
13
  -h, --help Show this help message.
14
+ -d, --debug Enable debugging.
14
15
  -F PATH
15
16
  Configuration file
16
17
  Default: ~/.imap_archiver.yml
@@ -23,7 +24,7 @@ Options are:
23
24
  end
24
25
 
25
26
  it "should load the given config file" do
26
- ImapArchiver::Archiver.expects(:run).with('/tmp/imap_archiver.rb')
27
+ ImapArchiver::Archiver.expects(:run).with('/tmp/imap_archiver.rb',false)
27
28
  ImapArchiver::CLI.execute(STDOUT,STDIN,%w(-F /tmp/imap_archiver.rb))
28
29
  end
29
- end
30
+ end
@@ -2,6 +2,6 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "ImapArchiver" do
4
4
  it "should read the correct version" do
5
- ImapArchiver::Version.should == "0.0.3"
5
+ ImapArchiver::Version.should == "0.0.5"
6
6
  end
7
7
  end
@@ -65,7 +65,7 @@ describe "imap_archiver" do
65
65
  @connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
66
66
  @connection.expects(:select).with('testfolder')
67
67
  # @connection.expects(:search).twice.returns([1,2],[])
68
- @connection.expects(:search).with(["SINCE", @archive_date.strftime("%d-%b-%Y"), "BEFORE", @archive_date.end_of_month.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([1,2])
68
+ @connection.expects(: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
69
  @connection.expects(:search).with(["BEFORE", @archive_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([])
70
70
 
71
71
  @connection.expects(:copy).with([1,2],"/Archive/test/testfolder/#{@archive_date.strftime("%b %Y")}")
@@ -87,10 +87,10 @@ describe "imap_archiver" do
87
87
  it "should search for messages older then the archiving period" do
88
88
  @connection.expects(:list).with("","*").returns([mock1=stub(:name=>'testfolder'),mock2=stub(:name=>'foldertest')])
89
89
  @connection.expects(:select).with('testfolder').twice
90
- @connection.expects(:search).with(["SINCE", @archive_date.strftime("%d-%b-%Y"), "BEFORE", @archive_date.end_of_month.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([1,2])
90
+ @connection.expects(: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
91
  @connection.expects(:search).with(["BEFORE", @archive_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([3,4])
92
92
  @archive_date = @archive_date.prev_month
93
- @connection.expects(:search).with(["SINCE", @archive_date.strftime("%d-%b-%Y"), "BEFORE", @archive_date.end_of_month.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([1,2])
93
+ @connection.expects(: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
94
  @connection.expects(:search).with(["BEFORE", @archive_date.strftime("%d-%b-%Y"), "SEEN", "NOT", "FLAGGED"]).returns([])
95
95
 
96
96
  ImapArchiver::CLI.execute(STDOUT,STDIN,["-F",@config_file.path])
@@ -137,4 +137,4 @@ describe "imap_archiver" do
137
137
  ImapArchiver::CLI.execute(STDOUT,STDIN,["-F",@config_file.path])
138
138
  end
139
139
  end
140
- end
140
+ 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: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jelle Helsen
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-22 00:00:00 +01:00
18
+ date: 2011-02-05 00:00:00 +01:00
19
19
  default_executable: imap_archiver
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency