smartsend-ruby 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/smartsend.rb CHANGED
@@ -1,11 +1,6 @@
1
1
  module Smartsend
2
2
 
3
- @@api_key = nil
4
- @@email = nil
5
- @@license = nil
6
- @@cms_system = nil
7
- @@cms_version = nil
8
- @@test_mode = false
3
+ @@api_token = nil
9
4
 
10
5
  def self.configure(args={})
11
6
  args.each do |k, v|
@@ -14,62 +9,36 @@ module Smartsend
14
9
  end
15
10
 
16
11
  def self.account
17
- Smartsend::Account.new(email: @@email, license: @@license)
12
+ Smartsend::Account.new(api_token: @@api_token)
18
13
  end
19
14
 
20
- def self.api_key
21
- @@api_key
15
+ def self.api_token
16
+ @@api_token
22
17
  end
23
18
 
24
- def self.email
25
- @@email
26
- end
27
-
28
- def self.license
29
- @@license
30
- end
31
-
32
- def self.cms_system
33
- @@cms_system
34
- end
35
-
36
- def self.cms_version
37
- @@cms_version
38
- end
39
-
40
- def self.app_version
41
- Smartsend::VERSION
42
- end
43
-
44
- def self.test_mode
45
- @@test_mode
46
- end
47
-
48
- def self.test?
49
- test_mode
19
+ class MissingConfigError < StandardError
50
20
  end
51
21
 
52
-
53
- class TooManyOrdersError < StandardError
22
+ class AuthorizationError < StandardError
54
23
  end
55
24
 
56
- class MissingConfigError < StandardError
25
+ class UnknownError < StandardError
57
26
  end
58
27
 
59
- class AuthorizationError < StandardError
28
+ class NotFoundError < StandardError
60
29
  end
61
30
 
62
31
  end
63
32
 
64
- require_relative 'smartsend/order'
65
- require_relative 'smartsend/orders'
33
+ require_relative 'smartsend/shipment'
66
34
  require_relative 'smartsend/address'
67
35
  require_relative 'smartsend/receiver'
68
36
  require_relative 'smartsend/sender'
69
37
  require_relative 'smartsend/agent'
70
- require_relative 'smartsend/service'
38
+ require_relative 'smartsend/services'
71
39
  require_relative 'smartsend/parcel'
72
40
  require_relative 'smartsend/parcel_item'
73
41
  require_relative 'smartsend/client'
74
42
  require_relative 'smartsend/account'
75
43
  require_relative 'smartsend/version'
