onebusaway-sdk 0.1.0.pre.alpha.206 → 0.1.0.pre.alpha.207

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.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -20
  3. data/lib/onebusaway-sdk/base_client.rb +41 -49
  4. data/lib/onebusaway-sdk/base_model.rb +489 -514
  5. data/lib/onebusaway-sdk/base_page.rb +35 -15
  6. data/lib/onebusaway-sdk/client.rb +1 -3
  7. data/lib/onebusaway-sdk/errors.rb +12 -17
  8. data/lib/onebusaway-sdk/extern.rb +1 -4
  9. data/lib/onebusaway-sdk/models/references.rb +0 -21
  10. data/lib/onebusaway-sdk/models/report_problem_with_stop_retrieve_params.rb +0 -21
  11. data/lib/onebusaway-sdk/models/report_problem_with_trip_retrieve_params.rb +0 -23
  12. data/lib/onebusaway-sdk/pooled_net_requester.rb +40 -46
  13. data/lib/onebusaway-sdk/request_options.rb +4 -11
  14. data/lib/onebusaway-sdk/resources/agencies_with_coverage.rb +0 -2
  15. data/lib/onebusaway-sdk/resources/agency.rb +0 -2
  16. data/lib/onebusaway-sdk/resources/arrival_and_departure.rb +0 -3
  17. data/lib/onebusaway-sdk/resources/block.rb +0 -2
  18. data/lib/onebusaway-sdk/resources/config.rb +0 -2
  19. data/lib/onebusaway-sdk/resources/current_time.rb +0 -2
  20. data/lib/onebusaway-sdk/resources/report_problem_with_stop.rb +0 -2
  21. data/lib/onebusaway-sdk/resources/report_problem_with_trip.rb +0 -2
  22. data/lib/onebusaway-sdk/resources/route.rb +0 -2
  23. data/lib/onebusaway-sdk/resources/route_ids_for_agency.rb +0 -2
  24. data/lib/onebusaway-sdk/resources/routes_for_agency.rb +0 -2
  25. data/lib/onebusaway-sdk/resources/routes_for_location.rb +0 -2
  26. data/lib/onebusaway-sdk/resources/schedule_for_route.rb +0 -2
  27. data/lib/onebusaway-sdk/resources/schedule_for_stop.rb +0 -2
  28. data/lib/onebusaway-sdk/resources/search_for_route.rb +0 -2
  29. data/lib/onebusaway-sdk/resources/search_for_stop.rb +0 -2
  30. data/lib/onebusaway-sdk/resources/shape.rb +0 -2
  31. data/lib/onebusaway-sdk/resources/stop.rb +0 -2
  32. data/lib/onebusaway-sdk/resources/stop_ids_for_agency.rb +0 -2
  33. data/lib/onebusaway-sdk/resources/stops_for_agency.rb +0 -2
  34. data/lib/onebusaway-sdk/resources/stops_for_location.rb +0 -2
  35. data/lib/onebusaway-sdk/resources/stops_for_route.rb +0 -2
  36. data/lib/onebusaway-sdk/resources/trip.rb +0 -2
  37. data/lib/onebusaway-sdk/resources/trip_details.rb +0 -2
  38. data/lib/onebusaway-sdk/resources/trip_for_vehicle.rb +0 -2
  39. data/lib/onebusaway-sdk/resources/trips_for_location.rb +0 -2
  40. data/lib/onebusaway-sdk/resources/trips_for_route.rb +0 -2
  41. data/lib/onebusaway-sdk/resources/vehicles_for_agency.rb +0 -2
  42. data/lib/onebusaway-sdk/util.rb +201 -118
  43. data/lib/onebusaway-sdk/version.rb +1 -1
  44. data/lib/onebusaway-sdk.rb +1 -0
  45. data/manifest.yaml +1 -0
  46. data/rbi/lib/onebusaway-sdk/base_client.rbi +46 -21
  47. data/rbi/lib/onebusaway-sdk/base_model.rbi +400 -256
  48. data/rbi/lib/onebusaway-sdk/base_page.rbi +3 -4
  49. data/rbi/lib/onebusaway-sdk/client.rbi +7 -2
  50. data/rbi/lib/onebusaway-sdk/errors.rbi +41 -8
  51. data/rbi/lib/onebusaway-sdk/extern.rbi +1 -1
  52. data/rbi/lib/onebusaway-sdk/models/agencies_with_coverage_list_params.rbi +5 -2
  53. data/rbi/lib/onebusaway-sdk/models/agencies_with_coverage_list_response.rbi +9 -6
  54. data/rbi/lib/onebusaway-sdk/models/agency_retrieve_params.rbi +5 -2
  55. data/rbi/lib/onebusaway-sdk/models/agency_retrieve_response.rbi +6 -6
  56. data/rbi/lib/onebusaway-sdk/models/arrival_and_departure_list_params.rbi +5 -2
  57. data/rbi/lib/onebusaway-sdk/models/arrival_and_departure_list_response.rbi +95 -14
  58. data/rbi/lib/onebusaway-sdk/models/arrival_and_departure_retrieve_params.rbi +2 -9
  59. data/rbi/lib/onebusaway-sdk/models/arrival_and_departure_retrieve_response.rbi +93 -12
  60. data/rbi/lib/onebusaway-sdk/models/block_retrieve_params.rbi +5 -2
  61. data/rbi/lib/onebusaway-sdk/models/block_retrieve_response.rbi +14 -20
  62. data/rbi/lib/onebusaway-sdk/models/config_retrieve_params.rbi +5 -2
  63. data/rbi/lib/onebusaway-sdk/models/config_retrieve_response.rbi +8 -14
  64. data/rbi/lib/onebusaway-sdk/models/current_time_retrieve_params.rbi +5 -2
  65. data/rbi/lib/onebusaway-sdk/models/current_time_retrieve_response.rbi +6 -6
  66. data/rbi/lib/onebusaway-sdk/models/references.rbi +60 -43
  67. data/rbi/lib/onebusaway-sdk/models/report_problem_with_stop_retrieve_params.rbi +10 -6
  68. data/rbi/lib/onebusaway-sdk/models/report_problem_with_trip_retrieve_params.rbi +15 -6
  69. data/rbi/lib/onebusaway-sdk/models/response_wrapper.rbi +4 -2
  70. data/rbi/lib/onebusaway-sdk/models/route_ids_for_agency_list_params.rbi +5 -2
  71. data/rbi/lib/onebusaway-sdk/models/route_ids_for_agency_list_response.rbi +4 -4
  72. data/rbi/lib/onebusaway-sdk/models/route_retrieve_params.rbi +5 -2
  73. data/rbi/lib/onebusaway-sdk/models/route_retrieve_response.rbi +6 -6
  74. data/rbi/lib/onebusaway-sdk/models/routes_for_agency_list_params.rbi +5 -2
  75. data/rbi/lib/onebusaway-sdk/models/routes_for_agency_list_response.rbi +6 -6
  76. data/rbi/lib/onebusaway-sdk/models/routes_for_location_list_params.rbi +2 -2
  77. data/rbi/lib/onebusaway-sdk/models/routes_for_location_list_response.rbi +6 -6
  78. data/rbi/lib/onebusaway-sdk/models/schedule_for_route_retrieve_params.rbi +5 -8
  79. data/rbi/lib/onebusaway-sdk/models/schedule_for_route_retrieve_response.rbi +19 -16
  80. data/rbi/lib/onebusaway-sdk/models/schedule_for_stop_retrieve_params.rbi +5 -8
  81. data/rbi/lib/onebusaway-sdk/models/schedule_for_stop_retrieve_response.rbi +14 -14
  82. data/rbi/lib/onebusaway-sdk/models/search_for_route_list_params.rbi +4 -2
  83. data/rbi/lib/onebusaway-sdk/models/search_for_route_list_response.rbi +6 -6
  84. data/rbi/lib/onebusaway-sdk/models/search_for_stop_list_params.rbi +4 -2
  85. data/rbi/lib/onebusaway-sdk/models/search_for_stop_list_response.rbi +6 -6
  86. data/rbi/lib/onebusaway-sdk/models/shape_retrieve_params.rbi +5 -2
  87. data/rbi/lib/onebusaway-sdk/models/shape_retrieve_response.rbi +7 -6
  88. data/rbi/lib/onebusaway-sdk/models/stop_ids_for_agency_list_params.rbi +5 -2
  89. data/rbi/lib/onebusaway-sdk/models/stop_ids_for_agency_list_response.rbi +4 -4
  90. data/rbi/lib/onebusaway-sdk/models/stop_retrieve_params.rbi +5 -2
  91. data/rbi/lib/onebusaway-sdk/models/stop_retrieve_response.rbi +6 -6
  92. data/rbi/lib/onebusaway-sdk/models/stops_for_agency_list_params.rbi +5 -2
  93. data/rbi/lib/onebusaway-sdk/models/stops_for_agency_list_response.rbi +4 -4
  94. data/rbi/lib/onebusaway-sdk/models/stops_for_location_list_params.rbi +6 -2
  95. data/rbi/lib/onebusaway-sdk/models/stops_for_location_list_response.rbi +6 -6
  96. data/rbi/lib/onebusaway-sdk/models/stops_for_route_list_params.rbi +4 -2
  97. data/rbi/lib/onebusaway-sdk/models/stops_for_route_list_response.rbi +14 -14
  98. data/rbi/lib/onebusaway-sdk/models/trip_detail_retrieve_params.rbi +10 -2
  99. data/rbi/lib/onebusaway-sdk/models/trip_detail_retrieve_response.rbi +54 -23
  100. data/rbi/lib/onebusaway-sdk/models/trip_for_vehicle_retrieve_params.rbi +9 -8
  101. data/rbi/lib/onebusaway-sdk/models/trip_for_vehicle_retrieve_response.rbi +54 -23
  102. data/rbi/lib/onebusaway-sdk/models/trip_retrieve_params.rbi +5 -2
  103. data/rbi/lib/onebusaway-sdk/models/trip_retrieve_response.rbi +6 -6
  104. data/rbi/lib/onebusaway-sdk/models/trips_for_location_list_params.rbi +12 -12
  105. data/rbi/lib/onebusaway-sdk/models/trips_for_location_list_response.rbi +56 -16
  106. data/rbi/lib/onebusaway-sdk/models/trips_for_route_list_params.rbi +6 -2
  107. data/rbi/lib/onebusaway-sdk/models/trips_for_route_list_response.rbi +54 -16
  108. data/rbi/lib/onebusaway-sdk/models/vehicles_for_agency_list_params.rbi +3 -2
  109. data/rbi/lib/onebusaway-sdk/models/vehicles_for_agency_list_response.rbi +52 -14
  110. data/rbi/lib/onebusaway-sdk/pooled_net_requester.rbi +28 -13
  111. data/rbi/lib/onebusaway-sdk/request_options.rbi +25 -2
  112. data/rbi/lib/onebusaway-sdk/resources/agencies_with_coverage.rbi +4 -2
  113. data/rbi/lib/onebusaway-sdk/resources/agency.rbi +8 -3
  114. data/rbi/lib/onebusaway-sdk/resources/arrival_and_departure.rbi +14 -3
  115. data/rbi/lib/onebusaway-sdk/resources/block.rbi +8 -3
  116. data/rbi/lib/onebusaway-sdk/resources/config.rbi +3 -2
  117. data/rbi/lib/onebusaway-sdk/resources/current_time.rbi +3 -2
  118. data/rbi/lib/onebusaway-sdk/resources/report_problem_with_stop.rbi +9 -2
  119. data/rbi/lib/onebusaway-sdk/resources/report_problem_with_trip.rbi +14 -2
  120. data/rbi/lib/onebusaway-sdk/resources/route.rbi +8 -3
  121. data/rbi/lib/onebusaway-sdk/resources/route_ids_for_agency.rbi +8 -3
  122. data/rbi/lib/onebusaway-sdk/resources/routes_for_agency.rbi +8 -3
  123. data/rbi/lib/onebusaway-sdk/resources/routes_for_location.rbi +3 -2
  124. data/rbi/lib/onebusaway-sdk/resources/schedule_for_route.rbi +11 -3
  125. data/rbi/lib/onebusaway-sdk/resources/schedule_for_stop.rbi +11 -3
  126. data/rbi/lib/onebusaway-sdk/resources/search_for_route.rbi +10 -3
  127. data/rbi/lib/onebusaway-sdk/resources/search_for_stop.rbi +10 -3
  128. data/rbi/lib/onebusaway-sdk/resources/shape.rbi +8 -3
  129. data/rbi/lib/onebusaway-sdk/resources/stop.rbi +8 -3
  130. data/rbi/lib/onebusaway-sdk/resources/stop_ids_for_agency.rbi +8 -3
  131. data/rbi/lib/onebusaway-sdk/resources/stops_for_agency.rbi +8 -3
  132. data/rbi/lib/onebusaway-sdk/resources/stops_for_location.rbi +16 -3
  133. data/rbi/lib/onebusaway-sdk/resources/stops_for_route.rbi +12 -3
  134. data/rbi/lib/onebusaway-sdk/resources/trip.rbi +8 -3
  135. data/rbi/lib/onebusaway-sdk/resources/trip_details.rbi +12 -2
  136. data/rbi/lib/onebusaway-sdk/resources/trip_for_vehicle.rbi +11 -2
  137. data/rbi/lib/onebusaway-sdk/resources/trips_for_location.rbi +12 -2
  138. data/rbi/lib/onebusaway-sdk/resources/trips_for_route.rbi +15 -3
  139. data/rbi/lib/onebusaway-sdk/resources/vehicles_for_agency.rbi +10 -3
  140. data/rbi/lib/onebusaway-sdk/util.rbi +207 -105
  141. data/rbi/lib/onebusaway-sdk/version.rbi +1 -1
  142. data/sig/onebusaway-sdk/base_client.rbs +6 -1
  143. data/sig/onebusaway-sdk/base_model.rbs +8 -6
  144. data/sig/onebusaway-sdk/base_page.rbs +1 -1
  145. data/sig/onebusaway-sdk/errors.rbs +4 -4
  146. data/sig/onebusaway-sdk/pooled_net_requester.rbs +11 -4
  147. data/sig/onebusaway-sdk/request_options.rbs +4 -0
  148. data/sig/onebusaway-sdk/util.rbs +33 -8
  149. data/sig/onebusaway-sdk/version.rbs +1 -1
  150. metadata +4 -4
