ruby-gmail 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.tar.gz.sig CHANGED
Binary file
data/History.txt CHANGED
@@ -1,10 +1,23 @@
1
+ === 0.0.5 / 2009-12-16
2
+
3
+ * 1 bugfix
4
+
5
+ * Fixed IMAP initializer to work with Ruby 1.9's net/imap
6
+
7
+ * 4 minor enhancements
8
+
9
+ * Better logout depending on the IMAP connection itself
10
+ * Added MIME::Message#text and MIME::Message#html for easier access to an email body
11
+ * Improved the MIME-parsing API slightly
12
+ * Added some tests
13
+
1
14
  === 0.0.4 / 2009-11-30
2
15
 
3
16
  * 4 minor enhancement
4
17
 
5
18
  * Added label creation (thanks to Justin Perkins / http://github.com/justinperkins)
6
19
  * Made the gem login automatically when first needed
7
- * Added an optional block on the Gmail.new object that will login and logout for you.
20
+ * Added an optional block on the Gmail.new object that will login and logout for you
8
21
  * Added several search options (thanks to Mikkel Malmberg / http://github.com/mikker)
9
22
 
10
23
  === 0.0.3 / 2009-11-19
@@ -21,7 +34,7 @@
21
34
 
22
35
  * 1 minor enhancement
23
36
 
24
- * Made all of the examples in the README possible.
37
+ * Made all of the examples in the README possible
25
38
 
26
39
  === 0.0.1 / 2009-11-18
27
40
 
data/lib/gmail.rb CHANGED
@@ -3,7 +3,7 @@ require 'net/smtp'
3
3
  require 'smtp_tls'
4
4
 
5
5
  class Gmail
6
- VERSION = '0.0.4'
6
+ VERSION = '0.0.5'
7
7
 
8
8
  class NoLabel < RuntimeError; end
9
9
 
@@ -18,9 +18,9 @@ class Gmail
18
18
  end
19
19
  meta.username = username =~ /@/ ? username : username + '@gmail.com'
20
20
  meta.password = password
21
- @imap = Net::IMAP.new('imap.gmail.com',993,true)
21
+ @imap = Net::IMAP.new('imap.gmail.com',993,true,nil,false)
22
22
  if block_given?
23
- @connected = true if @imap.login(username, password)
23
+ @imap.login(username, password)
24
24
  yield self
25
25
  logout
26
26
  end
@@ -37,16 +37,16 @@ class Gmail
37
37
  end
38
38
  # Accessor for @imap, but ensures that it's logged in first.
39
39
  def imap
40
- if !@connected
40
+ if @imap.disconnected?
41
41
  meta = class << self; self end
42
- @connected = true if @imap.login(meta.username, meta.password)
43
- at_exit { logout if @connected } # Set up auto-logout for later.
42
+ @imap.login(meta.username, meta.password)
43
+ at_exit { logout } # Set up auto-logout for later.
44
44
  end
45
45
  @imap
46
46
  end
47
47
  # Log out of gmail
48
48
  def logout
49
- @connected = false if @imap.logout
49
+ @imap.logout unless @imap.disconnected?
50
50
  end
51
51
 
52
52
  def create_label(name)
data/lib/gmail/message.rb CHANGED
@@ -6,6 +6,7 @@ class Gmail
6
6
  @mailbox = mailbox
7
7
  @uid = uid
8
8
  end
9
+
9
10
  def inspect
10
11
  "<#Message:#{object_id} mailbox=#{@mailbox.name}#{' uid='+@uid.to_s if @uid}#{' message_id='+@message_id.to_s if @message_id}>"
11
12
  end
@@ -14,6 +15,7 @@ class Gmail
14
15
  def uid
15
16
  @uid ||= @gmail.imap.uid_search(['HEADER', 'Message-ID', message_id])[0]
16
17
  end
18
+
17
19
  def message_id
18
20
  @message_id || begin
19
21
  @gmail.in_mailbox(@mailbox) do
@@ -22,6 +24,7 @@ class Gmail
22
24
  end
23
25
  @message_id
24
26
  end
27
+
25
28
  def body
26
29
  @body ||= @gmail.in_mailbox(@mailbox) do
27
30
  @gmail.imap.uid_fetch(uid, "RFC822")[0].attr["RFC822"]
@@ -39,6 +42,7 @@ class Gmail
39
42
  @gmail.imap.uid_store(uid, "+FLAGS", [flg])
40
43
  end
41
44
  end
45
+
42
46
  def unflag(flg)
43
47
  @gmail.in_mailbox(@mailbox) do
44
48
  @gmail.imap.uid_store(uid, "-FLAGS", [flg])
@@ -58,10 +62,12 @@ class Gmail
58
62
  move_to('[Gmail]/Spam')
59
63
  end
60
64
  end
65
+
61
66
  def delete!
62
67
  @mailbox.messages.delete(uid)
63
68
  flag(:Deleted)
64
69
  end
70
+
65
71
  def label(name)
66
72
  @gmail.in_mailbox(@mailbox) do
67
73
  begin
@@ -71,6 +77,7 @@ class Gmail
71
77
  end
72
78
  end
73
79
  end
80
+
74
81
  def label!(name)
75
82
  @gmail.in_mailbox(@mailbox) do
76
83
  begin
@@ -82,13 +89,16 @@ class Gmail
82
89
  end
83
90
  end
84
91
  end
92
+
85
93
  # We're not sure of any 'labels' except the 'mailbox' we're in at the moment.
86
94
  # Research whether we can find flags that tell which other labels this email is a part of.
87
95
  # def remove_label(name)
88
96
  # end
97
+
89
98
  def move_to(name)
90
99
  label(name) && delete!
91
100
  end
101
+
92
102
  def archive!
93
103
  move_to('[Gmail]/All Mail')
94
104
  end
data/lib/mime/entity.rb CHANGED
@@ -12,7 +12,7 @@ module MIME
12
12
  class Entity
13
13
  def initialize(arg=nil)
14
14
  if arg.is_a?(String)
15
- @raw = arg
15
+ @raw = arg.gsub(/\r\r+/, "\r").gsub(/([^\r])\n/, "\\1\r\n") # normalizes end-of-line characters
16
16
  from_parsed(IETF::RFC2045.parse_rfc2045_from(@raw))
17
17
  elsif arg.is_a?(Hash)
18
18
  @headers = arg
@@ -98,7 +98,7 @@ module MIME
98
98
  $1
99
99
  end
100
100
  end
101
- attr_accessor :encoding
101
+ attr_writer :encoding
102
102
  def encoding
103
103
  @encoding ||= headers['content-transfer-encoding'] || nil
104
104
  end
@@ -158,6 +158,8 @@ module MIME
158
158
  @content.unpack('M')[0]
159
159
  when 'base64'
160
160
  @content.unpack('m')[0]
161
+ # when '7bit'
162
+ # # should get this 7bit encoding done too...
161
163
  else
162
164
  @content
163
165
  end
@@ -0,0 +1,72 @@
1
+ require 'test_helper'
2
+
3
+ class GmailTest < Test::Unit::TestCase
4
+ def test_initialize
5
+ imap = mock('imap')
6
+ Net::IMAP.expects(:new).with('imap.gmail.com', 993, true, nil, false).returns(imap)
7
+ gmail = Gmail.new('test', 'password')
8
+ end
9
+
10
+ def test_imap_does_login
11
+ setup_mocks(:at_exit => true)
12
+
13
+ @imap.expects(:disconnected?).at_least_once.returns(true).then.returns(false)
14
+ @imap.expects(:login).with('test@gmail.com', 'password')
15
+ @gmail.imap
16
+ end
17
+
18
+ def test_imap_does_login_only_once
19
+ setup_mocks(:at_exit => true)
20
+
21
+ @imap.expects(:disconnected?).at_least_once.returns(true).then.returns(false)
22
+ @imap.expects(:login).with('test@gmail.com', 'password')
23
+ @gmail.imap
24
+ @gmail.imap
25
+ @gmail.imap
26
+ end
27
+
28
+ def test_imap_does_login_without_appending_gmail_domain
29
+ setup_mocks(:at_exit => true)
30
+
31
+ @imap.expects(:disconnected?).at_least_once.returns(true).then.returns(false)
32
+ @imap.expects(:login).with('test@gmail.com', 'password')
33
+ @gmail.imap
34
+ end
35
+
36
+ def test_imap_logs_out
37
+ setup_mocks(:at_exit => true)
38
+
39
+ @imap.expects(:disconnected?).at_least_once.returns(true).then.returns(false)
40
+ @imap.expects(:login).with('test@gmail.com', 'password')
41
+ @gmail.imap
42
+ @imap.expects(:logout).returns(true)
43
+ @gmail.logout
44
+ end
45
+
46
+ def test_imap_logout_does_nothing_if_not_logged_in
47
+ setup_mocks
48
+
49
+ @imap.expects(:disconnected?).returns(true)
50
+ @imap.expects(:logout).never
51
+ @gmail.logout
52
+ end
53
+
54
+ def test_imap_calls_create_label
55
+ setup_mocks(:at_exit => true)
56
+ @imap.expects(:disconnected?).at_least_once.returns(true).then.returns(false)
57
+ @imap.expects(:login).with('test@gmail.com', 'password')
58
+ @imap.expects(:create).with('foo')
59
+ @gmail.create_label('foo')
60
+ end
61
+
62
+ private
63
+ def setup_mocks(options = {})
64
+ options = {:at_exit => false}.merge(options)
65
+ @imap = mock('imap')
66
+ Net::IMAP.expects(:new).with('imap.gmail.com', 993, true, nil, false).returns(@imap)
67
+ @gmail = Gmail.new('test@gmail.com', 'password')
68
+
69
+ # need this for the at_exit block that auto-exits after this test method completes
70
+ @imap.expects(:logout).at_least(0) if options[:at_exit]
71
+ end
72
+ end
@@ -0,0 +1,4 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'mocha'
4
+ require 'gmail'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-gmail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Parker
@@ -30,7 +30,7 @@ cert_chain:
30
30
  teST6sOe8lUhZQ==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2009-12-10 00:00:00 -05:00
33
+ date: 2009-12-16 00:00:00 -05:00
34
34
  default_executable:
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
@@ -108,5 +108,6 @@ rubygems_version: 1.3.5
108
108
  signing_key:
109
109
  specification_version: 3
110
110
  summary: A Rubyesque interface to Gmail, with all the tools you'll need
111
- test_files: []
112
-
111
+ test_files:
112
+ - test/test_gmail.rb
113
+ - test/test_helper.rb
metadata.gz.sig CHANGED
Binary file