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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ebd5b4a4081cb426db0a7a82c9c22ce21f31fc47
4
- data.tar.gz: c8492214f770fb14ed57341fbe1f8c9874fc18da
2
+ SHA256:
3
+ metadata.gz: e290f58d38534b293261b1dcc9bdde6c4db06663c73eebc277db93939533f173
4
+ data.tar.gz: 4a848b707e8a6dd8c56130f8937a93e70f9d04b094911b844e1167bcd92d3266
5
5
  SHA512:
6
- metadata.gz: c70c74b09d02246ea0760573d643f7b7b09b09d07253989a21447a1f4881e261c5eca31a6f85e6027b638f8d6d1a85b10b804444ec929e68e6a67fe15cb5a1ed
7
- data.tar.gz: 024d53bc324c024f5952bde8a969e54a83d05034c29e1d432ee5e7130f2c9e6cd3941cff85719cfe415a83658cc1f1a1aaa2764d43a42e966971be2d86ad7556
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
- gem "aftership", "~> 4.1.0"
34
- ```
57
+ ```ruby
58
+ gem "aftership", "~> 4.5"
59
+ ```
35
60
 
36
61
  2. Run bundler
37
62
 
38
- ```
39
- bundle install
40
- ```
63
+ ```shell
64
+ bundle install
65
+ ```
41
66
 
42
67
  ## Configuration
43
68
 
44
69
  1. Before you begin
45
70
 
46
- You'll need to have a AfterShip account
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
- You can retrieve your api key at
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
- Before using API, please include the gem in your script
81
+
82
+ Before using API, please include the gem in your script.
61
83
 
62
- ```
63
- require 'rubygems'
64
- require 'aftership'
65
- ```
84
+ ```ruby
85
+ require 'rubygems'
86
+ require 'aftership'
87
+ ```
66
88
 
67
- You should set you API key before making any request to AfterShip.
89
+ You should set you API key before making any request to AfterShip.
68
90
 
69
- ```
70
- AfterShip.api_key = 'YOUR_API_KEY' #Replace "YOUR_API_KEY" to your AfterShip api key.
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
- ### V4
78
- ```
79
- require('aftership')
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
- AfterShip::V3::LastCheckpoint.get('ups', '1ZA6F598D992381375')
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
@@ -1,47 +1,85 @@
1
- require 'httpclient'
2
- require 'json'
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
3
 
4
4
  module AfterShip
5
- module V4
6
- class Base
7
- class AfterShipError < StandardError;
8
- end
9
- attr_reader :http_verb_method, :end_point, :query, :body
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
- 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
11
+ MAX_TRIAL = 3
12
+ CALL_SLEEP = 3
16
13
 
17
- @client = HTTPClient.new
18
- end
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
- def call
21
- header = {'aftership-api-key' => AfterShip.api_key, 'Content-Type' => 'application/json'}
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
- parameters = {
24
- :query => query,
25
- :body => body.to_json,
26
- :header => header
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
- response = @client.send(http_verb_method, url, parameters)
36
+ cf_ray = ''
37
+ output = nil
38
+ uri = @client.build_url(end_point, query)
30
39
 
31
- if response.body
32
- JSON.parse(response.body)
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
- end
43
+ cf_ray = response.headers['cf-ray'] if response.headers
38
44
 
39
- private
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
- def url
42
- "#{AfterShip::URL}/v4/#{end_point.to_s}"
43
- end
53
+ sleep CALL_SLEEP
44
54
 
45
- end
46
- end
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
@@ -1,30 +1,29 @@
1
1
  require File.dirname(__FILE__) + '/base'
2
2
 
3
3
  module AfterShip
4
- module V4
5
- class Courier < AfterShip::V4::Base
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
- #GET /couriers
8
- #Return a list of couriers activated at your AfterShip account.
9
- def self.get
10
- new(:get, 'couriers').call
11
- end
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
- #GET /couriers/all
14
- #Return a list of all couriers.
15
- def self.get_all
16
- new(:get, 'couriers/all').call
17
- end
18
-
19
- #POST /couriers/detect
20
- #Return a list of matched couriers based on tracking number format and selected couriers or a list of couriers.
21
- def self.detect(tracking = nil)
22
- if tracking == nil
23
- raise ArgumentError.new('tracking object is required.')
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
- module V4
5
- class LastCheckpoint < AfterShip::V4::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
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
- module V4
5
- class Tracking < AfterShip::V4::Base
6
-
7
- #POST /trackings
8
- def self.create(tracking_number, params = {})
9
- if tracking_number.blank?
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
- #POST /trackings/:slug/:tracking_number/retrack
20
- def self.retrack(slug, tracking_number)
21
- if slug.blank? || tracking_number.blank?
22
- raise ArgumentError.new('slug and tracking_number are required.')
23
- end
24
- new(:post, "trackings/#{slug}/#{tracking_number}/retrack").call
25
- end
26
-
27
- #DELETE /trackings/:slug/:tracking_number
28
- def self.delete(slug, tracking_number)
29
- if slug.blank? || tracking_number.blank?
30
- raise ArgumentError.new('slug and tracking_number are required.')
31
- end
32
- new(:delete, "trackings/#{slug}/#{tracking_number}").call
33
- end
34
-
35
- #DELETE /trackings/:id
36
- def self.delete_by_id(id)
37
- if id.empty?
38
- raise ArgumentError.new('id is required.')
39
- end
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.blank? || tracking_number.blank?
46
- raise ArgumentError.new('slug and tracking_number are required.')
47
- end
48
- new(:get, "trackings/#{slug}/#{tracking_number}", params).call
49
- end
50
-
51
- #GET /trackings/:id
52
- def self.get_by_id(id, params = {})
53
- if id.blank?
54
- raise ArgumentError.new('id is required.')
55
- end
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
- #PUT /trackings/:slug/:tracking_number
65
- def self.update(slug, tracking_number, params = {})
66
- if slug.blank? || tracking_number.blank?
67
- raise ArgumentError.new('slug and tracking_number are required.')
68
- end
69
- body = {:tracking => params}
70
- new(:put, "trackings/#{slug}/#{tracking_number}", {}, body).call
71
- end
72
-
73
- #Deprecated
74
- #POST /trackings/:slug/:tracking_number/reactivate
75
- def self.reactivate(slug, tracking_number)
76
- raise StandardError.new('This method is deprecated, please use "retrack" instead')
77
- end
78
- end
79
- end
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.1.1
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: 2015-01-07 00:00:00.000000000 Z
11
+ date: 2021-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: httpclient
14
+ name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.5.2
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: 2.5.2
26
+ version: 1.0.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: faraday_middleware
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.14.1
34
- type: :development
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: 2.14.1
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
- - lib/aftership/v3/base.rb
63
- - lib/aftership/v3/courier.rb
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: 1.8.7
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
- rubyforge_project:
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
@@ -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
@@ -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