aftership 4.1.1 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +58 -57
- data/lib/aftership.rb +3 -6
- data/lib/aftership/v4/base.rb +72 -34
- data/lib/aftership/v4/courier.rb +23 -24
- data/lib/aftership/v4/last_checkpoint.rb +11 -13
- data/lib/aftership/v4/tracking.rb +82 -76
- metadata +35 -26
- data/lib/aftership/v3/base.rb +0 -47
- data/lib/aftership/v3/courier.rb +0 -21
- data/lib/aftership/v3/last_checkpoint.rb +0 -17
- data/lib/aftership/v3/tracking.rb +0 -61
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e290f58d38534b293261b1dcc9bdde6c4db06663c73eebc277db93939533f173
|
4
|
+
data.tar.gz: 4a848b707e8a6dd8c56130f8937a93e70f9d04b094911b844e1167bcd92d3266
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27e51d324f901739b724e28a3e51416c51c8a46404b56d43cfae82a421fb6f99fcb15e263f5340efdd265c0bc9a178b0b90f0b286d85351ed4ba0d1755b4c9ce
|
7
|
+
data.tar.gz: 9302f3835df2bf1dbf80b4ab7bad7b598fe7aff0a8cc1afb2fa6106f60c04ee437e32f06224cc705ecbc38df14196f55b6728cb51dd60569eed36dce402267b9
|
data/README.md
CHANGED
@@ -8,7 +8,32 @@ This extension helps developers to integrate with AfterShip easily.
|
|
8
8
|
|
9
9
|
AfterShip provides an automated way for online merchants to track packages and send their customers delivery status notifications. Customers no longer need to deal with tracking numbers and track packages on their own. With AfterShip, online merchants extend their customer service after the point of purchase by keeping their customers actively informed, while saving time and money by reducing customers’ questions about the status of their purchase delivery.
|
10
10
|
|
11
|
+
## Migration to 4.5.0+
|
12
|
+
|
13
|
+
We suggest all users to upgrade your `aftership` gem to v4.5.0 as any earlier versions are NOT maintained, which also means you will need to upgrade your ruby version to at least 2.3.0 to be able to use `faraday` the new http client of the revamped `aftership` gem.
|
14
|
+
|
11
15
|
### Changes
|
16
|
+
* 2021-02-08 4.5.0
|
17
|
+
- Downgraded `faraday` to `1.0.1` that accepts ruby 2.3.0+ as required version.
|
18
|
+
- Updated request User agent to follow AfterShip SDK guideline.
|
19
|
+
- Required ruby version is now 2.3.0+
|
20
|
+
|
21
|
+
* 2021-02-08 4.4.0
|
22
|
+
- Removed `httpclient` and used `faraday` 1.3 as http client
|
23
|
+
- Polished project with prettified formatting
|
24
|
+
- Resolved [#31](https://github.com/AfterShip/aftership-sdk-ruby/issues/31): Deprecation of encryption algorithms below 256 bits
|
25
|
+
- Required ruby version updated to 2.4.0+
|
26
|
+
|
27
|
+
* 2016-01-11 4.3.1
|
28
|
+
- Updated gem `httpclient` version to 2.7.1
|
29
|
+
|
30
|
+
* 2015-12-14 4.3.0
|
31
|
+
- Added rescue methods for parsing JSON, and try to retrieve error codes from cloudflare
|
32
|
+
- Added /trackings/exports method
|
33
|
+
- Added auto-retry mechanism if invalid JSON response retrieved
|
34
|
+
|
35
|
+
* 2015-11-11 Pump version to 4.2.0
|
36
|
+
- Removed v3 code, support ENV variable AFTERSHIP_API_ENDPOINT for testing
|
12
37
|
|
13
38
|
* 2014-10-31 Pump version to 4.1.0
|
14
39
|
- Replaced HTTPI with HTTPClient
|
@@ -29,89 +54,64 @@ AfterShip provides an automated way for online merchants to track packages and s
|
|
29
54
|
|
30
55
|
1. Add the following line to your application's Gemfile
|
31
56
|
|
32
|
-
|
33
|
-
|
34
|
-
|
57
|
+
```ruby
|
58
|
+
gem "aftership", "~> 4.5"
|
59
|
+
```
|
35
60
|
|
36
61
|
2. Run bundler
|
37
62
|
|
38
|
-
|
39
|
-
|
40
|
-
|
63
|
+
```shell
|
64
|
+
bundle install
|
65
|
+
```
|
41
66
|
|
42
67
|
## Configuration
|
43
68
|
|
44
69
|
1. Before you begin
|
45
70
|
|
46
|
-
|
47
|
-
|
48
|
-
http://www.aftership.com
|
71
|
+
You'll need to have a AfterShip account: http://www.aftership.com
|
49
72
|
|
50
73
|
|
51
74
|
2. Setup the API Key
|
52
75
|
|
53
|
-
|
54
|
-
|
55
|
-
https://www.aftership.com/apps/api
|
76
|
+
You can retrieve your api key at: https://admin.aftership.com/settings/api-keys
|
56
77
|
|
57
78
|
## Usage
|
58
79
|
|
59
80
|
1. Setup
|
60
|
-
|
81
|
+
|
82
|
+
Before using API, please include the gem in your script.
|
61
83
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
84
|
+
```ruby
|
85
|
+
require 'rubygems'
|
86
|
+
require 'aftership'
|
87
|
+
```
|
66
88
|
|
67
|
-
|
89
|
+
You should set you API key before making any request to AfterShip.
|
68
90
|
|
69
|
-
|
70
|
-
|
71
|
-
|
91
|
+
```ruby
|
92
|
+
AfterShip.api_key = 'YOUR_API_KEY' # Replace "YOUR_API_KEY" to your AfterShip api key.
|
93
|
+
```
|
72
94
|
|
73
95
|
|
74
96
|
2. Coding
|
75
97
|
|
98
|
+
```ruby
|
99
|
+
require('aftership')
|
100
|
+
AfterShip.api_key = 'YOUR_API_KEY'
|
76
101
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
AfterShip.api_key = 'YOUR_API_KEY'
|
81
|
-
|
82
|
-
AfterShip::V4::Courier.get
|
83
|
-
AfterShip::V4::Courier.get_all
|
84
|
-
AfterShip::V4::Courier.detect({:tracking_number => 'EJ276142450JP'})
|
85
|
-
|
86
|
-
AfterShip::V4::Tracking.create('1ZA6F598D992381375', {:emails => ['a@abcd.com', 'asdfasdfs@gmail.com']})
|
87
|
-
AfterShip::V4::Tracking.get('ups', '1ZA6F598D992381375')
|
88
|
-
AfterShip::V4::Tracking.get_all
|
89
|
-
AfterShip::V4::Tracking.update('ups', '1ZA6F598D992381375', {:title => 'Testing'})
|
90
|
-
AfterShip::V4::Tracking.retrack('ups', '1ZA6F598D992381375')
|
91
|
-
AfterShip::V4::Tracking.delete('ups', '1ZA6F598D992381375')
|
92
|
-
|
93
|
-
AfterShip::V4::LastCheckpoint.get('ups', '1ZA6F598D992381375')
|
94
|
-
```
|
95
|
-
|
96
|
-
### V3
|
97
|
-
|
98
|
-
```
|
99
|
-
require('aftership')
|
100
|
-
AfterShip.api_key = 'YOUR_API_KEY'
|
101
|
-
|
102
|
-
AfterShip::V3::Courier.get
|
103
|
-
AfterShip::V3::Courier.detect('1ZA6F598D992381375')
|
104
|
-
|
105
|
-
AfterShip::V3::Tracking.create('1ZA6F598D992381375', {'emails' => ['a@abcd.com', 'asdfasdfs@gmail.com']})
|
106
|
-
AfterShip::V3::Tracking.get('ups', '1ZA6F598D992381375')
|
107
|
-
AfterShip::V3::Tracking.get_multi
|
108
|
-
AfterShip::V3::Tracking.update('ups', '1ZA6F598D992381375', {:title => 'Testing'})
|
109
|
-
AfterShip::V3::Tracking.reactivate('ups', '1ZA6F598D992381375')
|
110
|
-
AfterShip::V3::Tracking.delete('ups', '1ZA6F598D992381375')
|
102
|
+
AfterShip::V4::Courier.get
|
103
|
+
AfterShip::V4::Courier.get_all
|
104
|
+
AfterShip::V4::Courier.detect({:tracking_number => 'EJ276142450JP'})
|
111
105
|
|
112
|
-
|
106
|
+
AfterShip::V4::Tracking.create('1ZA6F598D992381375', {:emails => ['a@abcd.com', 'asdfasdfs@gmail.com']})
|
107
|
+
AfterShip::V4::Tracking.get('ups', '1ZA6F598D992381375')
|
108
|
+
AfterShip::V4::Tracking.get_all
|
109
|
+
AfterShip::V4::Tracking.update('ups', '1ZA6F598D992381375', {:title => 'Testing'})
|
110
|
+
AfterShip::V4::Tracking.retrack('ups', '1ZA6F598D992381375')
|
111
|
+
AfterShip::V4::Tracking.delete('ups', '1ZA6F598D992381375')
|
113
112
|
|
114
|
-
|
113
|
+
AfterShip::V4::LastCheckpoint.get('ups', '1ZA6F598D992381375')
|
114
|
+
```
|
115
115
|
|
116
116
|
## The License (MIT)
|
117
117
|
|
@@ -120,5 +120,6 @@ Released under the MIT license. See the LICENSE file for the complete wording.
|
|
120
120
|
|
121
121
|
## Contributor
|
122
122
|
|
123
|
+
- Ryan Zou [twitter:renyuanz](https://twitter.com/ry_zou)
|
123
124
|
- Alex Topalov <me@alextopalov.com>
|
124
125
|
|
data/lib/aftership.rb
CHANGED
@@ -1,17 +1,14 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
2
|
|
3
|
-
require 'aftership/v3/courier'
|
4
|
-
require 'aftership/v3/tracking'
|
5
|
-
require 'aftership/v3/last_checkpoint'
|
6
|
-
|
7
3
|
require 'aftership/v4/courier'
|
8
4
|
require 'aftership/v4/tracking'
|
9
5
|
require 'aftership/v4/last_checkpoint'
|
10
6
|
|
11
7
|
module AfterShip
|
12
|
-
class << self
|
8
|
+
class << self
|
13
9
|
attr_accessor :api_key
|
14
10
|
end
|
15
11
|
|
16
|
-
URL = 'https://api.aftership.com'
|
12
|
+
URL = ENV['AFTERSHIP_API_ENDPOINT'] || 'https://api.aftership.com'
|
13
|
+
VERSION = '4.5.0'
|
17
14
|
end
|
data/lib/aftership/v4/base.rb
CHANGED
@@ -1,47 +1,85 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
3
|
|
4
4
|
module AfterShip
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
module V4
|
6
|
+
class Base
|
7
|
+
class AfterShipError < StandardError
|
8
|
+
end
|
9
|
+
attr_reader :http_verb_method, :end_point, :query, :body
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
@end_point = end_point
|
14
|
-
@query = query
|
15
|
-
@body = body
|
11
|
+
MAX_TRIAL = 3
|
12
|
+
CALL_SLEEP = 3
|
16
13
|
|
17
|
-
|
18
|
-
|
14
|
+
def initialize(http_verb_method, end_point, query = {}, body = {})
|
15
|
+
@http_verb_method = http_verb_method
|
16
|
+
@end_point = end_point
|
17
|
+
@query = query
|
18
|
+
@body = body
|
19
|
+
@trial = 0
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
@client = Faraday.new do |faraday|
|
22
|
+
faraday.url_prefix = "#{AfterShip::URL}/v4/"
|
23
|
+
faraday.request :url_encoded
|
24
|
+
faraday.response :json, content_type: 'application/json'
|
25
|
+
faraday.adapter :net_http
|
26
|
+
end
|
27
|
+
end
|
22
28
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
29
|
+
def call
|
30
|
+
headers = {
|
31
|
+
'aftership-api-key' => AfterShip.api_key,
|
32
|
+
content_type: 'application/json',
|
33
|
+
user_agent: "aftership-sdk-ruby #{AfterShip::VERSION} (#{RUBY_VERSION})"
|
34
|
+
}
|
28
35
|
|
29
|
-
|
36
|
+
cf_ray = ''
|
37
|
+
output = nil
|
38
|
+
uri = @client.build_url(end_point, query)
|
30
39
|
|
31
|
-
|
32
|
-
|
33
|
-
else
|
34
|
-
raise(AfterShipError.new('response is nil'))
|
35
|
-
end
|
40
|
+
loop do
|
41
|
+
response = @client.run_request(http_verb_method, uri, body.to_json, headers)
|
36
42
|
|
37
|
-
|
43
|
+
cf_ray = response.headers['cf-ray'] if response.headers
|
38
44
|
|
39
|
-
|
45
|
+
if response.body
|
46
|
+
# This try catch is actually useless (will improve in next major version.)
|
47
|
+
begin
|
48
|
+
output = response.body
|
49
|
+
@trial = MAX_TRIAL + 1
|
50
|
+
rescue StandardError
|
51
|
+
@trial += 1
|
40
52
|
|
41
|
-
|
42
|
-
"#{AfterShip::URL}/v4/#{end_point.to_s}"
|
43
|
-
end
|
53
|
+
sleep CALL_SLEEP
|
44
54
|
|
45
|
-
|
46
|
-
|
55
|
+
output = {
|
56
|
+
meta: {
|
57
|
+
code: 500,
|
58
|
+
message: 'Something went wrong on AfterShip\'s end.',
|
59
|
+
type: 'InternalError'
|
60
|
+
},
|
61
|
+
data: {
|
62
|
+
body: response.body,
|
63
|
+
cf_ray: cf_ray
|
64
|
+
}
|
65
|
+
}
|
66
|
+
end
|
67
|
+
else
|
68
|
+
output = {
|
69
|
+
meta: {
|
70
|
+
code: 500,
|
71
|
+
message: 'Something went wrong on AfterShip\'s end.',
|
72
|
+
type: 'InternalError'
|
73
|
+
},
|
74
|
+
data: {
|
75
|
+
}
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
break if @trial > MAX_TRIAL
|
80
|
+
end
|
81
|
+
output
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
47
85
|
end
|
data/lib/aftership/v4/courier.rb
CHANGED
@@ -1,30 +1,29 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/base'
|
2
2
|
|
3
3
|
module AfterShip
|
4
|
-
|
5
|
-
|
4
|
+
module V4
|
5
|
+
class Courier < AfterShip::V4::Base
|
6
|
+
# GET /couriers
|
7
|
+
# Return a list of couriers activated at your AfterShip account.
|
8
|
+
def self.get
|
9
|
+
new(:get, 'couriers').call
|
10
|
+
end
|
6
11
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
+
# GET /couriers/all
|
13
|
+
# Return a list of all couriers.
|
14
|
+
def self.get_all
|
15
|
+
new(:get, 'couriers/all').call
|
16
|
+
end
|
12
17
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
else
|
25
|
-
new(:post, 'couriers/detect', {}, {:tracking => tracking}).call
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
18
|
+
# POST /couriers/detect
|
19
|
+
# Return a list of matched couriers based on tracking number format and selected couriers or a list of couriers.
|
20
|
+
def self.detect(tracking = nil)
|
21
|
+
if tracking.nil?
|
22
|
+
raise ArgumentError, 'tracking object is required.'
|
23
|
+
else
|
24
|
+
new(:post, 'couriers/detect', {}, { tracking: tracking }).call
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
30
29
|
end
|
@@ -1,17 +1,15 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/base'
|
2
2
|
|
3
3
|
module AfterShip
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
4
|
+
module V4
|
5
|
+
class LastCheckpoint < AfterShip::V4::Base
|
6
|
+
def self.get(slug = '', tracking_number = '')
|
7
|
+
if slug.empty? || tracking_number.empty?
|
8
|
+
raise ArgumentError, 'slug and tracking_number are required.'
|
9
|
+
else
|
10
|
+
new(:get, "last_checkpoint/#{slug}/#{tracking_number}").call
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
17
15
|
end
|
@@ -1,80 +1,86 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/base'
|
2
2
|
|
3
3
|
module AfterShip
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
4
|
+
module V4
|
5
|
+
class Tracking < AfterShip::V4::Base
|
6
|
+
# POST /trackings
|
7
|
+
def self.create(tracking_number, params = {})
|
8
|
+
if tracking_number.empty? || tracking_number.nil?
|
9
|
+
raise ArgumentError, 'tracking_number is required.'
|
10
|
+
else
|
11
|
+
query_hash = { tracking_number: tracking_number }
|
12
|
+
query_hash.merge!(params)
|
13
|
+
body = { tracking: query_hash }
|
14
|
+
new(:post, 'trackings', {}, body).call
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# POST /trackings/:slug/:tracking_number/retrack
|
19
|
+
def self.retrack(slug, tracking_number, params = {})
|
20
|
+
if slug.empty? || slug.nil? || tracking_number.empty? || tracking_number.nil?
|
21
|
+
raise ArgumentError, 'slug and tracking_number are required.'
|
22
|
+
end
|
23
|
+
|
24
|
+
new(:post, "trackings/#{slug}/#{tracking_number}/retrack", params).call
|
25
|
+
end
|
26
|
+
|
27
|
+
# DELETE /trackings/:slug/:tracking_number
|
28
|
+
def self.delete(slug, tracking_number, params = {})
|
29
|
+
if slug.empty? || slug.nil? || tracking_number.empty? || tracking_number.nil?
|
30
|
+
raise ArgumentError, 'slug and tracking_number are required.'
|
31
|
+
end
|
32
|
+
|
33
|
+
new(:delete, "trackings/#{slug}/#{tracking_number}", params).call
|
34
|
+
end
|
35
|
+
|
36
|
+
# DELETE /trackings/:id
|
37
|
+
def self.delete_by_id(id)
|
38
|
+
raise ArgumentError, 'id is required.' if id.empty? || id.nil?
|
39
|
+
|
40
|
+
new(:delete, "trackings/#{id}").call
|
41
|
+
end
|
42
|
+
|
43
|
+
# GET /trackings/:slug/:tracking_number
|
44
|
+
def self.get(slug, tracking_number, params = {})
|
45
|
+
if slug.empty? || slug.nil? || tracking_number.empty? || tracking_number.nil?
|
46
|
+
raise ArgumentError, 'slug and tracking_number are required.'
|
47
|
+
end
|
48
|
+
|
49
|
+
new(:get, "trackings/#{slug}/#{tracking_number}", params).call
|
50
|
+
end
|
51
|
+
|
52
|
+
# GET /trackings/:id
|
53
|
+
def self.get_by_id(id, params = {})
|
54
|
+
raise ArgumentError, 'id is required.' if id.empty? || id.nil?
|
55
|
+
|
56
|
+
new(:get, "trackings/#{id}", params).call
|
57
|
+
end
|
58
|
+
|
59
|
+
# GET /trackings
|
60
|
+
def self.get_all(params = {})
|
61
|
+
new(:get, 'trackings', params).call
|
62
|
+
end
|
63
|
+
|
64
|
+
# GET /trackings/exports
|
65
|
+
def self.export(params = {})
|
66
|
+
new(:get, 'trackings/exports', params).call
|
67
|
+
end
|
68
|
+
|
69
|
+
# PUT /trackings/:slug/:tracking_number
|
70
|
+
def self.update(slug, tracking_number, params = {})
|
71
|
+
if slug.empty? || slug.nil? || tracking_number.empty? || tracking_number.nil?
|
72
|
+
raise ArgumentError, 'slug and tracking_number are required.'
|
73
|
+
end
|
74
|
+
|
75
|
+
body = { tracking: params }
|
76
|
+
new(:put, "trackings/#{slug}/#{tracking_number}", {}, body).call
|
77
|
+
end
|
78
|
+
|
79
|
+
# Deprecated
|
80
|
+
# POST /trackings/:slug/:tracking_number/reactivate
|
81
|
+
def self.reactivate(_slug, _tracking_number)
|
82
|
+
raise StandardError, 'This method is deprecated, please use "retrack" instead'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
80
86
|
end
|
metadata
CHANGED
@@ -1,57 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aftership
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AfterShip Limited
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: faraday
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.0.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: faraday_middleware
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :
|
33
|
+
version: 1.0.0
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.14.1
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.14.1
|
55
69
|
description: Developed for easy integration with AfterShip
|
56
70
|
email:
|
57
71
|
- support@aftership.com
|
@@ -59,16 +73,12 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
|
-
-
|
63
|
-
- lib/aftership
|
64
|
-
- lib/aftership/v3/last_checkpoint.rb
|
65
|
-
- lib/aftership/v3/tracking.rb
|
76
|
+
- README.md
|
77
|
+
- lib/aftership.rb
|
66
78
|
- lib/aftership/v4/base.rb
|
67
79
|
- lib/aftership/v4/courier.rb
|
68
80
|
- lib/aftership/v4/last_checkpoint.rb
|
69
81
|
- lib/aftership/v4/tracking.rb
|
70
|
-
- lib/aftership.rb
|
71
|
-
- README.md
|
72
82
|
homepage: https://www.aftership.com
|
73
83
|
licenses:
|
74
84
|
- MIT
|
@@ -79,18 +89,17 @@ require_paths:
|
|
79
89
|
- lib
|
80
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
81
91
|
requirements:
|
82
|
-
- -
|
92
|
+
- - ">="
|
83
93
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
94
|
+
version: 2.3.0
|
85
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
96
|
requirements:
|
87
|
-
- -
|
97
|
+
- - ">="
|
88
98
|
- !ruby/object:Gem::Version
|
89
99
|
version: '0'
|
90
100
|
requirements:
|
91
101
|
- none
|
92
|
-
|
93
|
-
rubygems_version: 2.0.14
|
102
|
+
rubygems_version: 3.1.2
|
94
103
|
signing_key:
|
95
104
|
specification_version: 4
|
96
105
|
summary: Formerly known as aftership_ruby and a wrapper for AfterShip API. Support
|
data/lib/aftership/v3/base.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'httpclient'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
module AfterShip
|
5
|
-
module V3
|
6
|
-
class Base
|
7
|
-
class AfterShipError < StandardError;
|
8
|
-
end
|
9
|
-
attr_reader :http_verb_method, :end_point, :query, :body
|
10
|
-
|
11
|
-
def initialize(http_verb_method, end_point, query = {}, body = {})
|
12
|
-
@http_verb_method = http_verb_method
|
13
|
-
@end_point = end_point
|
14
|
-
@query = query
|
15
|
-
@body = body
|
16
|
-
|
17
|
-
@client = HTTPClient.new
|
18
|
-
end
|
19
|
-
|
20
|
-
def call
|
21
|
-
header = {'aftership-api-key' => AfterShip.api_key, 'Content-Type' => 'application/json'}
|
22
|
-
|
23
|
-
parameters = {
|
24
|
-
:query => query,
|
25
|
-
:body => body.to_json,
|
26
|
-
:header => header
|
27
|
-
}
|
28
|
-
|
29
|
-
response = @client.send(http_verb_method, url, parameters)
|
30
|
-
|
31
|
-
if response.body
|
32
|
-
JSON.parse(response.body)
|
33
|
-
else
|
34
|
-
raise(AfterShipError.new('response is nil'))
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def url
|
42
|
-
"#{AfterShip::URL}/v3/#{end_point.to_s}"
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/lib/aftership/v3/courier.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/base'
|
2
|
-
|
3
|
-
module AfterShip
|
4
|
-
module V3
|
5
|
-
class Courier < AfterShip::V3::Base
|
6
|
-
|
7
|
-
def self.get
|
8
|
-
new(:get, 'couriers').call
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.detect(tracking_number = '')
|
12
|
-
if tracking_number.empty?
|
13
|
-
raise ArgumentError.new('tracking_number is required.')
|
14
|
-
else
|
15
|
-
new(:get, "couriers/detect/#{tracking_number}").call
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/base'
|
2
|
-
|
3
|
-
module AfterShip
|
4
|
-
module V3
|
5
|
-
class LastCheckpoint < AfterShip::V3::Base
|
6
|
-
|
7
|
-
def self.get(slug = '', tracking_number = '')
|
8
|
-
if slug.empty? || tracking_number.empty?
|
9
|
-
raise ArgumentError.new('slug and tracking_number are required.')
|
10
|
-
else
|
11
|
-
new(:get, "last_checkpoint/#{slug}/#{tracking_number}").call
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/base'
|
2
|
-
|
3
|
-
module AfterShip
|
4
|
-
module V3
|
5
|
-
class Tracking < AfterShip::V3::Base
|
6
|
-
|
7
|
-
#POST /trackings
|
8
|
-
def self.create(tracking_number, params = {})
|
9
|
-
if tracking_number.empty?
|
10
|
-
raise ArgumentError.new('tracking_number is required.')
|
11
|
-
else
|
12
|
-
query_hash = {:tracking_number => tracking_number}
|
13
|
-
query_hash.merge!(params)
|
14
|
-
body = {:tracking => query_hash}
|
15
|
-
new(:post, 'trackings', {}, body).call
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
#DELETE /trackings/:slug/:tracking_number
|
20
|
-
def self.delete(slug, tracking_number)
|
21
|
-
if slug.empty? || tracking_number.empty?
|
22
|
-
raise ArgumentError.new('slug and tracking_number are required.')
|
23
|
-
end
|
24
|
-
new(:delete, "trackings/#{slug}/#{tracking_number}").call
|
25
|
-
end
|
26
|
-
|
27
|
-
#GET /trackings
|
28
|
-
def self.get_multi(params = {})
|
29
|
-
new(:get, 'trackings', params).call
|
30
|
-
end
|
31
|
-
|
32
|
-
#GET /trackings/:slug/:tracking_number
|
33
|
-
def self.get(slug, tracking_number, params = {})
|
34
|
-
if slug.empty? || tracking_number.empty?
|
35
|
-
raise ArgumentError.new('slug and tracking_number are required.')
|
36
|
-
end
|
37
|
-
new(:get, "trackings/#{slug}/#{tracking_number}", params).call
|
38
|
-
end
|
39
|
-
|
40
|
-
#PUT /trackings/:slug/:tracking_number
|
41
|
-
def self.update(slug, tracking_number, params = {})
|
42
|
-
if slug.empty? || tracking_number.empty?
|
43
|
-
raise ArgumentError.new('slug and tracking_number are required.')
|
44
|
-
end
|
45
|
-
body = {:tracking => params}
|
46
|
-
new(:put, "trackings/#{slug}/#{tracking_number}", {}, body).call
|
47
|
-
end
|
48
|
-
|
49
|
-
#POST /trackings/:slug/:tracking_number/reactivate
|
50
|
-
def self.reactivate(slug, tracking_number)
|
51
|
-
puts 'This method will be deprecate in AfterShipV4'
|
52
|
-
|
53
|
-
if slug.empty? || tracking_number.empty?
|
54
|
-
raise ArgumentError.new('slug and tracking_number are required.')
|
55
|
-
end
|
56
|
-
new(:post, "trackings/#{slug}/#{tracking_number}/reactivate").call
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|