aftership 4.2.0 → 4.5.1

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: 816eea3c35b379b4e3cd340278f68a0dcc2ae22d
4
- data.tar.gz: 1dfdcd5fd8dc6f96dc8f882c61f0431369cbce52
2
+ SHA256:
3
+ metadata.gz: b78fa7173ef557fa6c2df76d316a358e2867871758c750b79d7062645ed2f59d
4
+ data.tar.gz: db3078d7dd058af8c0b1be409e305a153047bfb2af75488bf386e542d84e88f4
5
5
  SHA512:
6
- metadata.gz: 5011017ab482f439d9a7aee133435186d0f162968d7d402326e56c3e8f94b82f2da049c8b4a3f8af72be57e6017f09ba641f466f8fda55877176fa56c6258d73
7
- data.tar.gz: 71e62ff576f7f1b0d813bc80381be1da891ad1a9878918c3b57eb795389c8575952e300327847d20475acf3f01c59f93d3cf70a8f9760bcd2ee976f8b99b5de7
6
+ metadata.gz: 4ae37ae84e6aaecb78c7afbda1ebc0abeb0090d9b3ae45af345e2ccd94b88d4b2e36b1b1d55994d368e24c65c498f6bdede51a4d8f77fd1840f03ca80eee0dbc
7
+ data.tar.gz: be2b19159da6451ab0e5f767ffc67a1693b2b9d3e39e1f552b5edeb464c4ad67e9fe78f650e5f5dfa8441a44add1c9003860b651127eaac192730840f3ce2bab
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.1+
12
+
13
+ We suggest all users to upgrade your `aftership` gem to v4.5.1 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.1
17
+ - Resolved [#31](https://github.com/AfterShip/aftership-sdk-ruby/issues/31): Deprecation of encryption algorithms below 256 bits
18
+
19
+ * 2021-02-08 4.5.0
20
+ - Downgraded `faraday` to `1.0.1` that accepts ruby 2.3.0+ as required version.
21
+ - Updated request User agent to follow AfterShip SDK guideline.
22
+ - Required ruby version is now 2.3.0+
23
+
24
+ * 2021-02-08 4.4.0
25
+ - Removed `httpclient` and used `faraday` 1.3 as http client
26
+ - Polished project with prettified formatting
27
+ - Required ruby version updated to 2.4.0+
28
+
29
+ * 2016-01-11 4.3.1
30
+ - Updated gem `httpclient` version to 2.7.1
31
+
32
+ * 2015-12-14 4.3.0
33
+ - Added rescue methods for parsing JSON, and try to retrieve error codes from cloudflare
34
+ - Added /trackings/exports method
35
+ - Added auto-retry mechanism if invalid JSON response retrieved
36
+
12
37
  * 2015-11-11 Pump version to 4.2.0
13
38
  - Removed v3 code, support ENV variable AFTERSHIP_API_ENDPOINT for testing
14
39
 
@@ -31,69 +56,64 @@ AfterShip provides an automated way for online merchants to track packages and s
31
56
 
32
57
  1. Add the following line to your application's Gemfile
33
58
 
34
- ```
35
- gem "aftership", "~> 4.1.0"
36
- ```
59
+ ```ruby
60
+ gem "aftership", "~> 4.5.1"
61
+ ```
37
62
 
38
63
  2. Run bundler
39
64
 
40
- ```
41
- bundle install
42
- ```
65
+ ```shell
66
+ bundle install
67
+ ```
43
68
 
44
69
  ## Configuration
45
70
 
46
71
  1. Before you begin
47
72
 
48
- You'll need to have a AfterShip account
49
-
50
- http://www.aftership.com
73
+ You'll need to have a AfterShip account: http://www.aftership.com
51
74
 
52
75
 
53
76
  2. Setup the API Key
54
77
 
55
- You can retrieve your api key at
56
-
57
- https://www.aftership.com/apps/api
78
+ You can retrieve your api key at: https://admin.aftership.com/settings/api-keys
58
79
 
59
80
  ## Usage
60
81
 
61
82
  1. Setup
62
- Before using API, please include the gem in your script
83
+
84
+ Before using API, please include the gem in your script.
63
85
 
64
- ```
65
- require 'rubygems'
66
- require 'aftership'
67
- ```
86
+ ```ruby
87
+ require 'rubygems'
88
+ require 'aftership'
89
+ ```
68
90
 
69
- You should set you API key before making any request to AfterShip.
91
+ You should set you API key before making any request to AfterShip.
70
92
 
71
- ```
72
- AfterShip.api_key = 'YOUR_API_KEY' #Replace "YOUR_API_KEY" to your AfterShip api key.
73
- ```
93
+ ```ruby
94
+ AfterShip.api_key = 'YOUR_API_KEY' # Replace "YOUR_API_KEY" to your AfterShip api key.
95
+ ```
74
96
 
75
97
 
76
98
  2. Coding
77
99
 
100
+ ```ruby
101
+ require('aftership')
102
+ AfterShip.api_key = 'YOUR_API_KEY'
78
103
 
79
- ### V4
80
- ```
81
- require('aftership')
82
- AfterShip.api_key = 'YOUR_API_KEY'
83
-
84
- AfterShip::V4::Courier.get
85
- AfterShip::V4::Courier.get_all
86
- AfterShip::V4::Courier.detect({:tracking_number => 'EJ276142450JP'})
104
+ AfterShip::V4::Courier.get
105
+ AfterShip::V4::Courier.get_all
106
+ AfterShip::V4::Courier.detect({:tracking_number => 'EJ276142450JP'})
87
107
 
88
- AfterShip::V4::Tracking.create('1ZA6F598D992381375', {:emails => ['a@abcd.com', 'asdfasdfs@gmail.com']})
89
- AfterShip::V4::Tracking.get('ups', '1ZA6F598D992381375')
90
- AfterShip::V4::Tracking.get_all
91
- AfterShip::V4::Tracking.update('ups', '1ZA6F598D992381375', {:title => 'Testing'})
92
- AfterShip::V4::Tracking.retrack('ups', '1ZA6F598D992381375')
93
- AfterShip::V4::Tracking.delete('ups', '1ZA6F598D992381375')
108
+ AfterShip::V4::Tracking.create('1ZA6F598D992381375', {:emails => ['a@abcd.com', 'asdfasdfs@gmail.com']})
109
+ AfterShip::V4::Tracking.get('ups', '1ZA6F598D992381375')
110
+ AfterShip::V4::Tracking.get_all
111
+ AfterShip::V4::Tracking.update('ups', '1ZA6F598D992381375', {:title => 'Testing'})
112
+ AfterShip::V4::Tracking.retrack('ups', '1ZA6F598D992381375')
113
+ AfterShip::V4::Tracking.delete('ups', '1ZA6F598D992381375')
94
114
 
95
- AfterShip::V4::LastCheckpoint.get('ups', '1ZA6F598D992381375')
96
- ```
115
+ AfterShip::V4::LastCheckpoint.get('ups', '1ZA6F598D992381375')
116
+ ```
97
117
 
98
118
  ## The License (MIT)
99
119
 
@@ -102,5 +122,6 @@ Released under the MIT license. See the LICENSE file for the complete wording.
102
122
 
103
123
  ## Contributor
104
124
 
125
+ - Ryan Zou [twitter:renyuanz](https://twitter.com/ry_zou)
105
126
  - Alex Topalov <me@alextopalov.com>
106
127
 
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.1'
13
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)
39
+ request_body = body.empty? ? nil : body.to_json
30
40
 
31
- if response.body
32
- JSON.parse(response.body)
33
- else
34
- raise(AfterShipError.new('response is nil'))
35
- end
41
+ loop do
42
+ response = @client.run_request(http_verb_method, uri, request_body, headers)
43
+ cf_ray = response.headers['cf-ray'] if response.headers
36
44
 
37
- end
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
38
52
 
39
- private
53
+ sleep CALL_SLEEP
40
54
 
41
- def url
42
- "#{AfterShip::URL}/v4/#{end_point.to_s}"
43
- 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
44
78
 
45
- end
46
- end
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.2.0
4
+ version: 4.5.1
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-11-11 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,12 +73,12 @@ executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
76
+ - README.md
77
+ - lib/aftership.rb
62
78
  - lib/aftership/v4/base.rb
63
79
  - lib/aftership/v4/courier.rb
64
80
  - lib/aftership/v4/last_checkpoint.rb
65
81
  - lib/aftership/v4/tracking.rb
66
- - lib/aftership.rb
67
- - README.md
68
82
  homepage: https://www.aftership.com
69
83
  licenses:
70
84
  - MIT
@@ -75,18 +89,17 @@ require_paths:
75
89
  - lib
76
90
  required_ruby_version: !ruby/object:Gem::Requirement
77
91
  requirements:
78
- - - '>='
92
+ - - ">="
79
93
  - !ruby/object:Gem::Version
80
- version: 1.8.7
94
+ version: 2.3.0
81
95
  required_rubygems_version: !ruby/object:Gem::Requirement
82
96
  requirements:
83
- - - '>='
97
+ - - ">="
84
98
  - !ruby/object:Gem::Version
85
99
  version: '0'
86
100
  requirements:
87
101
  - none
88
- rubyforge_project:
89
- rubygems_version: 2.0.14
102
+ rubygems_version: 3.1.2
90
103
  signing_key:
91
104
  specification_version: 4
92
105
  summary: Formerly known as aftership_ruby and a wrapper for AfterShip API. Support