ninja_van_api 0.1.0 → 0.2.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/app/controllers/ninja_van_api/webhook_controller.rb +3 -3
- data/lib/ninja_van_api/client.rb +1 -2
- data/lib/ninja_van_api/resources/base_resource.rb +19 -27
- data/lib/ninja_van_api/resources/order_resource.rb +3 -3
- data/lib/ninja_van_api/version.rb +1 -1
- data/lib/ninja_van_api.rb +9 -9
- metadata +15 -2
- data/lib/ninja_van_api/engine.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e52db5dc47fb26dc3db9e5bc25fd170d377240a3d79dae39f02069bfb0de840
|
4
|
+
data.tar.gz: a277b4cee9e41a804617d3341455400cd9c4548e66a8ae113e7c9c3b74135e06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4c035d321e2d0715492b790f6d9f595db4a9cae1ecad05f62f12d24c03f7cc7858ec4394b472e842ecd05a6d19e38b406b516caad2f8df3c524bceeb5db1336
|
7
|
+
data.tar.gz: e6615160d71b61dc4a7354c5b55af8b0ccc51ab574f5d24282f67e21103765c439829d7e80c56baa85a9a0e0db13b8abf7cd0189875b0b28cbe8a94933dc877e
|
@@ -21,17 +21,17 @@ module NinjaVanAPI
|
|
21
21
|
def verify_webhook_signature
|
22
22
|
# Extract country code from the request path
|
23
23
|
# Example: /ninjavan/sg/webhooks -> 'sg'
|
24
|
-
country_code = request.path.split(
|
24
|
+
country_code = request.path.split("/")[2]&.downcase
|
25
25
|
return head :unauthorized unless country_code.present?
|
26
26
|
|
27
27
|
webhook_secret = NinjaVanAPI.configuration.get_webhook_secret(country_code)
|
28
28
|
return head :unauthorized unless webhook_secret
|
29
29
|
|
30
|
-
signature = request.headers[
|
30
|
+
signature = request.headers["X-Ninjavan-Hmac-Sha256"]
|
31
31
|
return head :unauthorized unless signature.present?
|
32
32
|
|
33
33
|
payload = request.raw_post
|
34
|
-
hash = OpenSSL::HMAC.digest(
|
34
|
+
hash = OpenSSL::HMAC.digest("sha256", webhook_secret, payload)
|
35
35
|
expected_signature = Base64.encode64(hash).strip
|
36
36
|
|
37
37
|
return head :unauthorized unless Rack::Utils.secure_compare(signature, expected_signature)
|
data/lib/ninja_van_api/client.rb
CHANGED
@@ -30,8 +30,7 @@ module NinjaVanAPI
|
|
30
30
|
# access_token will be evaluated on each request using proc
|
31
31
|
conn.request :authorization, :Bearer, -> { access_token }
|
32
32
|
conn.request :json
|
33
|
-
conn.response :json
|
34
|
-
conn.response :raise_error # Raises error on 4xx and 5xx responses
|
33
|
+
conn.response :json, content_type: "application/json"
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "active_support"
|
4
|
+
require "active_support/core_ext/string"
|
5
5
|
|
6
6
|
module NinjaVanAPI
|
7
7
|
class BaseResource
|
@@ -16,18 +16,21 @@ module NinjaVanAPI
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def post_request(url, body:, headers: {})
|
19
|
-
handle_response client.connection.post(url,
|
19
|
+
handle_response client.connection.post(url, body, headers)
|
20
20
|
end
|
21
21
|
|
22
22
|
def put_request(url, body:, headers: {})
|
23
|
-
handle_response client.connection.put(url,
|
23
|
+
handle_response client.connection.put(url, body, headers)
|
24
24
|
end
|
25
25
|
|
26
26
|
def delete_request(url, body: {}, headers: {})
|
27
|
-
response =
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
response =
|
28
|
+
client
|
29
|
+
.connection
|
30
|
+
.delete(url) do |request|
|
31
|
+
request.body = body
|
32
|
+
request.headers = request.headers.merge(headers)
|
33
|
+
end
|
31
34
|
|
32
35
|
handle_response response
|
33
36
|
end
|
@@ -66,27 +69,16 @@ module NinjaVanAPI
|
|
66
69
|
end
|
67
70
|
|
68
71
|
def retry_request(env, retry_count)
|
69
|
-
request =
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
72
|
+
request =
|
73
|
+
client
|
74
|
+
.connection
|
75
|
+
.build_request(env.method.downcase) do |req|
|
76
|
+
req.url env.url.to_s
|
77
|
+
req.body = env.request_body
|
78
|
+
req.headers = env.request_headers
|
79
|
+
end
|
74
80
|
|
75
81
|
handle_response(request.run, retry_count)
|
76
82
|
end
|
77
|
-
|
78
|
-
def parse_body(params)
|
79
|
-
if params.is_a?(Array)
|
80
|
-
params.map { |value| parse_body(value) }
|
81
|
-
elsif params.is_a?(Hash)
|
82
|
-
params.deep_transform_keys { |key| key.to_s.underscore }
|
83
|
-
else
|
84
|
-
params
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def parse_response(response)
|
89
|
-
response.body.deep_transform_keys { |key| key.to_s.underscore }
|
90
|
-
end
|
91
83
|
end
|
92
84
|
end
|
@@ -3,13 +3,13 @@
|
|
3
3
|
module NinjaVanAPI
|
4
4
|
class OrderResource < BaseResource
|
5
5
|
def create(params = {})
|
6
|
-
response = post_request(
|
7
|
-
Order.new(
|
6
|
+
response = post_request("/4.2/orders", body: params)
|
7
|
+
Order.new(response.body)
|
8
8
|
end
|
9
9
|
|
10
10
|
def cancel(tracking_number)
|
11
11
|
response = delete_request("/2.2/orders/#{tracking_number}")
|
12
|
-
Order.new(
|
12
|
+
Order.new(response.body)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
data/lib/ninja_van_api.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "ninja_van_api/version"
|
4
4
|
|
5
5
|
module NinjaVanAPI
|
6
6
|
# Objects
|
7
|
-
autoload :Base,
|
8
|
-
autoload :Order,
|
7
|
+
autoload :Base, "ninja_van_api/objects/base"
|
8
|
+
autoload :Order, "ninja_van_api/objects/order"
|
9
9
|
|
10
10
|
# Resources
|
11
|
-
autoload :BaseResource,
|
12
|
-
autoload :OrderResource,
|
11
|
+
autoload :BaseResource, "ninja_van_api/resources/base_resource"
|
12
|
+
autoload :OrderResource, "ninja_van_api/resources/order_resource"
|
13
13
|
|
14
14
|
# Core components
|
15
|
-
autoload :Client,
|
16
|
-
autoload :Error,
|
17
|
-
autoload :UnsupportedCountryCodeError,
|
18
|
-
autoload :AuthenticationError,
|
15
|
+
autoload :Client, "ninja_van_api/client"
|
16
|
+
autoload :Error, "ninja_van_api/error"
|
17
|
+
autoload :UnsupportedCountryCodeError, "ninja_van_api/error"
|
18
|
+
autoload :AuthenticationError, "ninja_van_api/error"
|
19
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ninja_van_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jane Trang Mai Nguyen
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description:
|
112
126
|
email:
|
113
127
|
- jane.trangm@gmail.com
|
@@ -127,7 +141,6 @@ files:
|
|
127
141
|
- lib/ninja_van_api.rb
|
128
142
|
- lib/ninja_van_api/client.rb
|
129
143
|
- lib/ninja_van_api/configuration.rb
|
130
|
-
- lib/ninja_van_api/engine.rb
|
131
144
|
- lib/ninja_van_api/error.rb
|
132
145
|
- lib/ninja_van_api/objects/base.rb
|
133
146
|
- lib/ninja_van_api/objects/order.rb
|
data/lib/ninja_van_api/engine.rb
DELETED