bring 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +14 -1
- data/bring.gemspec +4 -1
- data/lib/bring/cli.rb +59 -0
- data/lib/bring/postal_code.rb +2 -1
- data/lib/bring/tracking.rb +166 -0
- data/lib/bring/version.rb +1 -1
- data/spec/bring/cli_spec.rb +116 -3
- data/spec/bring/postal_code_spec.rb +9 -4
- data/spec/bring/tracking_spec.rb +345 -0
- data/spec/spec_helper.rb +2 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23a8f32332ed5d7b2ce6ac9721462793191ff4e2
|
4
|
+
data.tar.gz: acb517dad6c7302cee55eb68893a8fac6dba1e3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 307300495e88e1c9e97751fcd50adf57a524a21d43066fb6089af12d19d61c34fdf7e1462d39329f8a9115234b5ce44650830380af3e03333da0164eacfc30ec
|
7
|
+
data.tar.gz: 57fe9ef6963eff79bdc1f48eb6016014efb812034d13c2607c7c08b8f523a035d9c74f97b38e8ab27c39be41e904221224b5739c240b0ea3adf13ece0a095c69
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
A simple ruby library for communicating with the Bring's APIs (see:
|
6
6
|
[developer.bring.com](http://developer.bring.com)).
|
7
7
|
|
8
|
-
*For now only the Postal Code API is supported.*
|
8
|
+
*For now only the Postal Code and Tracking API is supported.*
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
|
@@ -28,6 +28,19 @@ From the commandline:
|
|
28
28
|
$ bring postal_code 0190 no
|
29
29
|
OSLO
|
30
30
|
|
31
|
+
$ bring tracking TESTPACKAGE-EDI
|
32
|
+
Shipment Number: SHIPMENTNUMBER
|
33
|
+
Total Weight: 16.5 kg
|
34
|
+
Total Volume: 45.2 dm3
|
35
|
+
Number of Packages: 1
|
36
|
+
|
37
|
+
Package Number: TESTPACKAGEEDI
|
38
|
+
Measurements: 41x38x29 cm (LxWxH)
|
39
|
+
|
40
|
+
Status: PRE_NOTIFIED
|
41
|
+
Ingen sending er mottatt ennå, kun melding om dette
|
42
|
+
2013-10-06 12:44
|
43
|
+
|
31
44
|
Or in Ruby:
|
32
45
|
```ruby
|
33
46
|
require 'bring/postal_code'
|
data/bring.gemspec
CHANGED
@@ -28,5 +28,8 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_dependency "faraday", "~> 0.8.0"
|
29
29
|
spec.add_dependency "faraday_middleware"
|
30
30
|
|
31
|
-
|
31
|
+
if RUBY_VERSION.start_with?('1.8')
|
32
|
+
spec.add_dependency "json"
|
33
|
+
spec.add_dependency "system_timer"
|
34
|
+
end
|
32
35
|
end
|
data/lib/bring/cli.rb
CHANGED
@@ -8,5 +8,64 @@ module Bring
|
|
8
8
|
require 'bring/postal_code'
|
9
9
|
puts PostalCode.new(pnr, :country => options[:country]).city
|
10
10
|
end
|
11
|
+
|
12
|
+
desc 'tracking TRACKING_NUMBER', 'get tracking data from TRACKING_NUMBER'
|
13
|
+
option :full, :type => :boolean
|
14
|
+
option :color, :type => :boolean, :default => true
|
15
|
+
def tracking(tracking_number)
|
16
|
+
require 'bring/tracking'
|
17
|
+
begin
|
18
|
+
tracking = Tracking.new(tracking_number)
|
19
|
+
|
20
|
+
tracking.consignments.each do |consignment|
|
21
|
+
say "Shipment Number: #{consignment.consignment_id}", :white
|
22
|
+
say "Total Weight: #{consignment.total_weight_in_kgs} kg"
|
23
|
+
say "Total Volume: #{consignment.total_volume_in_dm3} dm3"
|
24
|
+
say "Number of Packages: #{consignment.packages.count}"
|
25
|
+
|
26
|
+
consignment.packages.each do |package|
|
27
|
+
say ""
|
28
|
+
say "Package Number: #{package.package_number}", :white
|
29
|
+
|
30
|
+
if package.sender_name
|
31
|
+
say "Sender: #{package.sender_name}"
|
32
|
+
end
|
33
|
+
|
34
|
+
if package.recipient_address
|
35
|
+
say "Recipient: #{package.recipient_address.to_s}"
|
36
|
+
end
|
37
|
+
|
38
|
+
sizes =
|
39
|
+
[package.length_in_cm, package.width_in_cm, package.height_in_cm]
|
40
|
+
say "Measurements: #{sizes.join('x')} cm (LxWxH)"
|
41
|
+
|
42
|
+
if package.date_of_return
|
43
|
+
say "Last day for retrieval: #{package.date_of_return}"
|
44
|
+
end
|
45
|
+
|
46
|
+
package.events.each_with_index do |event, index|
|
47
|
+
color = event.color if options[:color]
|
48
|
+
say ""
|
49
|
+
say "Status: #{event.status}", color
|
50
|
+
say event.description
|
51
|
+
|
52
|
+
say "#{event.date.strftime('%Y-%m-%d %H:%M')}", nil, false
|
53
|
+
if event.postal_code?
|
54
|
+
say ", #{event.postal_code} #{event.city}", nil, false
|
55
|
+
end
|
56
|
+
say ''
|
57
|
+
|
58
|
+
break unless options[:full] || index > 0
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
rescue Bring::Tracking::Error => exception
|
63
|
+
raise Thor::Error, exception.message
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.exit_on_failure?
|
68
|
+
true
|
69
|
+
end
|
11
70
|
end
|
12
71
|
end
|
data/lib/bring/postal_code.rb
CHANGED
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'bring/base_request'
|
3
|
+
|
4
|
+
module Bring
|
5
|
+
class Tracking < BaseRequest
|
6
|
+
attr_reader :tracking_number
|
7
|
+
|
8
|
+
def initialize(tracking_number)
|
9
|
+
@tracking_number = tracking_number
|
10
|
+
end
|
11
|
+
|
12
|
+
class Error < StandardError
|
13
|
+
end
|
14
|
+
|
15
|
+
class ApiClass
|
16
|
+
def initialize(data)
|
17
|
+
@data = data
|
18
|
+
raise(Error, error_message) if has_errors?
|
19
|
+
end
|
20
|
+
|
21
|
+
def has_errors?
|
22
|
+
!data['error'].nil?
|
23
|
+
end
|
24
|
+
|
25
|
+
def error_message
|
26
|
+
"#{data['error']['message']} (#{data['error']['code']})"
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def self.attribute(name)
|
31
|
+
define_method name do
|
32
|
+
data[camelize(name)]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def data
|
38
|
+
@data
|
39
|
+
end
|
40
|
+
|
41
|
+
def camelize(string)
|
42
|
+
string.to_s.split('_').each_with_index { |word, index|
|
43
|
+
word.capitalize! unless index == 0
|
44
|
+
}.join
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Address < ApiClass
|
49
|
+
attribute :address_line_1
|
50
|
+
attribute :address_line_2
|
51
|
+
attribute :postal_code
|
52
|
+
attribute :city
|
53
|
+
attribute :country_code
|
54
|
+
attribute :country
|
55
|
+
|
56
|
+
def to_s
|
57
|
+
address =
|
58
|
+
[ address_line_1, address_line_2, "#{postal_code} #{city}", country ]
|
59
|
+
address.delete_if { |line| line.nil? || line == '' }
|
60
|
+
address.join(', ')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class Definition < ApiClass
|
65
|
+
attribute :term
|
66
|
+
attribute :explanation
|
67
|
+
end
|
68
|
+
|
69
|
+
class Event < ApiClass
|
70
|
+
attribute :description
|
71
|
+
attribute :status
|
72
|
+
attribute :unit_id
|
73
|
+
attribute :unit_information_url
|
74
|
+
attribute :unit_type
|
75
|
+
attribute :postal_code
|
76
|
+
attribute :city
|
77
|
+
attribute :country_code
|
78
|
+
attribute :country
|
79
|
+
attribute :date_iso
|
80
|
+
attribute :display_date
|
81
|
+
attribute :display_time
|
82
|
+
attribute :consignment_event
|
83
|
+
|
84
|
+
def postal_code?
|
85
|
+
!(postal_code.nil? or postal_code.empty?)
|
86
|
+
end
|
87
|
+
|
88
|
+
def date
|
89
|
+
@date ||= DateTime.strptime(date_iso)
|
90
|
+
end
|
91
|
+
|
92
|
+
def definitions
|
93
|
+
return [] if data['definitions'].nil?
|
94
|
+
data['definitions'].map { |attr| Definition.new attr }
|
95
|
+
end
|
96
|
+
|
97
|
+
def color
|
98
|
+
case status
|
99
|
+
when 'READY_FOR_PICKUP' then :yellow
|
100
|
+
when 'DELIVERED' then :green
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class Package < ApiClass
|
106
|
+
attribute :status_description
|
107
|
+
attribute :descriptions
|
108
|
+
attribute :package_number
|
109
|
+
attribute :previous_package_number
|
110
|
+
attribute :product_name
|
111
|
+
attribute :product_code
|
112
|
+
attribute :brand
|
113
|
+
attribute :length_in_cm
|
114
|
+
attribute :width_in_cm
|
115
|
+
attribute :height_in_cm
|
116
|
+
attribute :volume_in_dm3
|
117
|
+
attribute :weight_in_kgs
|
118
|
+
attribute :pickup_code
|
119
|
+
attribute :sender_name
|
120
|
+
|
121
|
+
def date_of_return
|
122
|
+
return if data['dateOfReturn'].nil?
|
123
|
+
@date_of_return ||= Date.strptime(data['dateOfReturn'], '%d.%m.%Y')
|
124
|
+
end
|
125
|
+
|
126
|
+
def recipient_address
|
127
|
+
return unless data['recipientAddress'].is_a?(Hash)
|
128
|
+
@address ||= Address.new(data['recipientAddress'])
|
129
|
+
end
|
130
|
+
|
131
|
+
def events
|
132
|
+
@events ||= data['eventSet'].map { |attr| Event.new(attr) }
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
class Consignment < ApiClass
|
137
|
+
attribute :consignment_id
|
138
|
+
attribute :previous_consignment_id
|
139
|
+
attribute :total_weight_in_kgs
|
140
|
+
attribute :total_volume_in_dm3
|
141
|
+
|
142
|
+
def packages
|
143
|
+
return [] if data['packageSet'].nil?
|
144
|
+
@packages ||=
|
145
|
+
data['packageSet'].map { |attr| Package.new attr }
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def consignments
|
150
|
+
return [] if data['consignmentSet'].nil?
|
151
|
+
@consignments ||=
|
152
|
+
data['consignmentSet'].map { |attr| Consignment.new attr }
|
153
|
+
end
|
154
|
+
|
155
|
+
private
|
156
|
+
def data
|
157
|
+
@data ||= connection.get do |req|
|
158
|
+
req.params['q'] = tracking_number
|
159
|
+
end.body
|
160
|
+
end
|
161
|
+
|
162
|
+
def api_url
|
163
|
+
'http://sporing.bring.no/sporing.json'.freeze
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
data/lib/bring/version.rb
CHANGED
data/spec/bring/cli_spec.rb
CHANGED
@@ -1,19 +1,132 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
require 'bring/cli'
|
3
4
|
|
4
|
-
describe Bring::CLI
|
5
|
+
describe Bring::CLI do
|
5
6
|
def invoke!(*args)
|
6
7
|
capture(:stdout) { Bring::CLI.start(args) }
|
7
8
|
end
|
8
9
|
|
9
|
-
describe 'postal_code' do
|
10
|
+
describe 'postal_code', :vcr => { :cassette_name => 'postal_code' } do
|
10
11
|
it 'displays city for pnr' do
|
11
12
|
expect(invoke! 'postal_code', '0190').to eq "OSLO\n"
|
12
13
|
end
|
13
14
|
|
14
|
-
it 'takes a country' do
|
15
|
+
it 'takes a country', :vcr => { :cassette_name => 'postal_code_se' } do
|
15
16
|
arguments = %w[postal_code 12000 --country se]
|
16
17
|
expect(invoke!(*arguments)).to eq "Stockholm\n"
|
17
18
|
end
|
18
19
|
end
|
20
|
+
|
21
|
+
describe 'tracking' do
|
22
|
+
use_vcr_cassette 'tracking_ready_for_pickup'
|
23
|
+
let(:output) { invoke!('tracking', 'TESTPACKAGE-AT-PICKUPPOINT') }
|
24
|
+
|
25
|
+
it 'displays shipment number' do
|
26
|
+
expect(output).to include 'Shipment Number: SHIPMENTNUMBER'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'displays sender' do
|
30
|
+
expect(output).to include 'Sender: POSTEN NORGE AS'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'displays recipient' do
|
34
|
+
expect(output).to include 'Recipient: 1407 VINTERBRO'
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'displays packing number' do
|
38
|
+
expect(output).to include 'Package Number: TESTPACKAGEATPICKUPPOINT'
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'displays package size' do
|
42
|
+
expect(output).to include 'Measurements: 41x38x29 cm (LxWxH)'
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'displays package weight' do
|
46
|
+
expect(output).to include 'Weight: 16.5 kg'
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'displays number of packages' do
|
50
|
+
expect(output).to include 'Number of Packages: 1'
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'only displays most recent status' do
|
54
|
+
expect(output).to include 'Status: READY_FOR_PICKUP'
|
55
|
+
expect(output).not_to include 'Status: IN_TRANSIT'
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'displays date and location' do
|
59
|
+
expect(output).to include '2010-10-01 08:30, 2341 LØTEN'
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'displays last day for retrieval' do
|
63
|
+
expect(output).to include 'Last day for retrieval: 2011-12-01'
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'with --full' do
|
67
|
+
let(:output) { invoke!('tracking', 'TESTPACKAGE-AT-PICKUPPOINT', '--full') }
|
68
|
+
|
69
|
+
it 'displays all events' do
|
70
|
+
expect(output).to include 'Status: READY_FOR_PICKUP'
|
71
|
+
expect(output).to include 'Status: IN_TRANSIT'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'with status PRE_NOTIFIED' do
|
76
|
+
use_vcr_cassette 'tracking_pre_notified'
|
77
|
+
let(:output) { invoke!('tracking', 'TESTPACKAGE-EDI') }
|
78
|
+
|
79
|
+
it 'displays status' do
|
80
|
+
expect(output).to include %q{
|
81
|
+
Status: PRE_NOTIFIED
|
82
|
+
Ingen sending er mottatt ennå, kun melding om dette
|
83
|
+
2013-10-06 12:44
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'with status READY_FOR_PICKUP' do
|
89
|
+
let(:output) { invoke!('tracking', 'TESTPACKAGE-AT-PICKUPPOINT') }
|
90
|
+
|
91
|
+
it 'displays status' do
|
92
|
+
expect(output).to include %q{
|
93
|
+
Status: READY_FOR_PICKUP
|
94
|
+
Sendingen er ankommet postkontor
|
95
|
+
2010-10-01 08:30, 2341 LØTEN}
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'with status TRANSPORT_TO_RECIPIENT' do
|
100
|
+
use_vcr_cassette 'tracking_transport_to_recipient'
|
101
|
+
let(:output) { invoke!('tracking', 'TESTPACKAGE-LOADED-FOR-DELIVERY') }
|
102
|
+
|
103
|
+
it 'displays status' do
|
104
|
+
expect(output).to include %q{
|
105
|
+
Status: TRANSPORT_TO_RECIPIENT
|
106
|
+
Sendingen er lastet opp for utkjøring
|
107
|
+
2010-09-30 16:48, 0001 OSLO}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'with status DELIVERED' do
|
112
|
+
use_vcr_cassette 'tracking_delivered'
|
113
|
+
let(:output) { invoke!('tracking', 'TESTPACKAGE-DELIVERED') }
|
114
|
+
|
115
|
+
it 'displays status' do
|
116
|
+
expect(output).to include %q{
|
117
|
+
Status: DELIVERED
|
118
|
+
Sendingen er utlevert
|
119
|
+
2010-09-30 17:45}
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
context 'with invalid tracking number' do
|
124
|
+
use_vcr_cassette 'tracking_invalid'
|
125
|
+
let(:output) { invoke!('tracking', 'FOO') }
|
126
|
+
|
127
|
+
it 'exits with error' do
|
128
|
+
expect { output }.to raise_error SystemExit
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
19
132
|
end
|
@@ -2,7 +2,8 @@ require 'spec_helper'
|
|
2
2
|
require 'bring/postal_code'
|
3
3
|
|
4
4
|
describe Bring::PostalCode do
|
5
|
-
describe 'city'
|
5
|
+
describe 'city' do
|
6
|
+
use_vcr_cassette 'postal_code'
|
6
7
|
before do
|
7
8
|
Bring::PostalCode.reset_cache!
|
8
9
|
end
|
@@ -19,10 +20,14 @@ describe Bring::PostalCode do
|
|
19
20
|
expect { Bring::PostalCode.new('0190').city }.not_to raise_error
|
20
21
|
end
|
21
22
|
|
22
|
-
|
23
|
-
|
23
|
+
context 'when country is sweden' do
|
24
|
+
use_vcr_cassette 'postal_code_se'
|
24
25
|
|
25
|
-
|
26
|
+
it "fetches result from Bring's API" do
|
27
|
+
postal_code = Bring::PostalCode.new('12000', :country => 'se')
|
28
|
+
|
29
|
+
expect(postal_code.city).to eq 'Stockholm'
|
30
|
+
end
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
@@ -0,0 +1,345 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'bring/tracking'
|
4
|
+
|
5
|
+
describe Bring::Tracking do
|
6
|
+
use_vcr_cassette 'tracking_ready_for_pickup'
|
7
|
+
let(:tracking) { Bring::Tracking.new 'TESTPACKAGE-AT-PICKUPPOINT' }
|
8
|
+
|
9
|
+
describe 'consignments' do
|
10
|
+
it 'returns an array of consignments' do
|
11
|
+
expect(tracking.consignments).to be_a Array
|
12
|
+
expect(tracking.consignments.first).to be_a Bring::Tracking::Consignment
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe Bring::Tracking::Address do
|
17
|
+
let(:address) { tracking.consignments.first.packages.first.recipient_address}
|
18
|
+
|
19
|
+
describe 'address_line_1' do
|
20
|
+
it 'returns address line 1' do
|
21
|
+
expect(address.address_line_1).to eq ''
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'address_line_2' do
|
26
|
+
it 'returns address line 2' do
|
27
|
+
expect(address.address_line_2).to eq ''
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'postal_code' do
|
32
|
+
it 'returns postal code' do
|
33
|
+
expect(address.postal_code).to eq '1407'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'city' do
|
38
|
+
it 'returns city' do
|
39
|
+
expect(address.city).to eq 'VINTERBRO'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'country_code' do
|
44
|
+
it 'returns country code' do
|
45
|
+
expect(address.country_code).to eq ''
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'country' do
|
50
|
+
it 'returns country' do
|
51
|
+
expect(address.country).to eq ''
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'to_s' do
|
56
|
+
it 'formats address' do
|
57
|
+
expect(address.to_s).to eq '1407 VINTERBRO'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe Bring::Tracking::Definition do
|
63
|
+
let(:event) { tracking.consignments.first.packages.first.events.last }
|
64
|
+
let(:definition) { event.definitions.last }
|
65
|
+
|
66
|
+
describe 'term' do
|
67
|
+
it 'returns term' do
|
68
|
+
expect(definition.term).to eq 'terminal'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'explanation' do
|
73
|
+
it 'returns explanation' do
|
74
|
+
|
75
|
+
expect(definition.explanation).to eq 'Brev, pakke eller godsterminal som benyttes til sortering og omlasting av sendinger som er underveis til mottaker.'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe Bring::Tracking::Event do
|
81
|
+
let(:events) { tracking.consignments.first.packages.first.events }
|
82
|
+
let(:event) { events.first }
|
83
|
+
|
84
|
+
describe 'description' do
|
85
|
+
it 'returns description' do
|
86
|
+
expect(event.description).to eq 'Sendingen er ankommet postkontor'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'status' do
|
91
|
+
it 'returns status' do
|
92
|
+
expect(event.status).to eq 'READY_FOR_PICKUP'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe 'unit_id' do
|
97
|
+
it 'returns unit id' do
|
98
|
+
expect(event.unit_id).to eq '122608'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe 'color' do
|
103
|
+
let(:event) { Bring::Tracking::Event.new '' }
|
104
|
+
|
105
|
+
it 'returns yellow when status is READY_FOR_PICKUP' do
|
106
|
+
event.stub(:status).and_return('READY_FOR_PICKUP')
|
107
|
+
|
108
|
+
expect(event.color).to eq :yellow
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'returns green when status is DELIVERED' do
|
112
|
+
event.stub(:status).and_return('DELIVERED')
|
113
|
+
|
114
|
+
expect(event.color).to eq :green
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe 'unit_information_url' do
|
119
|
+
it 'returns unit information url' do
|
120
|
+
expect(event.unit_information_url).
|
121
|
+
to eq 'http://fraktguide.bring.no/fraktguide/api/pickuppoint/id/122608'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe 'unit_type' do
|
126
|
+
it 'returns unit type' do
|
127
|
+
expect(event.unit_type).to eq 'BRING'
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe 'postal_code' do
|
132
|
+
it 'returns postal code' do
|
133
|
+
expect(event.postal_code).to eq '2341'
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe 'city' do
|
138
|
+
it 'returns city' do
|
139
|
+
expect(event.city).to eq 'LØTEN'
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe 'country_code' do
|
144
|
+
it 'returns the country code' do
|
145
|
+
expect(event.country_code).to eq 'NO'
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe 'country' do
|
150
|
+
it 'returns the country' do
|
151
|
+
expect(event.country).to eq 'Norway'
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe 'date_iso' do
|
156
|
+
it 'returns iso-formatted date' do
|
157
|
+
expect(event.date_iso).to eq '2010-10-01T08:30:25+02:00'
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
describe 'display_date' do
|
162
|
+
it 'returns display date' do
|
163
|
+
expect(event.display_date).to eq "01.10.2010"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe 'display_time' do
|
168
|
+
it 'returns display time' do
|
169
|
+
expect(event.display_time).to eq "08:30"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe 'date' do
|
174
|
+
it 'returns datetime' do
|
175
|
+
expect(event.date).to be_a(DateTime)
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'equals to date_iso' do
|
179
|
+
expect(event.date.to_s).to eq event.date_iso
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe 'consignment_event' do
|
184
|
+
it 'returns consignment event' do
|
185
|
+
expect(event.consignment_event).to eq false
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe 'definitions' do
|
190
|
+
it 'returns array of definitions' do
|
191
|
+
expect(event.definitions).to be_a Array
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe Bring::Tracking::Package do
|
197
|
+
let(:package) { tracking.consignments.first.packages.first }
|
198
|
+
|
199
|
+
describe 'status_description' do
|
200
|
+
it 'returns status description' do
|
201
|
+
expect(package.status_description).
|
202
|
+
to eq 'Sendingen kan hentes på postkontor.'
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
describe 'descriptions' do
|
207
|
+
it 'returns array of descriptions' do
|
208
|
+
expect(package.descriptions).to be_a Array
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe 'package_number' do
|
213
|
+
it 'returns package number' do
|
214
|
+
expect(package.package_number).to eq 'TESTPACKAGEATPICKUPPOINT'
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
describe 'previous_package_number' do
|
219
|
+
it 'returns previous package number' do
|
220
|
+
expect(package.previous_package_number).to eq ''
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
describe 'product_name' do
|
225
|
+
it 'returns product name' do
|
226
|
+
expect(package.product_name).to eq 'KLIMANØYTRAL SERVICEPAKKE'
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
describe 'product_code' do
|
231
|
+
it 'returns product code' do
|
232
|
+
expect(package.product_code).to eq '1202'
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
describe 'brand' do
|
237
|
+
it 'returns brand' do
|
238
|
+
expect(package.brand).to eq 'POSTEN'
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
describe 'length_in_cm' do
|
243
|
+
it 'returns length in cm' do
|
244
|
+
expect(package.length_in_cm).to eq 41
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
describe 'width_in_cm' do
|
249
|
+
it 'returns width in cm' do
|
250
|
+
expect(package.width_in_cm).to eq 38
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
describe 'height_in_cm' do
|
255
|
+
it 'returns height in cm' do
|
256
|
+
expect(package.height_in_cm).to eq 29
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
describe 'volume_in_dm3' do
|
261
|
+
it 'returns volume in dm3' do
|
262
|
+
expect(package.volume_in_dm3).to eq 45.2
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
describe 'weight_in_kgs' do
|
267
|
+
it 'returns weight in kg' do
|
268
|
+
expect(package.weight_in_kgs).to eq 16.5
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
describe 'pickup_code' do
|
273
|
+
it 'returns pickup code' do
|
274
|
+
expect(package.pickup_code).to eq 'AA11'
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
describe 'date_of_return' do
|
279
|
+
it 'is a DateTime' do
|
280
|
+
expect(package.date_of_return).to be_a Date
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'returns date of return' do
|
284
|
+
expect(package.date_of_return.to_s).to eq '2011-12-01'
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
describe 'sender_name' do
|
289
|
+
it 'returns sender name' do
|
290
|
+
expect(package.sender_name).to eq 'POSTEN NORGE AS'
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
describe 'recipient_address' do
|
295
|
+
it 'returns a Address' do
|
296
|
+
expect(package.recipient_address).to be_a Bring::Tracking::Address
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
describe 'events' do
|
301
|
+
it 'returns an Array of events' do
|
302
|
+
expect(package.events).to be_a Array
|
303
|
+
expect(package.events.first).to be_a Bring::Tracking::Event
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
describe Bring::Tracking::Consignment do
|
309
|
+
let(:consignment) { tracking.consignments.first }
|
310
|
+
|
311
|
+
describe 'consignment_id' do
|
312
|
+
it 'returns consignment id' do
|
313
|
+
expect(consignment.consignment_id).to eq 'SHIPMENTNUMBER'
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
describe 'previous_consignment_id' do
|
318
|
+
it 'returns previous consignment id' do
|
319
|
+
expect(consignment.previous_consignment_id).to eq ''
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
describe 'total_weight_in_kgs' do
|
324
|
+
it 'returns weight in kg' do
|
325
|
+
expect(consignment.total_weight_in_kgs).to eq 16.5
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
describe 'total_volume_in_dm3' do
|
330
|
+
it 'returns volume in dm3' do
|
331
|
+
expect(consignment.total_volume_in_dm3).to eq 45.2
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
context 'when tracking number is invalid' do
|
336
|
+
use_vcr_cassette 'tracking_invalid'
|
337
|
+
let!(:tracking) { Bring::Tracking.new 'FOO' }
|
338
|
+
|
339
|
+
it 'raises error' do
|
340
|
+
expect { consignment }.to raise_error(Bring::Tracking::Error,
|
341
|
+
'Invalid query (400)')
|
342
|
+
end
|
343
|
+
end
|
344
|
+
end
|
345
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bring
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erlend Finvåg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -130,11 +130,13 @@ files:
|
|
130
130
|
- lib/bring/cli.rb
|
131
131
|
- lib/bring/configurator.rb
|
132
132
|
- lib/bring/postal_code.rb
|
133
|
+
- lib/bring/tracking.rb
|
133
134
|
- lib/bring/version.rb
|
134
135
|
- spec/bring/base_request_spec.rb
|
135
136
|
- spec/bring/cli_spec.rb
|
136
137
|
- spec/bring/configurator_spec.rb
|
137
138
|
- spec/bring/postal_code_spec.rb
|
139
|
+
- spec/bring/tracking_spec.rb
|
138
140
|
- spec/spec_helper.rb
|
139
141
|
homepage: https://github.com/wepack/bring
|
140
142
|
licenses:
|
@@ -165,4 +167,6 @@ test_files:
|
|
165
167
|
- spec/bring/cli_spec.rb
|
166
168
|
- spec/bring/configurator_spec.rb
|
167
169
|
- spec/bring/postal_code_spec.rb
|
170
|
+
- spec/bring/tracking_spec.rb
|
168
171
|
- spec/spec_helper.rb
|
172
|
+
has_rdoc:
|