smartsend-ruby 0.1.1 → 0.2.0

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.
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