44
+ require_relative 'smartsend/request_error'
@@ -0,0 +1,199 @@
1
+ require 'minitest/autorun'
2
+ require 'smartsend'
3
+ require 'date'
4
+
5
+ class ShipmentTest < Minitest::Test
6
+
7
+ def test_successful_label
8
+ Smartsend.configure(
9
+ api_token: 'test_token',
10
+ )
11
+
12
+ shipment = Smartsend::Shipment.new(
13
+ internal_id: "123123123", # your internal order id
14
+ internal_reference: "AC12345789", # your order number
15
+ shipping_carrier: "postnord", # postnord/gls/bring/dao
16
+ shipping_method: "agent",
17
+ shipping_date: Date.today.strftime('%Y-%m-%d'),
18
+ currency: "DKK"
19
+ )
20
+
21
+ shipment.services = Smartsend::Services.new(
22
+ email_notification: 'contact@smartsend.io'
23
+ )
24
+
25
+ # set the receiver of the shipment
26
+ shipment.receiver = Smartsend::Receiver.new(
27
+ internal_id: "123456", # your internal customer id
28
+ internal_reference: "123456",
29
+ company: "Smart Send",
30
+ name_line1: "Henrik Hansen",
31
+ name_line2: "C/O Vivian Hansen",
32
+ address_line1: "Willemoesgade 42",
33
+ address_line2: "3.th.",
34
+ postal_code: "2100",
35
+ city: "Copenhagen",
36
+ country: "DK",
37
+ sms: "12345678",
38
+ email: "contact@smartsend.io"
39
+ )
40
+
41
+ # optionally set the sender of the shipment
42
+ shipment.sender = Smartsend::Sender.new(
43
+ internal_id: "123456",
44
+ internal_reference: "123456",
45
+ company: "Smart Send",
46
+ name_line1: "Henrik Hansen",
47
+ name_line2: "C/O Vivian Hansen",
48
+ address_line1: "Willemoesgade 42",
49
+ address_line2: "3.th.",
50
+ postal_code: "2100",
51
+ city: "Copenhagen",
52
+ country: "DK",
53
+ sms: "12345678",
54
+ email: "contact@smartsend.io"
55
+ )
56
+
57
+ # # optionally ship to a droppoint by setting an agent
58
+ # shipment.agent = Smartsend::Agent.new(
59
+ # internal_id: "123456",
60
+ # internal_reference: "123457",
61
+ # agent_no: "2103", # droppoint id
62
+ # company: "Smart Send",
63
+ # name_line1: "Henrik Hansen",
64
+ # name_line2: "C/O Vivian Hansen",
65
+ # address_line1: "Willemoesgade 42",
66
+ # address_line2: "3.th.",
67
+ # postal_code: "2100",
68
+ # city: "Copenhagen",
69
+ # country: "DK"
70
+ # )
71
+
72
+ # add one or more parcels/fulfillments to the shipment
73
+ parcel = Smartsend::Parcel.new(
74
+ internal_id: "123456789", # your internal parcel id
75
+ internal_reference: "123456789",
76
+ weight: 1.25,
77
+ height: 21,
78
+ width: 27,
79
+ length: 35,
80
+ freetext1: "Brians birthday gift",
81
+ freetext2: "Don't open this before your birthday Brian",
82
+ freetext3: "We look forward to seeing you soon Brian",
83
+ )
84
+
85
+ # add items to the parcel
86
+ parcel_item = Smartsend::ParcelItem.new(
87
+ internal_id: "ABC123",
88
+ internal_reference: "ABC123",
89
+ sku: "ABC123",
90
+ name: "Product name",
91
+ quantity: 2,
92
+ unit_weight: 1.25
93
+ )
94
+
95
+ parcel.items << parcel_item
96
+ shipment.parcels << parcel
97
+
98
+ # send the shipment to Smartsend.io
99
+ shipment.save!
100
+
101
+ assert shipment.success?
102
+ assert shipment.label_url
103
+ end
104
+
105
+ def test_invalid_request
106
+ Smartsend.configure(
107
+ api_token: 'test_token',
108
+ )
109
+
110
+ shipment = Smartsend::Shipment.new(
111
+ internal_id: "123123123", # your internal order id
112
+ internal_reference: "AC12345789", # your order number
113
+ # shipping_carrier: "postnord", # postnord/gls/bring/dao
114
+ # shipping_method: "agent",
115
+ shipping_date: Date.today.strftime('%Y-%m-%d'),
116
+ currency: 'invalid'
117
+ )
118
+
119
+ # set the receiver of the shipment
120
+ shipment.receiver = Smartsend::Receiver.new(
121
+ internal_id: "123456", # your internal customer id
122
+ internal_reference: "123456",
123
+ company: "Smart Send",
124
+ name_line1: "Henrik Hansen",
125
+ name_line2: "C/O Vivian Hansen",
126
+ address_line1: "Willemoesgade 42",
127
+ address_line2: "3.th.",
128
+ postal_code: "2100",
129
+ city: "Copenhagen",
130
+ country: "invalid",
131
+ sms: "12345678",
132
+ email: "contact@smartsend.io"
133
+ )
134
+
135
+ # optionally set the sender of the shipment
136
+ shipment.sender = Smartsend::Sender.new(
137
+ internal_id: "123456",
138
+ internal_reference: "123456",
139
+ company: "Smart Send",
140
+ name_line1: "Henrik Hansen",
141
+ name_line2: "C/O Vivian Hansen",
142
+ address_line1: "Willemoesgade 42",
143
+ address_line2: "3.th.",
144
+ postal_code: "2100",
145
+ city: "Copenhagen",
146
+ country: "DK",
147
+ sms: "12345678",
148
+ email: "contact@smartsend.io"
149
+ )
150
+
151
+ # optionally ship to a droppoint by setting an agent
152
+ shipment.agent = Smartsend::Agent.new(
153
+ internal_id: "123456",
154
+ internal_reference: "123457",
155
+ agent_no: "2103", # droppoint id
156
+ company: "Smart Send",
157
+ name_line1: "Henrik Hansen",
158
+ name_line2: "C/O Vivian Hansen",
159
+ address_line1: "Willemoesgade 42",
160
+ address_line2: "3.th.",
161
+ postal_code: "2100",
162
+ city: "Copenhagen",
163
+ country: "invalid"
164
+ )
165
+
166
+ # add one or more parcels/fulfillments to the shipment
167
+ parcel = Smartsend::Parcel.new(
168
+ internal_id: "123456789", # your internal parcel id
169
+ internal_reference: "123456789",
170
+ weight: 1.25,
171
+ height: 21,
172
+ width: 27,
173
+ length: 35,
174
+ freetext1: "Brians birthday gift",
175
+ freetext2: "Don't open this before your birthday Brian",
176
+ freetext3: "We look forward to seeing you soon Brian",
177
+ )
178
+
179
+ # add items to the parcel
180
+ parcel_item = Smartsend::ParcelItem.new(
181
+ internal_id: "ABC123",
182
+ internal_reference: "ABC123",
183
+ sku: "ABC123",
184
+ name: "Product name",
185
+ quantity: 2,
186
+ unit_weight: 1.25
187
+ )
188
+
189
+ parcel.items << parcel_item
190
+ shipment.parcels << parcel
191
+
192
+ # send the shipment to Smartsend.io
193
+ shipment.save!
194
+
195
+ assert !shipment.success?
196
+ assert_equal 5, shipment.error.errors.count
197
+ end
198
+
199
+ end
@@ -5,14 +5,10 @@ class SmartsendTest < Minitest::Test
5
5
 