@@ -1,41 +1,35 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OnebusawaySDK
4
- # @private
5
- #
6
- # @abstract
7
- #
4
+ # @api private
8
5
  module Converter
9
6
  # rubocop:disable Lint/UnusedMethodArgument
10
7
 
11
- # @private
8
+ # @api private
12
9
  #
13
10
  # @param value [Object]
14
11
  #
15
12
  # @return [Object]
16
- #
17
13
  def coerce(value) = value
18
14
 
19
- # @private
15
+ # @api private
20
16
  #
21
17
  # @param value [Object]
22
18
  #
23
19
  # @return [Object]
24
- #
25
20
  def dump(value) = value
26
21
 
27
- # @private
22
+ # @api private
28
23
  #
29
24
  # @param value [Object]
30
25
  #
31
26
  # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
32
- #
33
27
  def try_strict_coerce(value) = (raise NotImplementedError)
34
28
 
35
29
  # rubocop:enable Lint/UnusedMethodArgument
36
30
 
37
31
  class << self
38
- # @private
32
+ # @api private
39
33
  #
40
34
  # @param spec [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class] .
41
35
  #
@@ -48,23 +42,22 @@ module OnebusawaySDK
48
42
  # @option spec [Boolean] :"nil?"
49
43
  #
50
44
  # @return [Proc]
