redimap 0.5.0 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ff106fa18b156a8c236ea26e3ba03644d023bf8
4
- data.tar.gz: dc152c2d823229d6096defd661002cdb960c32f8
3
+ metadata.gz: 4c929905574855a252e70b27eebd917bbc2e2d5f
4
+ data.tar.gz: 14cdb430a27e403bad32c1a0345ab614143fc908
5
5
  SHA512:
6
- metadata.gz: b8f18cc18df4e57895a8cec72c54531e6f248603c684f6e914a38eab81bb5b362df3ae4f95014b9a776797444310ff2afa6ac0e41ea451898a87e33d674de8c7
7
- data.tar.gz: 83e38fac9519fbfd59a914a332d5ef8ca23fb73a680f8148d78c591747608ef13e6a660a6f8a82eb22b9643503847e7b5e327cc3b1334c188c0dc5a00f393d19
6
+ metadata.gz: d3466b8be78651950fca40f63dac8db31213410178e7441330df2c241d136ccc85eb1cfe6179802403eab16f2d76942305fe2a6786667ecd45d3a15cd98fcf1b
7
+ data.tar.gz: 4025d34af7d0e5c956ef1669cb2ae446e6647e72b266d00ee802173b54f40f21316c2902277d2d9dcc25ade2198517a7d15cc0c95881ee77f8b2b4e106137bb8
data/README.md CHANGED
@@ -26,29 +26,9 @@ Most settings have defaults, but it is necessary to at least set up IMAP.
26
26
 
27
27
  Check and queue new messages and quit:
28
28
 
29
- $ bundle exec redimap --host mail.example.com --user a@example.com --password helpimacarrot
29
+ $ bundle exec redimap --imap-host mail.example.com --imap-username a@example.com --imap-password helpimacarrot
30
30
 
31
- It is also possible to set config using environment variables. Command-line
32
- options override environment variables. Note that environment variables are in
33
- lowercase, and are named differently to command-line parameters.
34
-
35
- $ imap_host=mail.example.com imap_user=a@example.com imap_password=helpimacarrot bundle exec redimap
36
-
37
- The complete list of available environment variables is:
38
-
39
- eternal
40
- log_level
41
- imap_host
42
- imap_port
43
- imap_username
44
- imap_password
45
- imap_mailboxes
46
- redis_url
47
- redis_ns_redimap
48
- redis_ns_queue
49
- polling_interval
50
-
51
- Use `--eternal` or `eternal=1` to run eternally.
31
+ Use `--eternal` to run eternally.
52
32
 
53
33
 
54
34
  ## Contributions
@@ -60,6 +40,17 @@ doing or planning to do, or if you get stuck on something, then just wave. :)
60
40
 
61
41
  Do whatever makes you happy. We'll probably still like you. :)
62
42
 
