karthik-ruby-gmail 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NDIzM2RjNjAxMDM1MjVlODlkY2VmMWY5NjQ3MDVjZWMyOTM5MGMzOA==
5
- data.tar.gz: !binary |-
6
- MzM0OTg1YzdkOGFiYzhjMDU2YTQ2MjU5YTM4MDk4ZDQ1YjkyNzBiOA==
2
+ SHA1:
3
+ metadata.gz: a2db109d6fd679f2d827ad0ae62c50eecf1be252
4
+ data.tar.gz: e7ddfa43853d76f42ece898ac0d3de17e3a0df07
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YmUxMWNiMGY4NjM0ZTc0YmNlZTcwM2FhNmJhNzg0MjE0MDliNWE5MDEwMmY0
10
- NTg3ZjBhOTM0NzUxZjUwOThkNWQ3N2YzZDdjMTBkZmVhYjJiYjRhOTc2ODk1
11
- YzZlZTc0M2ZmNDRjNjJjNmEyMGE5ZTk3N2IyYTI5ODMzMTE3Njk=
12
- data.tar.gz: !binary |-
13
- MTM1YzE5NTI4NzIwNzBkZTA0N2Q5MGVhOWFiYWI0Y2JjYzE1YzVhYjYwMWFk
14
- MDJlYjRmMGY2NGU1MGY0Y2E5YjQ4NzEwYjZiNjMyYmQ5MzZlNGU2OGE1YjVm
15
- ZTk1ZmIxNGJjODNkODdhNTcyMzNiNjgzNDYwMjJlZGIzMjJlN2I=
6
+ metadata.gz: 0b159845574cf1ea98d2885d1583b1b2775b6e80bc6078efd516f694415c12cda8042d06d0d04c2c925a8a6c6c4e7505ec96a29817721a69ac768f175983d7d9
7
+ data.tar.gz: 664c4ad265476844821cf932ceb5780d12deb97a584cf6129423383e7ebcb95b87767f3f7f57456a638208aa02c14b56b1e53926711f4641f998d4fedf2b1869
@@ -1,75 +1,14 @@
1
- === 0.1.1 / 2010-05-11
2
1
 
3
- * 1 minor fix
2
+ === 1.0.1 / 04-04-2014
4
3
 
5
- * Added explicit tmail dependency in gemspec
6
- * Added better README tutorial content
4
+ * 1 minor fix and updated README
7
5
 
8
- === 0.0.9 / 2010-04-17
6
+ * Modified search by subject to accommodate non-ASCII strings. Retrieves all matching emails and then filter by the subject field (slower method but no way around the encoding issues with IMAP)
7
+ * Updated README
9
8
 
