aftership 4.3.0 → 4.5.2

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: 33d125b2602fb4ff8ed57a35cabd4b17b0e9dcfd
4
- data.tar.gz: f7ecbfeb91774048f79a1b6b9bed8b18267081bb
2
+ SHA256:
3
+ metadata.gz: 603b40007c2133ca42f0b9e18a84f08503946d862675f4a65741b2bc38f93ce0
4
+ data.tar.gz: 71eeb5782f1aab8d2dc55a003e18aabd449d92e68d9ee661447d8f6b7119157e
5
5
  SHA512:
6
- metadata.gz: 837f6d803d6d1e82a7245871ffaecb0f7c1e01cf67d117f980bb9bfe7237359e373438662984486cfeed9f09284e64cc56279518137578fcdd4c454789c1ecad
7
- data.tar.gz: ba8d921f5ef3cc54662d10afa5c230ce8e5aaafd36bb954f70ecafd4310c25c6d4a2ee3f5e5dbd945fd8d953e60ff0034e7ab851daf61e30c3358b4c92cd2505
6
+ metadata.gz: 15a3837d5e7b0921478665bf58467177a17c74848c995d79d63ac752ca417758f0cb3dd5258add15699c7251906b89fc13a8cece1d56d208ef13a4e69deb7a22
7
+ data.tar.gz: 680fb873eadb5f15b080109bae58685b21b0bab7f9561b94876d2390c497525ba04a43b394a78eb54172260a9b0512b200da0f524281436bccb75fa17a817e3f
data/README.md CHANGED
@@ -8,12 +8,42 @@ 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.2+
12
+
13
+ We suggest all users to upgrade your `aftership` gem to v4.5.2 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
+
15
+ If you want to use recent versions of Faraday, update your Gemfile as below:
16
+
17
+ ```ruby
18
+ gem "aftership", "~> 4.5.2"
19
+ gem 'faraday', '~> 1.3.0'
20
+ ```
21
+
11
22
  ### Changes