51
- #
52
45
  def type_info(spec)
53
46
  case spec
54
47
  in Hash
55
48
  type_info(spec.slice(:const, :enum, :union).first&.last)
56
49
  in Proc
57
50
  spec
58
- in OnebusawaySDK::Converter | Class
51
+ in OnebusawaySDK::Converter | Class | Symbol
59
52
  -> { spec }
60
53
  in true | false
61
54
  -> { OnebusawaySDK::BooleanModel }
62
- in NilClass | true | false | Symbol | Integer | Float
55
+ in NilClass | Integer | Float
63
56
  -> { spec.class }
64
57
  end
65
58
  end
66
59
 
67
- # @private
60
+ # @api private
68
61
  #
69
62
  # Based on `target`, transform `value` into `target`, to the extent possible:
70
63
  #
@@ -77,11 +70,17 @@ module OnebusawaySDK
77
70
  # @param value [Object]
78
71
  #
79
72
  # @return [Object]
80
- #
81
73
  def coerce(target, value)
82
74
  case target
83
75
  in OnebusawaySDK::Converter
84
76
  target.coerce(value)
77
+ in Symbol
78
+ case value
79
+ in Symbol | String if (val = value.to_sym) == target
80
+ val
81
+ else
82
+ value
83
+ end
85
84
  in Class
86
85
  case target
87
86
  in -> { _1 <= NilClass }
@@ -104,13 +103,12 @@ module OnebusawaySDK
104
103
  end
105
104
  end
106
105
 
107
- # @private
106
+ # @api private
108
107
  #
109
108
  # @param target [OnebusawaySDK::Converter, Class]
110
109
  # @param value [Object]
111
110
  #
112
111
  # @return [Object]
113
- #
114
112
  def dump(target, value)
115
113
  case target
116
114
  in OnebusawaySDK::Converter
@@ -120,7 +118,7 @@ module OnebusawaySDK
120
118
  end
121
119
  end
122
120
 
123
- # @private
121
+ # @api private
124
122
  #
125
123
  # The underlying algorithm for computing maximal compatibility is subject to
126
124
  # future improvements.
@@ -135,11 +133,17 @@ module OnebusawaySDK
135
133
  # @param value [Object]
136
134
  #
137
135
  # @return [Object]
138
- #
139
136
  def try_strict_coerce(target, value)
140
137
  case target
141
138
  in OnebusawaySDK::Converter
142
139
  target.try_strict_coerce(value)
140
+ in Symbol
141
+ case value
142
+ in Symbol | String if (val = value.to_sym) == target
143
+ [true, val, 1]
144
+ else
145
+ [false, false, 0]
146
+ end
143
147
  in Class
144
148
  case [target, value]
145
149
  in [-> { _1 <= NilClass }, _]
@@ -155,7 +159,7 @@ module OnebusawaySDK
155
159
  in [-> { _1 <= Date || _1 <= Time }, String]
156
160
  Kernel.then do
157
161
  [true, target.parse(value), 1]
158
- rescue ArgumentError, Date::Error
162
+ rescue ArgumentError
159
163
  [false, false, 0]
160
164
  end
161
165
  in [_, ^target]
@@ -168,7 +172,7 @@ module OnebusawaySDK
168
172
  end
169
173
  end
170
174
 
171
- # @private
175
+ # @api private
172
176
  #
173
177
  # @abstract
174
178
  #
@@ -183,48 +187,45 @@ module OnebusawaySDK
183
187
  # @param other [Object]
184
188
  #
185
189
  # @return [Boolean]
186
- #
187
190
  def self.===(other) = true
188
191
 
189
192
  # @param other [Object]
190
193
  #
191
194
  # @return [Boolean]
192
- #
193
195
  def self.==(other) = other.is_a?(Class) && other <= OnebusawaySDK::Unknown
194
196
 
195
- # @!parse
196
- # # @private
197
- # #
198
- # # @param value [Object]
199
- # #
200
- # # @return [Object]
201
- # #
202
- # def self.coerce(value) = super
203
-
204
- # @!parse
205
- # # @private
206
- # #
207
- # # @param value [Object]
208
- # #
209
- # # @return [Object]
210
- # #
211
- # def self.dump(value) = super
212
-
213
- # @private
214
- #
215
- # @param value [Object]
216
- #
217
- # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
218
- #
219
- def self.try_strict_coerce(value)
220
- # prevent unknown variant from being chosen during the first coercion pass
221
- [false, true, 0]
197
+ class << self
198
+ # @!parse
199
+ # # @api private
200
+ # #
201
+ # # @param value [Object]
202
+ # #
203
+ # # @return [Object]
204
+ # def coerce(value) = super
205
+
206
+ # @!parse
207
+ # # @api private
208
+ # #
209
+ # # @param value [Object]
210
+ # #
211
+ # # @return [Object]
212
+ # def dump(value) = super
213
+
214
+ # @api private
215
+ #
216
+ # @param value [Object]
217
+ #
218
+ # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
219
+ def try_strict_coerce(value)
220
+ # prevent unknown variant from being chosen during the first coercion pass
221
+ [false, true, 0]
222
+ end
222
223
  end
223
224
 
224
225
  # rubocop:enable Lint/UnusedMethodArgument
225
226
  end
226
227
 
227
- # @private
228
+ # @api private
228
229
  #
229
230
  # @abstract
230
231
  #
@@ -237,50 +238,47 @@ module OnebusawaySDK
237
238
  # @param other [Object]
238
239
  #
239
240
  # @return [Boolean]
240
- #
241
241
  def self.===(other) = other == true || other == false
242
242
 
243
243
  # @param other [Object]
244
244
  #
245
245
  # @return [Boolean]
246
- #
247
246
  def self.==(other) = other.is_a?(Class) && other <= OnebusawaySDK::BooleanModel
248
247
 
249
- # @!parse
250
- # # @private
251
- # #
252
- # # @param value [Boolean, Object]
253
- # #
254
- # # @return [Boolean, Object]
255
- # #
256
- # def self.coerce(value) = super
257
-
258
- # @!parse
259
- # # @private
260
- # #
261
- # # @param value [Boolean, Object]
262
- # #
263
- # # @return [Boolean, Object]
264
- # #
265
- # def self.dump(value) = super
266
-
267
- # @private
268
- #
269
- # @param value [Object]
270
- #
271
- # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
272
- #
273
- def self.try_strict_coerce(value)
274
- case value
275
- in true | false
276
- [true, value, 1]
277
- else
278
- [false, false, 0]
248
+ class << self
249
+ # @!parse
250
+ # # @api private
251
+ # #
252
+ # # @param value [Boolean, Object]
253
+ # #
254
+ # # @return [Boolean, Object]
255
+ # def coerce(value) = super
256
+
257
+ # @!parse
258
+ # # @api private
259
+ # #
260
+ # # @param value [Boolean, Object]
261
+ # #
262
+ # # @return [Boolean, Object]
263
+ # def dump(value) = super
264
+
265
+ # @api private
266
+ #
267
+ # @param value [Object]
268
+ #
269
+ # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
270
+ def try_strict_coerce(value)
271
+ case value
272
+ in true | false
273
+ [true, value, 1]
274
+ else
275
+ [false, false, 0]
276
+ end
279
277
  end
