aftership 3.0.3 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +96 -0
- data/lib/aftership.rb +8 -4
- data/lib/aftership/{base.rb → v3/base.rb} +1 -1
- data/lib/aftership/{courier.rb → v3/courier.rb} +0 -0
- data/lib/aftership/{last_checkpoint.rb → v3/last_checkpoint.rb} +0 -0
- data/lib/aftership/{tracking.rb → v3/tracking.rb} +3 -1
- data/lib/aftership/v4/base.rb +54 -0
- data/lib/aftership/v4/courier.rb +30 -0
- data/lib/aftership/v4/last_checkpoint.rb +17 -0
- data/lib/aftership/v4/tracking.rb +70 -0
- metadata +58 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95e99df0b3b1522828ddaf64e07858cd9d228f4a
|
4
|
+
data.tar.gz: c231c24fadd60141df19f072cfa2e695c779d34f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38a094cd9ee88231bfccb13c34e8c14d53b236757f273b5ab4e0212aa637cfd23b8e2c7a7239614f45ae01de44a2781556c70020eb73782e93ac27d371d5029c
|
7
|
+
data.tar.gz: 51093f58e32cd3c1cf83a074371d8a79fbecb09ff1ed0dcbfe367162b431f170fd0999d4686c4dfae7189885f241adb86259569e1d90ed453096fff48db79da5
|
data/README.md
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
## aftership-ruby
|
2
|
+
|
3
|
+
Ruby Gem for AfterShip API.
|
4
|
+
|
5
|
+
This extension helps developers to integrate with AfterShip easily.
|
6
|
+
|
7
|
+
## About AfterShip
|
8
|
+
|
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
|
+
|
11
|
+
### Changes
|
12
|
+
* 2014-10-28 Pump version to 4.0.0, support latest v4 api
|
13
|
+
* Adding deprecation messages
|
14
|
+
* Adding new api endpoints
|
15
|
+
* Make all changes regarding new API version
|
16
|
+
|
17
|
+
* 2014-04-11 Pump version to 3.0.1, support latest v3 api
|
18
|
+
* Removed the debug message
|
19
|
+
|
20
|
+
* 2014-04-11 Pump version to 3.0.0, support latest v3 api
|
21
|
+
* Change license to MIT
|
22
|
+
|
23
|
+
|
24
|
+
## Installation
|
25
|
+
|
26
|
+
1. Add the following line to your application's Gemfile
|
27
|
+
|
28
|
+
```
|
29
|
+
gem "aftership", "~> 3.0"
|
30
|
+
```
|
31
|
+
|
32
|
+
2. Run bundler
|
33
|
+
|
34
|
+
```
|
35
|
+
bundle install
|
36
|
+
```
|
37
|
+
|
38
|
+
|
39
|
+
## Configuration
|
40
|
+
|
41
|
+
1. Before you begin
|
42
|
+
|
43
|
+
You'll need to have a AfterShip account
|
44
|
+
|
45
|
+
http://www.aftership.com
|
46
|
+
|
47
|
+
|
48
|
+
2. Setup the API Key
|
49
|
+
|
50
|
+
You can retrieve your api key at
|
51
|
+
|
52
|
+
https://www.aftership.com/apps/api
|
53
|
+
|
54
|
+
|
55
|
+
## Usage
|
56
|
+
|
57
|
+
1. Setup
|
58
|
+
Before using API, please include the gem in your script
|
59
|
+
|
60
|
+
```
|
61
|
+
require 'rubygems'
|
62
|
+
require 'aftership'
|
63
|
+
```
|
64
|
+
|
65
|
+
You should set you API key before making any request to AfterShip.
|
66
|
+
|
67
|
+
```
|
68
|
+
AfterShip.api_key = 'YOUR_API_KEY' #Replace "YOUR_API_KEY" to your AfterShip api key.
|
69
|
+
```
|
70
|
+
|
71
|
+
|
72
|
+
2. Coding
|
73
|
+
|
74
|
+
```
|
75
|
+
require('aftership')
|
76
|
+
AfterShip.api_key = 'YOUR_API_KEY'
|
77
|
+
|
78
|
+
AfterShip::V3::Courier.get
|
79
|
+
AfterShip::V3::Courier.detect('1ZA6F598D992381375')
|
80
|
+
|
81
|
+
AfterShip::V3::Tracking.create('1ZA6F598D992381375', {"emails"=>["a@abcd.com", "asdfasdfs@gmail.com"]})
|
82
|
+
AfterShip::V3::Tracking.get('ups', '1ZA6F598D992381375')
|
83
|
+
AfterShip::V3::Tracking.get_multi()
|
84
|
+
AfterShip::V3::Tracking.delete('ups', '1ZA6F598D992381375')
|
85
|
+
AfterShip::V3::Tracking.update('ups', '1ZA6F598D992381375', {:title=>"Testing"})
|
86
|
+
AfterShip::V3::Tracking.reactivate('ups', '1ZA6F598D992381375')
|
87
|
+
|
88
|
+
AfterShip::V3::LastCheckpoint.get('ups', '1ZA6F598D992381375')
|
89
|
+
|
90
|
+
```
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
## The License (MIT)
|
95
|
+
|
96
|
+
Released under the MIT license. See the LICENSE file for the complete wording.
|
data/lib/aftership.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
2
|
|
3
|
-
require "aftership/courier"
|
4
|
-
require "aftership/tracking"
|
5
|
-
require "aftership/last_checkpoint"
|
3
|
+
require "aftership/v3/courier"
|
4
|
+
require "aftership/v3/tracking"
|
5
|
+
require "aftership/v3/last_checkpoint"
|
6
|
+
|
7
|
+
require "aftership/v4/courier"
|
8
|
+
require "aftership/v4/tracking"
|
9
|
+
require "aftership/v4/last_checkpoint"
|
6
10
|
|
7
11
|
module AfterShip
|
8
12
|
class << self;
|
@@ -10,4 +14,4 @@ module AfterShip
|
|
10
14
|
end
|
11
15
|
|
12
16
|
URL = "https://api.aftership.com"
|
13
|
-
end
|
17
|
+
end
|
File without changes
|
File without changes
|
@@ -48,6 +48,8 @@ module AfterShip
|
|
48
48
|
|
49
49
|
#POST /trackings/:slug/:tracking_number/reactivate
|
50
50
|
def self.reactivate(slug, tracking_number)
|
51
|
+
puts "This method will be deprecate in AfterShipV4"
|
52
|
+
|
51
53
|
if slug.empty? || tracking_number.empty?
|
52
54
|
raise ArgumentError.new("slug and tracking_number are required.")
|
53
55
|
end
|
@@ -56,4 +58,4 @@ module AfterShip
|
|
56
58
|
|
57
59
|
end
|
58
60
|
end
|
59
|
-
end
|
61
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'httpi'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
HTTPI.log = false
|
5
|
+
|
6
|
+
module AfterShip
|
7
|
+
module V4
|
8
|
+
class Base
|
9
|
+
class AfterShipError < StandardError; end
|
10
|
+
attr_reader :http_verb_method, :end_point, :params, :body
|
11
|
+
|
12
|
+
def initialize(http_verb_method, end_point, params = {}, body = {})
|
13
|
+
@body = body
|
14
|
+
@params = params
|
15
|
+
@end_point = end_point
|
16
|
+
@http_verb_method = http_verb_method
|
17
|
+
end
|
18
|
+
|
19
|
+
def call
|
20
|
+
validate
|
21
|
+
if response = HTTPI.send(http_verb_method.to_sym, request)
|
22
|
+
return JSON.parse(response.raw_body)
|
23
|
+
else
|
24
|
+
raise(AfterShipError.new("response is nil"))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def validate
|
31
|
+
body.each do |key, value|
|
32
|
+
if %w(emails smses).include?(key.to_s) && !value.is_a?(Array)
|
33
|
+
HTTPI.logger.warn("the #{key} field should be an array")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def url
|
39
|
+
api_url = "#{AfterShip::URL}/v4/#{end_point.to_s}"
|
40
|
+
if !params.empty?
|
41
|
+
api_url += '?' + Rack::Utils.build_query(params)
|
42
|
+
end
|
43
|
+
api_url
|
44
|
+
end
|
45
|
+
|
46
|
+
def request
|
47
|
+
req = HTTPI::Request.new(url)
|
48
|
+
req.headers = {"aftership-api-key" => AfterShip.api_key, 'Content-Type' => 'application/json'}
|
49
|
+
req.body = body.to_json
|
50
|
+
req
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/base'
|
2
|
+
|
3
|
+
module AfterShip
|
4
|
+
module V4
|
5
|
+
class Courier < AfterShip::V4::Base
|
6
|
+
|
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
|
+
|
13
|
+
#GET /couriers/all
|
14
|
+
#Return a list of all couriers.
|
15
|
+
def self.get
|
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_number = '')
|
22
|
+
if tracking_number.empty?
|
23
|
+
raise ArgumentError.new("tracking_number is required.")
|
24
|
+
else
|
25
|
+
new(:get, "couriers/detect", {'tracking_number' => tracking_number}).call
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/base'
|
2
|
+
|
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
|
17
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/base'
|
2
|
+
|
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.empty?
|
10
|
+
raise ArgumentError.new("The 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.empty? || tracking_number.empty?
|
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
|
+
#POST /trackings/batch
|
28
|
+
def self.create_in_batch(tracking_numbers)
|
29
|
+
raise ArgumentError.new("Not implemented yet")
|
30
|
+
end
|
31
|
+
|
32
|
+
#DELETE /trackings/:slug/:tracking_number
|
33
|
+
def self.delete(slug, tracking_number)
|
34
|
+
if slug.empty? || tracking_number.empty?
|
35
|
+
raise ArgumentError.new("slug and tracking_number are required.")
|
36
|
+
end
|
37
|
+
new(:delete, "trackings/#{slug}/#{tracking_number}").call
|
38
|
+
end
|
39
|
+
|
40
|
+
#GET /trackings/:slug/:tracking_number
|
41
|
+
def self.get(slug, tracking_number, params = {})
|
42
|
+
if slug.empty? || tracking_number.empty?
|
43
|
+
raise ArgumentError.new("slug and tracking_number are required.")
|
44
|
+
end
|
45
|
+
new(:get, "trackings/#{slug}/#{tracking_number}", params).call
|
46
|
+
end
|
47
|
+
|
48
|
+
#GET /trackings
|
49
|
+
#1_000_000 results is a limit
|
50
|
+
def self.get_all(params = {})
|
51
|
+
new(:get, "trackings", params).call
|
52
|
+
end
|
53
|
+
|
54
|
+
#PUT /trackings/:slug/:tracking_number
|
55
|
+
def self.update(slug, tracking_number, params = {})
|
56
|
+
if slug.empty? || tracking_number.empty?
|
57
|
+
raise ArgumentError.new("slug and tracking_number are required.")
|
58
|
+
end
|
59
|
+
body = {"tracking" => params}
|
60
|
+
new(:put, "trackings/#{slug}/#{tracking_number}", {}, body).call
|
61
|
+
end
|
62
|
+
|
63
|
+
#Deprecated
|
64
|
+
#POST /trackings/:slug/:tracking_number/reactivate
|
65
|
+
def self.reactivate(slug, tracking_number)
|
66
|
+
raise StandartError.new("This method is deprecated please use 'retrack' instead")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aftership
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AfterShip.com
|
8
|
+
- Alex Topalov
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
12
|
+
date: 2014-10-31 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: httpi
|
@@ -24,17 +25,66 @@ dependencies:
|
|
24
25
|
- - ~>
|
25
26
|
- !ruby/object:Gem::Version
|
26
27
|
version: 2.2.7
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rubyntlm
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.4.0
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 0.4.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rspec
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 2.14.1
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.14.1
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: pry
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
27
70
|
description: Developed for easy integration with AfterShip
|
28
|
-
email:
|
71
|
+
email:
|
72
|
+
- support@aftership.com
|
73
|
+
- me@alextopalov.com
|
29
74
|
executables: []
|
30
75
|
extensions: []
|
31
76
|
extra_rdoc_files: []
|
32
77
|
files:
|
78
|
+
- lib/aftership/v3/base.rb
|
79
|
+
- lib/aftership/v3/courier.rb
|
80
|
+
- lib/aftership/v3/last_checkpoint.rb
|
81
|
+
- lib/aftership/v3/tracking.rb
|
82
|
+
- lib/aftership/v4/base.rb
|
83
|
+
- lib/aftership/v4/courier.rb
|
84
|
+
- lib/aftership/v4/last_checkpoint.rb
|
85
|
+
- lib/aftership/v4/tracking.rb
|
33
86
|
- lib/aftership.rb
|
34
|
-
-
|
35
|
-
- lib/aftership/courier.rb
|
36
|
-
- lib/aftership/tracking.rb
|
37
|
-
- lib/aftership/last_checkpoint.rb
|
87
|
+
- README.md
|
38
88
|
homepage: https://www.aftership.com
|
39
89
|
licenses:
|
40
90
|
- MIT
|
@@ -60,5 +110,5 @@ rubygems_version: 2.0.14
|
|
60
110
|
signing_key:
|
61
111
|
specification_version: 4
|
62
112
|
summary: Formerly known as aftership_ruby and a wrapper for AfterShip API. Support
|
63
|
-
the latest V3 API
|
113
|
+
the latest V3/V4 API
|
64
114
|
test_files: []
|