flowcommerce 0.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 570243d812d3c483da4005057b58212e2929a7ae
4
+ data.tar.gz: d938fc2f031f75fc3c9a354e95f2807dd5430519
5
+ SHA512:
6
+ metadata.gz: b2eec06f709ef8ae3b9939b6f23cc4cfa124bb3e40353cf67217a74557b762fe2cb2718af40b794ad7a203e4827a7b2971d862c1c6cb69bd42e50d8866962612
7
+ data.tar.gz: 72dd2f5bc441eb7bed210f9871fd695733dfcc3a66d24cb63ce80de2f20d617fba65a45b10710015336d0209eaefc2cb01af085543e687128f12b4841807adb6
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # flow-ruby
2
+
3
+ Native ruby client to the Flow API (https://api.flow.io)
4
+
5
+ ## Installation
6
+
7
+ gem install 'flowcommerce'
8
+
9
+
10
+ ## Usage
11
+
12
+ require 'flowcommerce'
13
+
14
+ org = "demo"
15
+
16
+ client = FlowCommerce.client("api token")
17
+
18
+ catalog = client.catalogs.get_catalog(org)
19
+
20
+ items = client.view_items.get(org, "canada", :limit => 10, :offset => 0)
21
+ puts "# items in view: %s" % items.size
22
+
23
+
24
+ ## Example
25
+
26
+ See example.rb for a working example
27
+
28
+
29
+ ## Documentation
30
+
31
+ The full API is documented at http://apidoc.me/flow/catalog/latest
32
+
33
+ Also look at
34
+ https://github.com/flowcommerce/ruby-sdk/blob/master/lib/clients/flow_catalog_v0_client.rb
35
+ for the complete Ruby implementation of the API.
@@ -0,0 +1,1672 @@
1
+ # Generated by apidoc - http://www.apidoc.me
2
+ # Service version: 0.0.11
3
+ # apidoc:0.11.17 http://www.apidoc.me/flow/catalog/0.0.11/ruby_client
4
+
5
+ require 'cgi'
6
+ require 'net/http'
7
+ require 'net/https'
8
+ require 'uri'
9
+ require 'base64'
10
+
11
+ require 'date'
12
+ require 'rubygems'
13
+ require 'json'
14
+ require 'bigdecimal'
15
+
16
+ module Io
17
+ module Flow
18
+ module Catalog
19
+ module V0
20
+
21
+ class Client
22
+
23
+ module Constants
24
+
25
+ BASE_URL = 'https://catalog.api.flow.io' unless defined?(Constants::BASE_URL)
26
+ NAMESPACE = 'io.flow.catalog.v0' unless defined?(Constants::NAMESPACE)
27
+ USER_AGENT = 'apidoc:0.11.17 http://www.apidoc.me/flow/catalog/0.0.11/ruby_client' unless defined?(Constants::USER_AGENT)
28
+ VERSION = '0.0.11' unless defined?(Constants::VERSION)
29
+ VERSION_MAJOR = 0 unless defined?(VERSION_MAJOR)
30
+
31
+ end
32
+
33
+ attr_reader :url
34
+
35
+ def initialize(url, opts={})
36
+ @url = HttpClient::Preconditions.assert_class('url', url, String)
37
+ @authorization = HttpClient::Preconditions.assert_class_or_nil('authorization', opts.delete(:authorization), HttpClient::Authorization)
38
+ @default_headers = HttpClient::Preconditions.assert_class('default_headers', opts.delete(:default_headers) || {}, Hash)
39
+ HttpClient::Preconditions.assert_empty_opts(opts)
40
+ HttpClient::Preconditions.check_state(url.match(/http.+/i), "URL[%s] must start with http" % url)
41
+ end
42
+
43
+ # Creates an instance of the client using the base url specified in the API spec.
44
+ def Client.at_base_url(opts={})
45
+ Client.new(Constants::BASE_URL, opts)
46
+ end
47
+
48
+ def request(path=nil)
49
+ HttpClient::Preconditions.assert_class_or_nil('path', path, String)
50
+ request = HttpClient::Request.new(URI.parse(@url + path.to_s)).with_header('User-Agent', Constants::USER_AGENT).with_header('X-Apidoc-Version', Constants::VERSION).with_header('X-Apidoc-Version-Major', Constants::VERSION_MAJOR)
51
+
52
+ @default_headers.each do |key, value|
53
+ request = request.with_header(key, value)
54
+ end
55
+
56
+ if @authorization
57
+ request = request.with_auth(@authorization)
58
+ end
59
+
60
+ request
61
+ end
62
+
63
+ def catalogs
64
+ @catalogs ||= ::Io::Flow::Catalog::V0::Clients::Catalogs.new(self)
65
+ end
66
+
67
+ def catalog_items
68
+ @catalog_items ||= ::Io::Flow::Catalog::V0::Clients::CatalogItems.new(self)
69
+ end
70
+
71
+ def healthchecks
72
+ @healthchecks ||= ::Io::Flow::Catalog::V0::Clients::Healthchecks.new(self)
73
+ end
74
+
75
+ def views
76
+ @views ||= ::Io::Flow::Catalog::V0::Clients::Views.new(self)
77
+ end
78
+
79
+ def view_items
80
+ @view_items ||= ::Io::Flow::Catalog::V0::Clients::ViewItems.new(self)
81
+ end
82
+ end
83
+
84
+ module Clients
85
+
86
+ class Catalogs
87
+
88
+ def initialize(client)
89
+ @client = HttpClient::Preconditions.assert_class('client', client, ::Io::Flow::Catalog::V0::Client)
90
+ end
91
+
92
+ # Returns information about a specific catalog.
93
+ def get_catalog(organization)
94
+ HttpClient::Preconditions.assert_class('organization', organization, String)
95
+ r = @client.request("/#{CGI.escape(organization)}/catalog").get
96
+ ::Io::Flow::Catalog::V0::Models::Catalog.new(r)
97
+ end
98
+
99
+ end
100
+
101
+ class CatalogItems
102
+
103
+ def initialize(client)
104
+ @client = HttpClient::Preconditions.assert_class('client', client, ::Io::Flow::Catalog::V0::Client)
105
+ end
106
+
107
+ # Provides visibility into recent changes of each object, including deletion
108
+ def get_versions(organization, incoming={})
109
+ HttpClient::Preconditions.assert_class('organization', organization, String)
110
+ opts = HttpClient::Helper.symbolize_keys(incoming)
111
+ query = {
112
+ :id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
113
+ :number => (x = opts.delete(:number); x.nil? ? nil : HttpClient::Preconditions.assert_class('number', x, Array).map { |v| HttpClient::Preconditions.assert_class('number', v, String) }),
114
+ :limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
115
+ :offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
116
+ :sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "journal_timestamp" : x), String)
117
+ }.delete_if { |k, v| v.nil? }
118
+ r = @client.request("/#{CGI.escape(organization)}/catalog/items/versions").with_query(query).get
119
+ r.map { |x| ::Io::Flow::Catalog::V0::Models::ItemVersion.new(x) }
120
+ end
121
+
122
+ # Search items. Always paginated.
123
+ def get(organization, incoming={})
124
+ HttpClient::Preconditions.assert_class('organization', organization, String)
125
+ opts = HttpClient::Helper.symbolize_keys(incoming)
126
+ query = {
127
+ :id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
128
+ :number => (x = opts.delete(:number); x.nil? ? nil : HttpClient::Preconditions.assert_class('number', x, Array).map { |v| HttpClient::Preconditions.assert_class('number', v, String) }),
129
+ :query => (x = opts.delete(:query); x.nil? ? nil : HttpClient::Preconditions.assert_class('query', x, String)),
130
+ :limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
131
+ :offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
132
+ :sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "-created_at" : x), String)
133
+ }.delete_if { |k, v| v.nil? }
134
+ r = @client.request("/#{CGI.escape(organization)}/catalog/items").with_query(query).get
135
+ r.map { |x| ::Io::Flow::Catalog::V0::Models::Item.new(x) }
136
+ end
137
+
138
+ # Returns information about a specific item.
139
+ def get_by_id(organization, id)
140
+ HttpClient::Preconditions.assert_class('organization', organization, String)
141
+ HttpClient::Preconditions.assert_class('id', id, String)
142
+ r = @client.request("/#{CGI.escape(organization)}/catalog/items/#{CGI.escape(id)}").get
143
+ ::Io::Flow::Catalog::V0::Models::Item.new(r)
144
+ end
145
+
146
+ # Add catalog item(s)
147
+ def post(organization, item_form)
148
+ HttpClient::Preconditions.assert_class('organization', organization, String)
149
+ HttpClient::Preconditions.assert_class('item_form', item_form, ::Io::Flow::Catalog::V0::Models::ItemForm)
150
+ r = @client.request("/#{CGI.escape(organization)}/catalog/items").with_json(item_form.to_json).post
151
+ ::Io::Flow::Catalog::V0::Models::Item.new(r)
152
+ end
153
+
154
+ # Update item with the specified id, creating if it does not exist.
155
+ def put_by_id(organization, id, item_form)
156
+ HttpClient::Preconditions.assert_class('organization', organization, String)
157
+ HttpClient::Preconditions.assert_class('id', id, String)
158
+ HttpClient::Preconditions.assert_class('item_form', item_form, ::Io::Flow::Catalog::V0::Models::ItemForm)
159
+ r = @client.request("/#{CGI.escape(organization)}/catalog/items/#{CGI.escape(id)}").with_json(item_form.to_json).put
160
+ ::Io::Flow::Catalog::V0::Models::Item.new(r)
161
+ end
162
+
163
+ # Delete the item with this id
164
+ def delete_by_id(organization, id)
165
+ HttpClient::Preconditions.assert_class('organization', organization, String)
166
+ HttpClient::Preconditions.assert_class('id', id, String)
167
+ r = @client.request("/#{CGI.escape(organization)}/catalog/items/#{CGI.escape(id)}").delete
168
+ nil
169
+ end
170
+
171
+ end
172
+
173
+ class Healthchecks
174
+
175
+ def initialize(client)
176
+ @client = HttpClient::Preconditions.assert_class('client', client, ::Io::Flow::Catalog::V0::Client)
177
+ end
178
+
179
+ def get_healthcheck
180
+ r = @client.request("/_internal_/healthcheck").get
181
+ ::Io::Flow::Common::V0::Models::Healthcheck.new(r)
182
+ end
183
+
184
+ end
185
+
186
+ class Views
187
+
188
+ def initialize(client)
189
+ @client = HttpClient::Preconditions.assert_class('client', client, ::Io::Flow::Catalog::V0::Client)
190
+ end
191
+
192
+ # Provides visibility into recent changes of each object, including deletion
193
+ def get_versions(organization, incoming={})
194
+ HttpClient::Preconditions.assert_class('organization', organization, String)
195
+ opts = HttpClient::Helper.symbolize_keys(incoming)
196
+ query = {
197
+ :id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
198
+ :limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
199
+ :offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
200
+ :sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "journal_timestamp" : x), String)
201
+ }.delete_if { |k, v| v.nil? }
202
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/versions").with_query(query).get
203
+ r.map { |x| ::Io::Flow::Catalog::V0::Models::ViewVersion.new(x) }
204
+ end
205
+
206
+ # Search views. Always paginated.
207
+ def get(organization, incoming={})
208
+ HttpClient::Preconditions.assert_class('organization', organization, String)
209
+ opts = HttpClient::Helper.symbolize_keys(incoming)
210
+ query = {
211
+ :id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
212
+ :limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
213
+ :offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
214
+ :sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "-created_at" : x), String)
215
+ }.delete_if { |k, v| v.nil? }
216
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views").with_query(query).get
217
+ r.map { |x| ::Io::Flow::Catalog::V0::Models::View.new(x) }
218
+ end
219
+
220
+ # Returns information about a specific view.
221
+ def get_by_id(organization, id)
222
+ HttpClient::Preconditions.assert_class('organization', organization, String)
223
+ HttpClient::Preconditions.assert_class('id', id, String)
224
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(id)}").get
225
+ ::Io::Flow::Catalog::V0::Models::View.new(r)
226
+ end
227
+
228
+ # Add view
229
+ def post(organization, view_form)
230
+ HttpClient::Preconditions.assert_class('organization', organization, String)
231
+ HttpClient::Preconditions.assert_class('view_form', view_form, ::Io::Flow::Catalog::V0::Models::ViewForm)
232
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views").with_json(view_form.to_json).post
233
+ ::Io::Flow::Catalog::V0::Models::View.new(r)
234
+ end
235
+
236
+ # Update view with the specified id, creating if it does not exist.
237
+ def put_by_id(organization, id, view_form)
238
+ HttpClient::Preconditions.assert_class('organization', organization, String)
239
+ HttpClient::Preconditions.assert_class('id', id, String)
240
+ HttpClient::Preconditions.assert_class('view_form', view_form, ::Io::Flow::Catalog::V0::Models::ViewForm)
241
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(id)}").with_json(view_form.to_json).put
242
+ ::Io::Flow::Catalog::V0::Models::View.new(r)
243
+ end
244
+
245
+ # Delete the view with this id
246
+ def delete_by_id(organization, id)
247
+ HttpClient::Preconditions.assert_class('organization', organization, String)
248
+ HttpClient::Preconditions.assert_class('id', id, String)
249
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(id)}").delete
250
+ nil
251
+ end
252
+
253
+ # Returns information about a specific view's settings.
254
+ def get_settings_by_id(organization, id)
255
+ HttpClient::Preconditions.assert_class('organization', organization, String)
256
+ HttpClient::Preconditions.assert_class('id', id, String)
257
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(id)}/settings").get
258
+ ::Io::Flow::Catalog::V0::Models::ViewSettings.new(r)
259
+ end
260
+
261
+ # Update view settings for the specified view.
262
+ def put_settings_by_id(organization, id, view_settings_form)
263
+ HttpClient::Preconditions.assert_class('organization', organization, String)
264
+ HttpClient::Preconditions.assert_class('id', id, String)
265
+ HttpClient::Preconditions.assert_class('view_settings_form', view_settings_form, ::Io::Flow::Catalog::V0::Models::ViewSettingsForm)
266
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(id)}/settings").with_json(view_settings_form.to_json).put
267
+ ::Io::Flow::Catalog::V0::Models::ViewSettings.new(r)
268
+ end
269
+
270
+ end
271
+
272
+ class ViewItems
273
+
274
+ def initialize(client)
275
+ @client = HttpClient::Preconditions.assert_class('client', client, ::Io::Flow::Catalog::V0::Client)
276
+ end
277
+
278
+ # Provides visibility into recent changes of each object, including deletion
279
+ def get_versions(organization, view, incoming={})
280
+ HttpClient::Preconditions.assert_class('organization', organization, String)
281
+ HttpClient::Preconditions.assert_class('view', view, String)
282
+ opts = HttpClient::Helper.symbolize_keys(incoming)
283
+ query = {
284
+ :id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
285
+ :number => (x = opts.delete(:number); x.nil? ? nil : HttpClient::Preconditions.assert_class('number', x, Array).map { |v| HttpClient::Preconditions.assert_class('number', v, String) }),
286
+ :limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
287
+ :offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
288
+ :sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "journal_timestamp" : x), String)
289
+ }.delete_if { |k, v| v.nil? }
290
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(view)}/items/versions").with_query(query).get
291
+ r.map { |x| ::Io::Flow::Catalog::V0::Models::ViewVersion.new(x) }
292
+ end
293
+
294
+ # Search view items. Always paginated.
295
+ def get(organization, view, incoming={})
296
+ HttpClient::Preconditions.assert_class('organization', organization, String)
297
+ HttpClient::Preconditions.assert_class('view', view, String)
298
+ opts = HttpClient::Helper.symbolize_keys(incoming)
299
+ query = {
300
+ :id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
301
+ :number => (x = opts.delete(:number); x.nil? ? nil : HttpClient::Preconditions.assert_class('number', x, Array).map { |v| HttpClient::Preconditions.assert_class('number', v, String) }),
302
+ :query => (x = opts.delete(:query); x.nil? ? nil : HttpClient::Preconditions.assert_class('query', x, String)),
303
+ :limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
304
+ :offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
305
+ :sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "-created_at" : x), String)
306
+ }.delete_if { |k, v| v.nil? }
307
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(view)}/items").with_query(query).get
308
+ r.map { |x| ::Io::Flow::Catalog::V0::Models::Item.new(x) }
309
+ end
310
+
311
+ # Returns information about specific view items.
312
+ def get_by_id(organization, view, id)
313
+ HttpClient::Preconditions.assert_class('organization', organization, String)
314
+ HttpClient::Preconditions.assert_class('view', view, String)
315
+ HttpClient::Preconditions.assert_class('id', id, String)
316
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(view)}/items/#{CGI.escape(id)}").get
317
+ ::Io::Flow::Catalog::V0::Models::Item.new(r)
318
+ end
319
+
320
+ # Add view item
321
+ def post(organization, view, item_form)
322
+ HttpClient::Preconditions.assert_class('organization', organization, String)
323
+ HttpClient::Preconditions.assert_class('view', view, String)
324
+ HttpClient::Preconditions.assert_class('item_form', item_form, ::Io::Flow::Catalog::V0::Models::ItemForm)
325
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(view)}/items").with_json(item_form.to_json).post
326
+ ::Io::Flow::Catalog::V0::Models::View.new(r)
327
+ end
328
+
329
+ # Update view item with the specified id, creating if it does not exist.
330
+ def put_by_id(organization, view, id, item_form)
331
+ HttpClient::Preconditions.assert_class('organization', organization, String)
332
+ HttpClient::Preconditions.assert_class('view', view, String)
333
+ HttpClient::Preconditions.assert_class('id', id, String)
334
+ HttpClient::Preconditions.assert_class('item_form', item_form, ::Io::Flow::Catalog::V0::Models::ItemForm)
335
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(view)}/items/#{CGI.escape(id)}").with_json(item_form.to_json).put
336
+ ::Io::Flow::Catalog::V0::Models::Item.new(r)
337
+ end
338
+
339
+ # Delete the view item with this id
340
+ def delete_by_id(organization, view, id)
341
+ HttpClient::Preconditions.assert_class('organization', organization, String)
342
+ HttpClient::Preconditions.assert_class('view', view, String)
343
+ HttpClient::Preconditions.assert_class('id', id, String)
344
+ r = @client.request("/#{CGI.escape(organization)}/catalog/views/#{CGI.escape(view)}/items/#{CGI.escape(id)}").delete
345
+ nil
346
+ end
347
+
348
+ end
349
+
350
+ end
351
+
352
+ module Models
353
+
354
+ class Event
355
+
356
+ module Types
357
+ ITEM_CREATED = 'item_created' unless defined?(ITEM_CREATED)
358
+ ITEM_UPDATED = 'item_updated' unless defined?(ITEM_UPDATED)
359
+ ITEM_DELETED = 'item_deleted' unless defined?(ITEM_DELETED)
360
+ end
361
+
362
+ def initialize(incoming={})
363
+ opts = HttpClient::Helper.symbolize_keys(incoming)
364
+ HttpClient::Preconditions.require_keys(opts, [:name], 'Event')
365
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
366
+ end
367
+
368
+ def to_hash
369
+ subtype_to_hash.merge(:discriminator => @name)
370
+ end
371
+
372
+ def Event.from_json(hash)
373
+ HttpClient::Preconditions.assert_class('hash', hash, Hash)
374
+ case HttpClient::Helper.symbolize_keys(hash)[:discriminator]
375
+ when Types::ITEM_CREATED; ItemCreated.new(hash)
376
+ when Types::ITEM_UPDATED; ItemUpdated.new(hash)
377
+ when Types::ITEM_DELETED; ItemDeleted.new(hash)
378
+ else EventUndefinedType.new(:name => union_type_name)
379
+ end
380
+ end
381
+
382
+ end
383
+
384
+ class EventUndefinedType < Event
385
+
386
+ attr_reader :name
387
+
388
+ def initialize(incoming={})
389
+ super(:name => 'undefined_type')
390
+ opts = HttpClient::Helper.symbolize_keys(incoming)
391
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
392
+ end
393
+
394
+ def subtype_to_hash
395
+ raise 'Unable to serialize undefined type to json'
396
+ end
397
+
398
+ def copy(incoming={})
399
+ raise 'Operation not supported for undefined type'
400
+ end
401
+
402
+ def to_hash
403
+ raise 'Operation not supported for undefined type'
404
+ end
405
+
406
+ end
407
+
408
+ class UpdatePolicy
409
+
410
+ attr_reader :value
411
+
412
+ def initialize(value)
413
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
414
+ end
415
+
416
+ # Returns the instance of UpdatePolicy for this value, creating a new instance for an unknown value
417
+ def UpdatePolicy.apply(value)
418
+ if value.instance_of?(UpdatePolicy)
419
+ value
420
+ else
421
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
422
+ value.nil? ? nil : (from_string(value) || UpdatePolicy.new(value))
423
+ end
424
+ end
425
+
426
+ # Returns the instance of UpdatePolicy for this value, or nil if not found
427
+ def UpdatePolicy.from_string(value)
428
+ HttpClient::Preconditions.assert_class('value', value, String)
429
+ UpdatePolicy.ALL.find { |v| v.value == value }
430
+ end
431
+
432
+ def UpdatePolicy.ALL
433
+ @@all ||= [UpdatePolicy.auto, UpdatePolicy.queue, UpdatePolicy.discard]
434
+ end
435
+
436
+ def UpdatePolicy.auto
437
+ @@_auto ||= UpdatePolicy.new('auto')
438
+ end
439
+
440
+ # Queue item update for approval.
441
+ def UpdatePolicy.queue
442
+ @@_queue ||= UpdatePolicy.new('queue')
443
+ end
444
+
445
+ def UpdatePolicy.discard
446
+ @@_discard ||= UpdatePolicy.new('discard')
447
+ end
448
+
449
+ def to_hash
450
+ value
451
+ end
452
+
453
+ end
454
+
455
+ class Attribute
456
+
457
+ attr_reader :key, :value
458
+
459
+ def initialize(incoming={})
460
+ opts = HttpClient::Helper.symbolize_keys(incoming)
461
+ HttpClient::Preconditions.require_keys(opts, [:key, :value], 'Attribute')
462
+ @key = HttpClient::Preconditions.assert_class('key', opts.delete(:key), String)
463
+ @value = HttpClient::Preconditions.assert_class('value', opts.delete(:value), String)
464
+ end
465
+
466
+ def to_json
467
+ JSON.dump(to_hash)
468
+ end
469
+
470
+ def copy(incoming={})
471
+ Attribute.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
472
+ end
473
+
474
+ def to_hash
475
+ {
476
+ :key => key,
477
+ :value => value
478
+ }
479
+ end
480
+
481
+ end
482
+
483
+ class Catalog
484
+
485
+ attr_reader :id
486
+
487
+ def initialize(incoming={})
488
+ opts = HttpClient::Helper.symbolize_keys(incoming)
489
+ HttpClient::Preconditions.require_keys(opts, [:id], 'Catalog')
490
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
491
+ end
492
+
493
+ def to_json
494
+ JSON.dump(to_hash)
495
+ end
496
+
497
+ def copy(incoming={})
498
+ Catalog.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
499
+ end
500
+
501
+ def to_hash
502
+ {
503
+ :id => id
504
+ }
505
+ end
506
+
507
+ end
508
+
509
+ class CatalogItem
510
+
511
+ attr_reader :id, :catalog, :data
512
+
513
+ def initialize(incoming={})
514
+ opts = HttpClient::Helper.symbolize_keys(incoming)
515
+ HttpClient::Preconditions.require_keys(opts, [:id, :catalog, :data], 'CatalogItem')
516
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
517
+ @catalog = (x = opts.delete(:catalog); x.is_a?(::Io::Flow::Catalog::V0::Models::Catalog) ? x : ::Io::Flow::Catalog::V0::Models::Catalog.new(x))
518
+ @data = (x = opts.delete(:data); x.is_a?(::Io::Flow::Catalog::V0::Models::Item) ? x : ::Io::Flow::Catalog::V0::Models::Item.new(x))
519
+ end
520
+
521
+ def to_json
522
+ JSON.dump(to_hash)
523
+ end
524
+
525
+ def copy(incoming={})
526
+ CatalogItem.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
527
+ end
528
+
529
+ def to_hash
530
+ {
531
+ :id => id,
532
+ :catalog => catalog.to_hash,
533
+ :data => data.to_hash
534
+ }
535
+ end
536
+
537
+ end
538
+
539
+ class CatalogVersion
540
+
541
+ attr_reader :id, :timestamp, :type, :catalog
542
+
543
+ def initialize(incoming={})
544
+ opts = HttpClient::Helper.symbolize_keys(incoming)
545
+ HttpClient::Preconditions.require_keys(opts, [:id, :timestamp, :type, :catalog], 'CatalogVersion')
546
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
547
+ @timestamp = HttpClient::Preconditions.assert_class('timestamp', HttpClient::Helper.to_date_time_iso8601(opts.delete(:timestamp)), DateTime)
548
+ @type = (x = opts.delete(:type); x.is_a?(::Io::Flow::Common::V0::Models::ChangeType) ? x : ::Io::Flow::Common::V0::Models::ChangeType.apply(x))
549
+ @catalog = (x = opts.delete(:catalog); x.is_a?(::Io::Flow::Catalog::V0::Models::Catalog) ? x : ::Io::Flow::Catalog::V0::Models::Catalog.new(x))
550
+ end
551
+
552
+ def to_json
553
+ JSON.dump(to_hash)
554
+ end
555
+
556
+ def copy(incoming={})
557
+ CatalogVersion.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
558
+ end
559
+
560
+ def to_hash
561
+ {
562
+ :id => id,
563
+ :timestamp => timestamp,
564
+ :type => type.value,
565
+ :catalog => catalog.to_hash
566
+ }
567
+ end
568
+
569
+ end
570
+
571
+ class Codes
572
+
573
+ attr_reader :harmonized
574
+
575
+ def initialize(incoming={})
576
+ opts = HttpClient::Helper.symbolize_keys(incoming)
577
+ @harmonized = (x = opts.delete(:harmonized); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Catalog::V0::Models::Harmonized) ? x : ::Io::Flow::Catalog::V0::Models::Harmonized.new(x)))
578
+ end
579
+
580
+ def to_json
581
+ JSON.dump(to_hash)
582
+ end
583
+
584
+ def copy(incoming={})
585
+ Codes.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
586
+ end
587
+
588
+ def to_hash
589
+ {
590
+ :harmonized => harmonized.nil? ? nil : harmonized.to_hash
591
+ }
592
+ end
593
+
594
+ end
595
+
596
+ class Content
597
+
598
+ attr_reader :dimensions, :locale, :price, :title, :brand, :categories, :description, :images, :policies
599
+
600
+ def initialize(incoming={})
601
+ opts = HttpClient::Helper.symbolize_keys(incoming)
602
+ HttpClient::Preconditions.require_keys(opts, [:dimensions, :locale, :price], 'Content')
603
+ @dimensions = (x = opts.delete(:dimensions); x.is_a?(::Io::Flow::Catalog::V0::Models::Dimensions) ? x : ::Io::Flow::Catalog::V0::Models::Dimensions.new(x))
604
+ @locale = (x = opts.delete(:locale); x.is_a?(::Io::Flow::Catalog::V0::Models::Locale) ? x : ::Io::Flow::Catalog::V0::Models::Locale.new(x))
605
+ @price = (x = opts.delete(:price); x.is_a?(::Io::Flow::Catalog::V0::Models::Price) ? x : ::Io::Flow::Catalog::V0::Models::Price.new(x))
606
+ @title = HttpClient::Preconditions.assert_class('title', (x = opts.delete(:title); x.nil? ? "XXXX" : x), String)
607
+ @brand = (x = opts.delete(:brand); x.nil? ? nil : HttpClient::Preconditions.assert_class('brand', x, String))
608
+ @categories = HttpClient::Preconditions.assert_class('categories', (x = opts.delete(:categories); x.nil? ? [] : x), Array).map { |v| HttpClient::Preconditions.assert_class('categories', v, String) }
609
+ @description = (x = opts.delete(:description); x.nil? ? nil : HttpClient::Preconditions.assert_class('description', x, String))
610
+ @images = (x = opts.delete(:images); x.nil? ? nil : HttpClient::Preconditions.assert_class('images', x, Array).map { |v| (x = v; x.is_a?(::Io::Flow::Catalog::V0::Models::Image) ? x : ::Io::Flow::Catalog::V0::Models::Image.new(x)) })
611
+ @policies = (x = opts.delete(:policies); x.nil? ? nil : HttpClient::Preconditions.assert_class('policies', x, Array).map { |v| (x = v; x.is_a?(::Io::Flow::Catalog::V0::Models::Policy) ? x : ::Io::Flow::Catalog::V0::Models::Policy.new(x)) })
612
+ end
613
+
614
+ def to_json
615
+ JSON.dump(to_hash)
616
+ end
617
+
618
+ def copy(incoming={})
619
+ Content.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
620
+ end
621
+
622
+ def to_hash
623
+ {
624
+ :dimensions => dimensions.to_hash,
625
+ :locale => locale.to_hash,
626
+ :price => price.to_hash,
627
+ :title => title,
628
+ :brand => brand,
629
+ :categories => categories,
630
+ :description => description,
631
+ :images => images.nil? ? nil : images.map { |o| o.to_hash },
632
+ :policies => policies.nil? ? nil : policies.map { |o| o.to_hash }
633
+ }
634
+ end
635
+
636
+ end
637
+
638
+ class Dimension
639
+
640
+ attr_reader :units, :value
641
+
642
+ def initialize(incoming={})
643
+ opts = HttpClient::Helper.symbolize_keys(incoming)
644
+ HttpClient::Preconditions.require_keys(opts, [:units, :value], 'Dimension')
645
+ @units = (x = opts.delete(:units); x.is_a?(::Io::Flow::Common::V0::Models::UnitOfMeasurement) ? x : ::Io::Flow::Common::V0::Models::UnitOfMeasurement.apply(x))
646
+ @value = HttpClient::Preconditions.assert_class('value', opts.delete(:value), String)
647
+ end
648
+
649
+ def to_json
650
+ JSON.dump(to_hash)
651
+ end
652
+
653
+ def copy(incoming={})
654
+ Dimension.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
655
+ end
656
+
657
+ def to_hash
658
+ {
659
+ :units => units.value,
660
+ :value => value
661
+ }
662
+ end
663
+
664
+ end
665
+
666
+ class DimensionSpecification
667
+
668
+ attr_reader :depth, :length, :weight, :width
669
+
670
+ def initialize(incoming={})
671
+ opts = HttpClient::Helper.symbolize_keys(incoming)
672
+ @depth = (x = opts.delete(:depth); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Catalog::V0::Models::Dimension) ? x : ::Io::Flow::Catalog::V0::Models::Dimension.new(x)))
673
+ @length = (x = opts.delete(:length); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Catalog::V0::Models::Dimension) ? x : ::Io::Flow::Catalog::V0::Models::Dimension.new(x)))
674
+ @weight = (x = opts.delete(:weight); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Catalog::V0::Models::Dimension) ? x : ::Io::Flow::Catalog::V0::Models::Dimension.new(x)))
675
+ @width = (x = opts.delete(:width); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Catalog::V0::Models::Dimension) ? x : ::Io::Flow::Catalog::V0::Models::Dimension.new(x)))
676
+ end
677
+
678
+ def to_json
679
+ JSON.dump(to_hash)
680
+ end
681
+
682
+ def copy(incoming={})
683
+ DimensionSpecification.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
684
+ end
685
+
686
+ def to_hash
687
+ {
688
+ :depth => depth.nil? ? nil : depth.to_hash,
689
+ :length => length.nil? ? nil : length.to_hash,
690
+ :weight => weight.nil? ? nil : weight.to_hash,
691
+ :width => width.nil? ? nil : width.to_hash
692
+ }
693
+ end
694
+
695
+ end
696
+
697
+ class Dimensions
698
+
699
+ attr_reader :physical, :shipping
700
+
701
+ def initialize(incoming={})
702
+ opts = HttpClient::Helper.symbolize_keys(incoming)
703
+ @physical = (x = opts.delete(:physical); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Catalog::V0::Models::DimensionSpecification) ? x : ::Io::Flow::Catalog::V0::Models::DimensionSpecification.new(x)))
704
+ @shipping = (x = opts.delete(:shipping); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Catalog::V0::Models::DimensionSpecification) ? x : ::Io::Flow::Catalog::V0::Models::DimensionSpecification.new(x)))
705
+ end
706
+
707
+ def to_json
708
+ JSON.dump(to_hash)
709
+ end
710
+
711
+ def copy(incoming={})
712
+ Dimensions.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
713
+ end
714
+
715
+ def to_hash
716
+ {
717
+ :physical => physical.nil? ? nil : physical.to_hash,
718
+ :shipping => shipping.nil? ? nil : shipping.to_hash
719
+ }
720
+ end
721
+
722
+ end
723
+
724
+ class Harmonized
725
+
726
+ attr_reader :hs6, :hs10
727
+
728
+ def initialize(incoming={})
729
+ opts = HttpClient::Helper.symbolize_keys(incoming)
730
+ @hs6 = (x = opts.delete(:hs6); x.nil? ? nil : HttpClient::Preconditions.assert_class('hs6', x, String))
731
+ @hs10 = (x = opts.delete(:hs10); x.nil? ? nil : HttpClient::Preconditions.assert_class('hs10', x, Array).map { |v| (x = v; x.is_a?(::Io::Flow::Catalog::V0::Models::HarmonizedGeo) ? x : ::Io::Flow::Catalog::V0::Models::HarmonizedGeo.new(x)) })
732
+ end
733
+
734
+ def to_json
735
+ JSON.dump(to_hash)
736
+ end
737
+
738
+ def copy(incoming={})
739
+ Harmonized.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
740
+ end
741
+
742
+ def to_hash
743
+ {
744
+ :hs6 => hs6,
745
+ :hs10 => hs10.nil? ? nil : hs10.map { |o| o.to_hash }
746
+ }
747
+ end
748
+
749
+ end
750
+
751
+ class HarmonizedGeo
752
+
753
+ attr_reader :code, :from, :to
754
+
755
+ def initialize(incoming={})
756
+ opts = HttpClient::Helper.symbolize_keys(incoming)
757
+ @code = (x = opts.delete(:code); x.nil? ? nil : HttpClient::Preconditions.assert_class('code', x, String))
758
+ @from = (x = opts.delete(:from); x.nil? ? nil : HttpClient::Preconditions.assert_class('from', x, String))
759
+ @to = (x = opts.delete(:to); x.nil? ? nil : HttpClient::Preconditions.assert_class('to', x, String))
760
+ end
761
+
762
+ def to_json
763
+ JSON.dump(to_hash)
764
+ end
765
+
766
+ def copy(incoming={})
767
+ HarmonizedGeo.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
768
+ end
769
+
770
+ def to_hash
771
+ {
772
+ :code => code,
773
+ :from => from,
774
+ :to => to
775
+ }
776
+ end
777
+
778
+ end
779
+
780
+ class Image
781
+
782
+ attr_reader :tags, :url
783
+
784
+ def initialize(incoming={})
785
+ opts = HttpClient::Helper.symbolize_keys(incoming)
786
+ HttpClient::Preconditions.require_keys(opts, [:url], 'Image')
787
+ @tags = HttpClient::Preconditions.assert_class('tags', (x = opts.delete(:tags); x.nil? ? [] : x), Array).map { |v| HttpClient::Preconditions.assert_class('tags', v, String) }
788
+ @url = HttpClient::Preconditions.assert_class('url', opts.delete(:url), String)
789
+ end
790
+
791
+ def to_json
792
+ JSON.dump(to_hash)
793
+ end
794
+
795
+ def copy(incoming={})
796
+ Image.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
797
+ end
798
+
799
+ def to_hash
800
+ {
801
+ :tags => tags,
802
+ :url => url
803
+ }
804
+ end
805
+
806
+ end
807
+
808
+ class Item
809
+
810
+ attr_reader :id, :number, :attributes, :codes, :content, :metadata
811
+
812
+ def initialize(incoming={})
813
+ opts = HttpClient::Helper.symbolize_keys(incoming)
814
+ HttpClient::Preconditions.require_keys(opts, [:id, :number, :codes, :content, :metadata], 'Item')
815
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
816
+ @number = HttpClient::Preconditions.assert_class('number', opts.delete(:number), String)
817
+ @attributes = HttpClient::Preconditions.assert_class('attributes', (x = opts.delete(:attributes); x.nil? ? [] : x), Array).map { |v| (x = v; x.is_a?(::Io::Flow::Catalog::V0::Models::Attribute) ? x : ::Io::Flow::Catalog::V0::Models::Attribute.new(x)) }
818
+ @codes = (x = opts.delete(:codes); x.is_a?(::Io::Flow::Catalog::V0::Models::Codes) ? x : ::Io::Flow::Catalog::V0::Models::Codes.new(x))
819
+ @content = HttpClient::Preconditions.assert_class('content', opts.delete(:content), Array).map { |v| (x = v; x.is_a?(::Io::Flow::Catalog::V0::Models::Content) ? x : ::Io::Flow::Catalog::V0::Models::Content.new(x)) }
820
+ @metadata = HttpClient::Preconditions.assert_class('metadata', opts.delete(:metadata), Hash).inject({}) { |h, d| h[d[0]] = HttpClient::Preconditions.assert_class('metadata', d[1], String); h }
821
+ end
822
+
823
+ def to_json
824
+ JSON.dump(to_hash)
825
+ end
826
+
827
+ def copy(incoming={})
828
+ Item.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
829
+ end
830
+
831
+ def to_hash
832
+ {
833
+ :id => id,
834
+ :number => number,
835
+ :attributes => attributes.map { |o| o.to_hash },
836
+ :codes => codes.to_hash,
837
+ :content => content.map { |o| o.to_hash },
838
+ :metadata => metadata
839
+ }
840
+ end
841
+
842
+ end
843
+
844
+ class ItemCreated < Event
845
+
846
+ attr_reader :id
847
+
848
+ def initialize(incoming={})
849
+ super(:name => Event::Types::ITEM_CREATED)
850
+ opts = HttpClient::Helper.symbolize_keys(incoming)
851
+ HttpClient::Preconditions.require_keys(opts, [:id], 'ItemCreated')
852
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
853
+ end
854
+
855
+ def to_json
856
+ JSON.dump(to_hash)
857
+ end
858
+
859
+ def copy(incoming={})
860
+ ItemCreated.new(subtype_to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
861
+ end
862
+
863
+ def subtype_to_hash
864
+ {
865
+ :id => id
866
+ }
867
+ end
868
+
869
+ end
870
+
871
+ class ItemDeleted < Event
872
+
873
+ attr_reader :id
874
+
875
+ def initialize(incoming={})
876
+ super(:name => Event::Types::ITEM_DELETED)
877
+ opts = HttpClient::Helper.symbolize_keys(incoming)
878
+ HttpClient::Preconditions.require_keys(opts, [:id], 'ItemDeleted')
879
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
880
+ end
881
+
882
+ def to_json
883
+ JSON.dump(to_hash)
884
+ end
885
+
886
+ def copy(incoming={})
887
+ ItemDeleted.new(subtype_to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
888
+ end
889
+
890
+ def subtype_to_hash
891
+ {
892
+ :id => id
893
+ }
894
+ end
895
+
896
+ end
897
+
898
+ class ItemForm
899
+
900
+ attr_reader :attributes, :codes, :content, :metadata, :number
901
+
902
+ def initialize(incoming={})
903
+ opts = HttpClient::Helper.symbolize_keys(incoming)
904
+ HttpClient::Preconditions.require_keys(opts, [:codes, :content, :metadata, :number], 'ItemForm')
905
+ @attributes = HttpClient::Preconditions.assert_class('attributes', (x = opts.delete(:attributes); x.nil? ? [] : x), Array).map { |v| (x = v; x.is_a?(::Io::Flow::Catalog::V0::Models::Attribute) ? x : ::Io::Flow::Catalog::V0::Models::Attribute.new(x)) }
906
+ @codes = (x = opts.delete(:codes); x.is_a?(::Io::Flow::Catalog::V0::Models::Codes) ? x : ::Io::Flow::Catalog::V0::Models::Codes.new(x))
907
+ @content = HttpClient::Preconditions.assert_class('content', opts.delete(:content), Array).map { |v| (x = v; x.is_a?(::Io::Flow::Catalog::V0::Models::Content) ? x : ::Io::Flow::Catalog::V0::Models::Content.new(x)) }
908
+ @metadata = HttpClient::Preconditions.assert_class('metadata', opts.delete(:metadata), Hash).inject({}) { |h, d| h[d[0]] = HttpClient::Preconditions.assert_class('metadata', d[1], String); h }
909
+ @number = HttpClient::Preconditions.assert_class('number', opts.delete(:number), String)
910
+ end
911
+
912
+ def to_json
913
+ JSON.dump(to_hash)
914
+ end
915
+
916
+ def copy(incoming={})
917
+ ItemForm.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
918
+ end
919
+
920
+ def to_hash
921
+ {
922
+ :attributes => attributes.map { |o| o.to_hash },
923
+ :codes => codes.to_hash,
924
+ :content => content.map { |o| o.to_hash },
925
+ :metadata => metadata,
926
+ :number => number
927
+ }
928
+ end
929
+
930
+ end
931
+
932
+ class ItemUpdated < Event
933
+
934
+ attr_reader :id
935
+
936
+ def initialize(incoming={})
937
+ super(:name => Event::Types::ITEM_UPDATED)
938
+ opts = HttpClient::Helper.symbolize_keys(incoming)
939
+ HttpClient::Preconditions.require_keys(opts, [:id], 'ItemUpdated')
940
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
941
+ end
942
+
943
+ def to_json
944
+ JSON.dump(to_hash)
945
+ end
946
+
947
+ def copy(incoming={})
948
+ ItemUpdated.new(subtype_to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
949
+ end
950
+
951
+ def subtype_to_hash
952
+ {
953
+ :id => id
954
+ }
955
+ end
956
+
957
+ end
958
+
959
+ class ItemVersion
960
+
961
+ attr_reader :id, :timestamp, :type, :item
962
+
963
+ def initialize(incoming={})
964
+ opts = HttpClient::Helper.symbolize_keys(incoming)
965
+ HttpClient::Preconditions.require_keys(opts, [:id, :timestamp, :type, :item], 'ItemVersion')
966
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
967
+ @timestamp = HttpClient::Preconditions.assert_class('timestamp', HttpClient::Helper.to_date_time_iso8601(opts.delete(:timestamp)), DateTime)
968
+ @type = (x = opts.delete(:type); x.is_a?(::Io::Flow::Common::V0::Models::ChangeType) ? x : ::Io::Flow::Common::V0::Models::ChangeType.apply(x))
969
+ @item = (x = opts.delete(:item); x.is_a?(::Io::Flow::Catalog::V0::Models::Item) ? x : ::Io::Flow::Catalog::V0::Models::Item.new(x))
970
+ end
971
+
972
+ def to_json
973
+ JSON.dump(to_hash)
974
+ end
975
+
976
+ def copy(incoming={})
977
+ ItemVersion.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
978
+ end
979
+
980
+ def to_hash
981
+ {
982
+ :id => id,
983
+ :timestamp => timestamp,
984
+ :type => type.value,
985
+ :item => item.to_hash
986
+ }
987
+ end
988
+
989
+ end
990
+
991
+ class Locale
992
+
993
+ attr_reader :country, :language
994
+
995
+ def initialize(incoming={})
996
+ opts = HttpClient::Helper.symbolize_keys(incoming)
997
+ @country = (x = opts.delete(:country); x.nil? ? nil : HttpClient::Preconditions.assert_class('country', x, String))
998
+ @language = (x = opts.delete(:language); x.nil? ? nil : HttpClient::Preconditions.assert_class('language', x, String))
999
+ end
1000
+
1001
+ def to_json
1002
+ JSON.dump(to_hash)
1003
+ end
1004
+
1005
+ def copy(incoming={})
1006
+ Locale.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1007
+ end
1008
+
1009
+ def to_hash
1010
+ {
1011
+ :country => country,
1012
+ :language => language
1013
+ }
1014
+ end
1015
+
1016
+ end
1017
+
1018
+ class Policy
1019
+
1020
+ attr_reader :id
1021
+
1022
+ def initialize(incoming={})
1023
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1024
+ HttpClient::Preconditions.require_keys(opts, [:id], 'Policy')
1025
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
1026
+ end
1027
+
1028
+ def to_json
1029
+ JSON.dump(to_hash)
1030
+ end
1031
+
1032
+ def copy(incoming={})
1033
+ Policy.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1034
+ end
1035
+
1036
+ def to_hash
1037
+ {
1038
+ :id => id
1039
+ }
1040
+ end
1041
+
1042
+ end
1043
+
1044
+ class Price
1045
+
1046
+ attr_reader :current, :msrp
1047
+
1048
+ def initialize(incoming={})
1049
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1050
+ @current = (x = opts.delete(:current); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Common::V0::Models::Price) ? x : ::Io::Flow::Common::V0::Models::Price.new(x)))
1051
+ @msrp = (x = opts.delete(:msrp); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Common::V0::Models::Price) ? x : ::Io::Flow::Common::V0::Models::Price.new(x)))
1052
+ end
1053
+
1054
+ def to_json
1055
+ JSON.dump(to_hash)
1056
+ end
1057
+
1058
+ def copy(incoming={})
1059
+ Price.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1060
+ end
1061
+
1062
+ def to_hash
1063
+ {
1064
+ :current => current.nil? ? nil : current.to_hash,
1065
+ :msrp => msrp.nil? ? nil : msrp.to_hash
1066
+ }
1067
+ end
1068
+
1069
+ end
1070
+
1071
+ class View
1072
+
1073
+ attr_reader :id, :catalog, :key, :countries, :currency, :query, :settings
1074
+
1075
+ def initialize(incoming={})
1076
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1077
+ HttpClient::Preconditions.require_keys(opts, [:id, :catalog, :key, :countries, :currency, :query, :settings], 'View')
1078
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
1079
+ @catalog = (x = opts.delete(:catalog); x.is_a?(::Io::Flow::Catalog::V0::Models::Catalog) ? x : ::Io::Flow::Catalog::V0::Models::Catalog.new(x))
1080
+ @key = HttpClient::Preconditions.assert_class('key', opts.delete(:key), String)
1081
+ @countries = HttpClient::Preconditions.assert_class('countries', opts.delete(:countries), Array).map { |v| HttpClient::Preconditions.assert_class('countries', v, String) }
1082
+ @currency = HttpClient::Preconditions.assert_class('currency', opts.delete(:currency), String)
1083
+ @query = HttpClient::Preconditions.assert_class('query', opts.delete(:query), String)
1084
+ @settings = (x = opts.delete(:settings); x.is_a?(::Io::Flow::Catalog::V0::Models::ViewSettings) ? x : ::Io::Flow::Catalog::V0::Models::ViewSettings.new(x))
1085
+ end
1086
+
1087
+ def to_json
1088
+ JSON.dump(to_hash)
1089
+ end
1090
+
1091
+ def copy(incoming={})
1092
+ View.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1093
+ end
1094
+
1095
+ def to_hash
1096
+ {
1097
+ :id => id,
1098
+ :catalog => catalog.to_hash,
1099
+ :key => key,
1100
+ :countries => countries,
1101
+ :currency => currency,
1102
+ :query => query,
1103
+ :settings => settings.to_hash
1104
+ }
1105
+ end
1106
+
1107
+ end
1108
+
1109
+ class ViewForm
1110
+
1111
+ attr_reader :key, :countries, :currency, :query, :settings
1112
+
1113
+ def initialize(incoming={})
1114
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1115
+ HttpClient::Preconditions.require_keys(opts, [:key, :countries, :currency, :query, :settings], 'ViewForm')
1116
+ @key = HttpClient::Preconditions.assert_class('key', opts.delete(:key), String)
1117
+ @countries = HttpClient::Preconditions.assert_class('countries', opts.delete(:countries), Array).map { |v| HttpClient::Preconditions.assert_class('countries', v, String) }
1118
+ @currency = HttpClient::Preconditions.assert_class('currency', opts.delete(:currency), String)
1119
+ @query = HttpClient::Preconditions.assert_class('query', opts.delete(:query), String)
1120
+ @settings = (x = opts.delete(:settings); x.is_a?(::Io::Flow::Catalog::V0::Models::ViewSettingsForm) ? x : ::Io::Flow::Catalog::V0::Models::ViewSettingsForm.new(x))
1121
+ end
1122
+
1123
+ def to_json
1124
+ JSON.dump(to_hash)
1125
+ end
1126
+
1127
+ def copy(incoming={})
1128
+ ViewForm.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1129
+ end
1130
+
1131
+ def to_hash
1132
+ {
1133
+ :key => key,
1134
+ :countries => countries,
1135
+ :currency => currency,
1136
+ :query => query,
1137
+ :settings => settings.to_hash
1138
+ }
1139
+ end
1140
+
1141
+ end
1142
+
1143
+ class ViewItem
1144
+
1145
+ attr_reader :id, :data
1146
+
1147
+ def initialize(incoming={})
1148
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1149
+ HttpClient::Preconditions.require_keys(opts, [:id, :data], 'ViewItem')
1150
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
1151
+ @data = (x = opts.delete(:data); x.is_a?(::Io::Flow::Catalog::V0::Models::Item) ? x : ::Io::Flow::Catalog::V0::Models::Item.new(x))
1152
+ end
1153
+
1154
+ def to_json
1155
+ JSON.dump(to_hash)
1156
+ end
1157
+
1158
+ def copy(incoming={})
1159
+ ViewItem.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1160
+ end
1161
+
1162
+ def to_hash
1163
+ {
1164
+ :id => id,
1165
+ :data => data.to_hash
1166
+ }
1167
+ end
1168
+
1169
+ end
1170
+
1171
+ class ViewSettings
1172
+
1173
+ attr_reader :update_policy
1174
+
1175
+ def initialize(incoming={})
1176
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1177
+ @update_policy = (x = (x = opts.delete(:update_policy); x.nil? ? "auto" : x); x.is_a?(::Io::Flow::Catalog::V0::Models::UpdatePolicy) ? x : ::Io::Flow::Catalog::V0::Models::UpdatePolicy.apply(x))
1178
+ end
1179
+
1180
+ def to_json
1181
+ JSON.dump(to_hash)
1182
+ end
1183
+
1184
+ def copy(incoming={})
1185
+ ViewSettings.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1186
+ end
1187
+
1188
+ def to_hash
1189
+ {
1190
+ :update_policy => update_policy.value
1191
+ }
1192
+ end
1193
+
1194
+ end
1195
+
1196
+ class ViewSettingsForm
1197
+
1198
+ attr_reader :update_policy
1199
+
1200
+ def initialize(incoming={})
1201
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1202
+ @update_policy = (x = opts.delete(:update_policy); x.nil? ? nil : (x = x; x.is_a?(::Io::Flow::Catalog::V0::Models::UpdatePolicy) ? x : ::Io::Flow::Catalog::V0::Models::UpdatePolicy.apply(x)))
1203
+ end
1204
+
1205
+ def to_json
1206
+ JSON.dump(to_hash)
1207
+ end
1208
+
1209
+ def copy(incoming={})
1210
+ ViewSettingsForm.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1211
+ end
1212
+
1213
+ def to_hash
1214
+ {
1215
+ :update_policy => update_policy.nil? ? nil : update_policy.value
1216
+ }
1217
+ end
1218
+
1219
+ end
1220
+
1221
+ class ViewVersion
1222
+
1223
+ attr_reader :id, :timestamp, :type, :view
1224
+
1225
+ def initialize(incoming={})
1226
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1227
+ HttpClient::Preconditions.require_keys(opts, [:id, :timestamp, :type, :view], 'ViewVersion')
1228
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
1229
+ @timestamp = HttpClient::Preconditions.assert_class('timestamp', HttpClient::Helper.to_date_time_iso8601(opts.delete(:timestamp)), DateTime)
1230
+ @type = (x = opts.delete(:type); x.is_a?(::Io::Flow::Common::V0::Models::ChangeType) ? x : ::Io::Flow::Common::V0::Models::ChangeType.apply(x))
1231
+ @view = (x = opts.delete(:view); x.is_a?(::Io::Flow::Catalog::V0::Models::View) ? x : ::Io::Flow::Catalog::V0::Models::View.new(x))
1232
+ end
1233
+
1234
+ def to_json
1235
+ JSON.dump(to_hash)
1236
+ end
1237
+
1238
+ def copy(incoming={})
1239
+ ViewVersion.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1240
+ end
1241
+
1242
+ def to_hash
1243
+ {
1244
+ :id => id,
1245
+ :timestamp => timestamp,
1246
+ :type => type.value,
1247
+ :view => view.to_hash
1248
+ }
1249
+ end
1250
+
1251
+ end
1252
+
1253
+ end
1254
+
1255
+ # ===== END OF SERVICE DEFINITION =====
1256
+ module HttpClient
1257
+
1258
+ class Request
1259
+
1260
+ def initialize(uri)
1261
+ @uri = Preconditions.assert_class('uri', uri, URI)
1262
+ @params = nil
1263
+ @body = nil
1264
+ @auth = nil
1265
+ @headers = {}
1266
+ @header_keys_lower_case = []
1267
+ end
1268
+
1269
+ def with_header(name, value)
1270
+ Preconditions.check_not_blank('name', name, "Header name is required")
1271
+ Preconditions.check_not_blank('value', value, "Header value is required")
1272
+ Preconditions.check_state(!@headers.has_key?(name),
1273
+ "Duplicate header named[%s]" % name)
1274
+ @headers[name] = value
1275
+ @header_keys_lower_case << name.downcase
1276
+ self
1277
+ end
1278
+
1279
+ def with_auth(auth)
1280
+ Preconditions.assert_class('auth', auth, HttpClient::Authorization)
1281
+ Preconditions.check_state(@auth.nil?, "auth previously set")
1282
+
1283
+ if auth.scheme.name == AuthScheme::BASIC.name
1284
+ @auth = auth
1285
+ else
1286
+ raise "Auth Scheme[#{auth.scheme.name}] not supported"
1287
+ end
1288
+ self
1289
+ end
1290
+
1291
+ def with_query(params)
1292
+ Preconditions.assert_class('params', params, Hash)
1293
+ Preconditions.check_state(@params.nil?, "Already have query parameters")
1294
+ @params = params
1295
+ self
1296
+ end
1297
+
1298
+ # Wrapper to set Content-Type header to application/json and set
1299
+ # the provided json document as the body
1300
+ def with_json(json)
1301
+ @headers['Content-Type'] ||= 'application/json; charset=UTF-8'
1302
+ with_body(json)
1303
+ end
1304
+
1305
+ def with_body(body)
1306
+ Preconditions.check_not_blank('body', body)
1307
+ @body = body
1308
+ self
1309
+ end
1310
+
1311
+ # Creates a new Net:HTTP client. The client returned should be
1312
+ # fully configured to make a request.
1313
+ def new_http_client
1314
+ client = Net::HTTP.new(@uri.host, @uri.port)
1315
+ if @uri.scheme == "https"
1316
+ configure_ssl(client)
1317
+ end
1318
+ client
1319
+ end
1320
+
1321
+ # If HTTP is required, this method accepts an HTTP Client and configures SSL
1322
+ def configure_ssl(client)
1323
+ Preconditions.assert_class('client', client, Net::HTTP)
1324
+ client.use_ssl = true
1325
+ client.verify_mode = OpenSSL::SSL::VERIFY_PEER
1326
+ client.cert_store = OpenSSL::X509::Store.new
1327
+ client.cert_store.set_default_paths
1328
+ end
1329
+
1330
+ def get(&block)
1331
+ do_request(Net::HTTP::Get, &block)
1332
+ end
1333
+
1334
+ def delete(&block)
1335
+ do_request(Net::HTTP::Delete, &block)
1336
+ end
1337
+
1338
+ def options(&block)
1339
+ do_request(Net::HTTP::Options, &block)
1340
+ end
1341
+
1342
+ def post(&block)
1343
+ do_request(Net::HTTP::Post, &block)
1344
+ end
1345
+
1346
+ def put(&block)
1347
+ do_request(Net::HTTP::Put, &block)
1348
+ end
1349
+
1350
+ class PATCH < Net::HTTP::Put
1351
+ METHOD = "PATCH"
1352
+ end
1353
+
1354
+ def patch(&block)
1355
+ do_request(PATCH, &block)
1356
+ end
1357
+
1358
+ def do_request(klass)
1359
+ Preconditions.assert_class('klass', klass, Class)
1360
+
1361
+ uri = @uri.to_s
1362
+ if q = to_query(@params)
1363
+ uri += "?%s" % q
1364
+ end
1365
+
1366
+ request = klass.send(:new, uri)
1367
+
1368
+ curl = ['curl']
1369
+ if klass != Net::HTTP::Get
1370
+ curl << "-X%s" % klass.name.split("::").last.upcase
1371
+ end
1372
+
1373
+ if @body
1374
+ # DEBUG path = "/tmp/rest_client.tmp"
1375
+ # DEBUG File.open(path, "w") { |os| os << @body.to_s }
1376
+ # DEBUG curl << "-d@%s" % path
1377
+ request.body = @body
1378
+ end
1379
+
1380
+ if @auth
1381
+ curl << "-u \"%s:%s\"" % [@auth.username, @auth.password]
1382
+ Preconditions.check_state(!@header_keys_lower_case.include?("authorization"),
1383
+ "Cannot specify both an Authorization header and an auth instance")
1384
+ user_pass = "%s:%s" % [@auth.username, @auth.password]
1385
+ encoded = Base64.encode64(user_pass).to_s.split("\n").map(&:strip).join
1386
+ request.add_field("Authorization", "Basic %s" % encoded)
1387
+ end
1388
+
1389
+ @headers.each { |key, value|
1390
+ curl << "-H \"%s: %s\"" % [key, value]
1391
+ request.add_field(key, value)
1392
+ }
1393
+
1394
+ curl << "'%s'" % uri
1395
+ # DEBUG puts curl.join(" ")
1396
+
1397
+ raw_response = http_request(request)
1398
+ response = raw_response.to_s == "" ? nil : JSON.parse(raw_response)
1399
+
1400
+ if block_given?
1401
+ yield response
1402
+ else
1403
+ response
1404
+ end
1405
+ end
1406
+
1407
+ private
1408
+ def to_query(params={})
1409
+ parts = (params || {}).map { |k,v|
1410
+ if v.respond_to?(:each)
1411
+ v.map { |el| "%s=%s" % [k, CGI.escape(el.to_s)] }
1412
+ else
1413
+ "%s=%s" % [k, CGI.escape(v.to_s)]
1414
+ end
1415
+ }
1416
+ parts.empty? ? nil : parts.join("&")
1417
+ end
1418
+
1419
+ def http_request(request)
1420
+ response = begin
1421
+ new_http_client.request(request)
1422
+ rescue SocketError => e
1423
+ raise Exception.new("Error accessing uri[#{@uri}]: #{e}")
1424
+ end
1425
+
1426
+ case response
1427
+ when Net::HTTPSuccess
1428
+ response.body
1429
+ else
1430
+ body = response.body rescue nil
1431
+ raise HttpClient::ServerError.new(response.code.to_i, response.message, :body => body, :uri => @uri.to_s)
1432
+ end
1433
+ end
1434
+ end
1435
+
1436
+ class ServerError < StandardError
1437
+
1438
+ attr_reader :code, :details, :body, :uri
1439
+
1440
+ def initialize(code, details, incoming={})
1441
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1442
+ @code = HttpClient::Preconditions.assert_class('code', code, Integer)
1443
+ @details = HttpClient::Preconditions.assert_class('details', details, String)
1444
+ @body = HttpClient::Preconditions.assert_class_or_nil('body', opts.delete(:body), String)
1445
+ @uri = HttpClient::Preconditions.assert_class_or_nil('uri', opts.delete(:uri), String)
1446
+ HttpClient::Preconditions.assert_empty_opts(opts)
1447
+ super(self.message)
1448
+ end
1449
+
1450
+ def message
1451
+ m = "%s %s" % [@code, @details]
1452
+ if @body
1453
+ m << ": %s" % @body
1454
+ end
1455
+ m
1456
+ end
1457
+
1458
+ def body_json
1459
+ JSON.parse(@body)
1460
+ end
1461
+
1462
+ end
1463
+
1464
+ class PreconditionException < Exception
1465
+
1466
+ attr_reader :message
1467
+
1468
+ def initialize(message)
1469
+ super(message)
1470
+ @message = message
1471
+ end
1472
+
1473
+ end
1474
+
1475
+ module Preconditions
1476
+
1477
+ def Preconditions.check_argument(expression, error_message=nil)
1478
+ if !expression
1479
+ raise PreconditionException.new(error_message || "check_argument failed")
1480
+ end
1481
+ nil
1482
+ end
1483
+
1484
+ def Preconditions.check_state(expression, error_message=nil)
1485
+ if !expression
1486
+ raise PreconditionException.new(error_message || "check_state failed")
1487
+ end
1488
+ nil
1489
+ end
1490
+
1491
+ def Preconditions.check_not_nil(field_name, reference, error_message=nil)
1492
+ if reference.nil?
1493
+ raise PreconditionException.new(error_message || "argument for %s cannot be nil" % field_name)
1494
+ end
1495
+ reference
1496
+ end
1497
+
1498
+ def Preconditions.check_not_blank(field_name, reference, error_message=nil)
1499
+ if reference.to_s.strip == ""
1500
+ raise PreconditionException.new(error_message || "argument for %s cannot be blank" % field_name)
1501
+ end
1502
+ reference
1503
+ end
1504
+
1505
+ # Throws an error if opts is not empty. Useful when parsing
1506
+ # arguments to a function
1507
+ def Preconditions.assert_empty_opts(opts)
1508
+ if !opts.empty?
1509
+ raise PreconditionException.new("Invalid opts: #{opts.keys.inspect}\n#{opts.inspect}")
1510
+ end
1511
+ end
1512
+
1513
+ # Requires that the provided hash has the specified keys.
1514
+ # @param fields A list of symbols
1515
+ def Preconditions.require_keys(hash, fields, error_prefix=nil)
1516
+ missing = fields.select { |f| !hash.has_key?(f) }
1517
+ if !missing.empty?
1518
+ msg = "Missing required fields: " + missing.join(", ")
1519
+ raise PreconditionException.new(error_prefix.empty? ? msg : "#{error_prefix}: #{msg}")
1520
+ end
1521
+ end
1522
+
1523
+ # Asserts that value is not nill and is_?(klass). Returns
1524
+ # value. Common use is
1525
+ #
1526
+ # amount = Preconditions.assert_class('amount', amount, BigDecimal)
1527
+ def Preconditions.assert_class(field_name, value, klass)
1528
+ Preconditions.check_not_nil('field_name', field_name)
1529
+ Preconditions.check_not_nil('klass', klass)
1530
+ Preconditions.check_not_nil('value', value, "Value for %s cannot be nil. Expected an instance of class %s" % [field_name, klass.name])
1531
+ Preconditions.check_state(value.is_a?(klass),
1532
+ "Value for #{field_name} is of type[#{value.class}] - class[#{klass}] is required. value[#{value.inspect.to_s}]")
1533
+ value
1534
+ end
1535
+
1536
+ def Preconditions.assert_class_or_nil(field_name, value, klass)
1537
+ if !value.nil?
1538
+ Preconditions.assert_class(field_name, value, klass)
1539
+ end
1540
+ end
1541
+
1542
+ def Preconditions.assert_boolean(field_name, value)
1543
+ Preconditions.check_not_nil('field_name', field_name)
1544
+ Preconditions.check_not_nil('value', value, "Value for %s cannot be nil. Expected an instance of TrueClass or FalseClass" % field_name)
1545
+ Preconditions.check_state(value.is_a?(TrueClass) || value.is_a?(FalseClass),
1546
+ "Value for #{field_name} is of type[#{value.class}] - class[TrueClass or FalseClass] is required. value[#{value.inspect.to_s}]")
1547
+ value
1548
+ end
1549
+
1550
+ def Preconditions.assert_boolean_or_nil(field_name, value)
1551
+ if !value.nil?
1552
+ Preconditions.assert_boolean(field_name, value)
1553
+ end
1554
+ end
1555
+
1556
+ def Preconditions.assert_collection_of_class(field_name, values, klass)
1557
+ Preconditions.assert_class(field_name, values, Array)
1558
+ values.each { |v| Preconditions.assert_class(field_name, v, klass) }
1559
+ end
1560
+
1561
+ def Preconditions.assert_hash_of_class(field_name, hash, klass)
1562
+ Preconditions.assert_class(field_name, hash, Hash)
1563
+ values.each { |k, v| Preconditions.assert_class(field_name, v, klass) }
1564
+ end
1565
+
1566
+ end
1567
+
1568
+ class AuthScheme
1569
+
1570
+ attr_reader :name
1571
+
1572
+ def initialize(name)
1573
+ @name = HttpClient::Preconditions.check_not_blank('name', name)
1574
+ end
1575
+
1576
+ BASIC = AuthScheme.new("basic") unless defined?(BASIC)
1577
+
1578
+ end
1579
+
1580
+ class Authorization
1581
+
1582
+ attr_reader :scheme, :username, :password
1583
+
1584
+ def initialize(scheme, username, opts={})
1585
+ @scheme = HttpClient::Preconditions.assert_class('schema', scheme, AuthScheme)
1586
+ @username = HttpClient::Preconditions.check_not_blank('username', username, "username is required")
1587
+ @password = HttpClient::Preconditions.assert_class_or_nil('password', opts.delete(:password), String)
1588
+ HttpClient::Preconditions.assert_empty_opts(opts)
1589
+ end
1590
+
1591
+ def Authorization.basic(username, password=nil)
1592
+ Authorization.new(AuthScheme::BASIC, username, :password => password)
1593
+ end
1594
+
1595
+ end
1596
+
1597
+ module Helper
1598
+
1599
+ def Helper.symbolize_keys(hash)
1600
+ Preconditions.assert_class('hash', hash, Hash)
1601
+ new_hash = {}
1602
+ hash.each { |k, v|
1603
+ new_hash[k.to_sym] = v
1604
+ }
1605
+ new_hash
1606
+ end
1607
+
1608
+ def Helper.to_big_decimal(value)
1609
+ value ? BigDecimal.new(value.to_s) : nil
1610
+ end
1611
+
1612
+ def Helper.to_object(value)
1613
+ value ? JSON.parse(value) : nil
1614
+ end
1615
+
1616
+ def Helper.to_uuid(value)
1617
+ Preconditions.check_state(value.nil? || value.match(/^\w\w\w\w\w\w\w\w\-\w\w\w\w\-\w\w\w\w\-\w\w\w\w\-\w\w\w\w\w\w\w\w\w\w\w\w$/),
1618
+ "Invalid guid[%s]" % value)
1619
+ value
1620
+ end
1621
+
1622
+ def Helper.to_date_iso8601(value)
1623
+ if value.is_a?(Date)
1624
+ value
1625
+ elsif value
1626
+ Date.parse(value.to_s)
1627
+ else
1628
+ nil
1629
+ end
1630
+ end
1631
+
1632
+ def Helper.to_date_time_iso8601(value)
1633
+ if value.is_a?(DateTime)
1634
+ value
1635
+ elsif value
1636
+ DateTime.parse(value.to_s)
1637
+ else
1638
+ nil
1639
+ end
1640
+ end
1641
+
1642
+ def Helper.date_iso8601_to_string(value)
1643
+ value.nil? ? nil : value.strftime('%Y-%m-%d')
1644
+ end
1645
+
1646
+ def Helper.date_time_iso8601_to_string(value)
1647
+ value.nil? ? nil : value.strftime('%Y-%m-%dT%H:%M:%S%z')
1648
+ end
1649
+
1650
+ TRUE_STRINGS = ['t', 'true', 'y', 'yes', 'on', '1', 'trueclass'] unless defined?(TRUE_STRINGS)
1651
+ FALSE_STRINGS = ['f', 'false', 'n', 'no', 'off', '0', 'falseclass'] unless defined?(FALSE_STRINGS)
1652
+
1653
+ def Helper.to_boolean(field_name, value)
1654
+ string = value.to_s.strip.downcase
1655
+ if TRUE_STRINGS.include?(string)
1656
+ true
1657
+ elsif FALSE_STRINGS.include?(string)
1658
+ false
1659
+ elsif string != ""
1660
+ raise PreconditionException.new("Unsupported boolean value[#{string}]. For true, must be one of: #{TRUE_STRINGS.inspect}. For false, must be one of: #{FALSE_STRINGS.inspect}")
1661
+ else
1662
+ nil
1663
+ end
1664
+ end
1665
+
1666
+ end
1667
+
1668
+ end
1669
+ end
1670
+ end
1671
+ end
1672
+ end