onebusaway-sdk 0.1.0.pre.alpha.205 → 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 +63 -91
  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 +15 -19
  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 +53 -54
  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 +297 -96
  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 +52 -35
  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 +44 -10
  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 +214 -83
  141. data/rbi/lib/onebusaway-sdk/version.rbi +1 -1
  142. data/sig/onebusaway-sdk/base_client.rbs +9 -8
  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 +6 -5
  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 +46 -2
  149. data/sig/onebusaway-sdk/version.rbs +1 -1
  150. metadata +4 -4
@@ -1,40 +1,60 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OnebusawaySDK
4
- # @private
4
+ # @example
5
+ # ```ruby
6
+ # if page.has_next?
7
+ # page = page.next_page
8
+ # end
9
+ # ```
5
10
  #
6
- # @abstract
11
+ # @example
12
+ # ```ruby
13
+ # page.auto_paging_each do |agencies_with_coverage|
14
+ # puts(agencies_with_coverage)
15
+ # end
16
+ # ```
7
17
  #
18
+ # @example
19
+ # ```ruby
20
+ # agencies_with_coverages = page
21
+ # .to_enum
22
+ # .lazy
23
+ # .select { _1.object_id.even? }
24
+ # .map(&:itself)
25
+ # .take(2)
26
+ # .to_a
27
+ #
28
+ # agencies_with_coverages => Array
29
+ # ```
8
30
  module BasePage
9
31
  # @return [Boolean]
10
- #
11
32
  def next_page? = (raise NotImplementedError)
12
33
 
13
34
  # @raise [OnebusawaySDK::APIError]
14
35
  # @return [OnebusawaySDK::BasePage]
15
- #
16
36
  def next_page = (raise NotImplementedError)
17
37
 
18
38
  # @param blk [Proc]
19
39
  #
20
40
  # @return [void]
21
- #
22
41
  def auto_paging_each(&) = (raise NotImplementedError)
23
42
 
24
43
  # @return [Enumerable]
25
- #
26
44
  def to_enum = super(:auto_paging_each)
27
45
 
28
46
  alias_method :enum_for, :to_enum
29
47
 
30
- # @!parse
31
- # # @private
32
- # #
33
- # # @param client [OnebusawaySDK::BaseClient]
34
- # # @param req [Hash{Symbol=>Object}]
35
- # # @param headers [Hash{String=>String}, Net::HTTPHeader]
36
- # # @param unwrapped [Object]
37
- # #
38
- # def initialize(client:, req:, headers:, unwrapped:); end
48
+ # @api private
49
+ #
50
+ # @param client [OnebusawaySDK::BaseClient]
51
+ # @param req [Hash{Symbol=>Object}]
52
+ # @param headers [Hash{String=>String}, Net::HTTPHeader]
53
+ # @param page_data [Object]
54
+ def initialize(client:, req:, headers:, page_data:)
55
+ @client = client
56
+ @req = req
57
+ super()
58
+ end
39
59
  end
40
60
  end
@@ -102,10 +102,9 @@ module OnebusawaySDK
102
102
  # @return [OnebusawaySDK::Resources::Shape]
103
103
  attr_reader :shape
104
104
 
105
- # @private
105
+ # @api private
106
106
  #
107
107
  # @return [Hash{String=>String}]
108
- #
109
108
  private def auth_query
110
109
  {"key" => @api_key}
111
110
  end
@@ -123,7 +122,6 @@ module OnebusawaySDK
123
122
  # @param initial_retry_delay [Float]
124
123
  #
125
124
  # @param max_retry_delay [Float]
