nylas-shipmnts 3.0.0

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,162 @@
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
+ offset = 0
19
+ chunk_size = 100
20
+ finished = false
21
+ while (!finished) do
22
+ results = get_model_collection(offset, chunk_size)
23
+ results.each { |item|
24
+ yield item
25
+ }
26
+ offset += results.length
27
+ finished = results.length < chunk_size
28
+ end
29
+ end
30
+
31
+ def count
32
+ RestClient.get(url, params: @filters.merge(view: 'count')) { |response,request,result|
33
+ json = Nylas.interpret_response(result, response)
34
+ return json['count']
35
+ }
36
+ end
37
+
38
+ def first
39
+ get_model_collection.first
40
+ end
41
+
42
+ def all
43
+ range(0, Float::INFINITY)
44
+ end
45
+
46
+ def where(filters)
47
+ collection = self.clone
48
+
49
+ # deep copy the object, otherwise filter is shared among all
50
+ # the instances of the collection, which leads to confusing behaviour.
51
+ # - karim
52
+ if collection.filters == nil
53
+ collection.filters = {}
54
+ else
55
+ collection.filters = Marshal.load(Marshal.dump(collection.filters))
56
+ end
57
+
58
+ collection.filters.merge!(filters)
59
+ collection
60
+ end
61
+
62
+ def range(offset = 0, limit = 100)
63
+ accumulated = []
64
+ finished = false
65
+ chunk_size = 100
66
+
67
+ if limit < chunk_size
68
+ chunk_size = limit
69
+ end
70
+
71
+ while (!finished && accumulated.length < limit) do
72
+ results = get_model_collection(offset + accumulated.length, chunk_size)
73
+ accumulated = accumulated.concat(results)
74
+
75
+ # we're done if we have more than 'limit' items, or if we asked for 50 and got less than 50...
76
+ finished = accumulated.length >= limit || results.length == 0 || (results.length % chunk_size != 0)
77
+ end
78
+
79
+ accumulated = accumulated[0..limit] if limit < Float::INFINITY
80
+ accumulated
81
+ end
82
+
83
+ def delete(item_or_id)
84
+ item_or_id = item_or_id.id if item_or_id.is_a?(RestfulModel)
85
+ RestClient.delete("#{url}/#{id}")
86
+ end
87
+
88
+ def find(id)
89
+ return nil unless id
90
+ get_model(id)
91
+ end
92
+
93
+ def build(args)
94
+ for key in args.keys
95
+ args[key.to_s] = args[key]
96
+ end
97
+ model = @model_class.new(@_api)
98
+ model.inflate(args)
99
+ model
100
+ end
101
+
102
+ def inflate_collection(items = [])
103
+ models = []
104
+
105
+ return unless items.is_a?(Array)
106
+ items.each do |json|
107
+ if @model_class < RestfulModel
108
+ model = @model_class.new(@_api)
109
+ model.inflate(json)
110
+ else
111
+ model = @model_class.new(json)
112
+ end
113
+ models.push(model)
114
+ end
115
+ models
116
+ end
117
+
118
+ def url
119
+ @_api.url_for_path("/#{@model_class.collection_name}")
120
+ end
121
+
122
+ private
123
+
124
+ def get_model(id)
125
+ model = nil
126
+
127
+ RestClient.get("#{url}/#{id}"){ |response,request,result|
128
+ json = Nylas.interpret_response(result, response, {:expected_class => Object})
129
+ if @model_class < RestfulModel
130
+ model = @model_class.new(@_api)
131
+ model.inflate(json)
132
+ else
133
+ model = @model_class.new(json)
134
+ end
135
+ }
136
+ model
137
+ end
138
+
139
+ def get_model_collection(offset = 0, limit = 100)
140
+ filters = @filters.clone
141
+ filters[:offset] = offset
142
+ filters[:limit] = limit
143
+ models = []
144
+
145
+ RestClient.get(url, :params => filters){ |response,request,result|
146
+ items = Nylas.interpret_response(result, response, {:expected_class => Array})
147
+ models = inflate_collection(items)
148
+ }
149
+ models
150
+ end
151
+
152
+ end
153
+
154
+ # a ManagementModelCollection is similar to a RestfulModelCollection except
155
+ # it's used by models under the /a/<app_id> namespace (mostly account status
156
+ # and billing methods).
157
+ class ManagementModelCollection < RestfulModelCollection
158
+ def url
159
+ @_api.url_for_management
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,12 @@
1
+ module Nylas
2
+ module TimeAttrAccessor
3
+ def time_attr_accessor(attr)
4
+ parameter attr
5
+ define_method "#{attr}=" do |value|
6
+ if value
7
+ instance_variable_set "@#{attr}", Time.at(value).utc
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module Nylas
2
+ VERSION = "3.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,295 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nylas-shipmnts
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ben Gotow
8
+ - Karim Hamidou
9
+ - Jennie Lees
10
+ - Michael Pfister
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2017-04-03 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rest-client
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.6'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.6'
30
+ - !ruby/object:Gem::Dependency
31
+ name: yajl-ruby
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.2.1
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.2'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.2.1
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.2'
50
+ - !ruby/object:Gem::Dependency
51
+ name: em-http-request
52
+ requirement: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.1.3
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.1'
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.1.3
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.1'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 3.5.0
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '3.5'
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 3.5.0
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.5'
90
+ - !ruby/object:Gem::Dependency
91
+ name: shoulda
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 3.4.0
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '3.5'
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 3.4.0
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.5'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rdoc
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.12'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.12'
124
+ - !ruby/object:Gem::Dependency
125
+ name: bundler
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 1.3.5
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '1.3'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 1.3.5
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '1.3'
144
+ - !ruby/object:Gem::Dependency
145
+ name: jeweler
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: 2.1.2
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '2.1'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: 2.1.2
161
+ - - "~>"
162
+ - !ruby/object:Gem::Version
163
+ version: '2.1'
164
+ - !ruby/object:Gem::Dependency
165
+ name: pry
166
+ requirement: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: 0.10.4
171
+ type: :development
172
+ prerelease: false
173
+ version_requirements: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: 0.10.4
178
+ - !ruby/object:Gem::Dependency
179
+ name: pry-nav
180
+ requirement: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: 0.2.4
185
+ type: :development
186
+ prerelease: false
187
+ version_requirements: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: 0.2.4
192
+ - !ruby/object:Gem::Dependency
193
+ name: pry-stack_explorer
194
+ requirement: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: 0.4.9.2
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - "~>"
204
+ - !ruby/object:Gem::Version
205
+ version: 0.4.9.2
206
+ - !ruby/object:Gem::Dependency
207
+ name: webmock
208
+ requirement: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: 2.1.0
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '2.1'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: 2.1.0
223
+ - - "~>"
224
+ - !ruby/object:Gem::Version
225
+ version: '2.1'
226
+ - !ruby/object:Gem::Dependency
227
+ name: sinatra
228
+ requirement: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: 1.4.7
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '1.4'
236
+ type: :development
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: 1.4.7
243
+ - - "~>"
244
+ - !ruby/object:Gem::Version
245
+ version: '1.4'
246
+ description: Gem for interacting with the Nylas API.
247
+ email: support@nylas.com
248
+ executables: []
249
+ extensions: []
250
+ extra_rdoc_files: []
251
+ files:
252
+ - lib/account.rb
253
+ - lib/api_account.rb
254
+ - lib/api_thread.rb
255
+ - lib/calendar.rb
256
+ - lib/contact.rb
257
+ - lib/draft.rb
258
+ - lib/event.rb
259
+ - lib/expanded_message.rb
260
+ - lib/file.rb
261
+ - lib/folder.rb
262
+ - lib/label.rb
263
+ - lib/message.rb
264
+ - lib/mixins.rb
265
+ - lib/nylas.rb
266
+ - lib/parameters.rb
267
+ - lib/restful_model.rb
268
+ - lib/restful_model_collection.rb
269
+ - lib/time_attr_accessor.rb
270
+ - lib/version.rb
271
+ homepage: http://github.com/nylas/nylas-ruby
272
+ licenses:
273
+ - MIT
274
+ metadata: {}
275
+ post_install_message:
276
+ rdoc_options: []
277
+ require_paths:
278
+ - lib
279
+ required_ruby_version: !ruby/object:Gem::Requirement
280
+ requirements:
281
+ - - ">="
282
+ - !ruby/object:Gem::Version
283
+ version: '0'
284
+ required_rubygems_version: !ruby/object:Gem::Requirement
285
+ requirements:
286
+ - - ">="
287
+ - !ruby/object:Gem::Version
288
+ version: '0'
289
+ requirements: []
290
+ rubyforge_project:
291
+ rubygems_version: 2.6.10
292
+ signing_key:
293
+ specification_version: 4
294
+ summary: Gem for interacting with the Nylas API
295
+ test_files: []