flowcommerce 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1449 @@
1
+ # Generated by apidoc - http://www.apidoc.me
2
+ # Service version: 0.0.11
3
+ # apidoc:0.11.17 http://www.apidoc.me/flow/common/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 Common
19
+ module V0
20
+
21
+ class Client
22
+
23
+ module Constants
24
+
25
+ NAMESPACE = 'io.flow.common.v0' unless defined?(Constants::NAMESPACE)
26
+ USER_AGENT = 'apidoc:0.11.17 http://www.apidoc.me/flow/common/0.0.11/ruby_client' unless defined?(Constants::USER_AGENT)
27
+ VERSION = '0.0.11' unless defined?(Constants::VERSION)
28
+ VERSION_MAJOR = 0 unless defined?(VERSION_MAJOR)
29
+
30
+ end
31
+
32
+ attr_reader :url
33
+
34
+ def initialize(url, opts={})
35
+ @url = HttpClient::Preconditions.assert_class('url', url, String)
36
+ @authorization = HttpClient::Preconditions.assert_class_or_nil('authorization', opts.delete(:authorization), HttpClient::Authorization)
37
+ @default_headers = HttpClient::Preconditions.assert_class('default_headers', opts.delete(:default_headers) || {}, Hash)
38
+ HttpClient::Preconditions.assert_empty_opts(opts)
39
+ HttpClient::Preconditions.check_state(url.match(/http.+/i), "URL[%s] must start with http" % url)
40
+ end
41
+
42
+ def request(path=nil)
43
+ HttpClient::Preconditions.assert_class_or_nil('path', path, String)
44
+ 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)
45
+
46
+ @default_headers.each do |key, value|
47
+ request = request.with_header(key, value)
48
+ end
49
+
50
+ if @authorization
51
+ request = request.with_auth(@authorization)
52
+ end
53
+
54
+ request
55
+ end
56
+
57
+
58
+ end
59
+
60
+ module Clients
61
+
62
+
63
+
64
+ end
65
+
66
+ module Models
67
+
68
+ class ExpandableOrganization
69
+
70
+ module Types
71
+ ORGANIZATION = 'organization' unless defined?(ORGANIZATION)
72
+ ORGANIZATION_REFERENCE = 'organization_reference' unless defined?(ORGANIZATION_REFERENCE)
73
+ end
74
+
75
+ def initialize(incoming={})
76
+ opts = HttpClient::Helper.symbolize_keys(incoming)
77
+ HttpClient::Preconditions.require_keys(opts, [:name], 'ExpandableOrganization')
78
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
79
+ end
80
+
81
+ def to_hash
82
+ subtype_to_hash.merge(:discriminator => @name)
83
+ end
84
+
85
+ def ExpandableOrganization.from_json(hash)
86
+ HttpClient::Preconditions.assert_class('hash', hash, Hash)
87
+ case HttpClient::Helper.symbolize_keys(hash)[:discriminator]
88
+ when Types::ORGANIZATION; Organization.new(hash)
89
+ when Types::ORGANIZATION_REFERENCE; OrganizationReference.new(hash)
90
+ else ExpandableOrganizationUndefinedType.new(:name => union_type_name)
91
+ end
92
+ end
93
+
94
+ end
95
+
96
+ class ExpandableOrganizationUndefinedType < ExpandableOrganization
97
+
98
+ attr_reader :name
99
+
100
+ def initialize(incoming={})
101
+ super(:name => 'undefined_type')
102
+ opts = HttpClient::Helper.symbolize_keys(incoming)
103
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
104
+ end
105
+
106
+ def subtype_to_hash
107
+ raise 'Unable to serialize undefined type to json'
108
+ end
109
+
110
+ def copy(incoming={})
111
+ raise 'Operation not supported for undefined type'
112
+ end
113
+
114
+ def to_hash
115
+ raise 'Operation not supported for undefined type'
116
+ end
117
+
118
+ end
119
+
120
+ class ExpandableUser
121
+
122
+ module Types
123
+ USER = 'user' unless defined?(USER)
124
+ USER_REFERENCE = 'user_reference' unless defined?(USER_REFERENCE)
125
+ end
126
+
127
+ def initialize(incoming={})
128
+ opts = HttpClient::Helper.symbolize_keys(incoming)
129
+ HttpClient::Preconditions.require_keys(opts, [:name], 'ExpandableUser')
130
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
131
+ end
132
+
133
+ def to_hash
134
+ subtype_to_hash.merge(:discriminator => @name)
135
+ end
136
+
137
+ def ExpandableUser.from_json(hash)
138
+ HttpClient::Preconditions.assert_class('hash', hash, Hash)
139
+ case HttpClient::Helper.symbolize_keys(hash)[:discriminator]
140
+ when Types::USER; User.new(hash)
141
+ when Types::USER_REFERENCE; UserReference.new(hash)
142
+ else ExpandableUserUndefinedType.new(:name => union_type_name)
143
+ end
144
+ end
145
+
146
+ end
147
+
148
+ class ExpandableUserUndefinedType < ExpandableUser
149
+
150
+ attr_reader :name
151
+
152
+ def initialize(incoming={})
153
+ super(:name => 'undefined_type')
154
+ opts = HttpClient::Helper.symbolize_keys(incoming)
155
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
156
+ end
157
+
158
+ def subtype_to_hash
159
+ raise 'Unable to serialize undefined type to json'
160
+ end
161
+
162
+ def copy(incoming={})
163
+ raise 'Operation not supported for undefined type'
164
+ end
165
+
166
+ def to_hash
167
+ raise 'Operation not supported for undefined type'
168
+ end
169
+
170
+ end
171
+
172
+ class Calendar
173
+
174
+ attr_reader :value
175
+
176
+ def initialize(value)
177
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
178
+ end
179
+
180
+ # Returns the instance of Calendar for this value, creating a new instance for an unknown value
181
+ def Calendar.apply(value)
182
+ if value.instance_of?(Calendar)
183
+ value
184
+ else
185
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
186
+ value.nil? ? nil : (from_string(value) || Calendar.new(value))
187
+ end
188
+ end
189
+
190
+ # Returns the instance of Calendar for this value, or nil if not found
191
+ def Calendar.from_string(value)
192
+ HttpClient::Preconditions.assert_class('value', value, String)
193
+ Calendar.ALL.find { |v| v.value == value }
194
+ end
195
+
196
+ def Calendar.ALL
197
+ @@all ||= [Calendar.weekdays, Calendar.everyday, Calendar.unknown]
198
+ end
199
+
200
+ # Mon - Fri
201
+ def Calendar.weekdays
202
+ @@_weekdays ||= Calendar.new('Weekdays')
203
+ end
204
+
205
+ # 7 days per week
206
+ def Calendar.everyday
207
+ @@_everyday ||= Calendar.new('Everyday')
208
+ end
209
+
210
+ # We do not yet know the calendar
211
+ def Calendar.unknown
212
+ @@_unknown ||= Calendar.new('Unknown')
213
+ end
214
+
215
+ def to_hash
216
+ value
217
+ end
218
+
219
+ end
220
+
221
+ class Capability
222
+
223
+ attr_reader :value
224
+
225
+ def initialize(value)
226
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
227
+ end
228
+
229
+ # Returns the instance of Capability for this value, creating a new instance for an unknown value
230
+ def Capability.apply(value)
231
+ if value.instance_of?(Capability)
232
+ value
233
+ else
234
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
235
+ value.nil? ? nil : (from_string(value) || Capability.new(value))
236
+ end
237
+ end
238
+
239
+ # Returns the instance of Capability for this value, or nil if not found
240
+ def Capability.from_string(value)
241
+ HttpClient::Preconditions.assert_class('value', value, String)
242
+ Capability.ALL.find { |v| v.value == value }
243
+ end
244
+
245
+ def Capability.ALL
246
+ @@all ||= [Capability.crossdock]
247
+ end
248
+
249
+ def Capability.crossdock
250
+ @@_crossdock ||= Capability.new('crossdock')
251
+ end
252
+
253
+ def to_hash
254
+ value
255
+ end
256
+
257
+ end
258
+
259
+ class ChangeType
260
+
261
+ attr_reader :value
262
+
263
+ def initialize(value)
264
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
265
+ end
266
+
267
+ # Returns the instance of ChangeType for this value, creating a new instance for an unknown value
268
+ def ChangeType.apply(value)
269
+ if value.instance_of?(ChangeType)
270
+ value
271
+ else
272
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
273
+ value.nil? ? nil : (from_string(value) || ChangeType.new(value))
274
+ end
275
+ end
276
+
277
+ # Returns the instance of ChangeType for this value, or nil if not found
278
+ def ChangeType.from_string(value)
279
+ HttpClient::Preconditions.assert_class('value', value, String)
280
+ ChangeType.ALL.find { |v| v.value == value }
281
+ end
282
+
283
+ def ChangeType.ALL
284
+ @@all ||= [ChangeType.insert, ChangeType.update, ChangeType.delete]
285
+ end
286
+
287
+ def ChangeType.insert
288
+ @@_insert ||= ChangeType.new('insert')
289
+ end
290
+
291
+ def ChangeType.update
292
+ @@_update ||= ChangeType.new('update')
293
+ end
294
+
295
+ def ChangeType.delete
296
+ @@_delete ||= ChangeType.new('delete')
297
+ end
298
+
299
+ def to_hash
300
+ value
301
+ end
302
+
303
+ end
304
+
305
+ class ScheduleExceptionStatus
306
+
307
+ attr_reader :value
308
+
309
+ def initialize(value)
310
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
311
+ end
312
+
313
+ # Returns the instance of ScheduleExceptionStatus for this value, creating a new instance for an unknown value
314
+ def ScheduleExceptionStatus.apply(value)
315
+ if value.instance_of?(ScheduleExceptionStatus)
316
+ value
317
+ else
318
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
319
+ value.nil? ? nil : (from_string(value) || ScheduleExceptionStatus.new(value))
320
+ end
321
+ end
322
+
323
+ # Returns the instance of ScheduleExceptionStatus for this value, or nil if not found
324
+ def ScheduleExceptionStatus.from_string(value)
325
+ HttpClient::Preconditions.assert_class('value', value, String)
326
+ ScheduleExceptionStatus.ALL.find { |v| v.value == value }
327
+ end
328
+
329
+ def ScheduleExceptionStatus.ALL
330
+ @@all ||= [ScheduleExceptionStatus.open, ScheduleExceptionStatus.closed]
331
+ end
332
+
333
+ def ScheduleExceptionStatus.open
334
+ @@_open ||= ScheduleExceptionStatus.new('Open')
335
+ end
336
+
337
+ def ScheduleExceptionStatus.closed
338
+ @@_closed ||= ScheduleExceptionStatus.new('Closed')
339
+ end
340
+
341
+ def to_hash
342
+ value
343
+ end
344
+
345
+ end
346
+
347
+ class UnitOfMeasurement
348
+
349
+ attr_reader :value
350
+
351
+ def initialize(value)
352
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
353
+ end
354
+
355
+ # Returns the instance of UnitOfMeasurement for this value, creating a new instance for an unknown value
356
+ def UnitOfMeasurement.apply(value)
357
+ if value.instance_of?(UnitOfMeasurement)
358
+ value
359
+ else
360
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
361
+ value.nil? ? nil : (from_string(value) || UnitOfMeasurement.new(value))
362
+ end
363
+ end
364
+
365
+ # Returns the instance of UnitOfMeasurement for this value, or nil if not found
366
+ def UnitOfMeasurement.from_string(value)
367
+ HttpClient::Preconditions.assert_class('value', value, String)
368
+ UnitOfMeasurement.ALL.find { |v| v.value == value }
369
+ end
370
+
371
+ def UnitOfMeasurement.ALL
372
+ @@all ||= [UnitOfMeasurement.millimeter, UnitOfMeasurement.centimeter, UnitOfMeasurement.inch, UnitOfMeasurement.foot, UnitOfMeasurement.cubic_inch, UnitOfMeasurement.cubic_meter, UnitOfMeasurement.gram, UnitOfMeasurement.kilogram, UnitOfMeasurement.meter, UnitOfMeasurement.ounce, UnitOfMeasurement.pound]
373
+ end
374
+
375
+ # Equivalent to MILLI(METRE).
376
+ def UnitOfMeasurement.millimeter
377
+ @@_millimeter ||= UnitOfMeasurement.new('millimeter')
378
+ end
379
+
380
+ # Equivalent to CENTI(METRE).
381
+ def UnitOfMeasurement.centimeter
382
+ @@_centimeter ||= UnitOfMeasurement.new('centimeter')
383
+ end
384
+
385
+ # A unit of length equal to 0.01004 m (standard name in).
386
+ def UnitOfMeasurement.inch
387
+ @@_inch ||= UnitOfMeasurement.new('inch')
388
+ end
389
+
390
+ # A unit of length equal to 0.3048 m (standard name ft).
391
+ def UnitOfMeasurement.foot
392
+ @@_foot ||= UnitOfMeasurement.new('foot')
393
+ end
394
+
395
+ # A unit of volume equal to one cubic inch (in³).
396
+ def UnitOfMeasurement.cubic_inch
397
+ @@_cubic_inch ||= UnitOfMeasurement.new('cubic_inch')
398
+ end
399
+
400
+ # The metric unit for volume quantities (m³).
401
+ def UnitOfMeasurement.cubic_meter
402
+ @@_cubic_meter ||= UnitOfMeasurement.new('cubic_meter')
403
+ end
404
+
405
+ # A unit of mass equal to 1 / 1000 kilogram (standard name g).
406
+ def UnitOfMeasurement.gram
407
+ @@_gram ||= UnitOfMeasurement.new('gram')
408
+ end
409
+
410
+ # The base unit for mass quantities (kg).
411
+ def UnitOfMeasurement.kilogram
412
+ @@_kilogram ||= UnitOfMeasurement.new('kilogram')
413
+ end
414
+
415
+ # The base unit for length quantities (m).
416
+ def UnitOfMeasurement.meter
417
+ @@_meter ||= UnitOfMeasurement.new('meter')
418
+ end
419
+
420
+ # A unit of mass equal to 1 / 16 POUND (standard name oz).
421
+ def UnitOfMeasurement.ounce
422
+ @@_ounce ||= UnitOfMeasurement.new('ounce')
423
+ end
424
+
425
+ # A unit of mass equal to 453.59237 grams (avoirdupois pound, standard name lb).
426
+ def UnitOfMeasurement.pound
427
+ @@_pound ||= UnitOfMeasurement.new('pound')
428
+ end
429
+
430
+ def to_hash
431
+ value
432
+ end
433
+
434
+ end
435
+
436
+ class UnitOfTime
437
+
438
+ attr_reader :value
439
+
440
+ def initialize(value)
441
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
442
+ end
443
+
444
+ # Returns the instance of UnitOfTime for this value, creating a new instance for an unknown value
445
+ def UnitOfTime.apply(value)
446
+ if value.instance_of?(UnitOfTime)
447
+ value
448
+ else
449
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
450
+ value.nil? ? nil : (from_string(value) || UnitOfTime.new(value))
451
+ end
452
+ end
453
+
454
+ # Returns the instance of UnitOfTime for this value, or nil if not found
455
+ def UnitOfTime.from_string(value)
456
+ HttpClient::Preconditions.assert_class('value', value, String)
457
+ UnitOfTime.ALL.find { |v| v.value == value }
458
+ end
459
+
460
+ def UnitOfTime.ALL
461
+ @@all ||= [UnitOfTime.day, UnitOfTime.hour, UnitOfTime.minute]
462
+ end
463
+
464
+ def UnitOfTime.day
465
+ @@_day ||= UnitOfTime.new('day')
466
+ end
467
+
468
+ def UnitOfTime.hour
469
+ @@_hour ||= UnitOfTime.new('hour')
470
+ end
471
+
472
+ def UnitOfTime.minute
473
+ @@_minute ||= UnitOfTime.new('minute')
474
+ end
475
+
476
+ def to_hash
477
+ value
478
+ end
479
+
480
+ end
481
+
482
+ class ValueAddedService
483
+
484
+ attr_reader :value
485
+
486
+ def initialize(value)
487
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
488
+ end
489
+
490
+ # Returns the instance of ValueAddedService for this value, creating a new instance for an unknown value
491
+ def ValueAddedService.apply(value)
492
+ if value.instance_of?(ValueAddedService)
493
+ value
494
+ else
495
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
496
+ value.nil? ? nil : (from_string(value) || ValueAddedService.new(value))
497
+ end
498
+ end
499
+
500
+ # Returns the instance of ValueAddedService for this value, or nil if not found
501
+ def ValueAddedService.from_string(value)
502
+ HttpClient::Preconditions.assert_class('value', value, String)
503
+ ValueAddedService.ALL.find { |v| v.value == value }
504
+ end
505
+
506
+ def ValueAddedService.ALL
507
+ @@all ||= [ValueAddedService.hazardous_material]
508
+ end
509
+
510
+ # See https://en.wikipedia.org/wiki/ORM-D
511
+ def ValueAddedService.hazardous_material
512
+ @@_hazardous_material ||= ValueAddedService.new('Hazardous Material')
513
+ end
514
+
515
+ def to_hash
516
+ value
517
+ end
518
+
519
+ end
520
+
521
+ class Visibility
522
+
523
+ attr_reader :value
524
+
525
+ def initialize(value)
526
+ @value = HttpClient::Preconditions.assert_class('value', value, String)
527
+ end
528
+
529
+ # Returns the instance of Visibility for this value, creating a new instance for an unknown value
530
+ def Visibility.apply(value)
531
+ if value.instance_of?(Visibility)
532
+ value
533
+ else
534
+ HttpClient::Preconditions.assert_class_or_nil('value', value, String)
535
+ value.nil? ? nil : (from_string(value) || Visibility.new(value))
536
+ end
537
+ end
538
+
539
+ # Returns the instance of Visibility for this value, or nil if not found
540
+ def Visibility.from_string(value)
541
+ HttpClient::Preconditions.assert_class('value', value, String)
542
+ Visibility.ALL.find { |v| v.value == value }
543
+ end
544
+
545
+ def Visibility.ALL
546
+ @@all ||= [Visibility.public, Visibility.private]
547
+ end
548
+
549
+ def Visibility.public
550
+ @@_public ||= Visibility.new('public')
551
+ end
552
+
553
+ def Visibility.private
554
+ @@_private ||= Visibility.new('private')
555
+ end
556
+
557
+ def to_hash
558
+ value
559
+ end
560
+
561
+ end
562
+
563
+ # Defines structured fields for address to be used in user/form input. Either
564
+ # text or the structured input needs to be present.
565
+ class Address
566
+
567
+ attr_reader :text, :streets, :city, :province, :postal_code, :country
568
+
569
+ def initialize(incoming={})
570
+ opts = HttpClient::Helper.symbolize_keys(incoming)
571
+ @text = (x = opts.delete(:text); x.nil? ? nil : HttpClient::Preconditions.assert_class('text', x, String))
572
+ @streets = (x = opts.delete(:streets); x.nil? ? nil : HttpClient::Preconditions.assert_class('streets', x, Array).map { |v| HttpClient::Preconditions.assert_class('streets', v, String) })
573
+ @city = (x = opts.delete(:city); x.nil? ? nil : HttpClient::Preconditions.assert_class('city', x, String))
574
+ @province = (x = opts.delete(:province); x.nil? ? nil : HttpClient::Preconditions.assert_class('province', x, String))
575
+ @postal_code = (x = opts.delete(:postal_code); x.nil? ? nil : HttpClient::Preconditions.assert_class('postal_code', x, String))
576
+ @country = (x = opts.delete(:country); x.nil? ? nil : HttpClient::Preconditions.assert_class('country', x, String))
577
+ end
578
+
579
+ def to_json
580
+ JSON.dump(to_hash)
581
+ end
582
+
583
+ def copy(incoming={})
584
+ Address.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
585
+ end
586
+
587
+ def to_hash
588
+ {
589
+ :text => text,
590
+ :streets => streets.nil? ? nil : streets,
591
+ :city => city,
592
+ :province => province,
593
+ :postal_code => postal_code,
594
+ :country => country
595
+ }
596
+ end
597
+
598
+ end
599
+
600
+ class ChangeHeader
601
+
602
+ attr_reader :id, :timestamp, :type
603
+
604
+ def initialize(incoming={})
605
+ opts = HttpClient::Helper.symbolize_keys(incoming)
606
+ HttpClient::Preconditions.require_keys(opts, [:id, :timestamp, :type], 'ChangeHeader')
607
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
608
+ @timestamp = HttpClient::Preconditions.assert_class('timestamp', HttpClient::Helper.to_date_time_iso8601(opts.delete(:timestamp)), DateTime)
609
+ @type = (x = opts.delete(:type); x.is_a?(::Io::Flow::Common::V0::Models::ChangeType) ? x : ::Io::Flow::Common::V0::Models::ChangeType.apply(x))
610
+ end
611
+
612
+ def to_json
613
+ JSON.dump(to_hash)
614
+ end
615
+
616
+ def copy(incoming={})
617
+ ChangeHeader.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
618
+ end
619
+
620
+ def to_hash
621
+ {
622
+ :id => id,
623
+ :timestamp => timestamp,
624
+ :type => type.value
625
+ }
626
+ end
627
+
628
+ end
629
+
630
+ # Defines structured fields for a contact person. Typically used for specifying
631
+ # contact person for an account, shipment, or organization representative
632
+ class Contact
633
+
634
+ attr_reader :name, :email, :phone
635
+
636
+ def initialize(incoming={})
637
+ opts = HttpClient::Helper.symbolize_keys(incoming)
638
+ HttpClient::Preconditions.require_keys(opts, [:name], 'Contact')
639
+ @name = (x = opts.delete(:name); x.is_a?(::Io::Flow::Common::V0::Models::Name) ? x : ::Io::Flow::Common::V0::Models::Name.new(x))
640
+ @email = (x = opts.delete(:email); x.nil? ? nil : HttpClient::Preconditions.assert_class('email', x, String))
641
+ @phone = (x = opts.delete(:phone); x.nil? ? nil : HttpClient::Preconditions.assert_class('phone', x, String))
642
+ end
643
+
644
+ def to_json
645
+ JSON.dump(to_hash)
646
+ end
647
+
648
+ def copy(incoming={})
649
+ Contact.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
650
+ end
651
+
652
+ def to_hash
653
+ {
654
+ :name => name.to_hash,
655
+ :email => email,
656
+ :phone => phone
657
+ }
658
+ end
659
+
660
+ end
661
+
662
+ class DatetimeRange
663
+
664
+ attr_reader :from, :to
665
+
666
+ def initialize(incoming={})
667
+ opts = HttpClient::Helper.symbolize_keys(incoming)
668
+ HttpClient::Preconditions.require_keys(opts, [:from, :to], 'DatetimeRange')
669
+ @from = HttpClient::Preconditions.assert_class('from', HttpClient::Helper.to_date_time_iso8601(opts.delete(:from)), DateTime)
670
+ @to = HttpClient::Preconditions.assert_class('to', HttpClient::Helper.to_date_time_iso8601(opts.delete(:to)), DateTime)
671
+ end
672
+
673
+ def to_json
674
+ JSON.dump(to_hash)
675
+ end
676
+
677
+ def copy(incoming={})
678
+ DatetimeRange.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
679
+ end
680
+
681
+ def to_hash
682
+ {
683
+ :from => from,
684
+ :to => to
685
+ }
686
+ end
687
+
688
+ end
689
+
690
+ class Dimension
691
+
692
+ attr_reader :value, :units
693
+
694
+ def initialize(incoming={})
695
+ opts = HttpClient::Helper.symbolize_keys(incoming)
696
+ HttpClient::Preconditions.require_keys(opts, [:value, :units], 'Dimension')
697
+ @value = HttpClient::Preconditions.assert_class('value', opts.delete(:value), Float)
698
+ @units = (x = opts.delete(:units); x.is_a?(::Io::Flow::Common::V0::Models::UnitOfMeasurement) ? x : ::Io::Flow::Common::V0::Models::UnitOfMeasurement.apply(x))
699
+ end
700
+
701
+ def to_json
702
+ JSON.dump(to_hash)
703
+ end
704
+
705
+ def copy(incoming={})
706
+ Dimension.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
707
+ end
708
+
709
+ def to_hash
710
+ {
711
+ :value => value,
712
+ :units => units.value
713
+ }
714
+ end
715
+
716
+ end
717
+
718
+ class Error
719
+
720
+ attr_reader :code, :message
721
+
722
+ def initialize(incoming={})
723
+ opts = HttpClient::Helper.symbolize_keys(incoming)
724
+ HttpClient::Preconditions.require_keys(opts, [:code, :message], 'Error')
725
+ @code = HttpClient::Preconditions.assert_class('code', opts.delete(:code), String)
726
+ @message = HttpClient::Preconditions.assert_class('message', opts.delete(:message), String)
727
+ end
728
+
729
+ def to_json
730
+ JSON.dump(to_hash)
731
+ end
732
+
733
+ def copy(incoming={})
734
+ Error.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
735
+ end
736
+
737
+ def to_hash
738
+ {
739
+ :code => code,
740
+ :message => message
741
+ }
742
+ end
743
+
744
+ end
745
+
746
+ class Healthcheck
747
+
748
+ attr_reader :status
749
+
750
+ def initialize(incoming={})
751
+ opts = HttpClient::Helper.symbolize_keys(incoming)
752
+ HttpClient::Preconditions.require_keys(opts, [:status], 'Healthcheck')
753
+ @status = HttpClient::Preconditions.assert_class('status', opts.delete(:status), String)
754
+ end
755
+
756
+ def to_json
757
+ JSON.dump(to_hash)
758
+ end
759
+
760
+ def copy(incoming={})
761
+ Healthcheck.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
762
+ end
763
+
764
+ def to_hash
765
+ {
766
+ :status => status
767
+ }
768
+ end
769
+
770
+ end
771
+
772
+ # We capture the location as a string; over time we anticipate storing structued
773
+ # data by parsing the location (e.g. the country) to enable things like
774
+ # reporting, filtering in bulk
775
+ class Location
776
+
777
+ attr_reader :value
778
+
779
+ def initialize(incoming={})
780
+ opts = HttpClient::Helper.symbolize_keys(incoming)
781
+ HttpClient::Preconditions.require_keys(opts, [:value], 'Location')
782
+ @value = HttpClient::Preconditions.assert_class('value', opts.delete(:value), String)
783
+ end
784
+
785
+ def to_json
786
+ JSON.dump(to_hash)
787
+ end
788
+
789
+ def copy(incoming={})
790
+ Location.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
791
+ end
792
+
793
+ def to_hash
794
+ {
795
+ :value => value
796
+ }
797
+ end
798
+
799
+ end
800
+
801
+ class Name
802
+
803
+ attr_reader :first, :last
804
+
805
+ def initialize(incoming={})
806
+ opts = HttpClient::Helper.symbolize_keys(incoming)
807
+ @first = (x = opts.delete(:first); x.nil? ? nil : HttpClient::Preconditions.assert_class('first', x, String))
808
+ @last = (x = opts.delete(:last); x.nil? ? nil : HttpClient::Preconditions.assert_class('last', x, String))
809
+ end
810
+
811
+ def to_json
812
+ JSON.dump(to_hash)
813
+ end
814
+
815
+ def copy(incoming={})
816
+ Name.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
817
+ end
818
+
819
+ def to_hash
820
+ {
821
+ :first => first,
822
+ :last => last
823
+ }
824
+ end
825
+
826
+ end
827
+
828
+ # Represents a single organization in the system
829
+ class Organization < ExpandableOrganization
830
+
831
+ attr_reader :id, :name
832
+
833
+ def initialize(incoming={})
834
+ super(:name => ExpandableOrganization::Types::ORGANIZATION)
835
+ opts = HttpClient::Helper.symbolize_keys(incoming)
836
+ HttpClient::Preconditions.require_keys(opts, [:id, :name], 'Organization')
837
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
838
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
839
+ end
840
+
841
+ def to_json
842
+ JSON.dump(to_hash)
843
+ end
844
+
845
+ def copy(incoming={})
846
+ Organization.new(subtype_to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
847
+ end
848
+
849
+ def subtype_to_hash
850
+ {
851
+ :id => id,
852
+ :name => name
853
+ }
854
+ end
855
+
856
+ end
857
+
858
+ class OrganizationReference < ExpandableOrganization
859
+
860
+ attr_reader :id
861
+
862
+ def initialize(incoming={})
863
+ super(:name => ExpandableOrganization::Types::ORGANIZATION_REFERENCE)
864
+ opts = HttpClient::Helper.symbolize_keys(incoming)
865
+ HttpClient::Preconditions.require_keys(opts, [:id], 'OrganizationReference')
866
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
867
+ end
868
+
869
+ def to_json
870
+ JSON.dump(to_hash)
871
+ end
872
+
873
+ def copy(incoming={})
874
+ OrganizationReference.new(subtype_to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
875
+ end
876
+
877
+ def subtype_to_hash
878
+ {
879
+ :id => id
880
+ }
881
+ end
882
+
883
+ end
884
+
885
+ class OrganizationSummary
886
+
887
+ attr_reader :id, :name
888
+
889
+ def initialize(incoming={})
890
+ opts = HttpClient::Helper.symbolize_keys(incoming)
891
+ HttpClient::Preconditions.require_keys(opts, [:id, :name], 'OrganizationSummary')
892
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
893
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
894
+ end
895
+
896
+ def to_json
897
+ JSON.dump(to_hash)
898
+ end
899
+
900
+ def copy(incoming={})
901
+ OrganizationSummary.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
902
+ end
903
+
904
+ def to_hash
905
+ {
906
+ :id => id,
907
+ :name => name
908
+ }
909
+ end
910
+
911
+ end
912
+
913
+ class Price
914
+
915
+ attr_reader :amount, :currency
916
+
917
+ def initialize(incoming={})
918
+ opts = HttpClient::Helper.symbolize_keys(incoming)
919
+ HttpClient::Preconditions.require_keys(opts, [:amount, :currency], 'Price')
920
+ @amount = HttpClient::Preconditions.assert_class('amount', opts.delete(:amount), String)
921
+ @currency = HttpClient::Preconditions.assert_class('currency', opts.delete(:currency), String)
922
+ end
923
+
924
+ def to_json
925
+ JSON.dump(to_hash)
926
+ end
927
+
928
+ def copy(incoming={})
929
+ Price.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
930
+ end
931
+
932
+ def to_hash
933
+ {
934
+ :amount => amount,
935
+ :currency => currency
936
+ }
937
+ end
938
+
939
+ end
940
+
941
+ # Represents a single user in the system
942
+ class User < ExpandableUser
943
+
944
+ attr_reader :id, :email, :name
945
+
946
+ def initialize(incoming={})
947
+ super(:name => ExpandableUser::Types::USER)
948
+ opts = HttpClient::Helper.symbolize_keys(incoming)
949
+ HttpClient::Preconditions.require_keys(opts, [:id, :name], 'User')
950
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
951
+ @email = (x = opts.delete(:email); x.nil? ? nil : HttpClient::Preconditions.assert_class('email', x, String))
952
+ @name = (x = opts.delete(:name); x.is_a?(::Io::Flow::Common::V0::Models::Name) ? x : ::Io::Flow::Common::V0::Models::Name.new(x))
953
+ end
954
+
955
+ def to_json
956
+ JSON.dump(to_hash)
957
+ end
958
+
959
+ def copy(incoming={})
960
+ User.new(subtype_to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
961
+ end
962
+
963
+ def subtype_to_hash
964
+ {
965
+ :id => id,
966
+ :email => email,
967
+ :name => name.to_hash
968
+ }
969
+ end
970
+
971
+ end
972
+
973
+ class UserReference < ExpandableUser
974
+
975
+ attr_reader :id
976
+
977
+ def initialize(incoming={})
978
+ super(:name => ExpandableUser::Types::USER_REFERENCE)
979
+ opts = HttpClient::Helper.symbolize_keys(incoming)
980
+ HttpClient::Preconditions.require_keys(opts, [:id], 'UserReference')
981
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
982
+ end
983
+
984
+ def to_json
985
+ JSON.dump(to_hash)
986
+ end
987
+
988
+ def copy(incoming={})
989
+ UserReference.new(subtype_to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
990
+ end
991
+
992
+ def subtype_to_hash
993
+ {
994
+ :id => id
995
+ }
996
+ end
997
+
998
+ end
999
+
1000
+ class UserSummary
1001
+
1002
+ attr_reader :id, :email, :name
1003
+
1004
+ def initialize(incoming={})
1005
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1006
+ HttpClient::Preconditions.require_keys(opts, [:id, :name], 'UserSummary')
1007
+ @id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
1008
+ @email = (x = opts.delete(:email); x.nil? ? nil : HttpClient::Preconditions.assert_class('email', x, String))
1009
+ @name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
1010
+ end
1011
+
1012
+ def to_json
1013
+ JSON.dump(to_hash)
1014
+ end
1015
+
1016
+ def copy(incoming={})
1017
+ UserSummary.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
1018
+ end
1019
+
1020
+ def to_hash
1021
+ {
1022
+ :id => id,
1023
+ :email => email,
1024
+ :name => name
1025
+ }
1026
+ end
1027
+
1028
+ end
1029
+
1030
+ end
1031
+
1032
+ # ===== END OF SERVICE DEFINITION =====
1033
+ module HttpClient
1034
+
1035
+ class Request
1036
+
1037
+ def initialize(uri)
1038
+ @uri = Preconditions.assert_class('uri', uri, URI)
1039
+ @params = nil
1040
+ @body = nil
1041
+ @auth = nil
1042
+ @headers = {}
1043
+ @header_keys_lower_case = []
1044
+ end
1045
+
1046
+ def with_header(name, value)
1047
+ Preconditions.check_not_blank('name', name, "Header name is required")
1048
+ Preconditions.check_not_blank('value', value, "Header value is required")
1049
+ Preconditions.check_state(!@headers.has_key?(name),
1050
+ "Duplicate header named[%s]" % name)
1051
+ @headers[name] = value
1052
+ @header_keys_lower_case << name.downcase
1053
+ self
1054
+ end
1055
+
1056
+ def with_auth(auth)
1057
+ Preconditions.assert_class('auth', auth, HttpClient::Authorization)
1058
+ Preconditions.check_state(@auth.nil?, "auth previously set")
1059
+
1060
+ if auth.scheme.name == AuthScheme::BASIC.name
1061
+ @auth = auth
1062
+ else
1063
+ raise "Auth Scheme[#{auth.scheme.name}] not supported"
1064
+ end
1065
+ self
1066
+ end
1067
+
1068
+ def with_query(params)
1069
+ Preconditions.assert_class('params', params, Hash)
1070
+ Preconditions.check_state(@params.nil?, "Already have query parameters")
1071
+ @params = params
1072
+ self
1073
+ end
1074
+
1075
+ # Wrapper to set Content-Type header to application/json and set
1076
+ # the provided json document as the body
1077
+ def with_json(json)
1078
+ @headers['Content-Type'] ||= 'application/json; charset=UTF-8'
1079
+ with_body(json)
1080
+ end
1081
+
1082
+ def with_body(body)
1083
+ Preconditions.check_not_blank('body', body)
1084
+ @body = body
1085
+ self
1086
+ end
1087
+
1088
+ # Creates a new Net:HTTP client. The client returned should be
1089
+ # fully configured to make a request.
1090
+ def new_http_client
1091
+ client = Net::HTTP.new(@uri.host, @uri.port)
1092
+ if @uri.scheme == "https"
1093
+ configure_ssl(client)
1094
+ end
1095
+ client
1096
+ end
1097
+
1098
+ # If HTTP is required, this method accepts an HTTP Client and configures SSL
1099
+ def configure_ssl(client)
1100
+ Preconditions.assert_class('client', client, Net::HTTP)
1101
+ client.use_ssl = true
1102
+ client.verify_mode = OpenSSL::SSL::VERIFY_PEER
1103
+ client.cert_store = OpenSSL::X509::Store.new
1104
+ client.cert_store.set_default_paths
1105
+ end
1106
+
1107
+ def get(&block)
1108
+ do_request(Net::HTTP::Get, &block)
1109
+ end
1110
+
1111
+ def delete(&block)
1112
+ do_request(Net::HTTP::Delete, &block)
1113
+ end
1114
+
1115
+ def options(&block)
1116
+ do_request(Net::HTTP::Options, &block)
1117
+ end
1118
+
1119
+ def post(&block)
1120
+ do_request(Net::HTTP::Post, &block)
1121
+ end
1122
+
1123
+ def put(&block)
1124
+ do_request(Net::HTTP::Put, &block)
1125
+ end
1126
+
1127
+ class PATCH < Net::HTTP::Put
1128
+ METHOD = "PATCH"
1129
+ end
1130
+
1131
+ def patch(&block)
1132
+ do_request(PATCH, &block)
1133
+ end
1134
+
1135
+ def do_request(klass)
1136
+ Preconditions.assert_class('klass', klass, Class)
1137
+
1138
+ uri = @uri.to_s
1139
+ if q = to_query(@params)
1140
+ uri += "?%s" % q
1141
+ end
1142
+
1143
+ request = klass.send(:new, uri)
1144
+
1145
+ curl = ['curl']
1146
+ if klass != Net::HTTP::Get
1147
+ curl << "-X%s" % klass.name.split("::").last.upcase
1148
+ end
1149
+
1150
+ if @body
1151
+ # DEBUG path = "/tmp/rest_client.tmp"
1152
+ # DEBUG File.open(path, "w") { |os| os << @body.to_s }
1153
+ # DEBUG curl << "-d@%s" % path
1154
+ request.body = @body
1155
+ end
1156
+
1157
+ if @auth
1158
+ curl << "-u \"%s:%s\"" % [@auth.username, @auth.password]
1159
+ Preconditions.check_state(!@header_keys_lower_case.include?("authorization"),
1160
+ "Cannot specify both an Authorization header and an auth instance")
1161
+ user_pass = "%s:%s" % [@auth.username, @auth.password]
1162
+ encoded = Base64.encode64(user_pass).to_s.split("\n").map(&:strip).join
1163
+ request.add_field("Authorization", "Basic %s" % encoded)
1164
+ end
1165
+
1166
+ @headers.each { |key, value|
1167
+ curl << "-H \"%s: %s\"" % [key, value]
1168
+ request.add_field(key, value)
1169
+ }
1170
+
1171
+ curl << "'%s'" % uri
1172
+ # DEBUG puts curl.join(" ")
1173
+
1174
+ raw_response = http_request(request)
1175
+ response = raw_response.to_s == "" ? nil : JSON.parse(raw_response)
1176
+
1177
+ if block_given?
1178
+ yield response
1179
+ else
1180
+ response
1181
+ end
1182
+ end
1183
+
1184
+ private
1185
+ def to_query(params={})
1186
+ parts = (params || {}).map { |k,v|
1187
+ if v.respond_to?(:each)
1188
+ v.map { |el| "%s=%s" % [k, CGI.escape(el.to_s)] }
1189
+ else
1190
+ "%s=%s" % [k, CGI.escape(v.to_s)]
1191
+ end
1192
+ }
1193
+ parts.empty? ? nil : parts.join("&")
1194
+ end
1195
+
1196
+ def http_request(request)
1197
+ response = begin
1198
+ new_http_client.request(request)
1199
+ rescue SocketError => e
1200
+ raise Exception.new("Error accessing uri[#{@uri}]: #{e}")
1201
+ end
1202
+
1203
+ case response
1204
+ when Net::HTTPSuccess
1205
+ response.body
1206
+ else
1207
+ body = response.body rescue nil
1208
+ raise HttpClient::ServerError.new(response.code.to_i, response.message, :body => body, :uri => @uri.to_s)
1209
+ end
1210
+ end
1211
+ end
1212
+
1213
+ class ServerError < StandardError
1214
+
1215
+ attr_reader :code, :details, :body, :uri
1216
+
1217
+ def initialize(code, details, incoming={})
1218
+ opts = HttpClient::Helper.symbolize_keys(incoming)
1219
+ @code = HttpClient::Preconditions.assert_class('code', code, Integer)
1220
+ @details = HttpClient::Preconditions.assert_class('details', details, String)
1221
+ @body = HttpClient::Preconditions.assert_class_or_nil('body', opts.delete(:body), String)
1222
+ @uri = HttpClient::Preconditions.assert_class_or_nil('uri', opts.delete(:uri), String)
1223
+ HttpClient::Preconditions.assert_empty_opts(opts)
1224
+ super(self.message)
1225
+ end
1226
+
1227
+ def message
1228
+ m = "%s %s" % [@code, @details]
1229
+ if @body
1230
+ m << ": %s" % @body
1231
+ end
1232
+ m
1233
+ end
1234
+
1235
+ def body_json
1236
+ JSON.parse(@body)
1237
+ end
1238
+
1239
+ end
1240
+
1241
+ class PreconditionException < Exception
1242
+
1243
+ attr_reader :message
1244
+
1245
+ def initialize(message)
1246
+ super(message)
1247
+ @message = message
1248
+ end
1249
+
1250
+ end
1251
+
1252
+ module Preconditions
1253
+
1254
+ def Preconditions.check_argument(expression, error_message=nil)
1255
+ if !expression
1256
+ raise PreconditionException.new(error_message || "check_argument failed")
1257
+ end
1258
+ nil
1259
+ end
1260
+
1261
+ def Preconditions.check_state(expression, error_message=nil)
1262
+ if !expression
1263
+ raise PreconditionException.new(error_message || "check_state failed")
1264
+ end
1265
+ nil
1266
+ end
1267
+
1268
+ def Preconditions.check_not_nil(field_name, reference, error_message=nil)
1269
+ if reference.nil?
1270
+ raise PreconditionException.new(error_message || "argument for %s cannot be nil" % field_name)
1271
+ end
1272
+ reference
1273
+ end
1274
+
1275
+ def Preconditions.check_not_blank(field_name, reference, error_message=nil)
1276
+ if reference.to_s.strip == ""
1277
+ raise PreconditionException.new(error_message || "argument for %s cannot be blank" % field_name)
1278
+ end
1279
+ reference
1280
+ end
1281
+
1282
+ # Throws an error if opts is not empty. Useful when parsing
1283
+ # arguments to a function
1284
+ def Preconditions.assert_empty_opts(opts)
1285
+ if !opts.empty?
1286
+ raise PreconditionException.new("Invalid opts: #{opts.keys.inspect}\n#{opts.inspect}")
1287
+ end
1288
+ end
1289
+
1290
+ # Requires that the provided hash has the specified keys.
1291
+ # @param fields A list of symbols
1292
+ def Preconditions.require_keys(hash, fields, error_prefix=nil)
1293
+ missing = fields.select { |f| !hash.has_key?(f) }
1294
+ if !missing.empty?
1295
+ msg = "Missing required fields: " + missing.join(", ")
1296
+ raise PreconditionException.new(error_prefix.empty? ? msg : "#{error_prefix}: #{msg}")
1297
+ end
1298
+ end
1299
+
1300
+ # Asserts that value is not nill and is_?(klass). Returns
1301
+ # value. Common use is
1302
+ #
1303
+ # amount = Preconditions.assert_class('amount', amount, BigDecimal)
1304
+ def Preconditions.assert_class(field_name, value, klass)
1305
+ Preconditions.check_not_nil('field_name', field_name)
1306
+ Preconditions.check_not_nil('klass', klass)
1307
+ Preconditions.check_not_nil('value', value, "Value for %s cannot be nil. Expected an instance of class %s" % [field_name, klass.name])
1308
+ Preconditions.check_state(value.is_a?(klass),
1309
+ "Value for #{field_name} is of type[#{value.class}] - class[#{klass}] is required. value[#{value.inspect.to_s}]")
1310
+ value
1311
+ end
1312
+
1313
+ def Preconditions.assert_class_or_nil(field_name, value, klass)
1314
+ if !value.nil?
1315
+ Preconditions.assert_class(field_name, value, klass)
1316
+ end
1317
+ end
1318
+
1319
+ def Preconditions.assert_boolean(field_name, value)
1320
+ Preconditions.check_not_nil('field_name', field_name)
1321
+ Preconditions.check_not_nil('value', value, "Value for %s cannot be nil. Expected an instance of TrueClass or FalseClass" % field_name)
1322
+ Preconditions.check_state(value.is_a?(TrueClass) || value.is_a?(FalseClass),
1323
+ "Value for #{field_name} is of type[#{value.class}] - class[TrueClass or FalseClass] is required. value[#{value.inspect.to_s}]")
1324
+ value
1325
+ end
1326
+
1327
+ def Preconditions.assert_boolean_or_nil(field_name, value)
1328
+ if !value.nil?
1329
+ Preconditions.assert_boolean(field_name, value)
1330
+ end
1331
+ end
1332
+
1333
+ def Preconditions.assert_collection_of_class(field_name, values, klass)
1334
+ Preconditions.assert_class(field_name, values, Array)
1335
+ values.each { |v| Preconditions.assert_class(field_name, v, klass) }
1336
+ end
1337
+
1338
+ def Preconditions.assert_hash_of_class(field_name, hash, klass)
1339
+ Preconditions.assert_class(field_name, hash, Hash)
1340
+ values.each { |k, v| Preconditions.assert_class(field_name, v, klass) }
1341
+ end
1342
+
1343
+ end
1344
+
1345
+ class AuthScheme
1346
+
1347
+ attr_reader :name
1348
+
1349
+ def initialize(name)
1350
+ @name = HttpClient::Preconditions.check_not_blank('name', name)
1351
+ end
1352
+
1353
+ BASIC = AuthScheme.new("basic") unless defined?(BASIC)
1354
+
1355
+ end
1356
+
1357
+ class Authorization
1358
+
1359
+ attr_reader :scheme, :username, :password
1360
+
1361
+ def initialize(scheme, username, opts={})
1362
+ @scheme = HttpClient::Preconditions.assert_class('schema', scheme, AuthScheme)
1363
+ @username = HttpClient::Preconditions.check_not_blank('username', username, "username is required")
1364
+ @password = HttpClient::Preconditions.assert_class_or_nil('password', opts.delete(:password), String)
1365
+ HttpClient::Preconditions.assert_empty_opts(opts)
1366
+ end
1367
+
1368
+ def Authorization.basic(username, password=nil)
1369
+ Authorization.new(AuthScheme::BASIC, username, :password => password)
1370
+ end
1371
+
1372
+ end
1373
+
1374
+ module Helper
1375
+
1376
+ def Helper.symbolize_keys(hash)
1377
+ Preconditions.assert_class('hash', hash, Hash)
1378
+ new_hash = {}
1379
+ hash.each { |k, v|
1380
+ new_hash[k.to_sym] = v
1381
+ }
1382
+ new_hash
1383
+ end
1384
+
1385
+ def Helper.to_big_decimal(value)
1386
+ value ? BigDecimal.new(value.to_s) : nil
1387
+ end
1388
+
1389
+ def Helper.to_object(value)
1390
+ value ? JSON.parse(value) : nil
1391
+ end
1392
+
1393
+ def Helper.to_uuid(value)
1394
+ 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$/),
1395
+ "Invalid guid[%s]" % value)
1396
+ value
1397
+ end
1398
+
1399
+ def Helper.to_date_iso8601(value)
1400
+ if value.is_a?(Date)
1401
+ value
1402
+ elsif value
1403
+ Date.parse(value.to_s)
1404
+ else
1405
+ nil
1406
+ end
1407
+ end
1408
+
1409
+ def Helper.to_date_time_iso8601(value)
1410
+ if value.is_a?(DateTime)
1411
+ value
1412
+ elsif value
1413
+ DateTime.parse(value.to_s)
1414
+ else
1415
+ nil
1416
+ end
1417
+ end
1418
+
1419
+ def Helper.date_iso8601_to_string(value)
1420
+ value.nil? ? nil : value.strftime('%Y-%m-%d')
1421
+ end
1422
+
1423
+ def Helper.date_time_iso8601_to_string(value)
1424
+ value.nil? ? nil : value.strftime('%Y-%m-%dT%H:%M:%S%z')
1425
+ end
1426
+
1427
+ TRUE_STRINGS = ['t', 'true', 'y', 'yes', 'on', '1', 'trueclass'] unless defined?(TRUE_STRINGS)
1428
+ FALSE_STRINGS = ['f', 'false', 'n', 'no', 'off', '0', 'falseclass'] unless defined?(FALSE_STRINGS)
1429
+
1430
+ def Helper.to_boolean(field_name, value)
1431
+ string = value.to_s.strip.downcase
1432
+ if TRUE_STRINGS.include?(string)
1433
+ true
1434
+ elsif FALSE_STRINGS.include?(string)
1435
+ false
1436
+ elsif string != ""
1437
+ 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}")
1438
+ else
1439
+ nil
1440
+ end
1441
+ end
1442
+
1443
+ end
1444
+
1445
+ end
1446
+ end
1447
+ end
1448
+ end
1449
+ end