280
278
  end
281
279
  end
282
280
 
283
- # @private
281
+ # @api private
284
282
  #
285
283
  # @abstract
286
284
  #
@@ -297,161 +295,164 @@ module OnebusawaySDK
297
295
  class Enum
298
296
  extend OnebusawaySDK::Converter
299
297
 
300
- # All of the valid Symbol values for this enum.
301
- #
302
- # @return [Array<NilClass, Boolean, Integer, Float, Symbol>]
303
- #
304
- def self.values = (@values ||= constants.map { const_get(_1) })
298
+ class << self
299
+ # All of the valid Symbol values for this enum.
300
+ #
301
+ # @return [Array<NilClass, Boolean, Integer, Float, Symbol>]
302
+ def values = (@values ||= constants.map { const_get(_1) })
305
303
 
306
- # @private
307
- #
308
- # Guard against thread safety issues by instantiating `@values`.
309
- #
310
- private_class_method def self.finalize! = values
304
+ # @api private
305
+ #
306
+ # Guard against thread safety issues by instantiating `@values`.
307
+ private def finalize! = values
308
+ end
311
309
 
312
310
  private_class_method :new
313
311
 
314
312
  # @param other [Object]
315
313
  #
316
314
  # @return [Boolean]
317
- #
318
315
  def self.===(other) = values.include?(other)
319
316
 
320
317
  # @param other [Object]
321
318
  #
322
319
  # @return [Boolean]
323
- #
324
320
  def self.==(other)
325
321
  other.is_a?(Class) && other <= OnebusawaySDK::Enum && other.values.to_set == values.to_set
326
322
  end
327
323
 
328
- # @private
329
- #
330
- # @param value [String, Symbol, Object]
331
- #
332
- # @return [Symbol, Object]
333
- #
334
- def self.coerce(value) = (value.is_a?(String) ? value.to_sym : value)
335
-
336
- # @!parse
337
- # # @private
338
- # #
339
- # # @param value [Symbol, Object]
340
- # #
341
- # # @return [Symbol, Object]
342
- # #
343
- # def self.dump(value) = super
344
-
345
- # @private
346
- #
347
- # @param value [Object]
348
- #
349
- # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
350
- #
351
- def self.try_strict_coerce(value)
352
- return [true, value, 1] if values.include?(value)
324
+ class << self
325
+ # @api private
326
+ #
327
+ # @param value [String, Symbol, Object]
328
+ #
329
+ # @return [Symbol, Object]
330
+ def coerce(value)
331
+ case value
332
+ in Symbol | String if values.include?(val = value.to_sym)
333
+ val
334
+ else
335
+ value
336
+ end
337
+ end
353
338
 
354
- case value
355
- in String if values.include?(val = value.to_sym)
356
- [true, val, 1]
357
- else
358
- case [value, values.first]
359
- in [true | false, true | false] | [Integer, Integer] | [Symbol | String, Symbol]
360
- [false, true, 0]
339
+ # @!parse
340
+ # # @api private
341
+ # #
342
+ # # @param value [Symbol, Object]
343
+ # #
344
+ # # @return [Symbol, Object]
345
+ # def dump(value) = super
346
+
347
+ # @api private
348
+ #
349
+ # @param value [Object]
350
+ #
351
+ # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
352
+ def try_strict_coerce(value)
353
+ return [true, value, 1] if values.include?(value)
354
+
355
+ case value
356
+ in Symbol | String if values.include?(val = value.to_sym)
357
+ [true, val, 1]
361
358
  else
362
- [false, false, 0]
359
+ case [value, values.first]
360
+ in [true | false, true | false] | [Integer, Integer] | [Symbol | String, Symbol]
361
+ [false, true, 0]
362
+ else
363
+ [false, false, 0]
364
+ end
363
365
  end
364
366
  end
365
367
  end
366
368
  end
367
369
 
368
- # @private
370
+ # @api private
369
371
  #
370
372
  # @abstract
371
- #
372
373
  class Union
373
374
  extend OnebusawaySDK::Converter
374
375
 
375
- # @private
376
- #
377
- # All of the specified variant info for this union.
378
- #
379
- # @return [Array<Array(Symbol, Proc)>]
380
- #
381
- private_class_method def self.known_variants = (@known_variants ||= [])
382
-
383
376
  class << self
384
- # @private
377
+ # @api private
385
378
  #
386
- # All of the specified variants for this union.
379
+ # All of the specified variant info for this union.
387
380
  #
388
- # @return [Array<Array(Symbol, Object)>]
381
+ # @return [Array<Array(Symbol, Proc)>]
382
+ private def known_variants = (@known_variants ||= [])
383
+
384
+ # @api private
389
385
  #
390
- protected def variants
386
+ # @return [Array<Array(Symbol, Object)>]
387
+ protected def derefed_variants
391
388
  @known_variants.map { |key, variant_fn| [key, variant_fn.call] }
392
389
  end
393
- end
394
390
 
395
- # @private
396
- #
397
- # @param property [Symbol]
398
- #
399
- private_class_method def self.discriminator(property)
400
- case property
401
- in Symbol
402
- @discriminator = property
391
+ # All of the specified variants for this union.
392
+ #
393
+ # @return [Array<Object>]
394
+ def variants
395
+ derefed_variants.map(&:last)
403
396
  end
404
- end
405
397
 
406
- # @private
407
- #
408
- # @param key [Symbol, Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
409
- #
410
- # @param spec [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class] .
411
- #
412
- # @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
413
- #
414
- # @option spec [Proc] :enum
415
- #
416
- # @option spec [Proc] :union
417
- #
418
- # @option spec [Boolean] :"nil?"
419
- #
420
- private_class_method def self.variant(key, spec = nil)
421
- variant_info =
422
- case key
398
+ # @api private
399
+ #
400
+ # @param property [Symbol]
401
+ private def discriminator(property)
402
+ case property
423
403
  in Symbol
424
- [key, OnebusawaySDK::Converter.type_info(spec)]
425
- in Proc | OnebusawaySDK::Converter | Class | Hash
426
- [nil, OnebusawaySDK::Converter.type_info(key)]
404
+ @discriminator = property
427
405
  end
406
+ end
428
407
 
429
- known_variants << variant_info
430
- end
431
-
432
- # @private
433
- #
434
- # @param value [Object]
435
- #
436
- # @return [OnebusawaySDK::Converter, Class, nil]
437
- #
438
- private_class_method def self.resolve_variant(value)
439
- case [@discriminator, value]
440
- in [_, OnebusawaySDK::BaseModel]
441
- value.class
442
- in [Symbol, Hash]
443
- key =
444
- if value.key?(@discriminator)
445
- value.fetch(@discriminator)
446
- elsif value.key?((discriminator = @discriminator.to_s))
447
- value.fetch(discriminator)
408
+ # @api private
409
+ #
410
+ # @param key [Symbol, Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
411
+ #
412
+ # @param spec [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class] .
413
+ #
414
+ # @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
415
+ #
416
+ # @option spec [Proc] :enum
417
+ #
418
+ # @option spec [Proc] :union
419
+ #
420
+ # @option spec [Boolean] :"nil?"
421
+ private def variant(key, spec = nil)
422
+ variant_info =
423
+ case key
424
+ in Symbol
425
+ [key, OnebusawaySDK::Converter.type_info(spec)]
426
+ in Proc | OnebusawaySDK::Converter | Class | Hash
427
+ [nil, OnebusawaySDK::Converter.type_info(key)]
448
428
  end