6
6
  def test_configuration
7
7
  Smartsend.configure(
8
- api_key: 'test_key',
9
- email: 'test@test.com',
10
- license: 'test_license'
8
+ api_token: 'test_token',
11
9
  )
12
10
 
13
- assert_equal Smartsend.api_key, 'test_key'
14
- assert_equal Smartsend.email, 'test@test.com'
15
- assert_equal Smartsend.license, 'test_license'
11
+ assert_equal Smartsend.api_token, 'test_token'
16
12
  end
17
13
 
18
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartsend-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aske Hansen
@@ -42,21 +42,16 @@ files:
42
42
  - lib/smartsend/address.rb
43
43
  - lib/smartsend/agent.rb
44
44
  - lib/smartsend/client.rb
45
- - lib/smartsend/order.rb
46
- - lib/smartsend/orders.rb
47
45
  - lib/smartsend/parcel.rb
48
46
  - lib/smartsend/parcel_item.rb
49
47
  - lib/smartsend/receiver.rb
48
+ - lib/smartsend/request_error.rb
50
49
  - lib/smartsend/sender.rb
51
- - lib/smartsend/service.rb
50
+ - lib/smartsend/services.rb
51
+ - lib/smartsend/shipment.rb
52
52
  - lib/smartsend/version.rb
53
53
  - smartsend-ruby.gemspec
54
- - test/test_addresses.rb
55
- - test/test_client.rb
56
- - test/test_orders.rb
57
- - test/test_parcel_items.rb
58
- - test/test_parcels.rb
59
- - test/test_service.rb
54
+ - test/test_shipment.rb
60
55
  - test/test_smartsend.rb
61
56
  homepage: https://github.com/smartsendio/smartsend-ruby
62
57
  licenses:
@@ -78,15 +73,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
73
  version: '0'
79
74
  requirements: []
80
75
  rubyforge_project:
81
- rubygems_version: 2.6.11
76
+ rubygems_version: 2.7.3
82
77
  signing_key:
83
78
  specification_version: 4
84
79
  summary: Smartsend.io api client
85
80
  test_files:
86
- - test/test_addresses.rb
87
- - test/test_client.rb
88
- - test/test_orders.rb
89
- - test/test_parcel_items.rb
90
- - test/test_parcels.rb
91
- - test/test_service.rb
81
+ - test/test_shipment.rb
92
82
  - test/test_smartsend.rb
