smartsend-ruby 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/README.md +146 -0
- data/Rakefile +8 -0
- data/lib/smartsend/address.rb +25 -0
- data/lib/smartsend/agent.rb +12 -0
- data/lib/smartsend/client.rb +34 -0
- data/lib/smartsend/order.rb +57 -0
- data/lib/smartsend/orders.rb +36 -0
- data/lib/smartsend/parcel.rb +30 -0
- data/lib/smartsend/parcel_item.rb +21 -0
- data/lib/smartsend/receiver.rb +5 -0
- data/lib/smartsend/sender.rb +5 -0
- data/lib/smartsend/service.rb +23 -0
- data/lib/smartsend/version.rb +3 -0
- data/lib/smartsend-ruby.rb +1 -0
- data/lib/smartsend.rb +67 -0
- data/smartsend-ruby.gemspec +22 -0
- data/test/test_addresses.rb +80 -0
- data/test/test_client.rb +9 -0
- data/test/test_orders.rb +62 -0
- data/test/test_parcel_items.rb +26 -0
- data/test/test_parcels.rb +42 -0
- data/test/test_service.rb +21 -0
- data/test/test_smartsend.rb +18 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0e21904f9f72b5f2539f62b745eae8ebd0e796ac
|
4
|
+
data.tar.gz: b8fc28840c4ace20f5e760f05f47008fc950cbfd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1dce17d09126216ec231abefee7a2e4ee8b7840e0e529d8cf12d8a18dab39d2b8fc4de84dbc6ddd88adeeee0cdf6b0c1a259506fdaa0320b6caac65a698af34d
|
7
|
+
data.tar.gz: 8bc153718756d6ddd37b6a15cf43362ae4511f16261f5dbd5aa194a37de1ec52af912ed413d4ac05f20ed7d732e342342ddab64ac3d8538838180af06f49cc7f
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
# README
|
2
|
+
|
3
|
+
This is a ruby wrapper for the Smartsend.io api.
|
4
|
+
|
5
|
+
Before beginning you need a Smartsend account.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem install 'smartsend-ruby'
|
11
|
+
```
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
### Configuring the client
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
Smartsend.configure(
|
19
|
+
api_key: 'smartsend-api-key',
|
20
|
+
email: 'smartsend-username',
|
21
|
+
license: 'smartsend-license-key',
|
22
|
+
cms_system: 'Ruby on Rails',
|
23
|
+
cms_version: '5.0.0'
|
24
|
+
)
|
25
|
+
```
|
26
|
+
|
27
|
+
### Creating an order
|
28
|
+
|
29
|
+
This creates a label.
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
order = Smartsend::Order.new(
|
33
|
+
order_number: "AC12345789",
|
34
|
+
carrier: "postdanmark", # postdanmark/gls/bring
|
35
|
+
method: "private",
|
36
|
+
return: false,
|
37
|
+
total_price: 199.75,
|
38
|
+
shipping_price: 49,
|
39
|
+
currency: "DKK"
|
40
|
+
)
|
41
|
+
|
42
|
+
order.receiver = Smartsend::Receiver.new(
|
43
|
+
id: "123456", # your internal customer id
|
44
|
+
company: "Smart Send",
|
45
|
+
name1: "Henrik Hansen",
|
46
|
+
name2: "C/O Vivian Hansen",
|
47
|
+
address1: "Willemoesgade 42",
|
48
|
+
address2: "3.th.",
|
49
|
+
zip: "2100",
|
50
|
+
city: "Copenhagen",
|
51
|
+
country: "DK",
|
52
|
+
phone: "12345678",
|
53
|
+
mail: "contact@smartsend.io",
|
54
|
+
sms_notification: "12345678",
|
55
|
+
email_notification: "contact@smartsend.io"
|
56
|
+
)
|
57
|
+
|
58
|
+
order.sender = Smartsend::Sender.new(
|
59
|
+
company: "Smart Send",
|
60
|
+
name1: "Henrik Hansen",
|
61
|
+
name2: "C/O Vivian Hansen",
|
62
|
+
address1: "Willemoesgade 42",
|
63
|
+
address2: "3.th.",
|
64
|
+
zip: "2100",
|
65
|
+
city: "Copenhagen",
|
66
|
+
country: "DK",
|
67
|
+
sms: "12345678",
|
68
|
+
mail: "contact@smartsend.io"
|
69
|
+
)
|
70
|
+
|
71
|
+
# you can ship to a droppoint by defining an agent
|
72
|
+
order.agent = Smartsend::Agent.new(
|
73
|
+
id: "7224", # droppoint id
|
74
|
+
type: "PDK", # droppoint provider
|
75
|
+
company: "Smart Send",
|
76
|
+
name1: "Henrik Hansen",
|
77
|
+
name2: "C/O Vivian Hansen",
|
78
|
+
address1: "Willemoesgade 42",
|
79
|
+
address2: "3.th.",
|
80
|
+
zip: "2100",
|
81
|
+
city: "Copenhagen",
|
82
|
+
country: "DK",
|
83
|
+
phone: "12345678",
|
84
|
+
mail: "contact@smartsend.io"
|
85
|
+
)
|
86
|
+
|
87
|
+
parcel = Smartsend::Parcel.new(
|
88
|
+
shipped_at: DateTime.now,
|
89
|
+
reference: "123456789", # your internal parcel id
|
90
|
+
weight: 1.25,
|
91
|
+
height: 21,
|
92
|
+
width: 27,
|
93
|
+
length: 35,
|
94
|
+
size: "large",
|
95
|
+
freetext_lines: [ # you can add up to 3 lines of freetext to be printed on the label
|
96
|
+
"Brians birthsday gift",
|
97
|
+
"Don't open this before your birthsday Brian",
|
98
|
+
"We look forward to seeing you soon Brian"
|
99
|
+
]
|
100
|
+
)
|
101
|
+
|
102
|
+
parcel_item = Smartsend::ParcelItem.new(
|
103
|
+
sku: "ABC123",
|
104
|
+
title: "ABC123",
|
105
|
+
quantity: 2,
|
106
|
+
unitweight: 1.25,
|
107
|
+
unitprice: 144.5,
|
108
|
+
currency: "DKK"
|
109
|
+
)
|
110
|
+
|
111
|
+
parcel.items = [parcel_item]
|
112
|
+
order.parcels = [parcel]
|
113
|
+
|
114
|
+
# send the order to Smartsend.io
|
115
|
+
order.save!
|
116
|
+
```
|
117
|
+
|
118
|
+
After saving an order it is updated with a url for the label pdf and tracking codes for each parcel.
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
order.label_url
|
122
|
+
=> 'https://www.pacsoftonline.com/...'
|
123
|
+
|
124
|
+
order.parcels.first.tracking_code
|
125
|
+
=> '1234...'
|
126
|
+
|
127
|
+
order.parcels.first.tracking_url
|
128
|
+
=> 'https://...'
|
129
|
+
```
|
130
|
+
|
131
|
+
### Creating orders in batch
|
132
|
+
|
133
|
+
You can create up to 10 orders in batch.
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
order1 = Smartsend::Order.new(...)
|
137
|
+
order2 = Smartsend::Order.new(...)
|
138
|
+
|
139
|
+
orders = Smartsend::Orders.new(order1, order2)
|
140
|
+
|
141
|
+
# send the orders to Smartsend.io
|
142
|
+
orders.save_all!
|
143
|
+
|
144
|
+
orders.first.label_url
|
145
|
+
=> 'https://www.pacsoftonline.com/...'
|
146
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
class Smartsend::Address
|
2
|
+
attr_accessor :id, :company ,:name1 ,:name2 ,:address1 ,:address2 ,:zip ,:city ,:country ,:phone ,:mail
|
3
|
+
|
4
|
+
def initialize(args={})
|
5
|
+
args.each do |k, v|
|
6
|
+
instance_variable_set "@#{k}", v
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def serialize
|
11
|
+
{
|
12
|
+
:company => @company,
|
13
|
+
:name1 => @name1,
|
14
|
+
:name2 => @name2,
|
15
|
+
:address1 => @address1,
|
16
|
+
:address2 => @address2,
|
17
|
+
:zip => @zip,
|
18
|
+
:city => @city,
|
19
|
+
:country => @country,
|
20
|
+
:sms => @phone,
|
21
|
+
:mail => @mail
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'http'
|
2
|
+
|
3
|
+
class Smartsend::Client
|
4
|
+
|
5
|
+
BASE_URL = 'http://smartsend-prod.apigee.net/v7/booking'.freeze
|
6
|
+
|
7
|
+
def post(path, params)
|
8
|
+
response = http.post("#{BASE_URL}/#{path}", json: params)
|
9
|
+
response = JSON.parse(response)
|
10
|
+
|
11
|
+
Rails.logger.debug(response) if defined?(Rails)
|
12
|
+
|
13
|
+
response
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def http
|
19
|
+
raise Smartsend::MissingConfigError, 'Missing api_key' if Smartsend.api_key.nil?
|
20
|
+
raise Smartsend::MissingConfigError, 'Missing email' if Smartsend.email.nil?
|
21
|
+
raise Smartsend::MissingConfigError, 'Missing license' if Smartsend.license.nil?
|
22
|
+
|
23
|
+
HTTP.headers(
|
24
|
+
apikey: Smartsend.api_key,
|
25
|
+
smartsendmail: Smartsend.email,
|
26
|
+
smartsendlicence: Smartsend.license,
|
27
|
+
cmssystem: Smartsend.cms_system,
|
28
|
+
cmsversion: Smartsend.cms_version,
|
29
|
+
appversion: Smartsend.app_version,
|
30
|
+
test: Smartsend.test?
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class Smartsend::Order
|
2
|
+
attr_accessor :id, :label_url, :order_number, :carrier, :method, :return, :total_price, :shipping_price, :currency,
|
3
|
+
:sender, :receiver, :agent, :parcels, :sms_notification, :email_notification
|
4
|
+
|
5
|
+
def initialize(args={})
|
6
|
+
args.each do |k, v|
|
7
|
+
instance_variable_set "@#{k}", v
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def save!
|
12
|
+
response = Smartsend::Client.new.post('order', self.serialize)
|
13
|
+
|
14
|
+
update_label_url_tracking_codes(response)
|
15
|
+
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
def update_label_url_tracking_codes(response)
|
20
|
+
@id = response['id']
|
21
|
+
@label_url = response['link']
|
22
|
+
|
23
|
+
response['parcels'].each do |parcel_response|
|
24
|
+
if parcel = @parcels.select { |x| x.reference.to_s == parcel_response['reference'].to_s }.first
|
25
|
+
parcel.tracking_code = parcel_response['tracecode']
|
26
|
+
parcel.tracking_url = parcel_response['tracelink']
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def serialize
|
33
|
+
{
|
34
|
+
orderno: @order_number,
|
35
|
+
carrier: @carrier,
|
36
|
+
method: @method,
|
37
|
+
return: @return,
|
38
|
+
totalprice: @total_price,
|
39
|
+
shipprice: @shipping_price,
|
40
|
+
currency: @currency,
|
41
|
+
test: false,
|
42
|
+
type: 'pdf',
|
43
|
+
sender: @sender&.serialize,
|
44
|
+
receiver: @receiver&.serialize,
|
45
|
+
agent: @agent&.serialize,
|
46
|
+
parcels: @parcels.to_a.map(&:serialize),
|
47
|
+
service: service.serialize
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def service
|
54
|
+
Smartsend::Service.new(phone: @sms_notification, email: @email_notification)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Smartsend::Orders
|
2
|
+
include Enumerable
|
3
|
+
|
4
|
+
def initialize(*orders)
|
5
|
+
@orders = orders
|
6
|
+
end
|
7
|
+
|
8
|
+
def save_all!
|
9
|
+
raise Smartsend::TooManyOrdersError, "You can save a maximum of 10 orders in batch" if count > 10
|
10
|
+
|
11
|
+
response = Smartsend::Client.new.post('orders', self.serialize)
|
12
|
+
|
13
|
+
update_label_url_tracking_codes(response)
|
14
|
+
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def update_label_url_tracking_codes(response)
|
19
|
+
response['orders'].each do |response_order|
|
20
|
+
if order = @orders.select { |x| x.order_number.to_s == response.orderno.to_s }.first
|
21
|
+
order.update_label_url_tracking_codes(response)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def serialize
|
27
|
+
@orders.map(&:serialize)
|
28
|
+
end
|
29
|
+
|
30
|
+
def each(&block)
|
31
|
+
@orders.each do |order|
|
32
|
+
block.call(order)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Smartsend::Parcel
|
2
|
+
attr_accessor :id, :tracking_code, :tracking_url, :shipped_at, :reference, :weight, :height, :width, :length, :size, :freetext_lines, :items
|
3
|
+
|
4
|
+
def initialize(args={})
|
5
|
+
args.each do |k, v|
|
6
|
+
instance_variable_set "@#{k}", v
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def serialize
|
11
|
+
params = {
|
12
|
+
:shipdate => @shipped_at,
|
13
|
+
:reference => @reference,
|
14
|
+
:weight => @weight,
|
15
|
+
:height => @height,
|
16
|
+
:width => @width,
|
17
|
+
:length => @length,
|
18
|
+
:size => @size,
|
19
|
+
:items => @items.to_a.map(&:serialize)
|
20
|
+
}
|
21
|
+
|
22
|
+
freetext_lines.to_a.each_with_index do |line, i|
|
23
|
+
params["freetext#{i.next}".to_sym] = line
|
24
|
+
end
|
25
|
+
|
26
|
+
params
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Smartsend::ParcelItem
|
2
|
+
attr_accessor :sku, :title, :quantity, :unit_weight, :unit_price, :currency
|
3
|
+
|
4
|
+
def initialize(args={})
|
5
|
+
args.each do |k, v|
|
6
|
+
instance_variable_set "@#{k}", v
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def serialize
|
11
|
+
{
|
12
|
+
:sku => @sku,
|
13
|
+
:title => @title,
|
14
|
+
:quantity => @quantity,
|
15
|
+
:unitweight => @unit_weight,
|
16
|
+
:unitprice => @unit_price,
|
17
|
+
:currency => @currency
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Smartsend::Service
|
2
|
+
attr_accessor :email, :phone
|
3
|
+
|
4
|
+
def initialize(args={})
|
5
|
+
args.each do |k, v|
|
6
|
+
instance_variable_set "@#{k}", v
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def serialize
|
11
|
+
{
|
12
|
+
"notemail": @email,
|
13
|
+
"notesms": @phone,
|
14
|
+
"prenote": true,
|
15
|
+
"prenote_from": "contact@smartsend.io",
|
16
|
+
"prenote_to": "contact@smartsend.io",
|
17
|
+
"prenote_message": "Your order is now on the way.",
|
18
|
+
"flex": "string",
|
19
|
+
"waybillid": "string"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'smartsend'
|
data/lib/smartsend.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
module Smartsend
|
2
|
+
|
3
|
+
@@api_key = nil
|
4
|
+
@@email = nil
|
5
|
+
@@license = nil
|
6
|
+
@@cms_system = nil
|
7
|
+
@@cms_version = nil
|
8
|
+
@@test_mode = false
|
9
|
+
|
10
|
+
def self.configure(args={})
|
11
|
+
args.each do |k, v|
|
12
|
+
class_variable_set "@@#{k}", v
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.api_key
|
17
|
+
@@api_key
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.email
|
21
|
+
@@email
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.license
|
25
|
+
@@license
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.cms_system
|
29
|
+
@@cms_system
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.cms_version
|
33
|
+
@@cms_version
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.app_version
|
37
|
+
Smartsend::VERSION
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.test_mode
|
41
|
+
@@test_mode
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.test?
|
45
|
+
test_mode
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
class TooManyOrdersError < StandardError
|
50
|
+
end
|
51
|
+
|
52
|
+
class MissingConfigError < StandardError
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
require 'smartsend/order'
|
59
|
+
require 'smartsend/orders'
|
60
|
+
require 'smartsend/address'
|
61
|
+
require 'smartsend/receiver'
|
62
|
+
require 'smartsend/sender'
|
63
|
+
require 'smartsend/agent'
|
64
|
+
require 'smartsend/service'
|
65
|
+
require 'smartsend/parcel'
|
66
|
+
require 'smartsend/parcel_item'
|
67
|
+
require 'smartsend/client'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "smartsend/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'smartsend-ruby'
|
7
|
+
s.version = Smartsend::VERSION
|
8
|
+
s.date = '2017-11-13'
|
9
|
+
s.summary = "Smartsend.io api client"
|
10
|
+
s.description = "Create orders in smartsend for smartsend"
|
11
|
+
s.authors = ["Aske Hansen"]
|
12
|
+
s.email = 'aske@deeco.dk'
|
13
|
+
s.homepage = 'https://github.com/askehansen/smartsend-ruby'
|
14
|
+
s.license = 'MIT'
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'http', '~> 2.2'
|
22
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'smartsend'
|
3
|
+
|
4
|
+
class AddressesTest < Minitest::Test
|
5
|
+
|
6
|
+
def test_sender_serializing
|
7
|
+
sender = Smartsend::Sender.new(address)
|
8
|
+
|
9
|
+
assert_equal({
|
10
|
+
"senderid": nil,
|
11
|
+
"company": "Smart Send",
|
12
|
+
"name1": "Henrik Hansen",
|
13
|
+
"name2": "C/O Vivian Hansen",
|
14
|
+
"address1": "Willemoesgade 42",
|
15
|
+
"address2": "3.th.",
|
16
|
+
"zip": 2100,
|
17
|
+
"city": "Copenhagen",
|
18
|
+
"country": "DK",
|
19
|
+
"sms": 12345678,
|
20
|
+
"mail": "contact@smartsend.io"
|
21
|
+
}, sender.serialize)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_reciver_serializing
|
25
|
+
receiver = Smartsend::Receiver.new(address)
|
26
|
+
|
27
|
+
assert_equal({
|
28
|
+
"reciverid": 1,
|
29
|
+
"company": "Smart Send",
|
30
|
+
"name1": "Henrik Hansen",
|
31
|
+
"name2": "C/O Vivian Hansen",
|
32
|
+
"address1": "Willemoesgade 42",
|
33
|
+
"address2": "3.th.",
|
34
|
+
"zip": 2100,
|
35
|
+
"city": "Copenhagen",
|
36
|
+
"country": "DK",
|
37
|
+
"sms": 12345678,
|
38
|
+
"mail": "contact@smartsend.io"
|
39
|
+
}, receiver.serialize)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_agent_serializing
|
43
|
+
receiver = Smartsend::Agent.new(address.merge(carrier: 'PDK'))
|
44
|
+
|
45
|
+
assert_equal({
|
46
|
+
"id": 1,
|
47
|
+
"agentno": 1,
|
48
|
+
"agenttype": "PDK",
|
49
|
+
"company": "Smart Send",
|
50
|
+
"name1": "Henrik Hansen",
|
51
|
+
"name2": "C/O Vivian Hansen",
|
52
|
+
"address1": "Willemoesgade 42",
|
53
|
+
"address2": "3.th.",
|
54
|
+
"zip": 2100,
|
55
|
+
"city": "Copenhagen",
|
56
|
+
"country": "DK",
|
57
|
+
"sms": 12345678,
|
58
|
+
"mail": "contact@smartsend.io"
|
59
|
+
}, receiver.serialize)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def address
|
65
|
+
{
|
66
|
+
:id => 1,
|
67
|
+
:company => "Smart Send",
|
68
|
+
:name1 => "Henrik Hansen",
|
69
|
+
:name2 => "C/O Vivian Hansen",
|
70
|
+
:address1 => "Willemoesgade 42",
|
71
|
+
:address2 => "3.th.",
|
72
|
+
:zip => 2100,
|
73
|
+
:city => "Copenhagen",
|
74
|
+
:country => "DK",
|
75
|
+
:phone => 12345678,
|
76
|
+
:mail => "contact@smartsend.io"
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
data/test/test_client.rb
ADDED
data/test/test_orders.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'smartsend'
|
3
|
+
|
4
|
+
class OrdersTest < Minitest::Test
|
5
|
+
|
6
|
+
def test_serializing
|
7
|
+
assert_equal(params, order.serialize)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_collection_serializing
|
11
|
+
orders = Smartsend::Orders.new(order, order)
|
12
|
+
|
13
|
+
assert_equal 2, orders.count
|
14
|
+
assert_equal [params, params], orders.serialize
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_too_many_orders_errors
|
18
|
+
assert_raises Smartsend::TooManyOrdersError do
|
19
|
+
Smartsend::Orders.new(*(0..10).to_a).save_all!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def params
|
26
|
+
{
|
27
|
+
orderno: 'AC12345789',
|
28
|
+
carrier: 'postdanmark',
|
29
|
+
method: 'private',
|
30
|
+
return: false,
|
31
|
+
totalprice: 199.75,
|
32
|
+
shipprice: 49,
|
33
|
+
currency: 'DKK',
|
34
|
+
test: false,
|
35
|
+
type: 'pdf',
|
36
|
+
sender: nil,
|
37
|
+
receiver: nil,
|
38
|
+
agent: nil,
|
39
|
+
parcels: [],
|
40
|
+
service: {:notemail=>"contact@smartsend.io", :notesms=>"12345678", :prenote=>true, :prenote_from=>"contact@smartsend.io", :prenote_to=>"contact@smartsend.io", :prenote_message=>"Your order is now on the way.", :flex=>"string", :waybillid=>"string"}
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def order
|
45
|
+
Smartsend::Order.new(
|
46
|
+
:order_number => "AC12345789",
|
47
|
+
:carrier => "postdanmark",
|
48
|
+
:method => "private",
|
49
|
+
:return => false,
|
50
|
+
:total_price => 199.75,
|
51
|
+
:shipping_price => 49,
|
52
|
+
:currency => "DKK",
|
53
|
+
:sms_notification => '12345678',
|
54
|
+
:email_notification => 'contact@smartsend.io',
|
55
|
+
sender: nil,
|
56
|
+
receiver: nil,
|
57
|
+
agent: nil,
|
58
|
+
parcels: []
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'smartsend'
|
3
|
+
|
4
|
+
class ParcelItemsTest < Minitest::Test
|
5
|
+
|
6
|
+
def test_serializing
|
7
|
+
parcel_item = Smartsend::ParcelItem.new(
|
8
|
+
sku: 'ABC123',
|
9
|
+
title: 'ABC123',
|
10
|
+
quantity: 2,
|
11
|
+
unit_weight: 1.25,
|
12
|
+
unit_price: 144.5,
|
13
|
+
currency: 'DKK'
|
14
|
+
)
|
15
|
+
|
16
|
+
assert_equal({
|
17
|
+
"sku": "ABC123",
|
18
|
+
"title": "ABC123",
|
19
|
+
"quantity": 2,
|
20
|
+
"unitweight": 1.25,
|
21
|
+
"unitprice": 144.5,
|
22
|
+
"currency": "DKK"
|
23
|
+
}, parcel_item.serialize)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'smartsend'
|
3
|
+
|
4
|
+
class ParcelsTest < Minitest::Test
|
5
|
+
|
6
|
+
def test_serializing
|
7
|
+
parcel = Smartsend::Parcel.new(
|
8
|
+
:shipped_at => Time.new(2017, 11, 30, 16, 46, 04, 0),
|
9
|
+
:reference => '123456789',
|
10
|
+
:weight => 1.25,
|
11
|
+
:height => 21,
|
12
|
+
:width => 27,
|
13
|
+
:length => 35,
|
14
|
+
:size => "large",
|
15
|
+
:items => [],
|
16
|
+
:freetext_lines => [
|
17
|
+
"Brians birthsday gift",
|
18
|
+
"Don't open this before your birthsday Brian",
|
19
|
+
"We look forward to seeing you soon Brian"
|
20
|
+
]
|
21
|
+
)
|
22
|
+
|
23
|
+
assert_equal({
|
24
|
+
"shipdate": Time.new(2017, 11, 30, 16, 46, 04, 0),
|
25
|
+
"reference": "123456789",
|
26
|
+
"weight": 1.25,
|
27
|
+
"height": 21,
|
28
|
+
"width": 27,
|
29
|
+
"length": 35,
|
30
|
+
"size": "large",
|
31
|
+
"freetext1": "Brians birthsday gift",
|
32
|
+
"freetext2": "Don't open this before your birthsday Brian",
|
33
|
+
"freetext3": "We look forward to seeing you soon Brian",
|
34
|
+
"items": []
|
35
|
+
}, parcel.serialize)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'smartsend'
|
3
|
+
|
4
|
+
class SerivceTest < Minitest::Test
|
5
|
+
|
6
|
+
def test_serializing
|
7
|
+
service = Smartsend::Service.new(email: 'contact@smartsend.io', phone: '12345678')
|
8
|
+
|
9
|
+
assert_equal({
|
10
|
+
"notemail": "contact@smartsend.io",
|
11
|
+
"notesms": "12345678",
|
12
|
+
"prenote": true,
|
13
|
+
"prenote_from": "contact@smartsend.io",
|
14
|
+
"prenote_to": "contact@smartsend.io",
|
15
|
+
"prenote_message": "Your order is now on the way.",
|
16
|
+
"flex": "string",
|
17
|
+
"waybillid": "string"
|
18
|
+
}, service.serialize)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'smartsend'
|
3
|
+
|
4
|
+
class SmartsendTest < Minitest::Test
|
5
|
+
|
6
|
+
def test_configuration
|
7
|
+
Smartsend.configure(
|
8
|
+
api_key: 'test_key',
|
9
|
+
email: 'test@test.com',
|
10
|
+
license: 'test_license'
|
11
|
+
)
|
12
|
+
|
13
|
+
assert_equal Smartsend.api_key, 'test_key'
|
14
|
+
assert_equal Smartsend.email, 'test@test.com'
|
15
|
+
assert_equal Smartsend.license, 'test_license'
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: smartsend-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aske Hansen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-11-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: http
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.2'
|
27
|
+
description: Create orders in smartsend for smartsend
|
28
|
+
email: aske@deeco.dk
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- ".gitignore"
|
34
|
+
- Gemfile
|
35
|
+
- README.md
|
36
|
+
- Rakefile
|
37
|
+
- lib/smartsend-ruby.rb
|
38
|
+
- lib/smartsend.rb
|
39
|
+
- lib/smartsend/address.rb
|
40
|
+
- lib/smartsend/agent.rb
|
41
|
+
- lib/smartsend/client.rb
|
42
|
+
- lib/smartsend/order.rb
|
43
|
+
- lib/smartsend/orders.rb
|
44
|
+
- lib/smartsend/parcel.rb
|
45
|
+
- lib/smartsend/parcel_item.rb
|
46
|
+
- lib/smartsend/receiver.rb
|
47
|
+
- lib/smartsend/sender.rb
|
48
|
+
- lib/smartsend/service.rb
|
49
|
+
- lib/smartsend/version.rb
|
50
|
+
- smartsend-ruby.gemspec
|
51
|
+
- test/test_addresses.rb
|
52
|
+
- test/test_client.rb
|
53
|
+
- test/test_orders.rb
|
54
|
+
- test/test_parcel_items.rb
|
55
|
+
- test/test_parcels.rb
|
56
|
+
- test/test_service.rb
|
57
|
+
- test/test_smartsend.rb
|
58
|
+
homepage: https://github.com/askehansen/smartsend-ruby
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.5.2
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Smartsend.io api client
|
82
|
+
test_files:
|
83
|
+
- test/test_addresses.rb
|
84
|
+
- test/test_client.rb
|
85
|
+
- test/test_orders.rb
|
86
|
+
- test/test_parcel_items.rb
|
87
|
+
- test/test_parcels.rb
|
88
|
+
- test/test_service.rb
|
89
|
+
- test/test_smartsend.rb
|