449
429
 
450
- key = key.to_sym if key.is_a?(String)
451
- _, resolved = known_variants.find { |k,| k == key }
452
- resolved.nil? ? OnebusawaySDK::Unknown : resolved.call
453
- else
454
- nil
430
+ known_variants << variant_info
431
+ end
432
+
433
+ # @api private
434
+ #
435
+ # @param value [Object]
436
+ #
437
+ # @return [OnebusawaySDK::Converter, Class, nil]
438
+ private def resolve_variant(value)
439
+ case [@discriminator, value]
440
+ in [_, OnebusawaySDK::BaseModel]
441
+ value.class
442
+ in [Symbol, Hash]
443
+ key =
444
+ if value.key?(@discriminator)
445
+ value.fetch(@discriminator)
446
+ elsif value.key?((discriminator = @discriminator.to_s))
447
+ value.fetch(discriminator)
448
+ end
449
+
450
+ key = key.to_sym if key.is_a?(String)
451
+ _, resolved = known_variants.find { |k,| k == key }
452
+ resolved.nil? ? OnebusawaySDK::Unknown : resolved.call
453
+ else
454
+ nil
455
+ end
455
456
  end
456
457
  end
457
458
 
@@ -463,7 +464,6 @@ module OnebusawaySDK
463
464
  # @param other [Object]
464
465
  #
465
466
  # @return [Boolean]
466
- #
467
467
  def self.===(other)
468
468
  known_variants.any? do |_, variant_fn|
469
469
  variant_fn.call === other
@@ -473,99 +473,97 @@ module OnebusawaySDK
473
473
  # @param other [Object]
474
474
  #
475
475
  # @return [Boolean]
476
- #
477
476
  def self.==(other)
478
- other.is_a?(Class) && other <= OnebusawaySDK::Union && other.variants == variants
477
+ other.is_a?(Class) && other <= OnebusawaySDK::Union && other.derefed_variants == derefed_variants
479
478
  end
480
479
 
481
- # @private
482
- #
483
- # @param value [Object]
484
- #
485
- # @return [Object]
486
- #
487
- def self.coerce(value)
488
- if (variant = resolve_variant(value))
489
- return OnebusawaySDK::Converter.coerce(variant, value)
490
- end
480
+ class << self
481
+ # @api private
482
+ #
483
+ # @param value [Object]
484
+ #
485
+ # @return [Object]
486
+ def coerce(value)
487
+ if (variant = resolve_variant(value))
488
+ return OnebusawaySDK::Converter.coerce(variant, value)
489
+ end
491
490
 
492
- matches = []
491
+ matches = []
493
492
 
494
- known_variants.each do |_, variant_fn|
495
- variant = variant_fn.call
493
+ known_variants.each do |_, variant_fn|
494
+ variant = variant_fn.call
496
495
 
497
- case OnebusawaySDK::Converter.try_strict_coerce(variant, value)
498
- in [true, coerced, _]
499
- return coerced
500
- in [false, true, score]
501
- matches << [score, variant]
502
- in [false, false, _]
503
- nil
496
+ case OnebusawaySDK::Converter.try_strict_coerce(variant, value)
497
+ in [true, coerced, _]
498
+ return coerced
499
+ in [false, true, score]
500
+ matches << [score, variant]
501
+ in [false, false, _]
502
+ nil
503
+ end
504
504
  end
505
- end
506
505
 
507
- _, variant = matches.sort! { _2.first <=> _1.first }.find { |score,| !score.zero? }
508
- variant.nil? ? value : OnebusawaySDK::Converter.coerce(variant, value)
509
- end
510
-
511
- # @private
512
- #
513
- # @param value [Object]
514
- #
515
- # @return [Object]
516
- #
517
- def self.dump(value)
518
- if (variant = resolve_variant(value))
519
- return OnebusawaySDK::Converter.dump(variant, value)
506
+ _, variant = matches.sort! { _2.first <=> _1.first }.find { |score,| !score.zero? }
507
+ variant.nil? ? value : OnebusawaySDK::Converter.coerce(variant, value)
520
508
  end
521
509
 
522
- known_variants.each do |_, variant_fn|
523
- variant = variant_fn.call
524
- if variant === value
510
+ # @api private
511
+ #
512
+ # @param value [Object]
513
+ #
514
+ # @return [Object]
515
+ def dump(value)
516
+ if (variant = resolve_variant(value))
525
517
  return OnebusawaySDK::Converter.dump(variant, value)
526
518
  end
527
- end
528
- value
529
- end
530
519
 
531
- # @private
532
- #
533
- # @param value [Object]
534
- #
535
- # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
536
- #
537
- def self.try_strict_coerce(value)
538
- # TODO(ruby) this will result in super linear decoding behaviour for nested unions
539
- # follow up with a decoding context that captures current strictness levels
540
- if (variant = resolve_variant(value))
541
- return Converter.try_strict_coerce(variant, value)
520
+ known_variants.each do |_, variant_fn|
521
+ variant = variant_fn.call
522
+ if variant === value
523
+ return OnebusawaySDK::Converter.dump(variant, value)
524
+ end
525
+ end
526
+ value
542
527
  end
543
528
 
544
- coercible = false
545
- max_score = 0
529
+ # @api private
530
+ #
531
+ # @param value [Object]
532
+ #
533
+ # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
534
+ def try_strict_coerce(value)
535
+ # TODO(ruby) this will result in super linear decoding behaviour for nested unions
536
+ # follow up with a decoding context that captures current strictness levels
537
+ if (variant = resolve_variant(value))
538
+ return Converter.try_strict_coerce(variant, value)
539
+ end
540
+
541
+ coercible = false
542
+ max_score = 0
546
543
 
547
- known_variants.each do |_, variant_fn|
548
- variant = variant_fn.call
544
+ known_variants.each do |_, variant_fn|
545
+ variant = variant_fn.call
549
546
 
550
- case OnebusawaySDK::Converter.try_strict_coerce(variant, value)
551
- in [true, coerced, score]
552
- return [true, coerced, score]
553
- in [false, true, score]
554
- coercible = true
555
- max_score = [max_score, score].max
556
- in [false, false, _]
557
- nil
547
+ case OnebusawaySDK::Converter.try_strict_coerce(variant, value)
548
+ in [true, coerced, score]
549
+ return [true, coerced, score]
550
+ in [false, true, score]
551
+ coercible = true
552
+ max_score = [max_score, score].max
553
+ in [false, false, _]
554
+ nil
555
+ end
558
556
  end
559
- end
560
557
 
561
- [false, coercible, max_score]
558
+ [false, coercible, max_score]
559
+ end
562
560
  end
563
561
 
564
562
  # rubocop:enable Style/CaseEquality
565
563
  # rubocop:enable Style/HashEachMethods
566
564
  end
567
565
 
568
- # @private
566
+ # @api private
569
567
  #
570
568
  # @abstract
571
569
  #
@@ -580,7 +578,6 @@ module OnebusawaySDK
580
578
  # @param other [Object]
581
579
  #
582
580
  # @return [Boolean]
583
- #
584
581
  def ===(other)
585
582
  type = item_type
586
583
  case other
@@ -596,15 +593,13 @@ module OnebusawaySDK
596
593
  # @param other [Object]
597
594
  #
598
595
  # @return [Boolean]
599
- #
600
596
  def ==(other) = other.is_a?(OnebusawaySDK::ArrayOf) && other.item_type == item_type
601
597
 