43
+ Tests are written using [minitest](https://github.com/seattlerb/minitest), which
44
+ is included by default in Ruby 1.9 onwards. To run all tests in a pretty way:
45
+
46
+ ruby -rminitest/pride test/redimap.rb
47
+
48
+ Or, if you're of that turn of mind, use [TURN](https://github.com/TwP/turn)
49
+ (`gem install turn`):
50
+
51
+ turn test/redimap.rb
52
+
53
+
63
54
  ## Blessing
64
55
 
65
56
  May you find peace, and help others to do likewise.
data/bin/redimap CHANGED
@@ -67,7 +67,7 @@ OptionParser.new do |opts|
67
67
  opts.separator "Other:"
68
68
 
69
69
  opts.on("-v", "--[no-]verbose", "Be somewhat verbose") do |o|
70
- options[:log_level] = 'DEBUG'
70
+ options[:verbose] = o
71
71
  end
72
72
 
73
73
  opts.on_tail("--help", "Show this message") do
@@ -85,31 +85,20 @@ end.parse!
85
85
  # = Configure
86
86
 
87
87
  Redimap.configure do |c|
88
- %w[
89
- log_level
90
- imap_host
91
- imap_port
92
- imap_username
93
- imap_password
94
- imap_mailboxes
95
- redis_url
96
- redis_ns_redimap
97
- redis_ns_queue
98
- polling_interval
99
- ].each do |e_k|
100
- e_v = case e_k
101
- when 'imap_port'
102
- ENV[e_k].to_i
103
- when 'imap_mailboxes'
104
- ENV[e_k].split(',')
105
- else
106
- ENV[e_k]
107
- end if ENV[e_k] # Read env var if set, parsing as for params.
108
-
109
- e_v = options[e_k.to_sym] if options[e_k.to_sym] # Override from params.
110
-
111
- c.instance_variable_set("@#{e_k}", e_v) if e_v # Only set extant settings.
112
- end
88
+ c.log_level = 'DEBUG' if options[:verbose]
89
+
90
+ c.imap_host = options[:imap_host] if options[:imap_host]
91
+ c.imap_port = options[:imap_port] if options[:imap_port]
92
+ c.imap_username = options[:imap_username] if options[:imap_username]
93
+ c.imap_password = options[:imap_password] if options[:imap_password]
94
+
95
+ c.imap_mailboxes = options[:imap_mailboxes] if options[:imap_mailboxes]
96
+
97
+ c.redis_url = options[:redis_url] if options[:redis_url]
98
+ c.redis_ns_redimap = options[:redis_ns_redimap] if options[:redis_ns_redimap]
99
+ c.redis_ns_queue = options[:redis_ns_queue] if options[:redis_ns_queue]
100
+
101
+ c.polling_interval = options[:polling_interval] if options[:polling_interval]
113
102
  end
114
103
 
115
104
  @logger = Redimap.logger
@@ -120,7 +109,7 @@ end
120
109
  loop do
121
110
  Redimap.queue_new_mailboxes_uids
122
111
 
123
- break unless (options[:eternal] || ENV['eternal'].to_i == 1)
112
+ break unless options[:eternal]
124
113
 
125
114
  @logger.debug { "Snoring for #{Redimap.config.polling_interval} s" }
126
115
 
data/lib/redimap.rb CHANGED
@@ -1,5 +1,65 @@
1
+ require 'logger'
2
+
1
3
  require_relative 'redimap/version'
2
4
  require_relative 'redimap/config'
3
- require_relative 'redimap/base'
5
+
4
6
  require_relative 'redimap/imap_conn'
5
7
  require_relative 'redimap/redis_conn'
8
+
9
+
10
+ module Redimap
11
+
12
+ extend self
13
+
14
+ def config
15
+ @config ||= Redimap::Config.new
16
+ end
17
+
18
+ def configure
19
+ yield config
20
+
21
+ Redimap.logger.debug { "Configured #{Redimap.config.to_s}" }
22
+ end
23
+
24
+ def logger
25
+ unless @logger
26
+ @logger = Logger.new($stdout)
27
+
28
+ @logger.level = Logger.const_get(Redimap.config.log_level)
29
+ @logger.progname = :Redimap
30
+ end
31
+
32
+ @logger
33
+ end
34
+
35
+ def queue_new_mailboxes_uids
36
+ Redimap.logger.info { "Queueing new mailboxes UIDs" }
37
+
38
+ Redimap::ImapConn.new do |imap|
39
+ Redimap::RedisConn.new do |redis|
40
+ begin
41
+ Redimap.config.imap_mailboxes.each do |mailbox|
42
+ last_seen_uid = redis.get_mailbox_uid(mailbox)
43
+
44
+ Redimap.logger.debug { "Last saw #{mailbox}##{last_seen_uid}" }
45
+
46
+ unseen_uids = imap.read_mailbox(mailbox, last_seen_uid)
47
+
48
+ unseen_uids.each do |uid|
49
+ redis.queue_mailbox_uid(mailbox, uid)
50
+
51
+ redis.set_mailbox_uid(mailbox, uid)
52
+ end
53
+
54
+ Redimap.logger.info { "Queued #{unseen_uids.count} UIDs from #{mailbox}" }
55
+ end
56
+ rescue Net::IMAP::Error, Redis::BaseError => e
57
+ Redimap.logger.error { e.to_s }
58
+
59
+ return
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ end
@@ -1,6 +1,3 @@
1
- require 'json'
2
-
3
-
4
1
  module Redimap
5
2
  class Config
6
3
 
@@ -48,7 +45,7 @@ module Redimap
48
45
  :redis_ns_queue => @redis_ns_queue,
49
46
 
50
47
  :polling_interval => @polling_interval,
51
- }
48
+ }.to_s
52
49
  end