126
- #
127
125
  def initialize(
128
126
  base_url: nil,
129
127
  api_key: ENV["ONEBUSAWAY_API_KEY"],
@@ -4,7 +4,7 @@ module OnebusawaySDK
4
4
  class Error < StandardError
5
5
  # @!parse
6
6
  # # @return [StandardError, nil]
7
- # attr_reader :cause
7
+ # attr_accessor :cause
8
8
  end
9
9
 
10
10
  class ConversionError < OnebusawaySDK::Error
@@ -12,15 +12,15 @@ module OnebusawaySDK
12
12
 
13
13
  class APIError < OnebusawaySDK::Error
14
14
  # @return [URI::Generic]
15
- attr_reader :url
15
+ attr_accessor :url
16
16
 
17
17
  # @return [Integer, nil]
18
- attr_reader :status
18
+ attr_accessor :status
19
19
 
20
20
  # @return [Object, nil]
21
- attr_reader :body
21
+ attr_accessor :body
22
22
 
23
- # @private
23
+ # @api private
24
24
  #
25
25
  # @param url [URI::Generic]
26
26
  # @param status [Integer, nil]
@@ -28,7 +28,6 @@ module OnebusawaySDK
28
28
  # @param request [nil]
29
29
  # @param response [nil]
30
30
  # @param message [String, nil]
31
- #
32
31
  def initialize(url:, status: nil, body: nil, request: nil, response: nil, message: nil)
33
32
  @url = url
34
33
  @status = status
@@ -42,13 +41,13 @@ module OnebusawaySDK
42
41
  class APIConnectionError < OnebusawaySDK::APIError
43
42
  # @!parse
44
43
  # # @return [nil]
45
- # attr_reader :status
44
+ # attr_accessor :status
46
45
 
47
46
  # @!parse
48
47
  # # @return [nil]
49
- # attr_reader :body
48
+ # attr_accessor :body
50
49
 
51
- # @private
50
+ # @api private
52
51
  #
53
52
  # @param url [URI::Generic]
54
53
  # @param status [nil]
@@ -56,7 +55,6 @@ module OnebusawaySDK
56
55
  # @param request [nil]
57
56
  # @param response [nil]
58
57
  # @param message [String, nil]
59
- #
60
58
  def initialize(
61
59
  url:,
62
60
  status: nil,
@@ -70,7 +68,7 @@ module OnebusawaySDK
70
68
  end
71
69
 
72
70
  class APITimeoutError < OnebusawaySDK::APIConnectionError
73
- # @private
71
+ # @api private
74
72
  #
75
73
  # @param url [URI::Generic]
76
74
  # @param status [nil]
@@ -78,7 +76,6 @@ module OnebusawaySDK
78
76
  # @param request [nil]
79
77
  # @param response [nil]
80
78
  # @param message [String, nil]
81
- #
82
79
  def initialize(
83
80
  url:,
84
81
  status: nil,
@@ -92,18 +89,18 @@ module OnebusawaySDK
92
89
  end
93
90
 
94
91
  class APIStatusError < OnebusawaySDK::APIError
95
- # @private
92
+ # @api private
96
93
  #
97
94
  # @param url [URI::Generic]
98
95
  # @param status [Integer]
99
96
  # @param body [Object, nil]
100
97
  # @param request [nil]
101
98
  # @param response [nil]
99
+ # @param message [String, nil]
102
100
  #
103
101
  # @return [OnebusawaySDK::APIStatusError]
104
- #
105
- def self.for(url:, status:, body:, request:, response:)
106
- kwargs = {url: url, status: status, body: body, request: request, response: response}
102
+ def self.for(url:, status:, body:, request:, response:, message: nil)
103
+ kwargs = {url: url, status: status, body: body, request: request, response: response, message: message}
107
104
 
108
105
  case status
109
106
  in 400
@@ -129,9 +126,9 @@ module OnebusawaySDK
129
126
 
130
127
  # @!parse
131
128
  # # @return [Integer]
132
- # attr_reader :status
129
+ # attr_accessor :status
133
130
 
134
- # @private
131
+ # @api private
135
132
  #
136
133
  # @param url [URI::Generic]
137
134
  # @param status [Integer]
@@ -139,7 +136,6 @@ module OnebusawaySDK
139
136
  # @param request [nil]
140
137
  # @param response [nil]
141
138
  # @param message [String, nil]
142
- #
143
139
  def initialize(url:, status:, body:, request:, response:, message: nil)
144
140
  message ||= {url: url.to_s, status: status, body: body}
145
141
  super(
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OnebusawaySDK
4
- # @private
5
- #
6
- # @abstract
7
- #
4
+ # @api private
8
5
  module Extern
9
6
  end
10
7
  end
@@ -671,22 +671,6 @@ module OnebusawaySDK
671
671
  # @abstract
672
672
  #
673
673
  # Reason for the service alert, taken from TPEG codes.
674
- #
675
- # @example
676
- # ```ruby
677
- # case reason
678
- # in :equipmentReason
679
- # # ...
680
- # in :environmentReason
681
- # # ...
682
- # in :personnelReason
683
- # # ...
684
- # in :miscellaneousReason
685
- # # ...
686
- # in :securityAlert
687
- # # ...
688
- # end
689
- # ```
690
674
  class Reason < OnebusawaySDK::Enum
691
675
  EQUIPMENT_REASON = :equipmentReason
692
676
  ENVIRONMENT_REASON = :environmentReason
@@ -695,11 +679,6 @@ module OnebusawaySDK
695
679
  SECURITY_ALERT = :securityAlert
696
680
 
697
681
  finalize!
698
-
699
- # @!parse
700
- # # @return [Array<Symbol>]
701
- # #
702
- # def self.values; end
703
682
  end
704
683
 
705
684
  class Summary < OnebusawaySDK::BaseModel
@@ -82,22 +82,6 @@ module OnebusawaySDK
82
82
  # @abstract
83
83
  #
84
84
  # A string code identifying the nature of the problem
85
- #
86
- # @example
87
- # ```ruby
88
- # case code
89
- # in :stop_name_wrong
90
- # # ...
91
- # in :stop_number_wrong
92
- # # ...
93
- # in :stop_location_wrong
94
- # # ...
95
- # in :route_or_trip_missing
96
- # # ...
97
- # in :other
98
- # # ...
99
- # end
100
- # ```
101
85
  class Code < OnebusawaySDK::Enum
102
86
  STOP_NAME_WRONG = :stop_name_wrong
103
87
  STOP_NUMBER_WRONG = :stop_number_wrong
@@ -106,11 +90,6 @@ module OnebusawaySDK
106
90
  OTHER = :other
107
91
 
108
92
  finalize!
109
-
110
- # @!parse
111
- # # @return [Array<Symbol>]
112
- # #
113
- # def self.values; end
114
93
  end
115
94
  end
116
95
  end
@@ -142,24 +142,6 @@ module OnebusawaySDK
142
142
  # @abstract
143
143
  #
144
144
  # A string code identifying the nature of the problem
145
- #
146
- # @example
147
- # ```ruby
148
- # case code
149
- # in :vehicle_never_came
150
- # # ...
151
- # in :vehicle_came_early
152
- # # ...
153
- # in :vehicle_came_late
154
- # # ...
155
- # in :wrong_headsign
156
- # # ...
157
- # in :vehicle_does_not_stop_here
158
- # # ...
159
- # in ...
160
- # #...
161
- # end
162
- # ```
163
145
  class Code < OnebusawaySDK::Enum
164
146
  VEHICLE_NEVER_CAME = :vehicle_never_came
165
147
  VEHICLE_CAME_EARLY = :vehicle_came_early
@@ -169,11 +151,6 @@ module OnebusawaySDK
169
151
  OTHER = :other
170
152
 
171
153
  finalize!
172
-
173
- # @!parse
174
- # # @return [Array<Symbol>]
175
- # #
176
- # def self.values; end
177
154
  end
178
155
  end
179
156
  end
@@ -1,16 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OnebusawaySDK
4
- # @private
5
- #
4
+ # @api private
6
5
  class PooledNetRequester
7
6
  class << self
8
- # @private
7
+ # @api private
9
8
  #
10
9
  # @param url [URI::Generic]
11
10
  #
12
11
  # @return [Net::HTTP]
13
- #
14
12
  def connect(url)
15
13
  port =
16
14
  case [url.port, url.scheme]
@@ -28,17 +26,16 @@ module OnebusawaySDK
28
26
  end
29
27
  end
30
28
 
31
- # @private
29
+ # @api private
32
30
  #
33
31
  # @param conn [Net::HTTP]
34
32
  # @param deadline [Float]
35
- #
36
33
  def calibrate_socket_timeout(conn, deadline)
37
34
  timeout = deadline - OnebusawaySDK::Util.monotonic_secs
38
35
  conn.open_timeout = conn.read_timeout = conn.write_timeout = conn.continue_timeout = timeout
39
36
  end
40
37
 
41
- # @private
38
+ # @api private
42
39
  #
43
40
  # @param request [Hash{Symbol=>Object}] .
44
41
  #
@@ -48,9 +45,10 @@ module OnebusawaySDK
48
45
  #
49
46
  # @option request [Hash{String=>String}] :headers
50
47
  #
51
- # @return [Net::HTTPGenericRequest]
48
+ # @param blk [Proc]
52
49
  #
53
- def build_request(request)
50
+ # @return [Net::HTTPGenericRequest]
51
+ def build_request(request, &)
54
52
  method, url, headers, body = request.fetch_values(:method, :url, :headers, :body)
55
53
  req = Net::HTTPGenericRequest.new(
56
54
  method.to_s.upcase,
@@ -63,54 +61,41 @@ module OnebusawaySDK
63
61
 
64
62
  case body
65
63
  in nil
64
+ nil
66
65
  in String
67
- req.body = body
66
+ req["content-length"] ||= body.bytesize.to_s unless req["transfer-encoding"]
67
+ req.body_stream = OnebusawaySDK::Util::ReadIOAdapter.new(body, &)
68
68
  in StringIO
69
- req.body = body.string
70
- in IO
71
- body.rewind
72
- req.body_stream = body
69
+ req["content-length"] ||= body.size.to_s unless req["transfer-encoding"]
70
+ req.body_stream = OnebusawaySDK::Util::ReadIOAdapter.new(body, &)
71
+ in IO | Enumerator
72
+ req["transfer-encoding"] ||= "chunked" unless req["content-length"]
73
+ req.body_stream = OnebusawaySDK::Util::ReadIOAdapter.new(body, &)
73
74
  end
74
75
 
75
76
  req
76
77
  end
77
78
  end
78
79
 
79
- # @private
80
+ # @api private
80
81
  #
81
82
  # @param url [URI::Generic]
83
+ # @param deadline [Float]
82
84
  # @param blk [Proc]
83
- #
84
- private def with_pool(url, &blk)
85
+ private def with_pool(url, deadline:, &blk)
85
86
  origin = OnebusawaySDK::Util.uri_origin(url)
86
- th = Thread.current
87
- key = :"#{object_id}-#{self.class.name}-connection_in_use_for_#{origin}"
88
-
89
- if th[key]
90
- tap do
91
- conn = self.class.connect(url)
92
- return blk.call(conn)
93
- ensure
94
- conn.finish if conn&.started?
95
- end
96
- end
97
-
87
+ timeout = deadline - OnebusawaySDK::Util.monotonic_secs
98
88
  pool =
99
89
  @mutex.synchronize do
100
- @pools[origin] ||= ConnectionPool.new(size: Etc.nprocessors) do
90
+ @pools[origin] ||= ConnectionPool.new(size: @size) do
101
91
  self.class.connect(url)
102
92
  end
103
93
  end
104
94
 
105
- pool.with do |conn|
106
- th[key] = true
107
- blk.call(conn)
108
- ensure
109
- th[key] = nil
110
- end
95
+ pool.with(timeout: timeout, &blk)
111
96
  end
112
97
 
113
- # @private
98
+ # @api private
114
99
  #
115
100
  # @param request [Hash{Symbol=>Object}] .
116
101
  #
@@ -124,46 +109,60 @@ module OnebusawaySDK
124
109
  #
125
110
  # @option request [Float] :deadline
126
111
  #
127
- # @return [Array(Net::HTTPResponse, Enumerable)]
128
- #
112
+ # @return [Array(Integer, Net::HTTPResponse, Enumerable)]
129
113
  def execute(request)
130
114
  url, deadline = request.fetch_values(:url, :deadline)
131
- req = self.class.build_request(request)
132
115
 
133
116
  eof = false
117
+ finished = false
134
118
  enum = Enumerator.new do |y|
135
- with_pool(url) do |conn|
119
+ with_pool(url, deadline: deadline) do |conn|
120
+ next if finished
121
+
122
+ req = self.class.build_request(request) do
123
+ self.class.calibrate_socket_timeout(conn, deadline)
124
+ end
125
+
136
126
  self.class.calibrate_socket_timeout(conn, deadline)
137
127
  conn.start unless conn.started?
138
128
 
139
129
  self.class.calibrate_socket_timeout(conn, deadline)
140
130
  conn.request(req) do |rsp|
141
- y << [conn, rsp]
131
+ y << [conn, req, rsp]
132
+ break if finished
133
+
142
134
  rsp.read_body do |bytes|
143
135
  y << bytes
136
+ break if finished
137
+
144
138
  self.class.calibrate_socket_timeout(conn, deadline)
145
139
  end
146
140
  eof = true
147
141
  end
148
142
  end
143
+ rescue Timeout::Error
144
+ raise OnebusawaySDK::APITimeoutError
149
145
  end
150
146
 
151
- # need to protect the `Enumerator` against `#.rewind`
152
- fused = false
153
- conn, response = enum.next
154
- body = Enumerator.new do |y|
155
- next if fused
156
-
157
- fused = true
158
- loop { y << enum.next }
159
- ensure
160
- conn.finish if !eof && conn.started?
147
+ conn, _, response = enum.next
148
+ body = OnebusawaySDK::Util.fused_enum(enum, external: true) do
149
+ finished = true
150
+ tap do
151
+ enum.next
152
+ rescue StopIteration
153
+ nil
154
+ end
155
+ conn.finish if !eof && conn&.started?
161
156
  end
162
- [response, (response.body = body)]
157
+ [Integer(response.code), response, (response.body = body)]
163
158
  end
164
159
 
165
- def initialize
160
+ # @api private
161
+ #
162
+ # @param size [Integer]
163
+ def initialize(size: Etc.nprocessors)
166
164
  @mutex = Mutex.new
165
+ @size = size
167
166
  @pools = {}
168
167
  end
169
168
  end
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OnebusawaySDK
4
- # @private
5
- #
6
- # @abstract
7
- #
4
+ # @api private
8
5
  module RequestParameters
9
6
  # @!parse
10
7
  # # Options to specify HTTP behaviour for this request.
@@ -12,7 +9,6 @@ module OnebusawaySDK
12
9
  # attr_accessor :request_options
13
10
 
14
11
  # @param mod [Module]
15
- #
16
12
  def self.included(mod)
17
13
  return unless mod <= OnebusawaySDK::BaseModel
18
14
 
@@ -20,15 +16,13 @@ module OnebusawaySDK
20
16
  mod.optional(:request_options, OnebusawaySDK::RequestOptions)
21
17
  end
22
18
 
23
- # @private
24
- #
19
+ # @api private
25
20
  module Converter
26
- # @private
21
+ # @api private
27
22
  #
28
23
  # @param params [Object]
29
24
  #
30
25
  # @return [Array(Object, Hash{Symbol=>Object})]
31
- #
32
26
  def dump_request(params)
33
27
  case (dumped = dump(params))
34
28
  in Hash
@@ -46,12 +40,11 @@ module OnebusawaySDK
46
40
  # When making a request, you can pass an actual {RequestOptions} instance, or
47
41
  # simply pass a Hash with symbol keys matching the attributes on this class.
48
42
  class RequestOptions < OnebusawaySDK::BaseModel
49
- # @private
43
+ # @api private
50
44
  #
51
45
  # @param opts [OnebusawaySDK::RequestOptions, Hash{Symbol=>Object}]
52
46
  #
53
47
  # @raise [ArgumentError]
54
- #
55
48
  def self.validate!(opts)
56
49
  case opts
57
50
  in OnebusawaySDK::RequestOptions | Hash
@@ -11,7 +11,6 @@ module OnebusawaySDK
11
11
  # @option params [OnebusawaySDK::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
12
12
  #
13
13
  # @return [OnebusawaySDK::Models::AgenciesWithCoverageListResponse]
14
- #
15
14
  def list(params = {})
16
15
  @client.request(
17
16
  method: :get,
@@ -22,7 +21,6 @@ module OnebusawaySDK
22
21
  end
23
22
 
24
23
  # @param client [OnebusawaySDK::Client]
25
- #
26
24
  def initialize(client:)
27
25
  @client = client
28
26
  end
@@ -12,7 +12,6 @@ module OnebusawaySDK
12
12
  # @option params [OnebusawaySDK::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
13
13
  #
14
14
  # @return [OnebusawaySDK::Models::AgencyRetrieveResponse]
15
- #
16
15
  def retrieve(agency_id, params = {})
17
16
  @client.request(
18
17
  method: :get,
@@ -23,7 +22,6 @@ module OnebusawaySDK
23
22
  end
24
23
 
25
24
  # @param client [OnebusawaySDK::Client]
26
- #
27
25
  def initialize(client:)
28
26
  @client = client
29
27
  end
@@ -22,7 +22,6 @@ module OnebusawaySDK
22
22
  # @option params [OnebusawaySDK::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
23
23
  #
24
24
  # @return [OnebusawaySDK::Models::ArrivalAndDepartureRetrieveResponse]
25
- #
26
25
  def retrieve(stop_id, params)
27
26
  parsed, options = OnebusawaySDK::Models::ArrivalAndDepartureRetrieveParams.dump_request(params)
28
27
  @client.request(
@@ -49,7 +48,6 @@ module OnebusawaySDK
49
48
  # @option params [OnebusawaySDK::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
50
49
  #
51
50
  # @return [OnebusawaySDK::Models::ArrivalAndDepartureListResponse]
52
- #
53
51
  def list(stop_id, params = {})
54
52
  parsed, options = OnebusawaySDK::Models::ArrivalAndDepartureListParams.dump_request(params)
55
53
  @client.request(
@@ -62,7 +60,6 @@ module OnebusawaySDK
62
60
  end
63
61
 
64
62
  # @param client [OnebusawaySDK::Client]
65
- #
66
63
  def initialize(client:)
67
64
  @client = client
68
65
  end
@@ -12,7 +12,6 @@ module OnebusawaySDK
12
12
  # @option params [OnebusawaySDK::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
13
13
  #
14
14
  # @return [OnebusawaySDK::Models::BlockRetrieveResponse]
15
- #
16
15
  def retrieve(block_id, params = {})
17
16
  @client.request(
18
17
  method: :get,
@@ -23,7 +22,6 @@ module OnebusawaySDK
23
22
  end
24
23
 
25
24
  # @param client [OnebusawaySDK::Client]
26
- #
27
25
  def initialize(client:)
28
26
  @client = client
29
27
  end
@@ -10,7 +10,6 @@ module OnebusawaySDK
10
10
  # @option params [OnebusawaySDK::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
11
11
  #
12
12
  # @return [OnebusawaySDK::Models::ConfigRetrieveResponse]
13
- #
14
13
  def retrieve(params = {})
15
14
  @client.request(
16
15
  method: :get,
@@ -21,7 +20,6 @@ module OnebusawaySDK
21
20
  end
22
21
 
23
22
  # @param client [OnebusawaySDK::Client]
24
- #
25
23
  def initialize(client:)
26
24
  @client = client
27
25
  end
@@ -10,7 +10,6 @@ module OnebusawaySDK
10
10
  # @option params [OnebusawaySDK::RequestOptions, Hash{Symbol=>Object}, nil] :request_options
11
11
  #
12
12
  # @return [OnebusawaySDK::Models::CurrentTimeRetrieveResponse]
13
- #
14
13
  def retrieve(params = {})
15
14
  @client.request(
16
15
  method: :get,
@@ -21,7 +20,6 @@ module OnebusawaySDK
21
20
  end
22
21
 
23
22
  # @param client [OnebusawaySDK::Client]
24
- #
25
23
  def initialize(client:)
26
24
  @client = client
27
25
  end