602
- # @private
598
+ # @api private
603
599
  #
604
600
  # @param value [Enumerable, Object]
605
601
  #
606
602
  # @return [Array<Object>, Object]
607
- #
608
603
  def coerce(value)
609
604
  type = item_type
610
605
  case value
@@ -615,12 +610,11 @@ module OnebusawaySDK
615
610
  end
616
611
  end
617
612
 
618
- # @private
613
+ # @api private
619
614
  #
620
615
  # @param value [Enumerable, Object]
621
616
  #
622
617
  # @return [Array<Object>, Object]
623
- #
624
618
  def dump(value)
625
619
  type = item_type
626
620
  case value
@@ -631,12 +625,11 @@ module OnebusawaySDK
631
625
  end
632
626
  end
633
627
 
634
- # @private
628
+ # @api private
635
629
  #
636
630
  # @param value [Object]
637
631
  #
638
632
  # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
639
- #
640
633
  def try_strict_coerce(value)
641
634
  case value
642
635
  in Array
@@ -670,13 +663,12 @@ module OnebusawaySDK
670
663
  end
671
664
  end
672
665
 
673
- # @private
666
+ # @api private
674
667
  #
675
668
  # @return [OnebusawaySDK::Converter, Class]
676
- #
677
669
  protected def item_type = @item_type_fn.call
678
670
 
679
- # @private
671
+ # @api private
680
672
  #
681
673
  # @param type_info [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
682
674
  #
@@ -689,13 +681,12 @@ module OnebusawaySDK
689
681
  # @option spec [Proc] :union
690
682
  #
691
683
  # @option spec [Boolean] :"nil?"
692
- #
693
684
  def initialize(type_info, spec = {})
694
685
  @item_type_fn = OnebusawaySDK::Converter.type_info(type_info || spec)
695
686
  end
696
687
  end
697
688
 
698
- # @private
689
+ # @api private
699
690
  #
700
691
  # @abstract
701
692
  #
@@ -710,7 +701,6 @@ module OnebusawaySDK
710
701
  # @param other [Object]
711
702
  #
712
703
  # @return [Boolean]
713
- #
714
704
  def ===(other)
715
705
  type = item_type
716
706
  case other
@@ -731,15 +721,13 @@ module OnebusawaySDK
731
721
  # @param other [Object]
732
722
  #
733
723
  # @return [Boolean]
734
- #
735
724
  def ==(other) = other.is_a?(OnebusawaySDK::HashOf) && other.item_type == item_type
736
725
 
737
- # @private
726
+ # @api private
738
727
  #
739
728
  # @param value [Hash{Object=>Object}, Object]
740
729
  #
741
730
  # @return [Hash{Symbol=>Object}, Object]
742
- #
743
731
  def coerce(value)
744
732
  type = item_type
745
733
  case value
@@ -753,12 +741,11 @@ module OnebusawaySDK
753
741
  end
754
742
  end
755
743
 
756
- # @private
744
+ # @api private
757
745
  #
758
746
  # @param value [Hash{Object=>Object}, Object]
759
747
  #
760
748
  # @return [Hash{Symbol=>Object}, Object]
761
- #
762
749
  def dump(value)
763
750
  type = item_type
764
751
  case value
@@ -771,12 +758,11 @@ module OnebusawaySDK
771
758
  end
772
759
  end
773
760
 
774
- # @private
761
+ # @api private
775
762
  #
776
763
  # @param value [Object]
777
764
  #
778
765
  # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
779
- #
780
766
  def try_strict_coerce(value)
781
767
  case value
782
768
  in Hash
@@ -810,13 +796,12 @@ module OnebusawaySDK
810
796
  end
811
797
  end
812
798
 
813
- # @private
799
+ # @api private
814
800
  #
815
801
  # @return [OnebusawaySDK::Converter, Class]
816
- #
817
802
  protected def item_type = @item_type_fn.call
818
803
 
819
- # @private
804
+ # @api private
820
805
  #
821
806
  # @param type_info [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
822
807
  #
@@ -829,175 +814,172 @@ module OnebusawaySDK
829
814
  # @option spec [Proc] :union
830
815
  #
831
816
  # @option spec [Boolean] :"nil?"
832
- #
833
817
  def initialize(type_info, spec = {})
834
818
  @item_type_fn = OnebusawaySDK::Converter.type_info(type_info || spec)
835
819
  end
836
820
  end
837
821
 
838
- # @private
839
- #
840
822
  # @abstract
841
823
  #
824
+ # @example
825
+ # ```ruby
826
+ # # `references` is a `OnebusawaySDK::Models::References`
827
+ # references => {
828
+ # agencies: agencies,
829
+ # routes: routes,
830
+ # situations: situations
831
+ # }
832
+ # ```
842
833
  class BaseModel
843
834
  extend OnebusawaySDK::Converter
844
835
 
845
- # @private
846
- #
847
- # Assumes superclass fields are totally defined before fields are accessed /
848
- # defined on subclasses.
849
- #
850
- # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
851
- #
852
- def self.known_fields
853
- @known_fields ||= (self < OnebusawaySDK::BaseModel ? superclass.known_fields.dup : {})
854
- end
855
-
856
836
  class << self
857
- # @private
837
+ # @api private
838
+ #
839
+ # Assumes superclass fields are totally defined before fields are accessed /
840
+ # defined on subclasses.
858
841
  #
859
842
  # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
843
+ def known_fields
844
+ @known_fields ||= (self < OnebusawaySDK::BaseModel ? superclass.known_fields.dup : {})
845
+ end
846
+
847
+ # @api private
860
848
  #
849
+ # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
861
850
  def fields
862
851
  known_fields.transform_values do |field|
863
852
  {**field.except(:type_fn), type: field.fetch(:type_fn).call}
864
853
  end
865
854
  end
866
- end
867
855
 
868
- # @private
869
- #
870
- # @return [Hash{Symbol=>Proc}]
871
- #
872
- def self.defaults = (@defaults ||= {})
856
+ # @api private
857
+ #
858
+ # @return [Hash{Symbol=>Proc}]
859
+ def defaults = (@defaults ||= {})
873
860
 
874
- # @private
875
- #
876
- # @param name_sym [Symbol]
877
- #
878
- # @param required [Boolean]
879
- #
880
- # @param type_info [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
881
- #
882
- # @param spec [Hash{Symbol=>Object}] .
883
- #
884
- # @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
885
- #
886
- # @option spec [Proc] :enum
887
- #
888
- # @option spec [Proc] :union
889
- #
890
- # @option spec [Boolean] :"nil?"
891
- #
892
- private_class_method def self.add_field(name_sym, required:, type_info:, spec:)
893
- type_fn, info =
894
- case type_info
895
- in Proc | Class | OnebusawaySDK::Converter
896
- [OnebusawaySDK::Converter.type_info({**spec, union: type_info}), spec]
897
- in Hash
898
- [OnebusawaySDK::Converter.type_info(type_info), type_info]
899
- end
861
+ # @api private
862
+ #
863
+ # @param name_sym [Symbol]
864
+ #
865
+ # @param required [Boolean]
866
+ #
867
+ # @param type_info [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
868
+ #
869
+ # @param spec [Hash{Symbol=>Object}] .
870
+ #
871
+ # @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
872
+ #
873
+ # @option spec [Proc] :enum
874
+ #
875
+ # @option spec [Proc] :union
876
+ #
877
+ # @option spec [Boolean] :"nil?"
878
+ private def add_field(name_sym, required:, type_info:, spec:)
879
+ type_fn, info =
880
+ case type_info
881
+ in Proc | Class | OnebusawaySDK::Converter
882
+ [OnebusawaySDK::Converter.type_info({**spec, union: type_info}), spec]
883
+ in Hash
884
+ [OnebusawaySDK::Converter.type_info(type_info), type_info]
885
+ end
900
886
 
