shipping_connector 0.0.0 → 0.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 +4 -4
- data/lib/shipping_connector/carrier/dao.rb +1 -2
- data/lib/shipping_connector/carrier/postnord.rb +130 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5dc5dd88edc69471c3d50e15f9e84e59cc604fbd4a7a33f6f37310a67e7060e
|
4
|
+
data.tar.gz: 86629918a4474ab6abb378ddd6f8b3c9500eaa86a7f8d343de498edc97cf23e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b591b23947cd52b0783bd376e3137fcadc996ba59e85cc76b3af86fa34b416f988fe3547eb790bdf67c71f24cb9f9b9c118f46407107b08b4f7b4be59bae4be
|
7
|
+
data.tar.gz: '094dbffaabfc78dfd8086614e1c40e4274f0c317cde2467ddaccf9e372b15c7b4cb1b30675473c18347678f699c1427fe669ec5c97145cc3dacfb3e21bec9963'
|
@@ -8,13 +8,12 @@ module ShippingConnector
|
|
8
8
|
# @overload initialize(customer_id, password)
|
9
9
|
# @param customer_id [Integer] login details for the API user
|
10
10
|
# @param password [String] login details for the API user
|
11
|
-
#
|
12
11
|
def initialize(options = {})
|
13
12
|
require! options, :customer_id, :password
|
14
13
|
super
|
15
14
|
end
|
16
15
|
|
17
|
-
# Returns a list of service points or a single service point
|
16
|
+
# Returns a list of service points or a single service point. The returned distance is as the crow flies.
|
18
17
|
# @overload service_points(scope, zip_code, address, limit = 10)
|
19
18
|
# @param scope [Symbol] the scope: `:list` for listing nearest service points
|
20
19
|
# @param zip_code [Integer, String] zip code for address to search from
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ShippingConnector
|
4
|
+
class Postnord < Carrier
|
5
|
+
self.url = 'api2.postnord.com'
|
6
|
+
|
7
|
+
# Initializes a new carrier object for Postnord
|
8
|
+
# @overload initialize(api_key)
|
9
|
+
# @param api_key [String] authentication details
|
10
|
+
def initialize(options = {})
|
11
|
+
require! options, :api_key
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns a list of service points or a single service point. The returned distance is based on driving route.
|
16
|
+
# @overload service_points(scope, zip_code, city, address, country, limit = 10)
|
17
|
+
# @param scope [Symbol] :list or :list_address to find by address
|
18
|
+
# @param zip_code [String] this or city is required
|
19
|
+
# @param city [String] this or zip_code is required
|
20
|
+
# @param address [String] street address to search from
|
21
|
+
# @param limit [String] amount of service points to be returned
|
22
|
+
# @return [Array<ServicePoint>] the nearest service points ordered by distance
|
23
|
+
# @overload service_points(scope, latitude, longitude, limit = 10)
|
24
|
+
# @param scope [Symbol] :list_coordinates to find by coordinates
|
25
|
+
# @param latitude [String] required
|
26
|
+
# @param longitude [String] required
|
27
|
+
# @param limit [String] amount of service points to be returned
|
28
|
+
# @return [Array<ServicePoint>] the nearest service points ordered by distance
|
29
|
+
# @overload service_points(id)
|
30
|
+
# @param id [Integer] the id of the service_point to be returned
|
31
|
+
# @return [ServicePoint] the service point for the given id
|
32
|
+
def service_points(*arguments)
|
33
|
+
scope = arguments.slice!(0)
|
34
|
+
options = arguments.slice!(0) || {}
|
35
|
+
|
36
|
+
case scope
|
37
|
+
when :list, :list_address
|
38
|
+
require!(options, :country)
|
39
|
+
list_service_points(options)
|
40
|
+
when :list_coordinates
|
41
|
+
require!(options, :country, :latitude, :longitude)
|
42
|
+
list_by_coordinates(options)
|
43
|
+
else
|
44
|
+
require!(options, :country)
|
45
|
+
find_service_point(scope, options)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def auth_params
|
52
|
+
{ apikey: @options[:api_key], returnType: 'json' }
|
53
|
+
end
|
54
|
+
|
55
|
+
def get(path, params)
|
56
|
+
response = super(path, params.merge(auth_params))
|
57
|
+
JSON.parse response.body
|
58
|
+
rescue Faraday::ClientError => e
|
59
|
+
body = JSON.parse e.response[:body]
|
60
|
+
raise StandardError, "Postnord error: #{body['message']}"
|
61
|
+
end
|
62
|
+
|
63
|
+
def find_service_point(id, arguments)
|
64
|
+
service_point = get('/rest/businesslocation/v5/servicepoints/ids',
|
65
|
+
{
|
66
|
+
ids: id, countryCode: arguments[:country]
|
67
|
+
})['servicePointInformationResponse']['servicePoints'].first
|
68
|
+
|
69
|
+
ServicePoint.new(
|
70
|
+
id: service_point['servicePointId'], zip_code: service_point['visitingAddress']['postalCode'],
|
71
|
+
name: service_point['name'], city: service_point['visitingAddress']['city'],
|
72
|
+
address: "#{service_point['visitingAddress']['streetName']} #{service_point['visitingAddress']['streetName']}",
|
73
|
+
opening_hours: opening_hours(service_point['openingHours'])
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
def list_service_points(options)
|
78
|
+
unless options.key?(:city) || options.key?(:zip_code)
|
79
|
+
raise ArgumentError, 'At least one of :city or :zip_code is required'
|
80
|
+
end
|
81
|
+
|
82
|
+
params = { countryCode: options[:country] }
|
83
|
+
|
84
|
+
params[:city] = options[:city] if options[:city]
|
85
|
+
params[:postalCode] = options[:postalCode] if options[:zip_code]
|
86
|
+
params[:streetName] = options[:address] if options[:address]
|
87
|
+
params[:numberOfServicePoints] = options[:limit] || 10
|
88
|
+
|
89
|
+
array = get('/rest/businesslocation/v5/servicepoints/nearest/byaddress',
|
90
|
+
params)['servicePointInformationResponse']['servicePoints']
|
91
|
+
|
92
|
+
generate_service_points array
|
93
|
+
end
|
94
|
+
|
95
|
+
def list_by_coordinates(options)
|
96
|
+
array = get('/rest/businesslocation/v5/servicepoints/nearest/bycoordinates',
|
97
|
+
{
|
98
|
+
countryCode: options[:country],
|
99
|
+
northing: options[:latitude],
|
100
|
+
easting: options[:longitude],
|
101
|
+
numberOfServicePoints: options[:limit] || 10
|
102
|
+
})['servicePointInformationResponse']['servicePoints']
|
103
|
+
|
104
|
+
generate_service_points array
|
105
|
+
end
|
106
|
+
|
107
|
+
def generate_service_points(array)
|
108
|
+
result = []
|
109
|
+
array.each do |service_point|
|
110
|
+
result << ServicePoint.new(
|
111
|
+
id: service_point['servicePointId'], zip_code: service_point['visitingAddress']['postalCode'],
|
112
|
+
name: service_point['name'], city: service_point['visitingAddress']['city'],
|
113
|
+
address: "#{service_point['visitingAddress']['streetName']} #{service_point['visitingAddress']['streetName']}",
|
114
|
+
distance: service_point['routeDistance'], opening_hours: opening_hours(service_point['openingHours'])
|
115
|
+
)
|
116
|
+
end
|
117
|
+
result
|
118
|
+
end
|
119
|
+
|
120
|
+
def opening_hours(args)
|
121
|
+
hash = {}
|
122
|
+
|
123
|
+
args['postalServices'].each do |h|
|
124
|
+
hash[h['openDay'].downcase.to_s] = "#{h['openTime']} - #{h['closeTime']}"
|
125
|
+
end
|
126
|
+
|
127
|
+
ServicePoint::OpeningHours.new(hash)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shipping_connector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Thyregod Kristensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
ShippingConnector is an abstraction library that makes connecting to various shipping
|
@@ -22,6 +22,7 @@ files:
|
|
22
22
|
- lib/shipping_connector.rb
|
23
23
|
- lib/shipping_connector/carrier.rb
|
24
24
|
- lib/shipping_connector/carrier/dao.rb
|
25
|
+
- lib/shipping_connector/carrier/postnord.rb
|
25
26
|
- lib/shipping_connector/carriers.rb
|
26
27
|
- lib/shipping_connector/service_point.rb
|
27
28
|
homepage: https://github.com/sthyregod/shipping_connector
|