go_transit 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca67b4c62a86192aa19a8b7461f868df809dae60a943ff0d7c90dcc00bc036f4
4
- data.tar.gz: ff33fdcf0cdbd1a51c0d44070980489e5f846ad7f05cf24a0619f31fe8397b62
3
+ metadata.gz: ee9e60a59caf970a1ede5d1f412722b2710f00265f9e3f24d6da081261f0b044
4
+ data.tar.gz: 8992c200e8f9a727c4d37cc96843d972f5c16c3df7c21782511fbee01f644869
5
5
  SHA512:
6
- metadata.gz: 3263a94c43424ab0ef6f36907cd95b372ffee7503d0e3a601d05e8500c13136639bf790054ca0de5dc83608b99d7d48ddba792f41f62975db3345edd6996efeb
7
- data.tar.gz: 9455209aab1e8bd6502ee86bb279cf50d98a97ceb3941e21d7f37eed68d61c13fe32d0d42ac53ef12ff9d67375137d021f96eb89b037adff8247b5aa30b99b76
6
+ metadata.gz: 2e9bf26e3c22f7e28c3392e94e914c8c654b01b2ed9d8d42810b042ebff2daa01c115aa01ef23826b03b57eef4e7925b5cf73b12e79c8a2a3ad9b8a5711b94ae
7
+ data.tar.gz: d961631c8e1749670904195b61e4e7b5b44e1ed80e306873a34ecbb5b475c6eb51fc6165360524cf4fb151754caef2e0c2c642a2d66dbe56f8b0a803dcfd654f
@@ -8,9 +8,17 @@ module GoTransit
8
8
  def get(path)
9
9
  uri = URI("#{GoTransit.base_url}/#{API_VERSION}/#{path}"\
10
10
  "?key=#{GoTransit.api_key}")
11
- response = Net::HTTP.get_response(uri)
12
- json = JSON.parse(response.body)
13
- Response.new(json)
11
+ http_response = Net::HTTP.get_response(uri)
12
+ Response.new(parse_body(http_response), http_response.code.to_i)
13
+ end
14
+
15
+ private
16
+
17
+ def parse_body(http_response)
18
+ JSON.parse(http_response.body)
19
+ rescue JSON::ParserError
20
+ { "Metadata" => { "ErrorCode" => http_response.code,
21
+ "ErrorMessage" => http_response.message } }
14
22
  end
15
23
  end
16
24
  end
@@ -10,4 +10,5 @@ module GoTransit
10
10
  UnauthorizedError = Class.new(ApiError)
11
11
  ForbiddenError = Class.new(ApiError)
12
12
  NotFoundError = Class.new(ApiError)
13
+ TooManyRequestsError = Class.new(ApiError)
13
14
  end
@@ -4,26 +4,39 @@ module GoTransit
4
4
 
5
5
  delegate :code, :error_message, to: :metadata
6
6
 
7
- def initialize(payload)
8
- @metadata = Metadata.new(payload.delete("Metadata"))
7
+ def initialize(payload, http_status = nil)
8
+ @http_status = http_status
9
+ @metadata = Metadata.new(payload.delete("Metadata") || fallback_metadata)
9
10
  @data = payload_data(payload)
10
11
  throw_error
11
12
  end
12
13
 
13
14
  private
14
15
 
16
+ attr_reader :http_status
17
+
18
+ def fallback_metadata
19
+ { "ErrorCode" => http_status.to_s, "ErrorMessage" => "HTTP #{http_status}" }
20
+ end
21
+
15
22
  def payload_data(payload)
16
23
  return payload.values.first unless payload.values.first.kind_of?(Array)
17
24
  payload
18
25
  end
19
26
 
20
27
  def throw_error
28
+ # A genuine transport-level 429 always wins, even if the JSON body
29
+ # (when there is one) claims success - GO Transit's own error
30
+ # convention embeds the real code in the body, but an upstream
31
+ # rate limiter returning 429 isn't guaranteed to follow that.
32
+ raise TooManyRequestsError.new(metadata) if http_status == 429
21
33
  return if code == 200
22
34
  raise NoContentError.new(metadata) if code == 204
23
35
  raise BadRequestError.new(metadata) if code == 400
24
36
  raise UnauthorizedError.new(metadata) if code == 401
25
37
  raise ForbiddenError.new(metadata) if code == 403
26
38
  raise NotFoundError.new(metadata) if code == 404
39
+ raise TooManyRequestsError.new(metadata) if code == 429
27
40
  raise StandardError.new(metadata)
28
41
  end
29
42
  end
@@ -1,3 +1,3 @@
1
1
  module GoTransit
2
- VERSION = "1.0.2".freeze
2
+ VERSION = "1.1.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: go_transit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Mazur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-07 00:00:00.000000000 Z
11
+ date: 2026-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -112,16 +112,16 @@ dependencies:
112
112
  name: simplecov
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '0.17'
117
+ version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '0.17'
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: timecop
127
127
  requirement: !ruby/object:Gem::Requirement