901
- fallback = info[:const]
902
- defaults[name_sym] = fallback if required && !info[:nil?] && info.key?(:const)
887
+ fallback = info[:const]
888
+ defaults[name_sym] = fallback if required && !info[:nil?] && info.key?(:const)
903
889
 
904
- key = info.fetch(:api_name, name_sym)
905
- setter = "#{name_sym}="
890
+ key = info.fetch(:api_name, name_sym)
891
+ setter = "#{name_sym}="
906
892
 
907
- if known_fields.key?(name_sym)
908
- [name_sym, setter].each { undef_method(_1) }
909
- end
893
+ if known_fields.key?(name_sym)
894
+ [name_sym, setter].each { undef_method(_1) }
895
+ end
910
896
 
911
- known_fields[name_sym] = {mode: @mode, key: key, required: required, type_fn: type_fn}
897
+ known_fields[name_sym] = {mode: @mode, key: key, required: required, type_fn: type_fn}
912
898
 
913
- define_method(setter) do |val|
914
- @data[key] = val
915
- end
899
+ define_method(setter) do |val|
900
+ @data[key] = val
901
+ end
916
902
 
917
- define_method(name_sym) do
918
- field_type = type_fn.call
919
- value = @data.fetch(key) { self.class.defaults[key] }
920
- OnebusawaySDK::Converter.coerce(field_type, value)
921
- rescue StandardError
922
- name = self.class.name.split("::").last
923
- raise OnebusawaySDK::ConversionError.new(
924
- "Failed to parse #{name}.#{name_sym} as #{field_type.inspect}. " \
925
- "To get the unparsed API response, use #{name}[:#{key}]."
926
- )
903
+ define_method(name_sym) do
904
+ field_type = type_fn.call
905
+ value = @data.fetch(key) { self.class.defaults[key] }
906
+ OnebusawaySDK::Converter.coerce(field_type, value)
907
+ rescue StandardError
908
+ name = self.class.name.split("::").last
909
+ raise OnebusawaySDK::ConversionError.new(
910
+ "Failed to parse #{name}.#{name_sym} as #{field_type.inspect}. " \
911
+ "To get the unparsed API response, use #{name}[:#{key}]."
912
+ )
913
+ end
927
914
  end
928
- end
929
915
 
930
- # @private
931
- #
932
- # @param name_sym [Symbol]
933
- #
934
- # @param type_info [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
935
- #
936
- # @param spec [Hash{Symbol=>Object}] .
937
- #
938
- # @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
939
- #
940
- # @option spec [Proc] :enum
941
- #
942
- # @option spec [Proc] :union
943
- #
944
- # @option spec [Boolean] :"nil?"
945
- #
946
- def self.required(name_sym, type_info, spec = {})
947
- add_field(name_sym, required: true, type_info: type_info, spec: spec)
948
- end
916
+ # @api private
917
+ #
918
+ # @param name_sym [Symbol]
919
+ #
920
+ # @param type_info [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
921
+ #
922
+ # @param spec [Hash{Symbol=>Object}] .
923
+ #
924
+ # @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
925
+ #
926
+ # @option spec [Proc] :enum
927
+ #
928
+ # @option spec [Proc] :union
929
+ #
930
+ # @option spec [Boolean] :"nil?"
931
+ def required(name_sym, type_info, spec = {})
932
+ add_field(name_sym, required: true, type_info: type_info, spec: spec)
933
+ end
949
934
 
950
- # @private
951
- #
952
- # @param name_sym [Symbol]
953
- #
954
- # @param type_info [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
955
- #
956
- # @param spec [Hash{Symbol=>Object}] .
957
- #
958
- # @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
959
- #
960
- # @option spec [Proc] :enum
961
- #
962
- # @option spec [Proc] :union
963
- #
964
- # @option spec [Boolean] :"nil?"
965
- #
966
- def self.optional(name_sym, type_info, spec = {})
967
- add_field(name_sym, required: false, type_info: type_info, spec: spec)
968
- end
935
+ # @api private
936
+ #
937
+ # @param name_sym [Symbol]
938
+ #
939
+ # @param type_info [Hash{Symbol=>Object}, Proc, OnebusawaySDK::Converter, Class]
940
+ #
941
+ # @param spec [Hash{Symbol=>Object}] .
942
+ #
943
+ # @option spec [NilClass, TrueClass, FalseClass, Integer, Float, Symbol] :const
944
+ #
945
+ # @option spec [Proc] :enum
946
+ #
947
+ # @option spec [Proc] :union
948
+ #
949
+ # @option spec [Boolean] :"nil?"
950
+ def optional(name_sym, type_info, spec = {})
951
+ add_field(name_sym, required: false, type_info: type_info, spec: spec)
952
+ end
969
953
 
970
- # @private
971
- #
972
- # `request_only` attributes not excluded from `.#coerce` when receiving responses
973
- # even if well behaved servers should not send them
974
- #
975
- # @param blk [Proc]
976
- #
977
- private_class_method def self.request_only(&blk)
978
- @mode = :dump
979
- blk.call
980
- ensure
981
- @mode = nil
982
- end
954
+ # @api private
955
+ #
956
+ # `request_only` attributes not excluded from `.#coerce` when receiving responses
957
+ # even if well behaved servers should not send them
958
+ #
959
+ # @param blk [Proc]
960
+ private def request_only(&blk)
961
+ @mode = :dump
962
+ blk.call
963
+ ensure
964
+ @mode = nil
965
+ end
983
966
 
984
- # @private
985
- #
986
- # `response_only` attributes are omitted from `.#dump` when making requests
987
- #
988
- # @param blk [Proc]
989
- #
990
- private_class_method def self.response_only(&blk)
991
- @mode = :coerce
992
- blk.call
993
- ensure
994
- @mode = nil
967
+ # @api private
968
+ #
969
+ # `response_only` attributes are omitted from `.#dump` when making requests
970
+ #
971
+ # @param blk [Proc]
972
+ private def response_only(&blk)
973
+ @mode = :coerce
974
+ blk.call
975
+ ensure
976
+ @mode = nil
977
+ end
995
978
  end
996
979
 
997
980
  # @param other [Object]
998
981
  #
999
982
  # @return [Boolean]
1000
- #
1001
983
  def ==(other)
1002
984
  case other
1003
985
  in OnebusawaySDK::BaseModel
@@ -1007,108 +989,107 @@ module OnebusawaySDK
1007
989
  end
1008
990
  end
1009
991
 
1010
- # @private
1011
- #
1012
- # @param value [OnebusawaySDK::BaseModel, Hash{Object=>Object}, Object]
1013
- #
1014
- # @return [OnebusawaySDK::BaseModel, Object]
1015
- #
1016
- def self.coerce(value)
1017
- case OnebusawaySDK::Util.coerce_hash(value)
1018
- in Hash => coerced
1019
- new(coerced)
1020
- else
1021
- value
992
+ class << self
993
+ # @api private
994
+ #
995
+ # @param value [OnebusawaySDK::BaseModel, Hash{Object=>Object}, Object]
996
+ #
997
+ # @return [OnebusawaySDK::BaseModel, Object]
998
+ def coerce(value)
999
+ case OnebusawaySDK::Util.coerce_hash(value)
1000
+ in Hash => coerced
1001
+ new(coerced)
1002
+ else
1003
+ value
1004
+ end
1022
1005
  end
1023
- end
1024
1006
 
