gmail-api-ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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