@@ -1,62 +0,0 @@
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
-
10
- @parcels ||= []
11
- end
12
-
13
- def save!(account: nil)
14
- response = Smartsend::Client.new(account).post('booking/order', self.serialize)
15
-
16
- if response.success?
17
- update_label_url_tracking_codes(response)
18
- self
19
- else
20
- response
21
- end
22
- end
23
-
24
- def update_label_url_tracking_codes(response)
25
- @label_url = response['pdflink']
26
-
27
- response['parcels'].each do |parcel_response|
28
- if parcel = @parcels.select { |x| x.reference.to_s == parcel_response['reference'].to_s }.first
29
- parcel.tracking_code = parcel_response['tracecode']
30
- parcel.tracking_url = parcel_response['tracelink']
31
- end
32
- end
33
- end
34
-
35
-
36
- def serialize
37
- {
38
- orderno: @order_number,
39
- reference: @id,
40
- carrier: @carrier,
41
- method: @method,
42
- return: @return,
43
- totalprice: @total_price,
44
- shipprice: @shipping_price,
45
- currency: @currency,
46
- test: false,
47
- type: 'pdf',
48
- sender: @sender&.serialize,
49
- receiver: @receiver&.serialize,
50
- agent: @agent&.serialize,
51
- parcels: @parcels.map(&:serialize),
52
- service: service.serialize
53
- }
54
- end
55
-
56
- private
57
-
58
- def service
59
- Smartsend::Service.new(phone: @sms_notification, email: @email_notification)
60
- end
61
-
62
- end
@@ -1,43 +0,0 @@
1
- class Smartsend::Orders
2
- include Enumerable
3
- attr_accessor :labels_url
4
-
5
- def initialize(*orders)
6
- @orders = orders
7
- end
8
-
9
- def save_all!(account: nil)
10
- raise Smartsend::TooManyOrdersError, "You can save a maximum of 10 orders in batch" if count > 10
11
-
12
- response = Smartsend::Client.new(account).post('booking/orders', 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
- @labels_url = response['combine_pdf']
21
-
22
- response['orders'].each do |response_order|
23
- if order = @orders.select { |x| x.id.to_s == response_order['reference'].to_s }.first
24
- order.update_label_url_tracking_codes(response_order)
25
- end
26
- end
27
- end
28
-
29
- def <<(order)
30
- @orders << order
31
- end
32
-
33
- def serialize
34
- @orders.map(&:serialize)
35
- end
36
-
37
- def each(&block)
38
- @orders.each do |order|
39
- block.call(order)
40
- end
41
- end
42
-
43
- end
@@ -1,17 +0,0 @@
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
- }
15
- end
16
-
17
- end
@@ -1,80 +0,0 @@
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": 1,
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
- "receiverid": 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(type: '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 DELETED
@@ -1,9 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'smartsend'
3
-
4
- class ClientTest < Minitest::Test
5
-
6
- def test_headers
7
- end
8
-
9
- end
data/test/test_orders.rb DELETED
@@ -1,64 +0,0 @@
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
- reference: '1234567',
29
- carrier: 'postdanmark',
30
- method: 'private',
31
- return: false,
32
- totalprice: 199.75,
33
- shipprice: 49,
34
- currency: 'DKK',
35
- test: false,
36
- type: 'pdf',
37
- sender: nil,
38
- receiver: nil,
39
- agent: nil,
40
- parcels: [],
41
- service: { :notemail=>"contact@smartsend.io", :notesms=>"12345678" }
42
- }
43
- end
44
-
45
- def order
46
- Smartsend::Order.new(
47
- :id => "1234567",
48
- :order_number => "AC12345789",
49
- :carrier => "postdanmark",
50
- :method => "private",
51
- :return => false,
52
- :total_price => 199.75,
53
- :shipping_price => 49,
54
- :currency => "DKK",
55
- :sms_notification => '12345678',
56
- :email_notification => 'contact@smartsend.io',
57
- sender: nil,
58
- receiver: nil,
59
- agent: nil,
60
- parcels: []
61
- )
62
- end
63
-
64
- end
@@ -1,26 +0,0 @@
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