10
- * 1 bugfix
11
-
12
- * Fixed content-transfer-encoding when sending email
13
-
14
- === 0.0.8 / 2009-12-23
15
-
16
- * 1 bugfix
17
-
18
- * Fixed attaching a file to an empty message
19
-
20
- === 0.0.7 / 2009-12-23
21
-
22
- * 1 bugfix
23
-
24
- * Improved multipart message parsing reliability
25
-
26
- === 0.0.6 / 2009-12-21
27
-
28
- * 1 bugfix
29
-
30
- * Fixed multipart parsing for when the boundary is marked in quotes.
31
-
32
- === 0.0.5 / 2009-12-16
33
-
34
- * 1 bugfix
35
-
36
- * Fixed IMAP initializer to work with Ruby 1.9's net/imap
37
-
38
- * 4 minor enhancements
39
-
40
- * Better logout depending on the IMAP connection itself
41
- * Added MIME::Message#text and MIME::Message#html for easier access to an email body
42
- * Improved the MIME-parsing API slightly
43
- * Added some tests
44
-
45
- === 0.0.4 / 2009-11-30
46
-
47
- * 4 minor enhancement
48
-
49
- * Added label creation (thanks to Justin Perkins / http://github.com/justinperkins)
50
- * Made the gem login automatically when first needed
51
- * Added an optional block on the Gmail.new object that will login and logout for you
52
- * Added several search options (thanks to Mikkel Malmberg / http://github.com/mikker)
53
-
54
- === 0.0.3 / 2009-11-19
55
-
56
- * 1 bugfix
57
-
58
- * Fixed MIME::Message#content= for messages without an encoding
59
-
60
- * 1 minor enhancement
61
-
62
- * Added Gmail#new_message
63
-
64
- === 0.0.2 / 2009-11-18
65
-
66
- * 1 minor enhancement
67
-
68
- * Made all of the examples in the README possible
69
-
70
- === 0.0.1 / 2009-11-18
71
-
72
- * 1 major enhancement
73
-
74
- * Birthday!
9
+ === 1.0.0 / 03-04-2014
75
10
 
11
+ * Modified email search
12
+
13
+ * Added search by subject
14
+ * Limit search results
@@ -1,5 +1,44 @@
1
+ # Documentation
1
2
 
2
- # Original ruby-gmail documentation
3
+ ## New features
4
+
5
+ * Search by subject
6
+ * Limit the email search results
7
+
8
+ ## Description
9
+
10
+ This is a fork of the original ruby-gmail gem created by Daniel Parker (http://github.com/dcparker/). Minor improvements have been made in email search functionality.
11
+ Search functionality now supports search by email subject and a limit on the number of search results.
12
+
13
+ ## Example Code:
14
+
15
+ All the examples of the old ruby-gmail gem also hold good. The following examples demonstrate the newer search and limit capabilities.
16
+
17
+ ### 1) Require gmail
18
+
19
+ require 'gmail'
20
+
21
+ ### 2) Search emails
22
+
23
+ # Start an authenticated gmail session
24
+ gmail = Gmail.new(username, password)
25
+
26
+ # Get unread emails
27
+ gmail.inbox.email(:unread)
28
+
29
+ # Get unread emails from a specific sender to a specific recipient.
30
+ gmail.inbox.emails(:unread, to: 'foo@bar.com', from: 'bar@foo.com')
31
+
32
+ # Get emails matching a subject
33
+ gmail.inbox.emails(:unread, to: 'foo@bar.com', from: 'bar@foo.com', subject: 'Hello')
34
+
35
+ # Limit email search results
36
+ gmail.inbox.emails(:unread, limit: 5)
37
+
38
+ ## Author
39
+ * Karthik Mallavarapu
40
+
41
+ # Old ruby-gmail documentation
3
42
 
4
43
  * Code: [http://github.com/dcparker/ruby-gmail](http://github.com/dcparker/ruby-gmail)
5
44
  * Gem: [http://gemcutter.org/gems/ruby-gmail](http://rubygems.org/gems/ruby-gmail)
@@ -18,12 +57,11 @@ Extra thanks for specific feature contributions from:
18
57
 
19
58
  ## Description
20
59
 
21
- This is a fork of the original ruby-gmail gem created by Daniel Parker (http://github.com/dcparker/). Minor improvements have been made in email search functionality.
22
- Search functionality now supports search by email subject and a limit on the number of search results. A Rubyesque interface to Gmail, with all the tools you'll need. Search, read and send multipart emails; archive, mark as read/unread, delete emails; and manage labels.
60
+ A Rubyesque interface to Gmail, with all the tools you'll need. Search, read and send multipart emails; archive, mark as read/unread, delete emails; and manage labels.
23
61
 
24
62
  ## Features
25
63
 
26
- * Search emails (including search by subject)
64
+ * Search emails
27
65
  * Read emails (handles attachments)
28
66
  * Emails: Label, archive, delete, mark as read/unread/spam
29
67
  * Create and delete labels
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'net/imap'
2
4
 
3
5
  class Gmail
@@ -1,5 +1,8 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'date'
2
4
  require 'time'
5
+
3
6
  class Object
4
7
  def to_imap_date
5
8
  Date.parse(to_s).strftime("%d-%B-%Y")
@@ -29,6 +32,9 @@ class Gmail
29
32
  # Adding subject as a search parameter option.
30
33
  # Also adding a param called limit, for limiting the number of results.
31
34
  def emails(key_or_opts = :all, opts={})
35
+ # filter results by search or limit if search or limit are not nil
36
+ subject = nil
37
+ limit = nil
32
38
  if key_or_opts.is_a?(Hash) && opts.empty?
33
39
  search = ['ALL']
34
40
  opts = key_or_opts
@@ -52,22 +58,15 @@ class Gmail
52
58
  search.concat ['ON', opts[:on].to_imap_date] if opts[:on]
53
59
  search.concat ['FROM', opts[:from]] if opts[:from]
54
60
  search.concat ['TO', opts[:to]] if opts[:to]
55
- # Adding search support for subject field
56
- search.concat ['SUBJECT', opts[:subject]] if opts[:subject]
57
- if opts[:limit]
58
- raise ArgumentError "limit parameter must be an integer to limit the email search results" unless opts[:limit].is_a? Integer
59
- end
60
- end
61
-
62
- # puts "Gathering #{(aliases[key] || key).inspect} messages for mailbox '#{name}'..."
63
- @gmail.in_mailbox(self) do
64
- email_results = @gmail.imap.uid_search(search).collect { |uid| messages[uid] ||= Message.new(@gmail, self, uid) }
65
- limit = email_results.count
66
- if opts[:limit]
67
- limit = opts[:limit]
61
+ subject = opts[:subject]
62
+ limit = opts[:limit]
63
+ if limit
64
+ raise ArgumentError "limit parameter must be an integer to limit the email search results" unless limit.is_a? Integer
68
65
  end
69
- email_results.first(limit)
70
66
  end
67
+ result = search_emails(search, subject)
68
+ limit = result.count if limit.nil?
69
+ result.first(limit)
71
70
  end
72
71
 
73
72
  # This is a convenience method that really probably shouldn't need to exist, but it does make code more readable
@@ -76,6 +75,23 @@ class Gmail
76
75
  emails(*args).length
77
76
  end
78
77
 
78
+ # Search mailbox with the given search string params and filter results by subject.
79
+ # Subject is not added to the search string, since IMAP raises an exception for non-ASCII strings
80
+ def search_emails(search, subject)
81
+ @gmail.in_mailbox(self) do
82
+ email_results = @gmail.imap.uid_search(search).collect { |uid| messages[uid] ||= Message.new(@gmail, self, uid) }
83
+ # If subject is not nil, filter results by subject and mark the rest of the emails as unread.
84
+ if subject
85
+ result = email_results.select {|email| email.subject == subject}
86
+ email_results.reject {|email| email.subject == subject}.each do |email|
87
+ email.mark(:unread)
88
+ end
89
+ return result
90
+ end
91
+ return email_results
92
+ end
93
+ end
94
+
79
95
  def messages
80
96
  @messages ||= {}
81
97
  end
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  class Gmail
2
4
  class Message
3
5
  def initialize(gmail, mailbox, uid)
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require "openssl"
2
4
  require "net/smtp"
3
5
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{karthik-ruby-gmail}
8
- s.version = "1.0.0"
8
+ s.version = "1.0.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Karthik Mallavarapu"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karthik-ruby-gmail
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karthik Mallavarapu
@@ -14,45 +14,45 @@ dependencies:
14
14
  name: shared-mime-info
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mail
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.2.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.2.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mime
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.1'
55
- description: ! "A Rubyesque interface to Gmail, with all the tools you'll need. Search,
55
+ description: "A Rubyesque interface to Gmail, with all the tools you'll need. Search,
56
56
  read and send multipart emails; archive, mark as read/unread, delete emails; and
57
57
  manage labels. Fork of \n the original ruby-gmail gem (https://github.com/dcparker/ruby-gmail).
58
58
  Added search by subject, limit number of email search results."
@@ -86,17 +86,17 @@ require_paths:
86
86
  - lib
87
87
  required_ruby_version: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ! '>='
89
+ - - '>='
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  required_rubygems_version: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  requirements: []
98
98
  rubyforge_project:
99
- rubygems_version: 2.1.11
99
+ rubygems_version: 2.0.0
100
100
  signing_key:
101
101
  specification_version: 3
102
102
  summary: A Rubyesque interface to Gmail, with all the tools you'll need.