friendly_shipping 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/friendly_shipping/bad_request.rb +23 -0
- data/lib/friendly_shipping/rest_client.rb +53 -0
- data/lib/friendly_shipping/services/ship_engine.rb +15 -36
- data/lib/friendly_shipping/services/ship_engine/parse_void_response.rb +23 -0
- data/lib/friendly_shipping/version.rb +1 -1
- metadata +5 -3
- data/lib/friendly_shipping/services/ship_engine/bad_request.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c51440567e32656dd9c373764b43ed8915c7bed5
|
4
|
+
data.tar.gz: ac745c9dd9e1c087ec387c429f761633c15783bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8b986a76ea28d2ba06f7d6ad3bfea61748e0d291d95f59b9d1ea826cd6bc0d94b16b5cefe7fd2d9d03f0cbf32762b6a7fc9145d4d06054b3d0bceff2125b723
|
7
|
+
data.tar.gz: faee889795cd2d7588771e9938e1660eec64e3c72e65994dac6e348b4a5aff1eef514d0f1d5ae44a39f0bf2ff47057d1c6a7f68efde8a20ce431b9d50739540f
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module FriendlyShipping
|
4
|
+
class BadRequest < StandardError
|
5
|
+
attr_reader :rest_error, :response
|
6
|
+
|
7
|
+
def initialize(rest_error)
|
8
|
+
@rest_error = rest_error
|
9
|
+
@response = rest_error.response
|
10
|
+
super parse_json_errors || rest_error
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def parse_json_errors
|
16
|
+
parsed_body = JSON.parse(response.body)
|
17
|
+
messages = parsed_body.fetch('errors')&.map { |e| e.fetch('message') }
|
18
|
+
messages&.join(', ')
|
19
|
+
rescue JSON::ParserError, KeyError => _error
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'dry/monads/result'
|
2
|
+
require 'friendly_shipping/bad_request'
|
3
|
+
require 'rest-client'
|
4
|
+
|
5
|
+
module FriendlyShipping
|
6
|
+
class RestClient
|
7
|
+
extend Dry::Monads::Result::Mixin
|
8
|
+
class <<self
|
9
|
+
def get(path, headers)
|
10
|
+
Success(
|
11
|
+
::RestClient.get(
|
12
|
+
path,
|
13
|
+
headers
|
14
|
+
)
|
15
|
+
)
|
16
|
+
rescue ::RestClient::Exception => error
|
17
|
+
Failure(error)
|
18
|
+
end
|
19
|
+
|
20
|
+
def post(path, payload, headers)
|
21
|
+
Success(
|
22
|
+
::RestClient.post(
|
23
|
+
path,
|
24
|
+
payload,
|
25
|
+
headers
|
26
|
+
)
|
27
|
+
)
|
28
|
+
rescue ::RestClient::Exception => error
|
29
|
+
if error.http_code == 400
|
30
|
+
Failure(BadRequest.new(error))
|
31
|
+
else
|
32
|
+
Failure(error)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def put(path, payload, headers)
|
37
|
+
Success(
|
38
|
+
::RestClient.put(
|
39
|
+
path,
|
40
|
+
payload,
|
41
|
+
headers
|
42
|
+
)
|
43
|
+
)
|
44
|
+
rescue ::RestClient::Exception => error
|
45
|
+
if error.http_code == 400
|
46
|
+
Failure(BadRequest.new(error))
|
47
|
+
else
|
48
|
+
Failure(error)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -1,15 +1,14 @@
|
|
1
|
+
|
1
2
|
require 'dry/monads/result'
|
2
|
-
require '
|
3
|
+
require 'friendly_shipping/rest_client'
|
3
4
|
require 'friendly_shipping/services/ship_engine/parse_carrier_response'
|
4
5
|
require 'friendly_shipping/services/ship_engine/serialize_label_shipment'
|
5
6
|
require 'friendly_shipping/services/ship_engine/parse_label_response'
|
6
|
-
require 'friendly_shipping/services/ship_engine/
|
7
|
+
require 'friendly_shipping/services/ship_engine/parse_void_response'
|
7
8
|
|
8
9
|
module FriendlyShipping
|
9
10
|
module Services
|
10
11
|
class ShipEngine
|
11
|
-
include Dry::Monads::Result::Mixin
|
12
|
-
|
13
12
|
API_BASE = "https://api.shipengine.com/v1/"
|
14
13
|
API_PATHS = {
|
15
14
|
carriers: "carriers",
|
@@ -22,57 +21,37 @@ module FriendlyShipping
|
|
22
21
|
end
|
23
22
|
|
24
23
|
def carriers
|
25
|
-
path = API_PATHS[:carriers]
|
26
|
-
get(path).fmap do |response|
|
24
|
+
path = API_BASE + API_PATHS[:carriers]
|
25
|
+
FriendlyShipping::RestClient.get(path, request_headers).fmap do |response|
|
27
26
|
ParseCarrierResponse.new(response: response).call
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
31
30
|
def labels(shipment)
|
32
31
|
payload = SerializeLabelShipment.new(shipment: shipment).call.merge(test_label: test).to_json
|
33
|
-
path = API_PATHS[:labels]
|
34
|
-
post(path, payload).fmap do |response|
|
32
|
+
path = API_BASE + API_PATHS[:labels]
|
33
|
+
FriendlyShipping::RestClient.post(path, payload, request_headers).fmap do |response|
|
35
34
|
ParseLabelResponse.new(response: response).call
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
RestClient.get(
|
44
|
-
API_BASE + path,
|
45
|
-
request_headers
|
46
|
-
)
|
47
|
-
)
|
48
|
-
rescue RestClient::ExceptionWithResponse => error
|
49
|
-
Failure(error)
|
50
|
-
end
|
51
|
-
|
52
|
-
def post(path, payload)
|
53
|
-
Success(
|
54
|
-
RestClient.post(
|
55
|
-
API_BASE + path,
|
56
|
-
payload,
|
57
|
-
request_headers
|
58
|
-
)
|
59
|
-
)
|
60
|
-
rescue RestClient::ExceptionWithResponse => error
|
61
|
-
if error.to_s == '400 Bad Request'
|
62
|
-
Failure(BadRequest.new(error))
|
63
|
-
else
|
64
|
-
Failure(error)
|
38
|
+
def void(label)
|
39
|
+
path = "#{API_BASE}labels/#{label.id}/void"
|
40
|
+
FriendlyShipping::RestClient.put(path, '', request_headers).bind do |response|
|
41
|
+
ParseVoidResponse.new(response: response).call
|
65
42
|
end
|
66
43
|
end
|
67
44
|
|
45
|
+
private
|
46
|
+
|
47
|
+
attr_reader :token, :test
|
48
|
+
|
68
49
|
def request_headers
|
69
50
|
{
|
70
51
|
content_type: :json,
|
71
52
|
"api-key": token
|
72
53
|
}
|
73
54
|
end
|
74
|
-
|
75
|
-
attr_reader :token, :test
|
76
55
|
end
|
77
56
|
end
|
78
57
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'friendly_shipping/bad_request'
|
2
|
+
|
3
|
+
module FriendlyShipping
|
4
|
+
module Services
|
5
|
+
class ShipEngine
|
6
|
+
class ParseVoidResponse
|
7
|
+
include Dry::Monads::Result::Mixin
|
8
|
+
|
9
|
+
attr_reader :response
|
10
|
+
|
11
|
+
def initialize(response:)
|
12
|
+
@response = response
|
13
|
+
end
|
14
|
+
|
15
|
+
def call
|
16
|
+
parsed_json = JSON.parse(response.body)
|
17
|
+
approved, message = parsed_json["approved"], parsed_json["message"]
|
18
|
+
approved ? Success(message) : Failure(message)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: friendly_shipping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Meyerhoff
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: physical
|
@@ -128,12 +128,14 @@ files:
|
|
128
128
|
- bin/setup
|
129
129
|
- friendly_shipping.gemspec
|
130
130
|
- lib/friendly_shipping.rb
|
131
|
+
- lib/friendly_shipping/bad_request.rb
|
131
132
|
- lib/friendly_shipping/carrier.rb
|
132
133
|
- lib/friendly_shipping/label.rb
|
134
|
+
- lib/friendly_shipping/rest_client.rb
|
133
135
|
- lib/friendly_shipping/services/ship_engine.rb
|
134
|
-
- lib/friendly_shipping/services/ship_engine/bad_request.rb
|
135
136
|
- lib/friendly_shipping/services/ship_engine/parse_carrier_response.rb
|
136
137
|
- lib/friendly_shipping/services/ship_engine/parse_label_response.rb
|
138
|
+
- lib/friendly_shipping/services/ship_engine/parse_void_response.rb
|
137
139
|
- lib/friendly_shipping/services/ship_engine/serialize_label_shipment.rb
|
138
140
|
- lib/friendly_shipping/shipping_method.rb
|
139
141
|
- lib/friendly_shipping/version.rb
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
|
-
module FriendlyShipping
|
4
|
-
module Services
|
5
|
-
class ShipEngine
|
6
|
-
class BadRequest < StandardError
|
7
|
-
attr_reader :rest_error, :response
|
8
|
-
|
9
|
-
def initialize(rest_error)
|
10
|
-
@rest_error = rest_error
|
11
|
-
@response = rest_error.response
|
12
|
-
super parse_json_errors || rest_error
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def parse_json_errors
|
18
|
-
parsed_body = JSON.parse(response.body)
|
19
|
-
messages = parsed_body.fetch('errors')&.map { |e| e.fetch('message') }
|
20
|
-
messages&.join(', ')
|
21
|
-
rescue JSON::ParserError, KeyError => _error
|
22
|
-
nil
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|