gmail-api-ruby 0.0.1

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.
@@ -0,0 +1,13 @@
1
+ module Gmail
2
+ class APIResource < GmailObject
3
+ def self.class_name
4
+ self.name.split('::')[-1]
5
+ end
6
+
7
+ def self.base_method
8
+ Gmail.connect
9
+ Gmail.service.users.send("#{class_name.downcase}s")
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module Gmail
2
+ module Base
3
+ module Create
4
+ module ClassMethods
5
+ def create(body, opts={})
6
+ response = Gmail.request(base_method.send("create"), {}, body)
7
+ Util.convert_to_gmail_object(response, class_name.downcase)
8
+ end
9
+ end
10
+
11
+ def self.included(base)
12
+ base.extend(ClassMethods)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,27 @@
1
+ module Gmail
2
+ module Base
3
+ module Delete
4
+ def delete(opts={})
5
+ response = Gmail.request(self.class.base_method.send("delete"),{id: id})
6
+ if response == ""
7
+ p "Success"
8
+ end
9
+ end
10
+
11
+ module ClassMethods
12
+ def delete(id, opts={})
13
+ response = Gmail.request(base_method.send("delete"),{id: id})
14
+ if response == ""
15
+ p "Success"
16
+ end
17
+ end
18
+ end
19
+
20
+ def self.included(base)
21
+ base.extend(ClassMethods)
22
+ end
23
+
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ module Gmail
2
+ module Base
3
+ module Get
4
+ module ClassMethods
5
+ def get(id)
6
+ response = Gmail.request(base_method.send("get"), {id: id})
7
+ Util.convert_to_gmail_object(response, class_name.downcase)
8
+
9
+ end
10
+ end
11
+
12
+ def self.included(base)
13
+ base.extend(ClassMethods)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,50 @@
1
+ module Gmail
2
+ module Base
3
+ module List
4
+ module ClassMethods
5
+ def all(filters={}, opts={})
6
+ max_results = filters[:maxResults] || 100
7
+ opts[:items] ||= []
8
+
9
+ if max_results == -1
10
+ filters.merge!({maxResults: 100})
11
+ end
12
+ response = Gmail.request(base_method.send("list"), filters)
13
+ items = response["#{class_name.downcase}s".to_sym]
14
+ next_page_token = response[:nextPageToken]
15
+ opts[:items] = opts[:items] + items
16
+
17
+ if items.count < 100 || max_results == items.count
18
+ Util.convert_to_gmail_object(opts[:items], class_name.downcase)
19
+ else
20
+ max_results = (max_results == -1)?-1:max_results-items.count
21
+ all(filters.merge({maxResults: max_results, pageToken: next_page_token}), opts)
22
+ end
23
+ end
24
+
25
+ def search(q={})
26
+ if q.is_a? String
27
+ all({q: q})
28
+ else
29
+ query = ""
30
+ [:from, :to, :subject].each do |prop|
31
+ query += "#{prop.to_s}:(#{q[prop].downcase}) " unless q[prop].nil?
32
+ end
33
+ [:in, :before, :after].each do |prop|
34
+ query += "#{prop.to_s}:#{q[prop]} " unless q[prop].nil?
35
+ end
36
+
37
+ query += "#{q[:has_words]} " unless q[:has_words].nil?
38
+ query += "-{#{q[:has_not_words]}}" unless q[:has_not_words].nil?
39
+ p "searching with this string #{query}"
40
+ all(q: query)
41
+ end
42
+ end
43
+ end
44
+
45
+ def self.included(base)
46
+ base.extend(ClassMethods)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,66 @@
1
+ module Gmail
2
+ module Base
3
+ module Modify
4
+ def modify!(addLabelIds=[], removeLabelIds=[])
5
+ response = Gmail.request(self.class.base_method.send("modify"),{id: id}, {addLabelIds: addLabelIds, removeLabelIds: removeLabelIds})
6
+ d = Util.convert_to_gmail_object(response, self.class.class_name.downcase)
7
+ @values = d.values
8
+ self
9
+ end
10
+
11
+ def modify(addLabelIds=[], removeLabelIds=[])
12
+ response = Gmail.request(self.class.base_method.send("modify"),{id: id}, {addLabelIds: addLabelIds, removeLabelIds: removeLabelIds})
13
+ d = Util.convert_to_gmail_object(response, self.class.class_name.downcase)
14
+ end
15
+
16
+ def archive
17
+ modify([], ["INBOX"])
18
+ end
19
+
20
+ def archive!
21
+ modify!([], ["INBOX"])
22
+ end
23
+
24
+ def unarchive
25
+ modify(["INBOX"], [] )
26
+ end
27
+
28
+ def unarchive!
29
+ modify!(["INBOX"], [] )
30
+ end
31
+
32
+ def star
33
+ modify(["STARRED"], [] )
34
+ end
35
+
36
+ def star!
37
+ modify!(["STARRED"], [] )
38
+ end
39
+
40
+ def unstar
41
+ modify([],["STARRED"] )
42
+ end
43
+
44
+ def unstar!
45
+ modify!([],["STARRED"] )
46
+ end
47
+
48
+ def mark_as_read
49
+ modify([],["UNREAD"] )
50
+ end
51
+
52
+ def mark_as_read!
53
+ modify!([],["UNREAD"] )
54
+ end
55
+
56
+ def mark_as_unread
57
+ modify(["UNREAD"],[] )
58
+ end
59
+
60
+ def mark_as_unread!
61
+ modify!(["UNREAD"],[] )
62
+ end
63
+
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,33 @@
1
+ module Gmail
2
+ module Base
3
+ module Trash
4
+ def trash(opts={})
5
+ response = Gmail.request(self.class.base_method.send("trash"),{id: id})
6
+ Util.convert_to_gmail_object(response, self.class.class_name.downcase)
7
+ end
8
+
9
+ def untrash(opts={})
10
+ response = Gmail.request(self.class.base_method.send("untrash"),{id: id})
11
+ Util.convert_to_gmail_object(response, self.class.class_name.downcase)
12
+ end
13
+
14
+ module ClassMethods
15
+ def trash(id, opts={})
16
+ response = Gmail.request(base_method.send("trash"),{id: id})
17
+ Util.convert_to_gmail_object(response, class_name.downcase)
18
+ end
19
+
20
+ def untrash(id, opts={})
21
+ response = Gmail.request(base_method.send("untrash"),{id: id})
22
+ Util.convert_to_gmail_object(response, class_name.downcase)
23
+ end
24
+ end
25
+
26
+ def self.included(base)
27
+ base.extend(ClassMethods)
28
+ end
29
+
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ module Gmail
2
+ module Base
3
+ module Update
4
+ def update!(body)
5
+ if id.nil?
6
+ d = self.class.create(body)
7
+ else
8
+ response = Gmail.request(self.class.base_method.send("update"),{id: id}, body)
9
+ d = Util.convert_to_gmail_object(response, self.class.class_name.downcase)
10
+ end
11
+ @values = d.values
12
+ self
13
+ end
14
+
15
+ def update(body)
16
+ if id.nil?
17
+ d = self.class.create(body)
18
+ else
19
+ response = Gmail.request(self.class.base_method.send("update"),{id: id}, body)
20
+ d = Util.convert_to_gmail_object(response, self.class.class_name.downcase)
21
+ end
22
+ d
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,49 @@
1
+ module Gmail
2
+ class Draft < APIResource
3
+ include Gmail::Base::List
4
+ include Gmail::Base::Create
5
+ include Gmail::Base::Delete
6
+ include Gmail::Base::Get
7
+ include Gmail::Base::Update
8
+
9
+ def message
10
+ if @values.message.is_a?(Gmail::Message)
11
+ @values.message
12
+ else
13
+ @values.message = Util.convert_to_gmail_object(to_hash["message"], key="message").detailed
14
+ end
15
+ end
16
+
17
+ def save(opts={})
18
+ msg = {raw: message.raw}
19
+ if message.threadId
20
+ msg[:threadId] = message.threadId
21
+ end
22
+ if message.labelIds
23
+ msg[:labelIds] = message.labelIds
24
+ end
25
+ body = {message: msg}
26
+ update(body)
27
+ end
28
+
29
+ def save!(opts={})
30
+ msg = {raw: message.raw}
31
+ if message.threadId
32
+ msg[:threadId] = message.threadId
33
+ end
34
+ if message.labelIds
35
+ msg[:labelIds] = message.labelIds
36
+ end
37
+ body = {message: msg}
38
+ update!(body)
39
+ end
40
+
41
+ def deliver
42
+ response = Gmail.request(self.class.base_method.to_h['gmail.users.drafts.send'],{},{id: id})
43
+ Gmail::Message.get(response[:id])
44
+ end
45
+
46
+
47
+
48
+ end
49
+ end
@@ -0,0 +1,138 @@
1
+ module Gmail
2
+ class GmailObject
3
+ include Enumerable
4
+ include Hooks
5
+ define_hooks :after_initialize
6
+
7
+ # The default :id method is deprecated and isn't useful to us
8
+ if method_defined?(:id)
9
+ undef :id
10
+ end
11
+
12
+ def initialize(hash={})
13
+ @values = Hashie::Mash.new hash
14
+ run_hook :after_initialize
15
+ end
16
+
17
+
18
+ def to_s(*args)
19
+ JSON.pretty_generate(@values.to_hash)
20
+ end
21
+
22
+ def inspect
23
+ "#<#{self.class}:0x#{self.object_id.to_s(16)}> " + to_s
24
+ end
25
+
26
+ def [](k)
27
+ @values[k.to_sym]
28
+ end
29
+
30
+ def []=(k, v)
31
+ @values.send("#{k}=", v)
32
+ end
33
+
34
+ def to_json(*a)
35
+ JSON.generate(@values)
36
+ end
37
+
38
+ def as_json(*a)
39
+ @values.as_json(*a)
40
+ end
41
+
42
+ def detailed
43
+ self.class.get(id)
44
+ end
45
+
46
+ def detailed!
47
+ @values = self.class.get(id).values
48
+ self
49
+ end
50
+ #
51
+ def to_hash
52
+ @values.to_hash
53
+ end
54
+
55
+ def values
56
+ @values
57
+ end
58
+ #
59
+ # def each(&blk)
60
+ # @values.each(&blk)
61
+ # end
62
+ #
63
+ # def _dump(level)
64
+ # Marshal.dump([@values, @api_key])
65
+ # end
66
+ #
67
+ # def self._load(args)
68
+ # values, api_key = Marshal.load(args)
69
+ # construct_from(values)
70
+ # end
71
+ #
72
+ # if RUBY_VERSION < '1.9.2'
73
+ # def respond_to?(symbol)
74
+ # @values.has_key?(symbol) || super
75
+ # end
76
+ # end
77
+ #
78
+ protected
79
+
80
+ def metaclass
81
+ class << self; self; end
82
+ end
83
+ #
84
+ # def remove_accessors(keys)
85
+ # metaclass.instance_eval do
86
+ # keys.each do |k|
87
+ # next if @@permanent_attributes.include?(k)
88
+ # k_eq = :"#{k}="
89
+ # remove_method(k) if method_defined?(k)
90
+ # remove_method(k_eq) if method_defined?(k_eq)
91
+ # end
92
+ # end
93
+ # end
94
+ #
95
+ # def add_accessors(keys)
96
+ # metaclass.instance_eval do
97
+ # keys.each do |k|
98
+ # next if @@permanent_attributes.include?(k)
99
+ # k_eq = :"#{k}="
100
+ # define_method(k) { @values[k] }
101
+ # define_method(k_eq) do |v|
102
+ # if v == ""
103
+ # raise ArgumentError.new(
104
+ # "You cannot set #{k} to an empty string." +
105
+ # "We interpret empty strings as nil in requests." +
106
+ # "You may set #{self}.#{k} = nil to delete the property.")
107
+ # end
108
+ # @values[k] = v
109
+ # @unsaved_values.add(k)
110
+ # end
111
+ # end
112
+ # end
113
+ # end
114
+ #
115
+ def method_missing(name, *args)
116
+
117
+ if @values.send(name.to_s + "?")
118
+ @values.send(name)
119
+ else
120
+ begin
121
+ @values.send(name.to_s, args[0])
122
+ rescue
123
+ begin
124
+ super.send(name)
125
+ rescue
126
+ nil
127
+ end
128
+ end
129
+ end
130
+ end
131
+
132
+
133
+ #
134
+ # def respond_to_missing?(symbol, include_private = false)
135
+ # super
136
+ # end
137
+ end
138
+ end