nylas 3.2.0 → 4.0.0.rc2
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 +4 -4
- data/lib/nylas.rb +33 -380
- data/lib/nylas/api.rb +43 -0
- data/lib/nylas/collection.rb +110 -0
- data/lib/nylas/constraints.rb +46 -0
- data/lib/nylas/contact.rb +30 -0
- data/lib/nylas/current_account.rb +23 -0
- data/lib/nylas/email_address.rb +14 -0
- data/lib/nylas/errors.rb +36 -0
- data/lib/nylas/http_client.rb +135 -0
- data/lib/nylas/im_address.rb +14 -0
- data/lib/nylas/logging.rb +41 -0
- data/lib/nylas/model.rb +92 -0
- data/lib/nylas/model/attributable.rb +57 -0
- data/lib/nylas/model/attribute_definition.rb +19 -0
- data/lib/nylas/model/attributes.rb +47 -0
- data/lib/nylas/model/list_attribute_definition.rb +28 -0
- data/lib/nylas/nylas_date.rb +20 -0
- data/lib/nylas/phone_number.rb +14 -0
- data/lib/nylas/physical_address.rb +19 -0
- data/lib/nylas/registry.rb +37 -0
- data/lib/nylas/types.rb +83 -0
- data/lib/nylas/version.rb +3 -0
- data/lib/nylas/web_page.rb +14 -0
- metadata +144 -98
- data/lib/account.rb +0 -32
- data/lib/api_account.rb +0 -22
- data/lib/api_thread.rb +0 -85
- data/lib/calendar.rb +0 -16
- data/lib/contact.rb +0 -10
- data/lib/draft.rb +0 -50
- data/lib/event.rb +0 -47
- data/lib/expanded_message.rb +0 -20
- data/lib/file.rb +0 -40
- data/lib/folder.rb +0 -12
- data/lib/label.rb +0 -4
- data/lib/message.rb +0 -102
- data/lib/mixins.rb +0 -26
- data/lib/parameters.rb +0 -26
- data/lib/restful_model.rb +0 -82
- data/lib/restful_model_collection.rb +0 -160
- data/lib/time_attr_accessor.rb +0 -12
- data/lib/version.rb +0 -3
data/lib/restful_model.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
require 'time_attr_accessor'
|
2
|
-
require 'parameters'
|
3
|
-
|
4
|
-
module Nylas
|
5
|
-
class RestfulModel
|
6
|
-
extend Nylas::TimeAttrAccessor
|
7
|
-
include Nylas::Parameters
|
8
|
-
|
9
|
-
parameter :id
|
10
|
-
parameter :account_id
|
11
|
-
parameter :cursor # Only used by the delta sync API
|
12
|
-
time_attr_accessor :created_at
|
13
|
-
attr_reader :raw_json
|
14
|
-
|
15
|
-
def self.collection_name
|
16
|
-
"#{self.to_s.downcase}s".split('::').last
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize(api, account_id = nil)
|
20
|
-
raise StandardError.new unless api.class <= Nylas::API
|
21
|
-
@account_id = account_id
|
22
|
-
@_api = api
|
23
|
-
end
|
24
|
-
|
25
|
-
def ==(comparison_object)
|
26
|
-
comparison_object.equal?(self) || (comparison_object.instance_of?(self.class) && comparison_object.id == id)
|
27
|
-
end
|
28
|
-
|
29
|
-
def inflate(json)
|
30
|
-
@raw_json = json
|
31
|
-
parameters.each do |property_name|
|
32
|
-
send("#{property_name}=", json[property_name]) if json.has_key?(property_name)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def save!(params={})
|
37
|
-
if id
|
38
|
-
update('PUT', '', as_json(), params)
|
39
|
-
else
|
40
|
-
update('POST', '', as_json(), params)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def url(action = "")
|
45
|
-
action = "/#{action}" unless action.empty?
|
46
|
-
@_api.url_for_path("/#{self.class.collection_name}/#{id}#{action}")
|
47
|
-
end
|
48
|
-
|
49
|
-
def as_json(options = {})
|
50
|
-
hash = {}
|
51
|
-
parameters.each do |getter|
|
52
|
-
unless options[:except] && options[:except].include?(getter)
|
53
|
-
value = send(getter)
|
54
|
-
unless value.is_a?(RestfulModelCollection)
|
55
|
-
value = value.as_json(options) if value.respond_to?(:as_json)
|
56
|
-
hash[getter] = value
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
hash
|
61
|
-
end
|
62
|
-
|
63
|
-
def update(http_method, action, data = {}, params = {})
|
64
|
-
http_method = http_method.downcase
|
65
|
-
|
66
|
-
::RestClient.send(http_method, self.url(action), data.to_json, :content_type => :json, :params => params) do |response, request, result|
|
67
|
-
unless http_method == 'delete'
|
68
|
-
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
69
|
-
inflate(json)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
self
|
73
|
-
end
|
74
|
-
|
75
|
-
def destroy(params = {})
|
76
|
-
::RestClient.send('delete', self.url, :params => params) do |response, request, result|
|
77
|
-
Nylas.interpret_response(result, response, {:raw_response => true})
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
82
|
-
end
|
@@ -1,160 +0,0 @@
|
|
1
|
-
require 'restful_model'
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
class RestfulModelCollection
|
5
|
-
|
6
|
-
attr_accessor :filters
|
7
|
-
|
8
|
-
def initialize(model_class, api, filters = {})
|
9
|
-
raise StandardError.new unless api.class <= Nylas::API
|
10
|
-
@model_class = model_class
|
11
|
-
@filters = filters
|
12
|
-
@_api = api
|
13
|
-
end
|
14
|
-
|
15
|
-
def each
|
16
|
-
return enum_for(:each) unless block_given?
|
17
|
-
|
18
|
-
get_model_collection do |items|
|
19
|
-
items.each do |item|
|
20
|
-
yield item
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def count
|
26
|
-
RestClient.get(url, params: @filters.merge(view: 'count')) { |response,request,result|
|
27
|
-
json = Nylas.interpret_response(result, response)
|
28
|
-
return json['count']
|
29
|
-
}
|
30
|
-
end
|
31
|
-
|
32
|
-
def first
|
33
|
-
get_model_collection.first
|
34
|
-
end
|
35
|
-
|
36
|
-
def all
|
37
|
-
range(0, Float::INFINITY)
|
38
|
-
end
|
39
|
-
|
40
|
-
def where(filters)
|
41
|
-
collection = self.clone
|
42
|
-
|
43
|
-
# deep copy the object, otherwise filter is shared among all
|
44
|
-
# the instances of the collection, which leads to confusing behaviour.
|
45
|
-
# - karim
|
46
|
-
if collection.filters == nil
|
47
|
-
collection.filters = {}
|
48
|
-
else
|
49
|
-
collection.filters = Marshal.load(Marshal.dump(collection.filters))
|
50
|
-
end
|
51
|
-
|
52
|
-
collection.filters.merge!(filters)
|
53
|
-
collection
|
54
|
-
end
|
55
|
-
|
56
|
-
def range(offset = 0, limit = 100)
|
57
|
-
|
58
|
-
accumulated = get_model_collection(offset, limit)
|
59
|
-
|
60
|
-
accumulated = accumulated[0..limit] if limit < Float::INFINITY
|
61
|
-
accumulated
|
62
|
-
end
|
63
|
-
|
64
|
-
def delete(item_or_id)
|
65
|
-
item_or_id = item_or_id.id if item_or_id.is_a?(RestfulModel)
|
66
|
-
RestClient.delete("#{url}/#{item_or_id}")
|
67
|
-
end
|
68
|
-
|
69
|
-
def find(id)
|
70
|
-
return nil unless id
|
71
|
-
get_model(id)
|
72
|
-
end
|
73
|
-
|
74
|
-
def build(args)
|
75
|
-
for key in args.keys
|
76
|
-
args[key.to_s] = args[key]
|
77
|
-
end
|
78
|
-
model = @model_class.new(@_api)
|
79
|
-
model.inflate(args)
|
80
|
-
model
|
81
|
-
end
|
82
|
-
|
83
|
-
def inflate_collection(items = [])
|
84
|
-
models = []
|
85
|
-
|
86
|
-
return unless items.is_a?(Array)
|
87
|
-
items.each do |json|
|
88
|
-
if @model_class < RestfulModel
|
89
|
-
model = @model_class.new(@_api)
|
90
|
-
model.inflate(json)
|
91
|
-
else
|
92
|
-
model = @model_class.new(json)
|
93
|
-
end
|
94
|
-
models.push(model)
|
95
|
-
end
|
96
|
-
models
|
97
|
-
end
|
98
|
-
|
99
|
-
def url
|
100
|
-
@_api.url_for_path("/#{@model_class.collection_name}")
|
101
|
-
end
|
102
|
-
|
103
|
-
private
|
104
|
-
|
105
|
-
def get_model(id)
|
106
|
-
model = nil
|
107
|
-
|
108
|
-
RestClient.get("#{url}/#{id}"){ |response,request,result|
|
109
|
-
json = Nylas.interpret_response(result, response, {:expected_class => Object})
|
110
|
-
if @model_class < RestfulModel
|
111
|
-
model = @model_class.new(@_api)
|
112
|
-
model.inflate(json)
|
113
|
-
else
|
114
|
-
model = @model_class.new(json)
|
115
|
-
end
|
116
|
-
}
|
117
|
-
model
|
118
|
-
end
|
119
|
-
|
120
|
-
def get_model_collection(offset = nil, limit = nil, pagination_options = { per_page: 100 })
|
121
|
-
filters = @filters.clone
|
122
|
-
filters[:offset] = offset || filters[:offset] || 0
|
123
|
-
filters[:limit] = limit || filters[:limit] || 100
|
124
|
-
|
125
|
-
accumulated = []
|
126
|
-
|
127
|
-
finished = false
|
128
|
-
|
129
|
-
current_calls_filters = filters.clone
|
130
|
-
while (!finished) do
|
131
|
-
current_calls_filters[:limit] = pagination_options[:per_page] > filters[:limit] ? filters[:limit] : pagination_options[:per_page]
|
132
|
-
RestClient.get(url, :params => current_calls_filters) do |response, request, result|
|
133
|
-
items = Nylas.interpret_response(result, response, { :expected_class => Array })
|
134
|
-
new_items = inflate_collection(items)
|
135
|
-
yield new_items if block_given?
|
136
|
-
accumulated = accumulated.concat(new_items)
|
137
|
-
finished = no_more_pages?(accumulated, items, filters, pagination_options)
|
138
|
-
end
|
139
|
-
|
140
|
-
current_calls_filters[:offset] += pagination_options[:per_page]
|
141
|
-
end
|
142
|
-
|
143
|
-
accumulated
|
144
|
-
end
|
145
|
-
|
146
|
-
def no_more_pages?(accumulated, items, filters, pagination_options)
|
147
|
-
accumulated.length >= filters[:limit] || items.length < pagination_options[:per_page]
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
|
152
|
-
# a ManagementModelCollection is similar to a RestfulModelCollection except
|
153
|
-
# it's used by models under the /a/<app_id> namespace (mostly account status
|
154
|
-
# and billing methods).
|
155
|
-
class ManagementModelCollection < RestfulModelCollection
|
156
|
-
def url
|
157
|
-
@_api.url_for_management
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
data/lib/time_attr_accessor.rb
DELETED
data/lib/version.rb
DELETED