23
+ * 2021-02-08 4.5.2
24
+ - Merged [#39](https://github.com/AfterShip/aftership-sdk-ruby/pull/39): Add compatibility for recent versions of Faraday
25
+
26
+ * 2021-02-08 4.5.1
27
+ - Resolved [#31](https://github.com/AfterShip/aftership-sdk-ruby/issues/31): Deprecation of encryption algorithms below 256 bits
28
+
29
+ * 2021-02-08 4.5.0
30
+ - Downgraded `faraday` to `1.0.1` that accepts ruby 2.3.0+ as required version.
31
+ - Updated request User agent to follow AfterShip SDK guideline.
32
+ - Required ruby version is now 2.3.0+
33
+
34
+ * 2021-02-08 4.4.0
35
+ - Removed `httpclient` and used `faraday` 1.3 as http client
36
+ - Polished project with prettified formatting
37
+ - Required ruby version updated to 2.4.0+
38
+
39
+ * 2016-01-11 4.3.1
40
+ - Updated gem `httpclient` version to 2.7.1
41
+
12
42
  * 2015-12-14 4.3.0
13
43
  - Added rescue methods for parsing JSON, and try to retrieve error codes from cloudflare
14
44
  - Added /trackings/exports method
15
45
  - Added auto-retry mechanism if invalid JSON response retrieved
16
-
46
+
17
47
  * 2015-11-11 Pump version to 4.2.0
18
48
  - Removed v3 code, support ENV variable AFTERSHIP_API_ENDPOINT for testing
19
49
 
@@ -36,69 +66,64 @@ AfterShip provides an automated way for online merchants to track packages and s
36
66
 
37
67
  1. Add the following line to your application's Gemfile
38
68
 
39
- ```
40
- gem "aftership", "~> 4.1.0"
41
- ```
69
+ ```ruby
70
+ gem "aftership", "~> 4.5.2"
71
+ ```
42
72
 
43
73
  2. Run bundler
44
74
 
45
- ```
46
- bundle install
47
- ```
75
+ ```shell
76
+ bundle install
77
+ ```
48
78
 
49
79
  ## Configuration
50
80
 
51
81
  1. Before you begin
52
82
 
53
- You'll need to have a AfterShip account
54
-
55
- http://www.aftership.com
83
+ You'll need to have a AfterShip account: http://www.aftership.com
56
84
 
57
85
 
58
86
  2. Setup the API Key
59
87
 
60
- You can retrieve your api key at
61
-
62
- https://www.aftership.com/apps/api
88
+ You can retrieve your api key at: https://admin.aftership.com/settings/api-keys
63
89
 
64
90
  ## Usage
65
91
 
66
92
  1. Setup
67
- Before using API, please include the gem in your script
93
+
94
+ Before using API, please include the gem in your script.
68
95
 
69
- ```
70
- require 'rubygems'
71
- require 'aftership'
72
- ```
96
+ ```ruby
97
+ require 'rubygems'
98
+ require 'aftership'
99
+ ```
73
100
 
74
- You should set you API key before making any request to AfterShip.
101
+ You should set you API key before making any request to AfterShip.
75
102
 
76
- ```
77
- AfterShip.api_key = 'YOUR_API_KEY' #Replace "YOUR_API_KEY" to your AfterShip api key.
78
- ```
103
+ ```ruby
104
+ AfterShip.api_key = 'YOUR_API_KEY' # Replace "YOUR_API_KEY" to your AfterShip api key.
105
+ ```
79
106
 
80
107
 
81
108
  2. Coding
82
109
 
110
+ ```ruby
111
+ require('aftership')
112
+ AfterShip.api_key = 'YOUR_API_KEY'
83
113
 
84
- ### V4
85
- ```
86
- require('aftership')
87
- AfterShip.api_key = 'YOUR_API_KEY'
88
-
89
- AfterShip::V4::Courier.get
90
- AfterShip::V4::Courier.get_all
91
- AfterShip::V4::Courier.detect({:tracking_number => 'EJ276142450JP'})
114
+ AfterShip::V4::Courier.get
115
+ AfterShip::V4::Courier.get_all
116
+ AfterShip::V4::Courier.detect({:tracking_number => 'EJ276142450JP'})
92
117
 
93
- AfterShip::V4::Tracking.create('1ZA6F598D992381375', {:emails => ['a@abcd.com', 'asdfasdfs@gmail.com']})
94
- AfterShip::V4::Tracking.get('ups', '1ZA6F598D992381375')
95
- AfterShip::V4::Tracking.get_all
96
- AfterShip::V4::Tracking.update('ups', '1ZA6F598D992381375', {:title => 'Testing'})
97
- AfterShip::V4::Tracking.retrack('ups', '1ZA6F598D992381375')
98
- AfterShip::V4::Tracking.delete('ups', '1ZA6F598D992381375')
118
+ AfterShip::V4::Tracking.create('1ZA6F598D992381375', {:emails => ['a@abcd.com', 'asdfasdfs@gmail.com']})
119
+ AfterShip::V4::Tracking.get('ups', '1ZA6F598D992381375')
120
+ AfterShip::V4::Tracking.get_all
121
+ AfterShip::V4::Tracking.update('ups', '1ZA6F598D992381375', {:title => 'Testing'})
122
+ AfterShip::V4::Tracking.retrack('ups', '1ZA6F598D992381375')
123
+ AfterShip::V4::Tracking.delete('ups', '1ZA6F598D992381375')
99
124
 
100
- AfterShip::V4::LastCheckpoint.get('ups', '1ZA6F598D992381375')
101
- ```
125
+ AfterShip::V4::LastCheckpoint.get('ups', '1ZA6F598D992381375')
126
+ ```
102
127
 
103
128
  ## The License (MIT)
104
129
 
@@ -107,5 +132,6 @@ Released under the MIT license. See the LICENSE file for the complete wording.
107
132
 
108
133
  ## Contributor
109
134
 
135
+ - Ryan Zou [twitter:renyuanz](https://twitter.com/ry_zou)
110
136
  - Alex Topalov <me@alextopalov.com>
111
137
 
data/lib/aftership.rb CHANGED
@@ -5,9 +5,10 @@ require 'aftership/v4/tracking'
5
5
  require 'aftership/v4/last_checkpoint'
6
6
 
7
7
  module AfterShip
8
- class << self;
8
+ class << self
9
9
  attr_accessor :api_key
10
10
  end
11
11
 
12
12
  URL = ENV['AFTERSHIP_API_ENDPOINT'] || 'https://api.aftership.com'
13
+ VERSION = '4.5.2'
13
14
  end
@@ -1,10 +1,10 @@
1
- require 'httpclient'
2
- require 'json'
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
3
 
4
4
  module AfterShip
5
5
  module V4
6
6
  class Base
7
- class AfterShipError < StandardError;
7
+ class AfterShipError < StandardError
8
8
  end
9
9
  attr_reader :http_verb_method, :end_point, :query, :body
10
10
 
@@ -18,75 +18,68 @@ module AfterShip
18
18
  @body = body
19
19
  @trial = 0
20
20
 
21
- @client = HTTPClient.new
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
22
27
  end
23
28
 
24
29
  def call
25
-
26
- header = {'aftership-api-key' => AfterShip.api_key, 'Content-Type' => 'application/json'}
27
-
28
- parameters = {
29
- :query => query,
30
- :body => body.to_json,
31
- :header => header
30
+ headers = {
31
+ 'aftership-api-key' => AfterShip.api_key,
32
+ content_type: 'application/json',
33
+ user_agent: "aftership-sdk-ruby #{AfterShip::VERSION} (#{RUBY_VERSION})"
32
34
  }
33
35
 
34
36
  cf_ray = ''
35
- response = nil
37
+ output = nil
38
+ uri = @client.build_url(end_point, query)
39
+ request_body = body.empty? ? nil : body.to_json
36
40
 
37
41
  loop do
38
- response = @client.send(http_verb_method, url, parameters)
39
-
40
- if response.headers
41
- cf_ray = response.headers['CF-RAY']
42
- end
43
-
42
+ response = @client.run_request(http_verb_method, uri, request_body, headers)
43
+ cf_ray = response.headers['cf-ray'] if response.headers
44
44
 
45
45
  if response.body
46
+ # This try catch is actually useless (will improve in next major version.)
46
47
  begin
47
- response = JSON.parse(response.body)
48
+ output = response.body
48
49
  @trial = MAX_TRIAL + 1
49
- rescue
50
+ rescue StandardError
50
51
  @trial += 1
51
52
 
52
53
  sleep CALL_SLEEP
53
54
 
54
- response = {
55
- :meta => {
56
- :code => 500,
57
- :message => 'Something went wrong on AfterShip\'s end.',
58
- :type => 'InternalError'
59
- },
60
- :data => {
61
- :body => response.body,
62
- :cf_ray => cf_ray
63
- }
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
+ }
64
65
  }
65
66
  end
66
67
  else
67
- response = {
68
- :meta => {
69
- :code => 500,
70
- :message => 'Something went wrong on AfterShip\'s end.',
71
- :type => 'InternalError'
72
- },
73
- :data => {
74
- }
68
+ output = {
69
+ meta: {
70
+ code: 500,
71
+ message: 'Something went wrong on AfterShip\'s end.',
72
+ type: 'InternalError'
73
+ },
74
+ data: {
75
+ }
75
76
  }
76
77
  end
77
78
 
78
79
  break if @trial > MAX_TRIAL
79
80
  end
80
-
81
- response
81
+ output
82
82
  end
83
-
84
- private
85
-
86
- def url
87
- "#{AfterShip::URL}/v4/#{end_point.to_s}"
88
- end
89
-
90
83
  end
91
84
  end
92
85
  end
@@ -3,26 +3,25 @@ require File.dirname(__FILE__) + '/base'
3
3
  module AfterShip
4
4
  module V4
5
5
  class Courier < AfterShip::V4::Base
6
-
7
- #GET /couriers
8
- #Return a list of couriers activated at your AfterShip account.
6
+ # GET /couriers
7
+ # Return a list of couriers activated at your AfterShip account.
9
8
  def self.get
10
9
  new(:get, 'couriers').call
11
10
  end
12
11
 
13
- #GET /couriers/all
14
- #Return a list of all couriers.
12
+ # GET /couriers/all
13
+ # Return a list of all couriers.
15
14
  def self.get_all
16
15
  new(:get, 'couriers/all').call
17
16
  end
18
17
 
19
- #POST /couriers/detect
20
- #Return a list of matched couriers based on tracking number format and selected couriers or a list of couriers.
18
+ # POST /couriers/detect
19
+ # Return a list of matched couriers based on tracking number format and selected couriers or a list of couriers.
21
20
  def self.detect(tracking = nil)
22
- if tracking == nil
23
- raise ArgumentError.new('tracking object is required.')
21
+ if tracking.nil?
22
+ raise ArgumentError, 'tracking object is required.'
24
23
  else
25
- new(:post, 'couriers/detect', {}, {:tracking => tracking}).call
24
+ new(:post, 'couriers/detect', {}, { tracking: tracking }).call
26
25
  end
27
26
  end
28
27
  end
@@ -3,15 +3,13 @@ require File.dirname(__FILE__) + '/base'
3
3
  module AfterShip
4
4
  module V4
5
5
  class LastCheckpoint < AfterShip::V4::Base
6
-
7
6
  def self.get(slug = '', tracking_number = '')
8
7
  if slug.empty? || tracking_number.empty?
9
- raise ArgumentError.new('slug and tracking_number are required.')
8
+ raise ArgumentError, 'slug and tracking_number are required.'
10
9
  else
11
10
  new(:get, "last_checkpoint/#{slug}/#{tracking_number}").call
12
11
  end
13
12
  end
14
-
15
13
  end
16
14
  end
17
15
  end
@@ -3,82 +3,83 @@ require File.dirname(__FILE__) + '/base'
3
3
  module AfterShip
4
4
  module V4
5
5
  class Tracking < AfterShip::V4::Base
6
-
7
- #POST /trackings
6
+ # POST /trackings
8
7
  def self.create(tracking_number, params = {})
9
8
  if tracking_number.empty? || tracking_number.nil?
10
- raise ArgumentError.new('tracking_number is required.')
9
+ raise ArgumentError, 'tracking_number is required.'
11
10
  else
12
- query_hash = {:tracking_number => tracking_number}
11
+ query_hash = { tracking_number: tracking_number }
13
12
  query_hash.merge!(params)
14
- body = {:tracking => query_hash}
13
+ body = { tracking: query_hash }
15
14
  new(:post, 'trackings', {}, body).call
16
15
  end
17
16
  end
18
17
 
19
- #POST /trackings/:slug/:tracking_number/retrack
20
- def self.retrack(slug, tracking_number)
18
+ # POST /trackings/:slug/:tracking_number/retrack
19
+ def self.retrack(slug, tracking_number, params = {})
21
20
  if slug.empty? || slug.nil? || tracking_number.empty? || tracking_number.nil?
22
- raise ArgumentError.new('slug and tracking_number are required.')
21
+ raise ArgumentError, 'slug and tracking_number are required.'
23
22
  end
24
- new(:post, "trackings/#{slug}/#{tracking_number}/retrack").call
23
+
24
+ new(:post, "trackings/#{slug}/#{tracking_number}/retrack", params).call
25
25
  end
26
26
 
27
- #DELETE /trackings/:slug/:tracking_number
28
- def self.delete(slug, tracking_number)
27
+ # DELETE /trackings/:slug/:tracking_number
28
+ def self.delete(slug, tracking_number, params = {})
29
29
  if slug.empty? || slug.nil? || tracking_number.empty? || tracking_number.nil?
30
- raise ArgumentError.new('slug and tracking_number are required.')
30
+ raise ArgumentError, 'slug and tracking_number are required.'
31
31
  end
32
- new(:delete, "trackings/#{slug}/#{tracking_number}").call
32
+
33
+ new(:delete, "trackings/#{slug}/#{tracking_number}", params).call
33
34
  end
34
35
 
35
- #DELETE /trackings/:id
36
+ # DELETE /trackings/:id
36
37
  def self.delete_by_id(id)
37
- if id.empty? || id.nil?
38
- raise ArgumentError.new('id is required.')
39
- end
38
+ raise ArgumentError, 'id is required.' if id.empty? || id.nil?
39
+
40
40
  new(:delete, "trackings/#{id}").call
41
41
  end
42
42
 
43
- #GET /trackings/:slug/:tracking_number
43
+ # GET /trackings/:slug/:tracking_number
44
44
  def self.get(slug, tracking_number, params = {})
45
45
  if slug.empty? || slug.nil? || tracking_number.empty? || tracking_number.nil?
46
- raise ArgumentError.new('slug and tracking_number are required.')
46
+ raise ArgumentError, 'slug and tracking_number are required.'
47
47
  end
48
+
48
49
  new(:get, "trackings/#{slug}/#{tracking_number}", params).call
49
50
  end
50
51
 
51
- #GET /trackings/:id
52
+ # GET /trackings/:id
52
53
  def self.get_by_id(id, params = {})
53
- if id.empty? || id.nil?
54
- raise ArgumentError.new('id is required.')
55
- end
54
+ raise ArgumentError, 'id is required.' if id.empty? || id.nil?
55
+
56
56
  new(:get, "trackings/#{id}", params).call
57
57
  end
58
58
 
59
- #GET /trackings
59
+ # GET /trackings
60
60
  def self.get_all(params = {})
61
61
  new(:get, 'trackings', params).call
62
62
  end
63
63
 
64
- #GET /trackings/exports
64
+ # GET /trackings/exports
65
65
  def self.export(params = {})
66
66
  new(:get, 'trackings/exports', params).call
67
67
  end
68
68
 
69
- #PUT /trackings/:slug/:tracking_number
69
+ # PUT /trackings/:slug/:tracking_number
70
70
  def self.update(slug, tracking_number, params = {})
71
71
  if slug.empty? || slug.nil? || tracking_number.empty? || tracking_number.nil?
72
- raise ArgumentError.new('slug and tracking_number are required.')
72
+ raise ArgumentError, 'slug and tracking_number are required.'
73
73
  end
74
- body = {:tracking => params}
74
+
75
+ body = { tracking: params }
75
76
  new(:put, "trackings/#{slug}/#{tracking_number}", {}, body).call
76
77
  end
77
78
 
78
- #Deprecated
79
- #POST /trackings/:slug/:tracking_number/reactivate
80
- def self.reactivate(slug, tracking_number)
81
- raise StandardError.new('This method is deprecated, please use "retrack" instead')
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'
82
83
  end
83
84
  end
84
85
  end
metadata CHANGED
@@ -1,43 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aftership
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.5.2
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-12-15 00:00:00.000000000 Z
11
+ date: 2021-02-26 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'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 2.5.2
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.1
27
33
  - !ruby/object:Gem::Dependency
28
- name: rspec
34
+ name: faraday_middleware
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: 2.14.1
34
- type: :development
39
+ version: '1.0'
40
+ type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: 2.14.1
46
+ version: '1.0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: pry
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +58,20 @@ dependencies:
52
58
  - - ">="
53
59
  - !ruby/object:Gem::Version
54
60
  version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 2.14.1
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 2.14.1
55
75
  description: Developed for easy integration with AfterShip
56
76
  email:
57
77
  - support@aftership.com
@@ -77,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
97
  requirements:
78
98
  - - ">="
79
99
  - !ruby/object:Gem::Version
80
- version: 1.8.7
100
+ version: 2.3.0
81
101
  required_rubygems_version: !ruby/object:Gem::Requirement
82
102
  requirements:
83
103
  - - ">="
@@ -85,8 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
105
  version: '0'
86
106
  requirements:
87
107
  - none
88
- rubyforge_project:
89
- rubygems_version: 2.2.2
108
+ rubygems_version: 3.1.2
90
109
  signing_key:
91
110
  specification_version: 4
92
111
  summary: Formerly known as aftership_ruby and a wrapper for AfterShip API. Support