1025
- # @private
1026
- #
1027
- # @param value [OnebusawaySDK::BaseModel, Object]
1028
- #
1029
- # @return [Hash{Object=>Object}, Object]
1030
- #
1031
- def self.dump(value)
1032
- unless (coerced = OnebusawaySDK::Util.coerce_hash(value)).is_a?(Hash)
1033
- return value
1034
- end
1007
+ # @api private
1008
+ #
1009
+ # @param value [OnebusawaySDK::BaseModel, Object]
1010
+ #
1011
+ # @return [Hash{Object=>Object}, Object]
1012
+ def dump(value)
1013
+ unless (coerced = OnebusawaySDK::Util.coerce_hash(value)).is_a?(Hash)
1014
+ return value
1015
+ end
1035
1016
 
1036
- values = coerced.filter_map do |key, val|
1037
- name = key.to_sym
1038
- case (field = known_fields[name])
1039
- in nil
1040
- [name, val]
1041
- else
1042
- mode, type_fn, api_name = field.fetch_values(:mode, :type_fn, :key)
1043
- case mode
1044
- in :coerce
1045
- next
1017
+ values = coerced.filter_map do |key, val|
1018
+ name = key.to_sym
1019
+ case (field = known_fields[name])
1020
+ in nil
1021
+ [name, val]
1046
1022
  else
1047
- target = type_fn.call
1048
- [api_name, OnebusawaySDK::Converter.dump(target, val)]
1023
+ mode, type_fn, api_name = field.fetch_values(:mode, :type_fn, :key)
1024
+ case mode
1025
+ in :coerce
1026
+ next
1027
+ else
1028
+ target = type_fn.call
1029
+ [api_name, OnebusawaySDK::Converter.dump(target, val)]
1030
+ end
1049
1031
  end
1050
- end
1051
- end.to_h
1032
+ end.to_h
1052
1033
 
1053
- defaults.each do |key, val|
1054
- next if values.key?(key)
1034
+ defaults.each do |key, val|
1035
+ next if values.key?(key)
1055
1036
 
1056
- values[key] = val
1057
- end
1058
-
1059
- values
1060
- end
1037
+ values[key] = val
1038
+ end
1061
1039
 
1062
- # @private
1063
- #
1064
- # @param value [Object]
1065
- #
1066
- # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
1067
- #
1068
- def self.try_strict_coerce(value)
1069
- case value
1070
- in Hash | OnebusawaySDK::BaseModel
1071
- value = value.to_h
1072
- else
1073
- return [false, false, 0]
1040
+ values
1074
1041
  end
1075
1042
 
1076
- keys = value.keys.to_set
1077
- great_success = true
1078
- tally = 0
1079
- acc = {}
1043
+ # @api private
1044
+ #
1045
+ # @param value [Object]
1046
+ #
1047
+ # @return [Array(true, Object, nil), Array(false, Boolean, Integer)]
1048
+ def try_strict_coerce(value)
1049
+ case value
1050
+ in Hash | OnebusawaySDK::BaseModel
1051
+ value = value.to_h
1052
+ else
1053
+ return [false, false, 0]
1054
+ end
1080
1055
 
1081
- known_fields.each_value do |field|
1082
- mode, required, type_fn, api_name = field.fetch_values(:mode, :required, :type_fn, :key)
1083
- keys.delete(api_name)
1056
+ keys = value.keys.to_set
1057
+ great_success = true
1058
+ tally = 0
1059
+ acc = {}
1084
1060
 
1085
- case [required && mode != :dump, value.key?(api_name)]
1086
- in [_, true]
1087
- target = type_fn.call
1088
- item = value.fetch(api_name)
1089
- case OnebusawaySDK::Converter.try_strict_coerce(target, item)
1090
- in [true, coerced, score]
1091
- tally += score
1092
- acc[api_name] = coerced
1093
- in [false, true, score]
1061
+ known_fields.each_value do |field|
1062
+ mode, required, type_fn, api_name = field.fetch_values(:mode, :required, :type_fn, :key)
1063
+ keys.delete(api_name)
1064
+
1065
+ case [required && mode != :dump, value.key?(api_name)]
1066
+ in [_, true]
1067
+ target = type_fn.call
1068
+ item = value.fetch(api_name)
1069
+ case OnebusawaySDK::Converter.try_strict_coerce(target, item)
1070
+ in [true, coerced, score]
1071
+ tally += score
1072
+ acc[api_name] = coerced
1073
+ in [false, true, score]
1074
+ great_success = false
1075
+ tally += score
1076
+ acc[api_name] = item
1077
+ in [false, false, _]
1078
+ great_success &&= item.nil?
1079
+ end
1080
+ in [true, false]
1094
1081
  great_success = false
1095
- tally += score
1096
- acc[api_name] = item
1097
- in [false, false, _]
1098
- great_success &&= item.nil?
1082
+ in [false, false]
1083
+ nil
1099
1084
  end
1100
- in [true, false]
1101
- great_success = false
1102
- in [false, false]
1103
- nil
1104
1085
  end
1105
- end
1106
1086
 
1107
- keys.each do |key|
1108
- acc[key] = value.fetch(key)
1109
- end
1087
+ keys.each do |key|
1088
+ acc[key] = value.fetch(key)
1089
+ end
1110
1090
 
1111
- great_success ? [true, new(acc), tally] : [false, true, tally]
1091
+ great_success ? [true, new(acc), tally] : [false, true, tally]
1092
+ end
1112
1093
  end
1113
1094
 
1114
1095
  # Returns the raw value associated with the given key, if found. Otherwise, nil is
@@ -1121,7 +1102,6 @@ module OnebusawaySDK
1121
1102
  # @param key [Symbol]
1122
1103
  #
1123
1104
  # @return [Object, nil]
1124
- #
1125
1105
  def [](key)
1126
1106
  unless key.instance_of?(Symbol)
1127
1107
  raise ArgumentError.new("Expected symbol key for lookup, got #{key.inspect}")
@@ -1140,7 +1120,6 @@ module OnebusawaySDK
1140
1120
  # should not be mutated.
1141
1121
  #
1142
1122
  # @return [Hash{Symbol=>Object}]
1143
- #
1144
1123
  def to_h = @data
1145
1124
 
1146
1125
  alias_method :to_hash, :to_h
@@ -1148,7 +1127,6 @@ module OnebusawaySDK
1148
1127
  # @param keys [Array<Symbol>, nil]
1149
1128
  #
1150
1129
  # @return [Hash{Symbol=>Object}]
1151
- #
1152
1130
  def deconstruct_keys(keys)
1153
1131
  (keys || self.class.known_fields.keys).filter_map do |k|
1154
1132
  unless self.class.known_fields.key?(k)
@@ -1163,7 +1141,6 @@ module OnebusawaySDK
1163
1141
  # Create a new instance of a model.
1164
1142
  #
1165
1143
  # @param data [Hash{Symbol=>Object}, OnebusawaySDK::BaseModel]
1166
- #
1167
1144
  def initialize(data = {})
1168
1145
  case OnebusawaySDK::Util.coerce_hash(data)
1169
1146
  in Hash => coerced
@@ -1174,11 +1151,9 @@ module OnebusawaySDK
1174
1151
  end
1175
1152
 
1176
1153
  # @return [String]
1177
- #
1178
1154
  def to_s = @data.to_s
1179
1155
 
1180
1156
  # @return [String]
1181
- #
1182
1157
  def inspect
1183
1158
  "#<#{self.class.name}:0x#{object_id.to_s(16)} #{deconstruct_keys(nil).map do |k, v|
1184
1159
  "#{k}=#{v.inspect}"