nylas-shipmnts 3.0.0

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