53
50
 
54
51
  end
@@ -5,8 +5,6 @@ module Redimap
5
5
  class ImapConn
6
6
 
7
7
  def initialize
8
- @logger = Redimap.logger
9
-
10
8
  begin
11
9
  @imap = Net::IMAP.new(Redimap.config.imap_host, {
12
10
  :port => Redimap.config.imap_port,
@@ -15,7 +13,7 @@ module Redimap
15
13
 
16
14
  @imap.login(Redimap.config.imap_username, Redimap.config.imap_password)
17
15
  rescue Net::IMAP::NoResponseError => e
18
- @logger.error { e.to_s }
16
+ Redimap.logger.error { e.to_s }
19
17
 
20
18
  return
21
19
  end
@@ -10,22 +10,20 @@ module Redimap
10
10
  @@RESCUE_CLASS = 'RedimapJob'
11
11
 
12
12
  def initialize
13
- @logger = Redimap.logger
14
-
15
13
  begin
16
14
  @redis = Redis.connect(:url => Redimap.config.redis_url)
17
15
 
18
16
  @redis.ping
19
17
  rescue Redis::CannotConnectError => e
20
- @logger.error { e.to_s }
18
+ Redimap.logger.error { e.to_s }
21
19
 
22
20
  return
23
21
  end
24
22
 
25
23
  @KEYS = {
26
24
  :redimap_mailboxes => "#{Redimap.config.redis_ns_redimap}:mailboxes",
27
- :rescue_queues => "#{Redimap.config.redis_ns_queue}:queues",
28
- :rescue_queue_redimap => "#{Redimap.config.redis_ns_queue}:queue:#{@@RESCUE_QUEUE}",
25
+ :resque_queues => "#{Redimap.config.redis_ns_queue}:queues",
26
+ :resque_queue_redimap => "#{Redimap.config.redis_ns_queue}:queue:#{@@RESCUE_QUEUE}",
29
27
  }.freeze
30
28
 
31
29
  if block_given?
@@ -48,9 +46,9 @@ module Redimap
48
46
  end
49
47
 
50
48
  def queue_mailbox_uid(mailbox, uid)
51
- @redis.sadd(@KEYS[:rescue_queues], @@RESCUE_QUEUE)
49
+ @redis.sadd(@KEYS[:resque_queues], @@RESCUE_QUEUE)
52
50
 
53
- @redis.rpush(@KEYS[:rescue_queue_redimap], payload(mailbox, uid))
51
+ @redis.rpush(@KEYS[:resque_queue_redimap], payload(mailbox, uid))
54
52
  end
55
53
 
56
54
  private
@@ -1,5 +1,5 @@
1
1
  module Redimap
2
2
 
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
 
5
5
  end
data/redimap.gemspec CHANGED
@@ -25,5 +25,4 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 1.3"
27
27
  spec.add_development_dependency "rake"
28
- spec.add_development_dependency "rspec"
29
28
  end
data/test/redimap.rb ADDED
@@ -0,0 +1,4 @@
1
+ require_relative 'redimap/version'
2
+ require_relative 'redimap/config'
3
+ require_relative 'redimap/imap_conn'
4
+ require_relative 'redimap/redis_conn'
@@ -0,0 +1,52 @@
1
+ require 'minitest/autorun'
2
+
3
+ require_relative '../../lib/redimap/config'
4
+
5
+
6
+ describe Redimap::Config do
7
+
8
+ describe "default" do
9
+ before do
10
+ @config = Redimap::Config.new
11
+ end
12
+
13
+ it "sets log_level to INFO" do
14
+ @config.log_level.must_equal 'INFO'
15
+ end
16
+
17
+ it "sets imap_port to 993" do
18
+ @config.imap_port.must_equal 993
19
+ end
20
+
21
+ it "sets imap_mailboxes to INBOX" do
22
+ @config.imap_mailboxes.must_equal ['INBOX']
23
+ end
24
+
25
+ it "sets redis_url to redis://127.0.0.1:6379/0" do
26
+ @config.redis_url.must_equal 'redis://127.0.0.1:6379/0'
27
+ end
28
+
29
+ it "sets redis_ns_redimap to redimap" do
30
+ @config.redis_ns_redimap.must_equal 'redimap'
31
+ end
32
+
33
+ it "sets redis_ns_queue to resque" do
34
+ @config.redis_ns_queue.must_equal 'resque'
35
+ end
36
+
37
+ it "sets polling_interval to 60" do
38
+ @config.polling_interval.must_equal 60
39
+ end
40
+ end
41
+
42
+ describe "#to_s" do
43
+ before do
44
+ @config = Redimap::Config.new
45
+ end
46
+
47
+ it "stringifies hash of config" do
48
+ @config.to_s.must_equal '{:log_level=>"INFO", :imap_host=>nil, :imap_port=>993, :imap_username=>nil, :imap_mailboxes=>["INBOX"], :redis_url=>"redis://127.0.0.1:6379/0", :redis_ns_redimap=>"redimap", :redis_ns_queue=>"resque", :polling_interval=>60}'
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,115 @@
1
+ require 'minitest/autorun'
2
+
3
+ require_relative '../../lib/redimap'
4
+ require_relative '../../lib/redimap/imap_conn'
5
+
6
+
7
+ describe Redimap::ImapConn do
8
+
9
+ def imap_conn_new
10
+ @net_imap = Minitest::Mock.new
11
+ @net_imap.expect(:login, nil, [nil, nil])
12
+
13
+ Net::IMAP.stub(:new, @net_imap) do
14
+ @imap_conn = Redimap::ImapConn.new
15
+ end
16
+ end
17
+
18
+ describe "#initialize" do
19
+ before do
20
+ @config = Redimap::Config.new
21
+
22
+ @net_imap = Minitest::Mock.new
23
+ end
24
+
25
+ it "connects with correct imap_username,imap_password" do
26
+ @net_imap.expect(:login, nil, ["schoenberg@example.com", "DerKrankeMond"])
27
+
28
+ @config.imap_username = "schoenberg@example.com"
29
+ @config.imap_password = "DerKrankeMond"
30
+
31
+ Net::IMAP.stub(:new, @net_imap) do
32
+ Redimap.stub(:config, @config) do
33
+ @imap_conn = Redimap::ImapConn.new
34
+ end
35
+ end
36
+
37
+ @net_imap.verify
38
+ end
39
+
40
+ it "connects with correct imap_host" do
41
+ @net_imap.expect(:login, nil, [nil, nil])
42
+
43
+ @config.imap_host = 'arnold.example.com'
44
+
45
+ Net::IMAP.stub(:new, lambda { |imap_host, params|
46
+ imap_host.must_equal('arnold.example.com')
47
+
48
+ @net_imap
49
+ }) do
50
+ Redimap.stub(:config, @config) do
51
+ @imap_conn = Redimap::ImapConn.new
52
+ end
53
+ end
54
+ end
55
+
56
+ it "connects with correct imap_port,ssl" do
57
+ @net_imap.expect(:login, nil, [nil, nil])
58
+
59
+ @config.imap_port = 666
60
+
61
+ Net::IMAP.stub(:new, lambda { |imap_host, params|
62
+ params.must_equal({ :port => 666, :ssl => true })
63
+
64
+ @net_imap
65
+ }) do
66
+ Redimap.stub(:config, @config) do
67
+ @imap_conn = Redimap::ImapConn.new
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "#close" do
74
+ before do
75
+ imap_conn_new
76
+ end
77
+
78
+ it "disconnects from mailbox" do
79
+ @net_imap.expect(:logout, nil)
80
+ @net_imap.expect(:disconnect, nil)
81
+
82
+ @imap_conn.close
83
+
84
+ @net_imap.verify
85
+ end
86
+ end
87
+
88
+ describe "#read_mailbox" do
89
+ before do
90
+ imap_conn_new
91
+ end
92
+
93
+ it "gets all INBOX uids when default" do
94
+ @net_imap.expect(:select, nil, ['INBOX'])
95
+ @net_imap.expect(:uid_search, [1, 2, 3], ['1:*'])
96
+
97
+ @imap_conn.read_mailbox.must_equal [1, 2, 3]
98
+ end
99
+
100
+ it "gets all Sent uids when mailbox:Sent" do
101
+ @net_imap.expect(:select, nil, ['Sent'])
102
+ @net_imap.expect(:uid_search, [1, 2, 3], ['1:*'])
103
+
104
+ @imap_conn.read_mailbox('Sent').must_equal [1, 2, 3]
105
+ end
106
+
107
+ it "gets new Sent uids when mailbox:Sent,last_seen_uid:2" do
108
+ @net_imap.expect(:select, nil, ['Sent'])
109
+ @net_imap.expect(:uid_search, [1, 2, 3], ['3:*'])
110
+
111
+ @imap_conn.read_mailbox('Sent', 2).must_equal [3]
112
+ end
113
+ end
114
+
115
+ end
@@ -0,0 +1,127 @@
1
+ require 'json'
2
+
3
+ require 'minitest/autorun'
4
+
5
+ require_relative '../../lib/redimap'
6
+ require_relative '../../lib/redimap/redis_conn'
7
+
8
+
9
+ describe Redimap::RedisConn do
10
+
11
+ def redis_conn_new
12
+ @redis = Minitest::Mock.new
13
+ @redis.expect(:ping, nil)
14
+
15
+ Redis.stub(:connect, @redis) do
16
+ @redis_conn = Redimap::RedisConn.new
17
+ end
18
+ end
19
+
20
+ describe "#initialize" do
21
+ before do
22
+ @config = Redimap::Config.new
23
+
24
+ @redis = Minitest::Mock.new
25
+ @redis.expect(:ping, nil)
26
+ end
27
+
28
+ it "connects with correct url" do
29
+ @config.redis_url = 'redis://bminor.example.com:6379/7'
30
+
31
+ Redis.stub(:connect, lambda { |params|
32
+ params.must_equal({ :url => 'redis://bminor.example.com:6379/7' })
33
+
34
+ @redis
35
+ }) do
36
+ Redimap.stub(:config, @config) do
37
+ @redis_conn = Redimap::RedisConn.new
38
+ end
39
+ end
40
+ end
41
+
42
+ it "sets up KEYS semi-constants" do
43
+ @config.redis_ns_redimap = 'reetabix'
44
+ @config.redis_ns_queue = 'magicmango'
45
+
46
+ Redimap.stub(:config, @config) do
47
+ redis_conn_new
48
+ end
49
+
50
+ @redis_conn.instance_variable_get("@KEYS").must_equal({
51
+ :redimap_mailboxes => 'reetabix:mailboxes',
52
+ :resque_queues => 'magicmango:queues',
53
+ :resque_queue_redimap => 'magicmango:queue:redimap',
54
+ })
55
+ end
56
+ end
57
+
58
+ describe "#close" do
59
+ before do
60
+ redis_conn_new
61
+ end
62
+
63
+ it "disconnects" do
64
+ @redis.expect(:quit, nil)
65
+
66
+ @redis_conn.close
67
+
68
+ @redis.verify
69
+ end
70
+ end
71
+
72
+ describe "#get_mailbox_uid" do
73
+ before do
74
+ redis_conn_new
75
+ end
76
+
77
+ it "gets uid for mailbox when existing" do
78
+ @redis.expect(:hget, 17, ['redimap:mailboxes', 'Badger'])
79
+
80
+ @redis_conn.get_mailbox_uid('Badger').must_equal(17)
81
+ end
82
+
83
+ it "gets uid for mailbox when new" do
84
+ @redis.expect(:hget, nil, ['redimap:mailboxes', 'Badger'])
85
+
86
+ @redis_conn.get_mailbox_uid('Badger').must_equal(0)
87
+ end
88
+ end
89
+
90
+ describe "#set_mailbox_uid" do
91
+ before do
92
+ redis_conn_new
93
+ end
94
+
95
+ it "sets uid for mailbox" do
96
+ @redis.expect(:hset, nil, ['redimap:mailboxes', 'Ferret', 99])
97
+
98
+ @redis_conn.set_mailbox_uid('Ferret', 99)
99
+
100
+ @redis.verify
101
+ end
102
+ end
103
+
104
+ describe "#queue_mailbox_uid" do
105
+ before do
106
+ redis_conn_new
107
+ end
108
+
109
+ it "adds queue to set of queues and pushes job onto queue" do
110
+ @redis.expect(:sadd, nil, ['resque:queues', 'redimap'])
111
+ @redis.expect(:rpush, nil, ['resque:queue:redimap', {
112
+ 'class' => 'RedimapJob',
113
+ 'args' => ['Hedgehog', 49],
114
+ 'queue' => 'redimap',
115
+ 'retry' => true,
116
+ 'jid' => 'ohsorandom',
117
+ }.to_json])
118
+
119
+ SecureRandom.stub(:hex, 'ohsorandom') do
120
+ @redis_conn.queue_mailbox_uid('Hedgehog', 49)
121
+ end
122
+
123
+ @redis.verify
124
+ end
125
+ end
126
+
127
+ end
@@ -0,0 +1,12 @@
1
+ require 'minitest/autorun'
2
+
3
+ require_relative '../../lib/redimap/version'
4
+
5
+
6
+ describe "Redimap::VERSION" do
7
+
8
+ it "uses major.minor.patch" do
9
+ Redimap::VERSION.must_match /\A\d+\.\d+\.\d+\z/
10
+ end
11
+
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redimap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tiredpixel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-27 00:00:00.000000000 Z
11
+ date: 2013-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '>='
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
55
  description: |-
70
56
  Redimap provides a simple executable for polling mailboxes
71
57
  within an IMAP account. It keeps track of what it's seen using Redis. For new
@@ -87,16 +73,16 @@ files:
87
73
  - Rakefile
88
74
  - bin/redimap
89
75
  - lib/redimap.rb
90
- - lib/redimap/base.rb
91
76
  - lib/redimap/config.rb
92
77
  - lib/redimap/imap_conn.rb
93
78
  - lib/redimap/redis_conn.rb
94
79
  - lib/redimap/version.rb
95
80
  - redimap.gemspec
96
- - spec/lib/redimap/config_spec.rb
97
- - spec/lib/redimap/core_spec.rb
98
- - spec/lib/redimap/imap_conn_spec.rb
99
- - spec/spec_helper.rb
81
+ - test/redimap.rb
82
+ - test/redimap/config.rb
83
+ - test/redimap/imap_conn.rb
84
+ - test/redimap/redis_conn.rb
85
+ - test/redimap/version.rb
100
86
  homepage: https://github.com/tiredpixel/redimap
101
87
  licenses:
102
88
  - MIT
@@ -122,7 +108,8 @@ signing_key:
122
108
  specification_version: 4
123
109
  summary: Redimap polls IMAP account mailboxes and queues in Redis.
124
110
  test_files:
125
- - spec/lib/redimap/config_spec.rb
126
- - spec/lib/redimap/core_spec.rb
127
- - spec/lib/redimap/imap_conn_spec.rb
128
- - spec/spec_helper.rb
111
+ - test/redimap.rb
112
+ - test/redimap/config.rb
113
+ - test/redimap/imap_conn.rb
114
+ - test/redimap/redis_conn.rb
115
+ - test/redimap/version.rb
data/lib/redimap/base.rb DELETED
@@ -1,59 +0,0 @@
1
- require 'logger'
2
-
3
-
4
- module Redimap
5
-
6
- def self.config
7
- @config ||= Redimap::Config.new
8
- end
9
-
10
- def self.configure
11
- yield self.config
12
-
13
- Redimap.logger.debug { "Configured #{Redimap.config.to_s}" }
14
- end
15
-
16
- def self.logger
17
- unless @logger
18
- @logger = Logger.new($stdout)
19
-
20
- @logger.level = Logger.const_get(Redimap.config.log_level)
21
- @logger.progname = :Redimap
22
- end
23
-
24
- @logger
25
- end
26
-
27
- def self.queue_new_mailboxes_uids
28
- @logger = Redimap.logger
29
-
30
- @logger.info { "Queueing new mailboxes UIDs" }
31
-
32
- Redimap::ImapConn.new do |imap|
33
- Redimap::RedisConn.new do |redis|
34
- begin
35
- Redimap.config.imap_mailboxes.each do |mailbox|
36
- last_seen_uid = redis.get_mailbox_uid(mailbox)
37
-
38
- @logger.debug { "Last saw #{mailbox}##{last_seen_uid}" }
39
-
40
- unseen_uids = imap.read_mailbox(mailbox, last_seen_uid)
41
-
42
- unseen_uids.each do |uid|
43
- redis.queue_mailbox_uid(mailbox, uid)
44
-
45
- redis.set_mailbox_uid(mailbox, uid)
46
- end
47
-
48
- @logger.info { "Queued #{unseen_uids.count} UIDs from #{mailbox}" }
49
- end
50
- rescue Net::IMAP::Error, Redis::BaseError => e
51
- @logger.error { e.to_s }
52
-
53
- return
54
- end
55
- end
56
- end
57
- end
58
-
59
- end
@@ -1,97 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe Redimap::Config do
5
-
6
- context "Defaults" do
7
- it "log_level should default to INFO" do
8
- Redimap.config.log_level.should == "INFO"
9
- end
10
-
11
- it "imap_port should default to 993" do
12
- Redimap.config.imap_port.should == 993
13
- end
14
-
15
- it "imap_mailboxes should default to [INBOX]" do
16
- Redimap.config.imap_mailboxes.should == ['INBOX']
17
- end
18
-
19
- it "redis_url should default to redis://127.0.0.1:6379/0" do
20
- Redimap.config.redis_url.should == "redis://127.0.0.1:6379/0"
21
- end
22
-
23
- it "redis_ns_redimap should default to redimap" do
24
- Redimap.config.redis_ns_redimap.should == "redimap"
25
- end
26
-
27
- it "redis_ns_queue should default to resque" do
28
- Redimap.config.redis_ns_queue.should == "resque"
29
- end
30
-
31
- it "polling_interval should default to 60 seconds" do
32
- Redimap.config.polling_interval.should == 60
33
- end
34
- end
35
-
36
- context "Non-defaults" do
37
- before(:each) do
38
- Redimap.configure do |c|
39
- c.log_level = "WARN"
40
-
41
- c.imap_host = "imap.carrot.localhost"
42
- c.imap_port = 666
43
- c.imap_username = "Pachelbel"
44
- c.imap_password = "Canon"
45
-
46
- c.imap_mailboxes = ['INBOX', 'SENT']
47
-
48
- c.redis_url = "redis://127.0.0.1:6379/1"
49
- c.redis_ns_redimap = "brekyread"
50
- c.redis_ns_queue = "sidekiq"
51
-
52
- c.polling_interval = 300
53
- end
54
- end
55
-
56
- it "log_level should get set" do
57
- Redimap.config.log_level.should == "WARN"
58
- end
59
-
60
- it "imap_host should get set" do
61
- Redimap.config.imap_host.should == "imap.carrot.localhost"
62
- end
63
-
64
- it "imap_port should get set" do
65
- Redimap.config.imap_port.should == 666
66
- end
67
-
68
- it "imap_username should get set" do
69
- Redimap.config.imap_username.should == "Pachelbel"
70
- end
71
-
72
- it "imap_password should get set" do
73
- Redimap.config.imap_password.should == "Canon"
74
- end
75
-
76
- it "imap_mailboxes should get set" do
77
- Redimap.config.imap_mailboxes.should == ['INBOX', 'SENT']
78
- end
79
-
80
- it "redis_url should get set" do
81
- Redimap.config.redis_url.should == "redis://127.0.0.1:6379/1"
82
- end
83
-
84
- it "redis_ns_redimap should get set" do
85
- Redimap.config.redis_ns_redimap.should == "brekyread"
86
- end
87
-
88
- it "redis_ns_queue should get set" do
89
- Redimap.config.redis_ns_queue.should == "sidekiq"
90
- end
91
-
92
- it "polling_interval should get set" do
93
- Redimap.config.polling_interval.should == 300
94
- end
95
- end
96
-
97
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe Redimap do
5
-
6
- context "Constants" do
7
- it "VERSION should be like major.minor.patch" do
8
- Redimap::VERSION.should =~ /\A\d+\.\d+\.\d+\z/
9
- end
10
- end
11
-
12
- end
@@ -1,52 +0,0 @@
1
- require 'net/imap'
2
-
3
- require 'spec_helper'
4
-
5
-
6
- describe Redimap::ImapConn do
7
-
8
- before(:each) do
9
- @fake_net_imap = double(Net::IMAP)
10
-
11
- Net::IMAP.stub(:new).and_return(@fake_net_imap)
12
-
13
- @fake_net_imap.stub(:login)
14
- end
15
-
16
- context "#initialize" do
17
- it "should set imap as Net::IMAP" do
18
- Redimap::ImapConn.new.instance_variable_get('@imap').should == @fake_net_imap
19
- end
20
-
21
- it "should #close when block" do
22
- Redimap::ImapConn.new do |imap|
23
- imap.should_receive(:close)
24
- end
25
- end
26
- end
27
-
28
- context "#close" do
29
- before(:each) do
30
- @imap = Redimap::ImapConn.new
31
-
32
- @imap_imap = @imap.instance_variable_get('@imap')
33
- end
34
-
35
- it "should disconnect from IMAP" do
36
- @imap_imap.stub(:logout)
37
-
38
- @imap_imap.should_receive(:disconnect)
39
-
40
- @imap.close
41
- end
42
-
43
- it "should logout from IMAP" do
44
- @imap_imap.stub(:disconnect)
45
-
46
- @imap_imap.should_receive(:logout)
47
-
48
- @imap.close
49
- end
50
- end
51
-
52
- end
data/spec/spec_helper.rb DELETED
@@ -1,10 +0,0 @@
1
- require 'rspec/autorun'
2
-
3
- require File.expand_path("../../lib/redimap.rb", __FILE__)
4
-
5
- Dir[File.join("../../spec/support/**/*.rb")].each { |f| require f }
6
-
7
-
8
- RSpec.configure do |config|
9
-
10
- end