ups-ruby 0.8.3 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +3 -3
- data/README.md +129 -8
- data/lib/ups.rb +9 -7
- data/lib/ups/builders/builder_base.rb +15 -0
- data/lib/ups/builders/international_invoice_builder.rb +69 -0
- data/lib/ups/builders/international_invoice_product_builder.rb +71 -0
- data/lib/ups/builders/ship_confirm_builder.rb +10 -0
- data/lib/ups/parsers/parser_base.rb +5 -1
- data/lib/ups/parsers/ship_accept_parser.rb +50 -17
- data/lib/ups/version.rb +1 -1
- data/spec/stubs/ship_accept_success.xml +11 -0
- data/spec/support/shipping_options.rb +29 -0
- data/spec/ups/builders/ship_confirm_builder_spec.rb +1 -0
- data/spec/ups/connection/ship_spec.rb +16 -0
- data/ups.gemspec +1 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e49b28354cfa7297e1de94e7524b0a2b6d1f75a7
|
4
|
+
data.tar.gz: bf6603bad0925466b7042b12cb7271c0dccb071b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44a71a48f60301d633cb86fe34ad3b2448318560f34ebbf9bb122654195b3100a7a8d14893a99f22bd8bb9511f0ace7441cc319bc07538a27d3fe3166388e2a4
|
7
|
+
data.tar.gz: f069486277f59ff11363c541c7b79a1d9e6681dc9c692fe888030e21c7147e12fc2ca7f573603c827ed35f3cb8cd19a005b65c06cf8221189a522f56501c2de0
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ups-ruby (0.
|
4
|
+
ups-ruby (0.9.3)
|
5
5
|
excon (~> 0.45, >= 0.45.3)
|
6
6
|
insensitive_hash (~> 0.3.3)
|
7
7
|
levenshtein-ffi (~> 1.1)
|
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
simplecov
|
15
15
|
docile (1.1.5)
|
16
16
|
excon (0.54.0)
|
17
|
-
ffi (1.9.
|
17
|
+
ffi (1.9.18)
|
18
18
|
insensitive_hash (0.3.3)
|
19
19
|
json (1.8.3)
|
20
20
|
levenshtein-ffi (1.1.0)
|
@@ -43,4 +43,4 @@ DEPENDENCIES
|
|
43
43
|
ups-ruby!
|
44
44
|
|
45
45
|
BUNDLED WITH
|
46
|
-
1.
|
46
|
+
1.15.3
|
data/README.md
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
-
[![Gem Version](https://img.shields.io/gem/v/ups.svg?style=flat-square)](http://badge.fury.io/rb/ups)
|
2
|
-
[![Dependency Status](https://img.shields.io/gemnasium/ptrippett/ups.svg?style=flat-square)](https://gemnasium.com/ptrippett/ups)
|
3
|
-
[![Build Status](https://img.shields.io/travis/ptrippett/ups.svg?style=flat-square)](https://travis-ci.org/ptrippett/ups)
|
4
|
-
[![Coverage Status](https://img.shields.io/codeclimate/coverage/github/ptrippett/ups.svg?style=flat-square)](https://codeclimate.com/github/ptrippett/ups/coverage)
|
5
|
-
[![Code Climate](https://img.shields.io/codeclimate/github/ptrippett/ups.svg?style=flat-square)](https://codeclimate.com/github/ptrippett/ups)
|
1
|
+
[![Gem Version](https://img.shields.io/gem/v/ups-ruby.svg?style=flat-square)](http://badge.fury.io/rb/ups-ruby)
|
6
2
|
|
7
3
|
# UPS
|
8
4
|
|
@@ -21,7 +17,7 @@ This gem is currently used in production at [Veeqo](http://www.veeqo.com)
|
|
21
17
|
|
22
18
|
## Documentation
|
23
19
|
|
24
|
-
Yard documentation can be found at [RubyDoc](http://www.rubydoc.info/github/
|
20
|
+
Yard documentation can be found at [RubyDoc](http://www.rubydoc.info/github/veeqo/ups-ruby).
|
25
21
|
|
26
22
|
## Sample Usage
|
27
23
|
|
@@ -47,7 +43,7 @@ response = server.rates do |rate_builder|
|
|
47
43
|
state: 'Wales',
|
48
44
|
postal_code: 'SA1 1DA',
|
49
45
|
country: 'GB',
|
50
|
-
shipper_number:
|
46
|
+
shipper_number: 'ACCOUNT_NUMBER'
|
51
47
|
rate_builder.add_ship_to company_name: 'Google Inc.',
|
52
48
|
phone_number: '0207 031 3000',
|
53
49
|
address_line_1: '1 St Giles High Street',
|
@@ -60,13 +56,138 @@ response = server.rates do |rate_builder|
|
|
60
56
|
end
|
61
57
|
```
|
62
58
|
|
59
|
+
### Create domestic shipment
|
60
|
+
```ruby
|
61
|
+
require 'ups-ruby'
|
62
|
+
server = UPS::Connection.new(test_mode: true)
|
63
|
+
ship_response = server.ship do |shipment_builder|
|
64
|
+
shipment_builder.add_access_request 'API_KEY', 'USERNAME', 'PASSWORD'
|
65
|
+
shipment_builder.add_shipper company_name: 'Veeqo Limited',
|
66
|
+
phone_number: '01792 123456',
|
67
|
+
attention_name: 'John Doe',
|
68
|
+
address_line_1: '11 Wind Street',
|
69
|
+
city: 'Swansea',
|
70
|
+
state: 'Wales',
|
71
|
+
postal_code: 'SA1 1DA',
|
72
|
+
country: 'GB',
|
73
|
+
shipper_number: 'ACCOUNT_NUMBER'
|
74
|
+
shipment_builder.add_ship_from company_name: 'Veeqo Limited',
|
75
|
+
phone_number: '01792 123456',
|
76
|
+
address_line_1: '11 Wind Street',
|
77
|
+
attention_name: 'John Doe',
|
78
|
+
city: 'Swansea',
|
79
|
+
state: 'Wales',
|
80
|
+
postal_code: 'SA1 1DA',
|
81
|
+
country: 'GB',
|
82
|
+
shipper_number: 'ACCOUNT_NUMBER'
|
83
|
+
shipment_builder.add_ship_to company_name: 'Google Inc.',
|
84
|
+
phone_number: '0207 031 3000',
|
85
|
+
address_line_1: '1 St Giles High Street',
|
86
|
+
attention_name: 'John Doe',
|
87
|
+
city: 'London',
|
88
|
+
state: 'England',
|
89
|
+
postal_code: 'WC2H 8AG',
|
90
|
+
country: 'GB'
|
91
|
+
shipment_builder.add_package weight: '0.5',
|
92
|
+
unit: 'KGS'
|
93
|
+
shipment_builder.add_description 'White coffee mug'
|
94
|
+
shipment_builder.add_payment_information 'ACCOUNT_NUMBER'
|
95
|
+
shipment_builder.add_service '65' # returned in rates response
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
|
63
100
|
```ruby
|
64
101
|
# Then use...
|
65
102
|
response.success?
|
66
|
-
response.
|
103
|
+
response.label_graphic_image
|
104
|
+
response.label_html_image
|
105
|
+
response.label_graphic_extension
|
67
106
|
response.tracking_number
|
68
107
|
```
|
69
108
|
|
109
|
+
### Create international shipment with customs documentation request
|
110
|
+
```ruby
|
111
|
+
require 'ups-ruby'
|
112
|
+
server = UPS::Connection.new(test_mode: true)
|
113
|
+
ship_response = server.ship do |shipment_builder|
|
114
|
+
shipment_builder.add_access_request 'API_KEY', 'USERNAME', 'PASSWORD'
|
115
|
+
shipment_builder.add_shipper company_name: 'Veeqo Limited',
|
116
|
+
phone_number: '01792 123456',
|
117
|
+
attention_name: 'John Doe',
|
118
|
+
address_line_1: '11 Wind Street',
|
119
|
+
city: 'Swansea',
|
120
|
+
state: 'Wales',
|
121
|
+
postal_code: 'SA1 1DA',
|
122
|
+
country: 'GB',
|
123
|
+
shipper_number: 'ACCOUNT_NUMBER'
|
124
|
+
shipment_builder.add_ship_from company_name: 'Veeqo Limited',
|
125
|
+
phone_number: '01792 123456',
|
126
|
+
address_line_1: '11 Wind Street',
|
127
|
+
attention_name: 'John Doe',
|
128
|
+
city: 'Swansea',
|
129
|
+
state: 'Wales',
|
130
|
+
postal_code: 'SA1 1DA',
|
131
|
+
country: 'GB',
|
132
|
+
shipper_number: 'ACCOUNT_NUMBER'
|
133
|
+
shipment_builder.add_ship_to company_name: 'Google Inc.',
|
134
|
+
phone_number: '0207 031 3000',
|
135
|
+
address_line_1: '389 Townsend Street',
|
136
|
+
attention_name: 'John Doe',
|
137
|
+
address_line_2: 'Apt 21',
|
138
|
+
city: 'San Francisco',
|
139
|
+
state: 'CA',
|
140
|
+
postal_code: '94107',
|
141
|
+
country: 'US'
|
142
|
+
shipment_builder.add_sold_to company_name: 'Google Inc.',
|
143
|
+
phone_number: '0207 031 3000',
|
144
|
+
address_line_1: '389 Townsend Street',
|
145
|
+
attention_name: 'John Doe',
|
146
|
+
address_line_2: 'Apt 21',
|
147
|
+
city: 'San Francisco',
|
148
|
+
state: 'CA',
|
149
|
+
postal_code: '94107',
|
150
|
+
country: 'US'
|
151
|
+
shipment_builder.add_package weight: '0.5',
|
152
|
+
unit: 'KGS'
|
153
|
+
shipment_builder.add_description 'White coffee mug'
|
154
|
+
shipment_builder.add_payment_information 'ACCOUNT_NUMBER'
|
155
|
+
shipment_builder.add_service '65' # returned in rates response
|
156
|
+
shipment_builder.add_international_invoice invoice_number: '#P-1234',
|
157
|
+
invoice_date: '20170816',
|
158
|
+
reason_for_export: 'SALE',
|
159
|
+
currency_code: 'USD',
|
160
|
+
products: [
|
161
|
+
{
|
162
|
+
description: 'White coffee mug',
|
163
|
+
number: '1',
|
164
|
+
value: '14.02',
|
165
|
+
dimensions_unit: 'CM',
|
166
|
+
part_number: 'MUG-01-WHITE',
|
167
|
+
commodity_code: '123488',
|
168
|
+
origin_country_code: 'US'
|
169
|
+
},
|
170
|
+
{
|
171
|
+
description: 'Red coffee mug',
|
172
|
+
number: '1',
|
173
|
+
value: '14.05',
|
174
|
+
dimensions_unit: 'CM',
|
175
|
+
part_number: 'MUG-01-RED',
|
176
|
+
commodity_code: '567876',
|
177
|
+
origin_country_code: 'US'
|
178
|
+
}
|
179
|
+
]
|
180
|
+
end
|
181
|
+
```
|
182
|
+
|
183
|
+
|
184
|
+
```ruby
|
185
|
+
# Then use...
|
186
|
+
response.success?
|
187
|
+
response.form_graphic_image
|
188
|
+
response.form_graphic_extension
|
189
|
+
```
|
190
|
+
|
70
191
|
## Running the tests
|
71
192
|
|
72
193
|
After installing dependencies with `bundle install`, you can run the unit tests using `rake`.
|
data/lib/ups.rb
CHANGED
@@ -22,12 +22,14 @@ module UPS
|
|
22
22
|
end
|
23
23
|
|
24
24
|
module Builders
|
25
|
-
autoload :BuilderBase,
|
26
|
-
autoload :RateBuilder,
|
27
|
-
autoload :AddressBuilder,
|
28
|
-
autoload :ShipConfirmBuilder,
|
29
|
-
autoload :
|
30
|
-
autoload :
|
31
|
-
autoload :
|
25
|
+
autoload :BuilderBase, 'ups/builders/builder_base'
|
26
|
+
autoload :RateBuilder, 'ups/builders/rate_builder'
|
27
|
+
autoload :AddressBuilder, 'ups/builders/address_builder'
|
28
|
+
autoload :ShipConfirmBuilder, 'ups/builders/ship_confirm_builder'
|
29
|
+
autoload :InternationalInvoiceBuilder, 'ups/builders/international_invoice_builder'
|
30
|
+
autoload :InternationalInvoiceProductBuilder, 'ups/builders/international_invoice_product_builder'
|
31
|
+
autoload :ShipAcceptBuilder, 'ups/builders/ship_accept_builder'
|
32
|
+
autoload :OrganisationBuilder, 'ups/builders/organisation_builder'
|
33
|
+
autoload :ShipperBuilder, 'ups/builders/shipper_builder'
|
32
34
|
end
|
33
35
|
end
|
@@ -99,6 +99,21 @@ module UPS
|
|
99
99
|
shipment_root << OrganisationBuilder.new('ShipTo', opts).to_xml
|
100
100
|
end
|
101
101
|
|
102
|
+
# Adds a SoldTo section to the XML document being built
|
103
|
+
#
|
104
|
+
# @param [Hash] opts A Hash of data to build the requested section
|
105
|
+
# @option opts [String] :company_name Company Name
|
106
|
+
# @option opts [String] :phone_number Phone Number
|
107
|
+
# @option opts [String] :address_line_1 Address Line 1
|
108
|
+
# @option opts [String] :city City
|
109
|
+
# @option opts [String] :state State
|
110
|
+
# @option opts [String] :postal_code Zip or Postal Code
|
111
|
+
# @option opts [String] :country Country
|
112
|
+
# @return [void]
|
113
|
+
def add_sold_to(opts = {})
|
114
|
+
shipment_root << OrganisationBuilder.new('SoldTo', opts).to_xml
|
115
|
+
end
|
116
|
+
|
102
117
|
# Adds a ShipFrom section to the XML document being built
|
103
118
|
#
|
104
119
|
# @param [Hash] opts A Hash of data to build the requested section
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'ox'
|
2
|
+
|
3
|
+
module UPS
|
4
|
+
module Builders
|
5
|
+
# The {InternationalInvoiceBuilder} class builds UPS XML International invoice Objects.
|
6
|
+
#
|
7
|
+
# @author Calvin Hughes
|
8
|
+
# @since 0.9.3
|
9
|
+
# @attr [String] name The Containing XML Element Name
|
10
|
+
# @attr [Hash] opts The international invoice parts
|
11
|
+
class InternationalInvoiceBuilder < BuilderBase
|
12
|
+
include Ox
|
13
|
+
|
14
|
+
attr_accessor :name, :opts
|
15
|
+
|
16
|
+
def initialize(name, opts = {})
|
17
|
+
self.name = name
|
18
|
+
self.opts = opts
|
19
|
+
end
|
20
|
+
|
21
|
+
def form_type
|
22
|
+
element_with_value('FormType', '01')
|
23
|
+
end
|
24
|
+
|
25
|
+
def invoice_number
|
26
|
+
element_with_value('InvoiceNumber', opts[:invoice_number]) if opts[:invoice_number]
|
27
|
+
end
|
28
|
+
|
29
|
+
def invoice_date
|
30
|
+
element_with_value('InvoiceDate', opts[:invoice_date])
|
31
|
+
end
|
32
|
+
|
33
|
+
def reason_for_export
|
34
|
+
element_with_value('ReasonForExport', opts[:reason_for_export])
|
35
|
+
end
|
36
|
+
|
37
|
+
def currency_code
|
38
|
+
element_with_value('CurrencyCode', opts[:currency_code])
|
39
|
+
end
|
40
|
+
|
41
|
+
def product_details
|
42
|
+
opts[:products].map do |product_opts|
|
43
|
+
product_container(product_opts)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def product_container(opts = {})
|
48
|
+
InternationalInvoiceProductBuilder.new('Product', opts).to_xml
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns an XML representation of the current object
|
52
|
+
#
|
53
|
+
# @return [Ox::Element] XML representation of the current object
|
54
|
+
def to_xml
|
55
|
+
Element.new(name).tap do |international_form|
|
56
|
+
international_form << form_type
|
57
|
+
international_form << invoice_number
|
58
|
+
international_form << invoice_date
|
59
|
+
international_form << reason_for_export
|
60
|
+
international_form << currency_code
|
61
|
+
|
62
|
+
product_details.each do |product_detail|
|
63
|
+
international_form << product_detail
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'ox'
|
2
|
+
|
3
|
+
module UPS
|
4
|
+
module Builders
|
5
|
+
# The {InternationalProductInvoiceBuilder} class builds UPS XML International invoice Produt Objects.
|
6
|
+
#
|
7
|
+
# @author Calvin Hughes
|
8
|
+
# @since 0.9.3
|
9
|
+
# @attr [String] name The Containing XML Element Name
|
10
|
+
# @attr [Hash] opts The international invoice product parts
|
11
|
+
class InternationalInvoiceProductBuilder < BuilderBase
|
12
|
+
include Ox
|
13
|
+
|
14
|
+
attr_accessor :name, :opts
|
15
|
+
|
16
|
+
def initialize(name, opts = {})
|
17
|
+
self.name = name
|
18
|
+
self.opts = opts
|
19
|
+
end
|
20
|
+
|
21
|
+
def description
|
22
|
+
element_with_value('Description', opts[:description])
|
23
|
+
end
|
24
|
+
|
25
|
+
def number
|
26
|
+
element_with_value('Number', opts[:number])
|
27
|
+
end
|
28
|
+
|
29
|
+
def value
|
30
|
+
element_with_value('Value', opts[:value])
|
31
|
+
end
|
32
|
+
|
33
|
+
def dimensions_unit
|
34
|
+
unit_of_measurement(opts[:dimensions_unit])
|
35
|
+
end
|
36
|
+
|
37
|
+
def part_number
|
38
|
+
element_with_value('PartNumber', opts[:part_number][0..9]) if opts[:part_number]
|
39
|
+
end
|
40
|
+
|
41
|
+
def commodity_code
|
42
|
+
element_with_value('CommodityCode', opts[:commodity_code]) if opts[:commodity_code]
|
43
|
+
end
|
44
|
+
|
45
|
+
def origin_country_code
|
46
|
+
element_with_value('OriginCountryCode', opts[:origin_country_code][0..2])
|
47
|
+
end
|
48
|
+
|
49
|
+
def product_unit
|
50
|
+
Element.new('Unit').tap do |unit|
|
51
|
+
unit << number
|
52
|
+
unit << value
|
53
|
+
unit << dimensions_unit
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Returns an XML representation of the current object
|
58
|
+
#
|
59
|
+
# @return [Ox::Element] XML representation of the current object
|
60
|
+
def to_xml
|
61
|
+
Element.new(name).tap do |product|
|
62
|
+
product << description
|
63
|
+
product << commodity_code
|
64
|
+
product << part_number
|
65
|
+
product << origin_country_code
|
66
|
+
product << product_unit
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -32,6 +32,16 @@ module UPS
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
# Adds a InternationalForms section to the XML document being built
|
36
|
+
# according to user inputs
|
37
|
+
#
|
38
|
+
# @return [void]
|
39
|
+
def add_international_invoice(opts = {})
|
40
|
+
shipment_root << Element.new('ShipmentServiceOptions').tap do |shipment_service_options|
|
41
|
+
shipment_service_options << InternationalInvoiceBuilder.new('InternationalForms', opts).to_xml
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
35
45
|
# Adds a Service section to the XML document being built
|
36
46
|
#
|
37
47
|
# @param [String] service_code The Service code for the choosen Shipping
|
@@ -37,7 +37,11 @@ module UPS
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def switch_active?(*elements)
|
40
|
-
elements.all? { |element| switches[element] == true }
|
40
|
+
elements.flatten.all? { |element| switches[element] == true }
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_switch_path(*paths)
|
44
|
+
paths.flatten
|
41
45
|
end
|
42
46
|
|
43
47
|
def success?
|
@@ -4,27 +4,65 @@ require 'tempfile'
|
|
4
4
|
module UPS
|
5
5
|
module Parsers
|
6
6
|
class ShipAcceptParser < ParserBase
|
7
|
-
attr_accessor :
|
7
|
+
attr_accessor :label_root_path,
|
8
|
+
:form_root_path,
|
9
|
+
:graphic_image,
|
8
10
|
:graphic_extension,
|
9
11
|
:html_image,
|
12
|
+
:label_graphic_image,
|
13
|
+
:label_graphic_extension,
|
14
|
+
:label_html_image,
|
15
|
+
:form_graphic_image,
|
16
|
+
:form_graphic_extension,
|
10
17
|
:tracking_number
|
11
18
|
|
12
19
|
def value(value)
|
13
|
-
|
14
|
-
|
20
|
+
initialize_document_root_paths
|
21
|
+
|
22
|
+
parse_document_data(value, 'label')
|
23
|
+
parse_document_data(value, 'form')
|
15
24
|
parse_tracking_number(value)
|
16
|
-
|
25
|
+
|
17
26
|
super
|
18
27
|
end
|
19
28
|
|
20
|
-
def
|
21
|
-
|
22
|
-
self.
|
29
|
+
def initialize_document_root_paths
|
30
|
+
self.label_root_path = [:ShipmentResults, :PackageResults, :LabelImage]
|
31
|
+
self.form_root_path = [:ShipmentResults, :Form, :Image]
|
32
|
+
end
|
33
|
+
|
34
|
+
def parse_document_data(value, type)
|
35
|
+
root_path = self.send("#{type}_root_path")
|
36
|
+
|
37
|
+
parse_graphic_extension(root_path, value, type)
|
38
|
+
parse_graphic_image(root_path, value, type)
|
39
|
+
parse_html_image(root_path, value, type)
|
23
40
|
end
|
24
41
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
42
|
+
def parse_graphic_image(root_path, value, type)
|
43
|
+
switch_path = build_switch_path(root_path, :GraphicImage)
|
44
|
+
return unless switch_active?(switch_path)
|
45
|
+
|
46
|
+
self.send("#{type}_graphic_image=".to_sym, base64_to_file(value.as_s, type))
|
47
|
+
self.send("graphic_image=".to_sym, base64_to_file(value.as_s, type)) if type == 'label'
|
48
|
+
end
|
49
|
+
|
50
|
+
def parse_html_image(root_path, value, type)
|
51
|
+
switch_path = build_switch_path(root_path, :HTMLImage)
|
52
|
+
return unless switch_active?(switch_path)
|
53
|
+
|
54
|
+
self.send("#{type}_html_image=".to_sym, base64_to_file(value.as_s, type))
|
55
|
+
self.send("html_image=".to_sym, base64_to_file(value.as_s, type)) if type == 'label'
|
56
|
+
end
|
57
|
+
|
58
|
+
def parse_graphic_extension(root_path, value, type)
|
59
|
+
graphic_extension_subpath = (type == 'label' ? :LabelImageFormat : :ImageFormat)
|
60
|
+
|
61
|
+
switch_path = build_switch_path(root_path, graphic_extension_subpath, :Code)
|
62
|
+
return unless switch_active?(switch_path)
|
63
|
+
|
64
|
+
self.send("#{type}_graphic_extension=".to_sym, ".#{value.as_s.downcase}")
|
65
|
+
self.send("graphic_extension=".to_sym, ".#{value.as_s.downcase}") if type == 'label'
|
28
66
|
end
|
29
67
|
|
30
68
|
def parse_tracking_number(value)
|
@@ -32,13 +70,8 @@ module UPS
|
|
32
70
|
self.tracking_number = value.as_s
|
33
71
|
end
|
34
72
|
|
35
|
-
def
|
36
|
-
|
37
|
-
self.graphic_extension = ".#{value.as_s.downcase}"
|
38
|
-
end
|
39
|
-
|
40
|
-
def base64_to_file(contents)
|
41
|
-
file_config = ['ups', graphic_extension]
|
73
|
+
def base64_to_file(contents, type)
|
74
|
+
file_config = ['ups', self.send("#{type}_graphic_extension".to_sym)]
|
42
75
|
Tempfile.new(file_config, nil, encoding: 'ascii-8bit').tap do |file|
|
43
76
|
begin
|
44
77
|
file.write Base64.decode64(contents)
|
data/lib/ups/version.rb
CHANGED
@@ -52,5 +52,16 @@
|
|
52
52
|
<HTMLImage>PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAzLjIvL0VOIj4KPGh0bWw+PGhlYWQ+PHRpdGxlPgpWaWV3L1ByaW50IExhYmVsPC90aXRsZT48L2hlYWQ+PHN0eWxlPgogICAgLnNtYWxsX3RleHQge2ZvbnQtc2l6ZTogODAlO30KICAgIC5sYXJnZV90ZXh0IHtmb250LXNpemU6IDExNSU7fQo8L3N0eWxlPgo8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIj4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjAwIj48dHI+Cjx0ZCBoZWlnaHQ9IjQxMCIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KPEIgY2xhc3M9ImxhcmdlX3RleHQiPlZpZXcvUHJpbnQgTGFiZWw8L0I+CiZuYnNwOzxicj4KPG9sIGNsYXNzPSJzbWFsbF90ZXh0Ij4gPGxpPjxiPlByaW50IHRoZSBsYWJlbDo8L2I+ICZuYnNwOwpTZWxlY3QgUHJpbnQgZnJvbSB0aGUgRmlsZSBtZW51IGluIHRoaXMgYnJvd3NlciB3aW5kb3cgdG8gcHJpbnQgdGhlIGxhYmVsIGJlbG93Ljxicj48YnI+PGxpPjxiPgpGb2xkIHRoZSBwcmludGVkIGxhYmVsIGF0IHRoZSBkb3R0ZWQgbGluZS48L2I+ICZuYnNwOwpQbGFjZSB0aGUgbGFiZWwgaW4gYSBVUFMgU2hpcHBpbmcgUG91Y2guIElmIHlvdSBkbyBub3QgaGF2ZSBhIHBvdWNoLCBhZmZpeCB0aGUgZm9sZGVkIGxhYmVsIHVzaW5nIGNsZWFyIHBsYXN0aWMgc2hpcHBpbmcgdGFwZSBvdmVyIHRoZSBlbnRpcmUgbGFiZWwuPGJyPjxicj48bGk+PGI+R0VUVElORyBZT1VSIFNISVBNRU5UIFRPIFVQUzxicj4KQ3VzdG9tZXJzIHdpdGhvdXQgYSBEYWlseSBQaWNrdXA8L2I+PHVsPjxsaT5UYWtlIHRoaXMgcGFja2FnZSB0byBhbnkgbG9jYXRpb24gb2YgVGhlIFVQUyBTdG9yZa4sIFVQUyBEcm9wIEJveCwgVVBTIEN1c3RvbWVyIENlbnRlciwgVVBTIEFsbGlhbmNlcyAoT2ZmaWNlIERlcG90riBvciBTdGFwbGVzrikgb3IgQXV0aG9yaXplZCBTaGlwcGluZyBPdXRsZXQgbmVhciB5b3Ugb3IgdmlzaXQgPGEgaHJlZj0iaHR0cDovL2h0dHA6Ly93d3cudXBzLmNvbS9jb250ZW50L3VzL2VuL2luZGV4LmpzeCI+aHR0cDovL3d3dy51cHMuY29tL2NvbnRlbnQvdXMvZW4vaW5kZXguanN4PC9hPiBhbmQgc2VsZWN0IERyb3AgT2ZmLjxsaT4KQWlyIHNoaXBtZW50cyAoaW5jbHVkaW5nIFdvcmxkd2lkZSBFeHByZXNzIGFuZCBFeHBlZGl0ZWQpIGNhbiBiZSBwaWNrZWQgdXAgb3IgZHJvcHBlZCBvZmYuIFRvIHNjaGVkdWxlIGEgcGlja3VwLCBvciB0byBmaW5kIGEgZHJvcC1vZmYgbG9jYXRpb24sIHNlbGVjdCB0aGUgUGlja3VwIG9yIERyb3Atb2ZmIGljb24gZnJvbSB0aGUgVVBTIHRvb2wgYmFyLiAgPC91bD4gPGJyPiAKPGI+Q3VzdG9tZXJzIHdpdGggYSBEYWlseSBQaWNrdXA8L2I+PHVsPjxsaT4KWW91ciBkcml2ZXIgd2lsbCBwaWNrdXAgeW91ciBzaGlwbWVudChzKSBhcyB1c3VhbC4gPC91bD4KPC9vbD48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2MDAiPgo8dHI+Cjx0ZCBjbGFzcz0ic21hbGxfdGV4dCIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KJm5ic3A7Jm5ic3A7Jm5ic3A7CjxhIG5hbWU9ImZvbGRIZXJlIj5GT0xEIEhFUkU8L2E+PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48aHI+CjwvdGQ+CjwvdHI+CjwvdGFibGU+Cgo8dGFibGU+Cjx0cj4KPHRkIGhlaWdodD0iMTAiPiZuYnNwOwo8L3RkPgo8L3RyPgo8L3RhYmxlPgoKPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjUwIiA+PHRyPgo8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KPElNRyBTUkM9Ii4vbGFiZWwxWjIyMjAwNjAyOTIzNTM4MjkuZ2lmIiBoZWlnaHQ9IjM5MiIgd2lkdGg9IjY1MSI+CjwvdGQ+CjwvdHI+PC90YWJsZT4KPC9ib2R5Pgo8L2h0bWw+Cg==</HTMLImage>
|
53
53
|
</LabelImage>
|
54
54
|
</PackageResults>
|
55
|
+
<Form>
|
56
|
+
<Code>01</Code>
|
57
|
+
<Description>All Requested International Forms</Description>
|
58
|
+
<Image>
|
59
|
+
<ImageFormat>
|
60
|
+
<Code>PDF</Code>
|
61
|
+
<Description>PDF</Description>
|
62
|
+
</ImageFormat>
|
63
|
+
<GraphicImage>JVBERi0xLjMNCiXi48/TDQoxIDAgb2JqDQo8PA0KL1R5cGUgL091dGxpbmVzDQo+Pg0KZW5kb2JqDQoyIDAgb2JqDQoNClsvUERGIC9UZXh0IC9JbWFnZUNdDQplbmRvYmoNCjMgMCBvYmoNCjw8DQovVHlwZSAvUGFnZXMNCi9Db3VudCAzDQovS2lkcyBbMTEgMCBSIDE3IDAgUiAyMiAwIFIgXQ0KPj4NCmVuZG9iag0KNCAwIG9iag0KPDwNCi9UeXBlIC9Gb250DQovU3VidHlwZSAvVHJ1ZVR5cGUNCi9OYW1lIC9GMQ0KL0Jhc2VGb250IC9UaW1lc05ld1JvbWFuLEJvbGQNCi9GaXJzdENoYXIgMzINCi9MYXN0Q2hhciAyNTUNCi9XaWR0aHMgWw0KMjUwIDMzMyA1NTUgNTAwIDUwMCAxMDAwIDgzMyAyNzcgDQozMzMgMzMzIDUwMCA1NjkgMjUwIDMzMyAyNTAgMjc3IA0KNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCANCjUwMCA1MDAgMzMzIDMzMyA1NjkgNTY5IDU2OSA1MDAgDQo5MzAgNzIyIDY2NiA3MjIgNzIyIDY2NiA2MTAgNzc3IA0KNzc3IDM4OSA1MDAgNzc3IDY2NiA5NDMgNzIyIDc3NyANCjYxMCA3NzcgNzIyIDU1NiA2NjYgNzIyIDcyMiAxMDAwIA0KNzIyIDcyMiA2NjYgMzMzIDI3NyAzMzMgNTgxIDUwMCANCjMzMyA1MDAgNTU2IDQ0MyA1NTYgNDQzIDMzMyA1MDAgDQo1NTYgMjc3IDMzMyA1NTYgMjc3IDgzMyA1NTYgNTAwIA0KNTU2IDU1NiA0NDMgMzg5IDMzMyA1NTYgNTAwIDcyMiANCjUwMCA1MDAgNDQzIDM5NCAyMjAgMzk0IDUyMCAwIA0KNTAwIDAgMzMzIDUwMCA1MDAgMTAwMCA1MDAgNTAwIA0KMzMzIDEwMDAgNTU2IDMzMyAxMDAwIDAgNjY2IDAgDQowIDMzMyAzMzMgNTAwIDUwMCAzNTAgNTAwIDEwMDAgDQozMzMgMTAwMCAzODkgMzMzIDcyMiAwIDQ0MyA3MjIgDQoyNTAgMzMzIDUwMCA1MDAgNTAwIDUwMCAyMjAgNTAwIA0KMzMzIDc0NyAyOTkgNTAwIDU2OSAwIDc0NyA1MDAgDQozOTkgNTQ4IDI5OSAyOTkgMzMzIDU3NiA1NDAgMzMzIA0KMzMzIDI5OSAzMzAgNTAwIDc1MCA3NTAgNzUwIDUwMCANCjcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDEwMDAgNzIyIA0KNjY2IDY2NiA2NjYgNjY2IDM4OSAzODkgMzg5IDM4OSANCjcyMiA3MjIgNzc3IDc3NyA3NzcgNzc3IDc3NyA1NjkgDQo3NzcgNzIyIDcyMiA3MjIgNzIyIDcyMiA2MTAgNTU2IA0KNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNzIyIDQ0MyANCjQ0MyA0NDMgNDQzIDQ0MyAyNzcgMjc3IDI3NyAyNzcgDQo1MDAgNTU2IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTQ4IA0KNTAwIDU1NiA1NTYgNTU2IDU1NiA1MDAgNTU2IDUwMCANCiBdDQovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZw0KL0ZvbnREZXNjcmlwdG9yIDUgMCBSDQo+Pg0KZW5kb2JqDQo1IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnREZXNjcmlwdG9yDQovRm9udE5hbWUgL1RpbWVzTmV3Um9tYW4NCi9Bc2NlbnQgODkxDQovQ2FwSGVpZ2h0IDUwMA0KL0Rlc2NlbnQgMjE2DQovRmxhZ3MgMzQNCi9Gb250QkJveCBbIC01NTggLTMwNyAyMDAwIDEwMjYgXQ0KL0l0YWxpY0FuZ2xlIDANCi9TdGVtViAwDQo+Pg0KZW5kb2JqDQo2IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UcnVlVHlwZQ0KL05hbWUgL0YyDQovQmFzZUZvbnQgL0REQUNUUitNaWNyb3NvZnRTYW5zU2VyaWYNCi9GaXJzdENoYXIgMzANCi9MYXN0Q2hhciAyNTUNCi9XaWR0aHMgWw0KMCAwIDI2NSAyNzcgMzU0IDU1NiA1NTYgODg5DQo2NjYgMTkwIDMzMyAzMzMgMzg5IDU4MyAyNzcgMzMzDQoyNzcgMjc3IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2DQo1NTYgNTU2IDU1NiA1NTYgMjc3IDI3NyA1ODMgNTgzDQo1ODMgNTU2IDEwMTUgNjY2IDY2NiA3MjIgNzIyIDY2Ng0KNjEwIDc3NyA3MjIgMjc3IDUwMCA2NjYgNTU2IDgzMw0KNzIyIDc3NyA2NjYgNzc3IDcyMiA2NjYgNjEwIDcyMg0KNjY2IDk0MyA2NjYgNjY2IDYxMCAyNzcgMjc3IDI3Nw0KNDY5IDU1MSAzMzMgNTU2IDU1NiA1MDAgNTU2IDU1Ng0KMjc3IDU1NiA1NTYgMjI4IDIyOCA1MDAgMjI4IDgzMw0KNTU2IDU1NiA1NTYgNTU2IDMzMyA1MDAgMjc3IDU1Ng0KNTAwIDcyMiA1MDAgNTAwIDUwMCAzMzMgMjU5IDMzMw0KNTgzIDAgNTU2IDAgMjc3IDU1NiAzOTEgNTY1DQo1NTYgNTU2IDMzMyAxMDAwIDY2NiAzMzMgMTAwMCAwDQo2MTAgMCAwIDIyMiAyMjIgMzMzIDMzMyAzNTANCjI5MiA1ODUgMzMzIDY4MyA1MDAgMzMzIDk0MyAwDQo1MDAgNjY2IDI2NSAyNzcgNTU2IDU1NiA1NTYgNTU2DQoyNTkgNTU2IDMzMyA3MzYgMzcwIDU1NiA1ODMgMzMzDQo3MzYgNTAwIDM5OSA1ODMgMzMzIDMzMyAzMzMgNTU2DQo1MzcgMjc3IDMzMyAzMzMgMzY1IDU1NiA4MzMgODMzDQo4MzMgNTU2IDY2NiA2NjYgNjY2IDY2NiA2NjYgNjY2DQoxMDAwIDcyMiA2NjYgNjY2IDY2NiA2NjYgMjc3IDI3Nw0KMjc3IDI3NyA3MjIgNzIyIDc3NyA3NzcgNzc3IDc3Nw0KNzc3IDU4MyA3NzcgNzIyIDcyMiA3MjIgNzIyIDY2Ng0KNjY2IDYxMCA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1Ng0KODg5IDUwMCA1NTYgNTU2IDU1NiA1NTYgMjI4IDIyOA0KMjI4IDIyOCA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1Ng0KNTU2IDU4MyA1NTYgNTU2IDU1NiA1NTYgNTU2IDUwMA0KNTU2IDUwMCAgXQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCi9Gb250RGVzY3JpcHRvciA3IDAgUg0KPj4NCmVuZG9iag0KNyAwIG9iag0KPDwNCi9UeXBlIC9Gb250RGVzY3JpcHRvcg0KL0ZvbnROYW1lIC9EREFDVFIrTWljcm9zb2Z0U2Fu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MDAgNzIyIA0KNTAwIDUwMCA1MDAgMzMzIDI1OSAzMzMgNTgzIDAgDQo1NTYgMCAyMjIgNTU2IDMzMyAxMDAwIDU1NiA1NTYgDQozMzMgMTAwMCA2NjYgMzMzIDEwMDAgMCA2MTAgMCANCjAgMjIyIDIyMiAzMzMgMzMzIDM1MCA1NTYgMTAwMCANCjMzMyAxMDAwIDUwMCAzMzMgOTQzIDAgNTAwIDY2NiANCjI3NyAzMzMgNTU2IDU1NiA1NTYgNTU2IDI1OSA1NTYgDQozMzMgNzM2IDM3MCA1NTYgNTgzIDAgNzM2IDU1MiANCjM5OSA1NDggMzMzIDMzMyAzMzMgNTc2IDUzNyAzMzMgDQozMzMgMzMzIDM2NSA1NTYgODMzIDgzMyA4MzMgNjEwIA0KNjY2IDY2NiA2NjYgNjY2IDY2NiA2NjYgMTAwMCA3MjIgDQo2NjYgNjY2IDY2NiA2NjYgMjc3IDI3NyAyNzcgMjc3IA0KNzIyIDcyMiA3NzcgNzc3IDc3NyA3NzcgNzc3IDU4MyANCjc3NyA3MjIgNzIyIDcyMiA3MjIgNjY2IDY2NiA2MTAgDQo1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA4ODkgNTAwIA0KNTU2IDU1NiA1NTYgNTU2IDI3NyAyNzcgMjc3IDI3NyANCjU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NDggDQo2MTAgNTU2IDU1NiA1NTYgNTU2IDUwMCA1NTYgNTAwIA0KIF0NCi9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nDQovRm9udERlc2NyaXB0b3IgMTAgMCBSDQo+Pg0KZW5kb2JqDQoxMCAwIG9iag0KPDwNCi9UeXBlIC9Gb250RGVzY3JpcHRvcg0KL0ZvbnROYW1lIC9BcmlhbA0KL0FzY2VudCA5MDUNCi9DYXBIZWlnaHQgNTAwDQovRGVzY2VudCAyMTENCi9GbGFncyAzMg0KL0ZvbnRCQm94IFsgLTY2NSAtMzI1IDIwMDAgMTAwNiBdDQovSXRhbGljQW5nbGUgMA0KL1N0ZW1WIDANCj4+DQplbmRvYmoNCjExIDAgb2JqDQo8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMyAwIFINCi9NZWRpYUJveCBbMCAwIDYxMiA3OTJdDQovUmVzb3Vy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eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD06iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiq0s5ztTp3P+FAE4dSxUHJHUU6qCsVYEdQc1cjcSLkflQA+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApCQoJJwKR2CLk1UllMh9B6UAOmmLHCkhf51FRU0UG7DPwPSgBsURkwTwtW1UKMAYFKBgYFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTJHEa5P5UksoQYHLelUySxJJyT1NACu7Octz6D0pKACxAAyT0q1DFs+ZuW/lQA2GAY3OOewNWKKKACiiigAooqOSVY+DyfSgCSikBDAEHIpaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACoJZwpKrye/tU55qjIhRiO3agBpJJJJyTSopdgAOf5UlTWzgEqcDP8/SgCaKIRg45J6mpKKKACiiigAooJwMmq005PyocDuf8KAHSzhSVXk9/aqxJJJJyTRTo42c4AwPXtQBJbuwbbgkfyq1TURUGFGKdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU11DqVNOooAoOpRiCOf50lXZYxIuM4PY1SIKkgjBHWgC1BLuG1j838xU1Z4JBBBwRVuGQOuM/MBzQBLSEhQSTgUjsEXJqnJK0nsB2FADppjJwMhf51HRU0MO75nHHYetADYoS/JOF/nVsAKAAMClAwMCigAooooAKKKKACim713bcjd1xTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKhmi3/ADLw386mooAz6VWKsCOoOanni6uvXvVegBXdnOWOfQdhSAEkADJNFWbeNQofOSe9ABDDt+Zhz29qnoooAKKKKACiiigAqCWcKSq8nv7U2ac52oePX/CoKAAEhgc85zn3q5FKJB6MOoqrHGZGwOB3PpVxEVBhRigB1FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFVpZznanTuf8KALIORkUVUgl2nax+U9M9jVugAooooAKKKKACiiigAooooAKqzxbfmUcd6tUEZGDQBn0+KUxn1U0s0ZjbIHynp/hUdAGgDkZFFVIJSpCk/L79qt0AFFFNdgi5NACkhQSTgVVmlLnavC/zpsspkPoPSmUAFSRRGTBPC06KDdhn4HpVoDAwKAEACgADApaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEZQykHoapSRmNsHkdj61epkiCRcH86AKVWLeUcIx57f4VA6lWKntSUAaFFQwyhgFP3gKmoAKKKKACiiigAooooAKKKKAEIDAgjIqlJGY2weR2PrV6myIHUqaAKNWLeX+Bj9P8KgdSjEEc/zpKALsjiNcn8qpu7Octz6D0pCSTkkk+poALEADJPSgAqxDAMbnHPYGnQxbPmblv5VNQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUx5FTqeT2HWoGuHPQBR+ZoAtUVRMshIyx/DinrcOOuCKALdFRxyrJwOD6VJQBHLEJB6MOhqmQQSCMEVoVDPEGG4D5h+tAFUEggjqDkVcikEi56HuKp0qMUYEHn+dAF+imxuHUMKdQAUUUUAFFFFABRRRQAUUUisGGQQRQAyWISD0YdDVMggkHqDg1oVFLCJDkHB7n2oAqopdgAOf5VcjiWMccn1pURUGFGKdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRQTgZNABUEs+3hCCe56gUyWfdlU4HrUNAASSSSck0U6OJpPYDuatpEqcgc+tAFKitAjIwagktwclBg+nY0AVgSCCDgirNvKWG1jyO/rVYggkEYIoBIII6g5FAGhRTY23xhvWnUAV7iL+NR9f8AGq9aFVJ4ipLAfL7dqAGRyGNsjkdx61dBDAEHIqhUkMhjbBPynr/jQBcooByMiigAooooAKQkAZJwKR2CLk1UllMh9FFADppixwpIX+dNikMbeoPWmVLFCWwzcL6dzQBaBDAEHIpaAMDAooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoopruqDLHFACkhQSTgVUllMmQOFpskhkbJ4HYelNoAKlhiLnc3C/zp0MBzuccen+NWaAEACgADApaKKACiiigCvcp0cD2NV6t3H+pb8P51UoAsWrcMvHBqxVS2/wBYfpVugAoIyMGiigClLEYz6qaZV51Drg1TkQo2Dz3B9RQBJBLt+Vjx2q1WfVi3l6I3XsaALFMkcRrk/lSSyhBgct6VUZixySSfegBXdnOSenQDoKbQAScAEn0FWoYQvLYLUANig6M4564qxRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAH2qjLu8z5+v6Y9qvUyWMSLjOD2NAFKpbcIWyT8w6A1EQVJBGCOtAJBBBwRQBoUVFDIHXGfmA5qWgAooooAKKKhml2fKvLfyoAbcv0QH3NV6CSSSTkmnRoXYDt3oAntlwpJ7mp6QAAADpS0AFFFFABTJEEi4P50+igCgylWIPXOKSrc0Qdc4+YdKqEEEgjBFAASSSSck0qKXYADn+VLHGZGwOB3PpVxEVBhRigBsUQjHqx6mpKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKqzTFiVXgdPegB0s+OEP1NSxSCRAeM9x6VSpUYowIPP86AL9FNRg65FOoAimi3jI+8KqEEEgjBFaFV54gcuvB6n3oAgVirAjqDmrkbiRcj8qpU6NyjZHPYj1FAF6imq6su4HioJpyflQ4Hc/4UAOmn2nauCe/tVYkkkk5Jop0cbOcAYHr2oARFLsABz/KrkaCNcD86VEVBhRinUAFFFFABRRRQAUUUUAFRSwh2B6Hv7ipaKAEACgADApaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqdwu2TI6Hn8auVFcLujJHUc0AVKKKe65jEgHXggdjQAkTlGB5wewq6CGAIORVCpIZdhwfun9KALlFAORkUUAVZ4gvzL0zzUNaBGRg1TmjMbZA+U9P8KAGBiFKgnBOSKSinRhS4DcA+9ADooS+CeF9fX6VbACgADApQMDAooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKCMjBoooAoOu1yvoePpUtsw3FD0PQGlulwQwHsahVirAjqDmgB80ZjbIHynp/hUdXyA688g1SkjMbYPI7H1oAlglwQjcg8A/0qzWfVmCUt8rdR39aAJ6QgMCCMilooAoyRmNsHkdj602r0iB1KmqTqUYgjn+dAE9vL/Ax+n+FWKz6tQShhtJ+YfrQBNRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFBOBk0AFFVJZixIU4Xp9aSOZk4JyPegC5RTEkVxkH8KfQAUUUUAFFFFADZF3xlfWqNaFU7hdshOODyP60ATW7bo8dxxUkiB1KmqsDbZR6HirlAFB1KMQRz/OkBIIIOCKuSxiRcZwexqmQQSD1BwaALcEm9cHG4frUtZ4JUgg4I6GrsTiRc9x1HpQA+o5YxIuM4PY1JRQBnkFSQRgjrQCQQQcEVami3/MvDfzqrQBcilEg9GHUVJVBGKsGHaryklQSCD6UALRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAHiqc0hdsEEAdj/AFq5VeeIHLrwep96AK9FFKpAYbgSO+KAEBIIIOCKnjuCOH5HqKjeIhQyncp9BTKAL4IYAg5FLVBHZDlTj1HY1ZjnVhhsKaAJqKKKACobhd0eR1XmpqQgEEHpQBQq7E26NWPU1TdSrFffFTWrYJUn3FAFmoZogwLD7wFTUUAZ9KjFGDDt1HqKnuIhy6jnv/jVegC8jB1yKdVGKQxtnGQeCKughgCDkUALVeeHOXQc+g71YooAhihC4ZuW/QVNRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFWeIL8y9M81DWgRkYNU5otjZA+U9Pb2oAIZdhwfun9KneFX+YHB9qqVNBKF+RuB2oAjeNkPzDj17U2r5AIwRkVBJb55Q49jQBHHMycE5HvVlJFcZB/CqRBBwQQfQ0AkEEHBFAGhRVaO4I4fkeoqwCGAIORQBXulwQ3bpUKMUYMPWrkq74yMc9qpUAaAORkUVFbtujweo4qWgAqpPFtO5R8p647GrdBGRg0AZ9T27tnbglf5UG3JkIzhev/ANap0UIuBQA6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACikJCgknAqv8AafmOV+X9aALNFMSRXHymn0AFFFFABRRRQAUhAYEEZFLRQBRkjMbYPI7H1ptXpEDqVNUnUoxBHP8AOgCxBKW+VuT6+tT1ngkEEHBFW4JN64ONw/WgB7orjDDNVZIWTJHKj8xVyigDPpUdkOVOPUdjVuSFX56H1FVXjaPgjj1HSgCxFOH4PDfzqGddsp9DzUdKWJUAnIHTPagB9u22TB6Hj8auVngkEEHBFXkbcgb1FADqKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACg9PWiigCjJIznJOB6dqbT512yn0PIpqEBgGHB4Pt70AICQQQcEVNHcFRhgSPXvTZIWTJHKj8xUdAF5XVxlSDTqzwSDkEg+oqZLgjhxkeooAtUU1XVxlSDTqACiiigAqOWMSLjOD2NSUUAZ5BUkEYI60AlSCDgjoatTRb/mXhv51VoAuxOJFz3HUelPqgjFGDDt1HqKuowdcigB1BGRg0UUAV5LcEZTg+hquQVJBGCOtaFNdFcYYZoAogEkADJNW4EKJg9Tz9KWOJY845NSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBBcrlA3pVar7qGUr61QIIJB6g4NAFu3bdGAeo4pZIVfnofUVXt22yYJ4NXKAKLxMnJGR6jpTa0Khe3VslTg/pQBVBIOQSD6ip47gjh+R6ioXRkOGGPQ9jSUAX1YMMg5FLVBWKnIJB9qnS56Bx+IoAsUUisGGQciloAKrzxdXXr3qxRQBn06KQxtnGQeCKkni2/Mo471DQBfBDAEHIpapwS+Xwfuk/lVwHIyKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqncLtkyBwauVDcLujz3HNAFUEggg4Iq+jBlDetUKs2z5Uqe3T6UAT0UUUAIQCMEZFVZ40TBU4J7e1SzS7PlXlv5VVJLEknJPU0AFFOjjMjYHA7n0qRrYgZU59jxQBErFTkEg+1Tx3GeHGPeq5BBwQQfQ0UAXwQRkHIpaoKzJ90kVYS5B4cYPr2oAnIyMGqc0RRsj7pPB9ParYIIyDkUEBhgjIoAqxQlsM3C+nc1bAwMCiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiioZZwpIUZb+VAEpIAyTgVG1xGvGSfpVVmZ/vEmkoAtfaU9G/SnLPG2OcE9jxVOigDQoqlHKycDkehq2jB1yKAHUUUUAFIQCCD0paKAM8gqxB6g4p8LbZAScA8Gn3K4kDdiP1qGgDQqvNOMbUPPcimPOWUKOOOTUVABUkURcgnIXufX6UsUJbDNwvp3NWwMDAoARVCjCjApaKKAGPGrj5hVeS3ZeV+YenerdFAGfQAWIAGSelXXiV+SOfWiONYxxye57mgBsUQj75JHPpUtFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFQXEmBsHU9TnpQA2abOVU8dzUFFSwxFzubhf50AMSNpOAOPU9KnW2UdST+lTABQABgUtAERgjPQEfQ1BJAycjkVcooApRRGQ+iirgAUAAYFAAAwBgUtABRRRQAUUUUARXC7ojjqOaqVoEZGDVB1KMVPrQAlWIoOjOOeuKgRtrgnoDmr4ORkUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACEhVJPQVRZizEnqTmrc/8AqWwcdP51ToAfGm98dB1/CroGBgVBagBWPqcf5/Op6ACiiigAoooJwMmgAoqF7hV4UbjULTSN3wPagC5RWeSSckkn1NAJU5BIPsaANCiqqXDLgOMj171ZBDAEHIoAWq10vzBgPY/5/wA9Ks1HMu6MjGT1FAFOrcDbowM8jiqlS27bZME8Hj8aALdFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAEc4zE2PSqdaBGRg1QdSjFT26H1FAE1q2CVJ9xVms8Eggg4Iqdbk4wVyfY4oAs0E4GTVY3JI4XB9zmoWkZ/vEn2oAsvcKuQoyf0qu8jOfmPHp2ptFABRUiQM3J+Ue/X8qspEidBk+poAphHIyFJHqBQVZcZBGfUYq/QRkYNAGfUkMpRsH7pPI9PeieLy+R90n8qjoA0KKit23RDPbipaAKMi7XZe3b6U0EggjqDkVPdL91/wAD/n86hRGc4Xn1PpQBeVgygjoaWmxrsULknFOoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKjliEg9GHQ1JRQBQZSpwwwaSr5AYYIzUZt4yOAR9KAKlABJAAyTVsW8YHIJ+tSKqr90AUAVVt3YAk7R79asJEqcgc+tPooAKKKKACiiigCOYZibnHGap1buGAiIPfgVUoAsWv8AF+FWKgtVwhPqf5VPQA113oVJxmhFCLgU6igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooJwMmgAopFYMMqciloAKKKKACgnAyaRmCjJOBVSWYvwBhf50ANlkMjZxgDgCmgEkAdScCirFvH/GRj0/xoAmRQihR2FOoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAAnAyaqTSlztXhf51bqvLB1ZPyoAgR2Q5U49R2NWFuVPDAj6ciqxBBIIwRRQBbM8YGd36Uxrkfwr+JqvRQArMz/eJNJSqrP90E1ZigCkFjlh+QoAZDDnDMOOwqzRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA1o1f7wzUJtlPRiPrzViigCv9m/2/wBP/r05bdB1yfqamooAQAAYAwKWiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//ZDQplbmRzdHJlYW0NCmVuZG9iag0KMTUgMCBvYmoNCjw8L1R5cGUgL1hPYmplY3QNCi9TdWJ0eXBlIC9JbWFnZQ0KL05hbWUgL2ltMTUNCi9GaWx0ZXIgL0RDVERlY29kZSANCi9XaWR0aCAxNzYNCi9IZWlnaHQgMjQNCi9CaXRzUGVyQ29tcG9uZW50IDgNCi9Db2xvclNwYWNlIC9EZXZpY2VSR0INCi9TTWFzayAxNiAwIFINCi9MZW5ndGggMTUxOQo+Pg0Kc3RyZWFtDQr/2P/gABBKRklGAAEBAQBgAGAAAP/bAEMADQkKCwoIDQsLCw8ODRAUIRUUEhIUKB0eGCEwKjIxLyouLTQ7S0A0OEc5LS5CWUJHTlBUVVQzP11jXFJiS1NUUf/bAEMBDg8PFBEUJxUVJ1E2LjZRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUf/AABEIABgAsAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APTq4S3/AOSmX/8A1+23/pFPXd1wlv8A8lMv/wDr9tv/AEinoANQ/wCRV8D/APX7Yf8AoBrM0H/kMeK/+wzaf+lZrT1D/kVfA/8A1+2H/oBrM0H/AJDHiv8A7DNp/wClZoALT/klmk/9vv8A6Iuqy/D3/IOl/wCxZu//AEokrUtP+SWaT/2+/wDoi6rL8Pf8g6X/ALFm7/8ASiSgA8Zf8jV4t/68oP8A0O2rUu/+Sp6t/wBuX/o+1rL8Zf8AI1eLf+vKD/0O2rUu/wDkqerf9uX/AKPtaAMvxP8A8irq/wD2M03/AKAa6e4/19h/1+3P/pzgrmPE/wDyKur/APYzTf8AoBrp7j/X2H/X7c/+nOCgAuf+Qj8Qv+vKL/0naszwD/yPcn/YGt//AEVBWnc/8hH4hf8AXlF/6TtWZ4B/5HuT/sDW/wD6KgoA09D/AORVH/X7pn/oFpWZaf8AJLNJ/wC33/0RdVp6H/yKo/6/dM/9AtKzLT/klmk/9vv/AKIuqAOn0D/mWf8AsDP/AO29eYWn/MJ/7A17/wC3Ven6B/zLP/YGf/23rzC0/wCYT/2Br3/26oA6jx9/yPcf/YGuP/RU9HxJ/wCQxqX/AGBov/StKPH3/I9x/wDYGuP/AEVPR8Sf+QxqX/YGi/8AStKAOn8X/wDLx/2Br/8A9o1zGo/8iJ4y/wCwzJ/6Nirp/F//AC8f9ga//wDaNcxqP/IieMv+wzJ/6NioANA/5GLwz/wP/wBN9vXp1eY6B/yMXhn/AIH/AOm+3r06gArhLf8A5KZf/wDX7bf+kU9FFABqH/Iq+B/+v2w/9ANZmg/8hjxX/wBhm0/9KzRRQAWn/JLNJ/7ff/RF1WX4e/5B0v8A2LN3/wClElFFAB4y/wCRq8W/9eUH/odtWpd/8lT1b/ty/wDR9rRRQBl+J/8AkVdX/wCxmm/9ANdPcf6+w/6/bn/05wUUUAFz/wAhH4hf9eUX/pO1ZngH/ke5P+wNb/8AoqCiigDT0P8A5FUf9fumf+gWlZlp/wAks0n/ALff/RF1RRQB0+gf8yz/ANgZ/wD23rzC0/5hP/YGvf8A26oooA6jx9/yPcf/AGBrj/0VPR8Sf+QxqX/YGi/9K0oooA6fxf8A8vH/AGBr/wD9o1zGo/8AIieMv+wzJ/6NioooANA/5GLwz/wP/wBN9vXp1FFAH//ZDQplbmRzdHJlYW0NCmVuZG9iag0KMTYgMCBvYmoNCjw8L1R5cGUgL1hPYmplY3QNCi9TdWJ0eXBlIC9JbWFnZQ0KL1dpZHRoIDE3Ng0KL0hlaWdodCAyNA0KL0NvbG9yU3BhY2UgL0RldmljZUdyYXkNCi9CaXRzUGVyQ29tcG9uZW50IDgNCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlDQoKL0xlbmd0aCAyNwo+Pg0Kc3RyZWFtDQp42u3BMQEAAADCoP6pZwo/oAAAAAC+BhsYcHENCmVuZHN0cmVhbQ0KZW5kb2JqDQoxNyAwIG9iag0KPDwvVHlwZSAvUGFnZQovUGFyZW50IDMgMCBSDQovTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQ0KL1Jlc291cmNlcyAxOCAwIFINCi9Db250ZW50cyAxOSAwIFIKL0dyb3VwIDw8IC9TIC9UcmFuc3BhcmVuY3kgL0NTIC9EZXZpY2VSR0IgPj4KPj4NCmVuZG9iag0KMTggMCBvYmoNCjw8IC9Gb250PDwvRjEgNCAwIFIvRjIgNiAwIFIvRjMgOSAwIFI+Pg0KL1hPYmplY3Q8PC9pbTE0IDE0IDAgUiAvaW0yMCAyMCAwIFIgPj4NCi9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFnZUNdDQo+Pg0KZW5kb2JqDQoxOSAwIG9iag0KPDwKL0xlbmd0aCAxOTI0IC9GaWx0ZXIvRmxhdGVEZWNvZGUNCj4+DQpzdHJlYW0NCnjatVlbc9tEFH6uZ/ofdoYXmAF57xfe3KQpoW0SYrd5AB5UR0kMtpTICqX8es7RxVaCVlqBmTzEK6+/PXsu335n9UBeTgizRGiirI4sMcKSPIGHVyR9OXkgwtmIK0LhTygVKcIYj7glnBt8vtyQ6WrDJDnOyE8vJz+RV4vJC1pOz28Jflx8nrwgrnzi4FeRkRIWcZGzgiw2kxfTE0YYWdyUc5eTF1+fXJ6//4Ysfisf5JPXiwlidkFpwykjBgxylrtutKMsLeJlQc7iTfJ9MCxRBranfaAXd1n6HO0BPWllJBVYREsXMRZZSWCgXcunncviD6Wtd6O1rdflT9f9MbtLwdPJ05UDnF55SjsXMW1cN/jHJHnIyLvVZlUk12MCoK2KDBUeWMbI1Sq9JvMiT5JiFK5UYK7HFfPPcbpNYjKfMXY8GxFYB+HQPmM/pLh58naV3l5nmwBUJSMHoVZGY0J7UCkzDh5xIZV+ilkF7fIN+flX+H9NKBTY55cT7nSkoUykIxvCKXih/Lwm82YksBThu3piOcSvBWXwqfqhsrT+jN/sR803SmvMT/yyc29CV+lolW42Jp5ujF9KrWeLV8fzqwBfCSoiZ3RdsJ7qn9+t7jdJWpDT438UGKcWGKqkIhZBYggoLcuJNhRYpaYiTmsqqj1RO6re/c5PTz1cDYb8sWccrqFaTfcGFvGfYPv09enZ9ONsQc6y6Nk+9vFsYttauB2/6vNglBqvglGKWQ9jXcVfPq3Wa3L2uPmU5CFEKIxESwBVHDj+WlngC0iuTkuP4yKIqAUeQEyKGk562EdPZx/eTCFqZoyF0kYU2bjTwtP0j2y1TCC0QXYqGklDeQVqPHT21cV3yA9jbBQGzhrJPSfUeah5DRwE2nLrgVsk+WZLshsyj9cJ+QVcsMwKePbLN6PWYDrilHvWuEzibZaSmywnr/+8z/IiCBrqmsOZVmPvQvb8tJi9e91VhXVxNYUogZnAzoYgIFj7CdW4NQPLU7Yg6nFrBpJOe0Y9liX/DVe0gsPFaOFx1/z83TFZnJPTs5Pzy/ezxen5WeApWAJT6uGv+Q+nF4Db761/EGY9QbpI6XqC3I0bb8FWdjPQF/txe0bbW/txM0Pbxn/VDNCgLX/Whu1m7MMa4nDJLJCdj0K7RF83nBCQKrKEo556pxz8TwWDtSkdUUISTj4lB+TLvAAO3Y5BBQr1o87jlJzkcbpcbZfZt+RoRpxkdAyfSlCIfvzZfQFaeQwc6FgqPYwvMH7ZZxCHY0TnruYgVZTcseoz7EWW3999+Za8ivMiWydFsSIxrPL+MY//Wv0+ZhlgW26Np7TH9ixCy0hAwiEqpdZjfHfz0G8m9GmW+7qgWul0q5xuteywog9ZFyWfHbYoKsjDUEGF9T9VVwV+mNKqsA5fV4CrsD86WFk1bbbAdBeR5mWbzXhwmy3+XZ2ENNkHLusK8sAlqE3kKNcC9L2LNHO+rj0AyoAAhcO2H+go6C5HYfD0kE0gkK0NOoCh4AbAPswDgCRIdgeqb8AuUFM8hP0UjyQd3GUgGnAEKqd+sKs74D6yzG5ukoRsHm89tw+VTAK+Q3reKa96vJd3woI7+E5W4ffA1o3SxV80E1oI9YyBZARHG/PfU7EHZlwi9gApbazR4WnYAzUuCft8BEmjxqTgAbCaBOyBuoRz15d8dQ5BFy9NK2OqcSvnqhTa5Rx2/fxJzjUTWgj1jIfW5bYW2JUxQ/HL/SmBOiNyDsS6i5giHKrJCksYSHhwU56QLcGVJdtNEKgLnkzoziRRZiRz0A0K7aHv2fX1qlhlabwmR9kGr722QQeDwHt4sIRr6kE+TpbrOI8RvFI+CB6EDYc1iD9OoQq8F3T3SR6SIJYNYOFdT1DWgsahkFvaRtIyD9dxzIMQNE0BzUBs8PLWC0ejIAG6s02yg9oGWfzfbduhQU37jRuNhiVzKL9ZM85t1UWuFfiCpbkirUbeUwYllOKSaNez1If5cdClKIPtAQ9gKhpv9TU3hO9WaQKiuYjXYTeusF0KpyED3/SUNjYKj2kxvUw+hd6VGnzvxkyZpcNmzx8/fRdstWTAhEzg+w3bY/VJnqxu74IoSFIOlGzLrO0zdvuIbVOQA7CdU3BgQe6yHiPPi7vAy3FlIFRUYfqiiZ6b4tKJpHHrbINhC7tBcnBMWXxjNwxfXenj5exFvPw9vk2CzhAJSsfpgaIIkV7SgQwQg7YePeZ5ki6/BG3f0cjgqwyly2D1bv8qPK/qLQMqvpHTPv5S5O2beZdY4RSrZy816jESj6895NUj+MeBMaD8NDFQ3cz2VmAQf8qIK5CFCAds7LmogHQgz6LYqCJ8yVTLIq5akmiw04XUR60NcXfSd0OCly4hly34ml0a54bgpiHqHRWpkJVplkqvNNou89V9KY2gaN5k2fV2ehHnBbbQQT0CUMiAvT/E+SYCTXcddNsmsM+ibADzaHoekuQcL9RBkA/Hh3yM149BuQYhFwzbol7M6qTrQt01mnXhSAiU3r//rIdtUQ8MAGVfTuCiGe67gmcAdd/ZAthNeNqZ4oy/AcilE7gNCmVuZHN0cmVhbQ0KZW5kb2JqDQoyMCAwIG9iag0KPDwvVHlwZSAvWE9iamVjdA0KL1N1YnR5cGUgL0ltYWdlDQovTmFtZSAvaW0yMA0KL0ZpbHRlciAvRENURGVjb2RlIA0KL1dpZHRoIDE3Ng0KL0hlaWdodCAyNA0KL0JpdHNQZXJDb21wb25lbnQgOA0KL0NvbG9yU3BhY2UgL0RldmljZVJHQg0KL1NNYXNrIDIxIDAgUg0KL0xlbmd0aCAxNTE5Cj4+DQpzdHJlYW0NCv/Y/+AAEEpGSUYAAQEBAGAAYAAA/9sAQwANCQoLCggNCwsLDw4NEBQhFRQSEhQoHR4YITAqMjEvKi4tNDtLQDQ4RzktLkJZQkdOUFRVVDM/XWNcUmJLU1RR/9sAQwEODw8UERQnFRUnUTYuNlFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFR/8AAEQgAGACwAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A9OrhLf8A5KZf/wDX7bf+kU9d3XCW/wDyUy//AOv22/8ASKegA1D/AJFXwP8A9fth/wCgGszQf+Qx4r/7DNp/6VmtPUP+RV8D/wDX7Yf+gGszQf8AkMeK/wDsM2n/AKVmgAtP+SWaT/2+/wDoi6rL8Pf8g6X/ALFm7/8ASiStS0/5JZpP/b7/AOiLqsvw9/yDpf8AsWbv/wBKJKADxl/yNXi3/ryg/wDQ7atS7/5Knq3/AG5f+j7Wsvxl/wAjV4t/68oP/Q7atS7/AOSp6t/25f8Ao+1oAy/E/wDyKur/APYzTf8AoBrp7j/X2H/X7c/+nOCuY8T/APIq6v8A9jNN/wCgGunuP9fYf9ftz/6c4KAC5/5CPxC/68ov/SdqzPAP/I9yf9ga3/8ARUFadz/yEfiF/wBeUX/pO1ZngH/ke5P+wNb/APoqCgDT0P8A5FUf9fumf+gWlZlp/wAks0n/ALff/RF1Wnof/Iqj/r90z/0C0rMtP+SWaT/2+/8Aoi6oA6fQP+ZZ/wCwM/8A7b15haf8wn/sDXv/ALdV6foH/Ms/9gZ//bevMLT/AJhP/YGvf/bqgDqPH3/I9x/9ga4/9FT0fEn/AJDGpf8AYGi/9K0o8ff8j3H/ANga4/8ARU9HxJ/5DGpf9gaL/wBK0oA6fxf/AMvH/YGv/wD2jXMaj/yInjL/ALDMn/o2Kun8X/8ALx/2Br//ANo1zGo/8iJ4y/7DMn/o2KgA0D/kYvDP/A//AE329enV5joH/IxeGf8Agf8A6b7evTqACuEt/wDkpl//ANftt/6RT0UUAGof8ir4H/6/bD/0A1maD/yGPFf/AGGbT/0rNFFABaf8ks0n/t9/9EXVZfh7/kHS/wDYs3f/AKUSUUUAHjL/AJGrxb/15Qf+h21al3/yVPVv+3L/ANH2tFFAGX4n/wCRV1f/ALGab/0A109x/r7D/r9uf/TnBRRQAXP/ACEfiF/15Rf+k7VmeAf+R7k/7A1v/wCioKKKANPQ/wDkVR/1+6Z/6BaVmWn/ACSzSf8At9/9EXVFFAHT6B/zLP8A2Bn/APbevMLT/mE/9ga9/wDbqiigDqPH3/I9x/8AYGuP/RU9HxJ/5DGpf9gaL/0rSiigDp/F/wDy8f8AYGv/AP2jXMaj/wAiJ4y/7DMn/o2KiigA0D/kYvDP/A//AE329enUUUAf/9kNCmVuZHN0cmVhbQ0KZW5kb2JqDQoyMSAwIG9iag0KPDwvVHlwZSAvWE9iamVjdA0KL1N1YnR5cGUgL0ltYWdlDQovV2lkdGggMTc2DQovSGVpZ2h0IDI0DQovQ29sb3JTcGFjZSAvRGV2aWNlR3JheQ0KL0JpdHNQZXJDb21wb25lbnQgOA0KL0ZpbHRlciAvRmxhdGVEZWNvZGUNCgovTGVuZ3RoIDI3Cj4+DQpzdHJlYW0NCnja7cExAQAAAMKg/qlnCj+gAAAAAL4GGxhwcQ0KZW5kc3RyZWFtDQplbmRvYmoNCjIyIDAgb2JqDQo8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMyAwIFINCi9NZWRpYUJveCBbMCAwIDYxMiA3OTJdDQovUmVzb3VyY2VzIDIzIDAgUg0KL0NvbnRlbnRzIDI0IDAgUgovR3JvdXAgPDwgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgL0RldmljZVJHQiA+Pgo+Pg0KZW5kb2JqDQoyMyAwIG9iag0KPDwgL0ZvbnQ8PC9GMSA0IDAgUi9GMiA2IDAgUi9GMyA5IDAgUj4+DQovWE9iamVjdDw8L2ltMTQgMTQgMCBSIC9pbTIwIDIwIDAgUiA+Pg0KL1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10NCj4+DQplbmRvYmoNCjI0IDAgb2JqDQo8PAovTGVuZ3RoIDE5MjQgL0ZpbHRlci9GbGF0ZURlY29kZQ0KPj4NCnN0cmVhbQ0KeNq1WVtz20QUfq5n+h92hheYAXnvF97cpCmhbRJit3kAHlRHSQy2lMgKpfx6ztHFVoJWWoGZPMQrr789ey7ffmf1QF5OCLNEaKKsjiwxwpI8gYdXJH05eSDC2YgrQuFPKBUpwhiPuCWcG3y+3JDpasMkOc7ITy8nP5FXi8kLWk7Pbwl+XHyevCCufOLgV5GREhZxkbOCLDaTF9MTRhhZ3JRzl5MXX59cnr//hix+Kx/kk9eLCWJ2QWnDKSMGDHKWu260oywt4mVBzuJN8n0wLFEGtqd9oBd3Wfoc7QE9aWUkFVhESxcxFllJYKBdy6edy+IPpa13o7Wt1+VP1/0xu0vB08nTlQOcXnlKOxcxbVw3+MckecjIu9VmVSTXYwKgrYoMFR5YxsjVKr0m8yJPkmIUrlRgrscV889xuk1iMp8xdjwbEVgH4dA+Yz+kuHnydpXeXmebAFQlIwehVkZjQntQKTMOHnEhlX6KWQXt8g35+Vf4f00oFNjnlxPudKShTKQjG8IpeKH8vCbzZiSwFOG7emI5xK8FZfCp+qGytP6M3+xHzTdKa8xP/LJzb0JX6WiVbjYmnm6MX0qtZ4tXx/OrAF8JKiJndF2wnuqf363uN0lakNPjfxQYpxYYqqQiFkFiCCgty4k2FFilpiJOayqqPVE7qt79zk9PPVwNhvyxZxyuoVpN9wYW8Z9g+/T16dn042xBzrLo2T728Wxi21q4Hb/q82CUGq+CUYpZD2NdxV8+rdZrcva4+ZTkIUQojERLAFUcOP5aWeALSK5OS4/jIoioBR5ATIoaTnrYR09nH95MIWpmjIXSRhTZuNPC0/SPbLVMILRBdioaSUN5BWo8dPbVxXfID2NsFAbOGsk9J9R5qHkNHATacuuBWyT5ZkuyGzKP1wn5BVywzAp49ss3o9ZgOuKUe9a4TOJtlpKbLCev/7zP8iIIGuqaw5lWY+9C9vy0mL173VWFdXE1hSiBmcDOhiAgWPsJ1bg1A8tTtiDqcWsGkk57Rj2WJf8NV7SCw8Vo4XHX/PzdMVmck9Ozk/PL97PF6flZ4ClYAlPq4a/5D6cXgNvvrX8QZj1BukjpeoLcjRtvwVZ2M9AX+3F7Rttb+3EzQ9vGf9UM0KAtf9aG7WbswxricMkskJ2PQrtEXzecEJAqsoSjnnqnHPxPBYO1KR1RQhJOPiUH5Mu8AA7djkEFCvWjzuOUnORxulxtl9m35GhGnGR0DJ9KUIh+/Nl9AVp5DBzoWCo9jC8wftlnEIdjROeu5iBVlNyx6jPsRZbf3335lryK8yJbJ0WxIjGs8v4xj/9a/T5mGWBbbo2ntMf2LELLSEDCISql1mN8d/PQbyb0aZb7uqBa6XSrnG617LCiD1kXJZ8dtigqyMNQQYX1P1VXBX6Y0qqwDl9XgKuwPzpYWTVttsB0F5HmZZvNeHCbLf5dnYQ02Qcu6wrywCWoTeQo1wL0vYs0c76uPQDKgACFw7Yf6CjoLkdh8PSQTSCQrQ06gKHgBsA+zAOAJEh2B6pvwC5QUzyE/RSPJB3cZSAacAQqp36wqzvgPrLMbm6ShGwebz23D5VMAr5Det4pr3q8l3fCgjv4Tlbh98DWjdLFXzQTWgj1jIFkBEcb899TsQdmXCL2ACltrNHhadgDNS4J+3wESaPGpOABsJoE7IG6hHPXl3x1DkEXL00rY6pxK+eqFNrlHHb9/EnONRNaCPWMh9blthbYlTFD8cv9KYE6I3IOxLqLmCIcqskKSxhIeHBTnpAtwZUl200QqAueTOjOJFFmJHPQDQrtoe/Z9fWqWGVpvCZH2QavvbZBB4PAe3iwhGvqQT5Olus4jxG8Uj4IHoQNhzWIP06hCrwXdPdJHpIglg1g4V1PUNaCxqGQW9pG0jIP13HMgxA0TQHNQGzw8tYLR6MgAbqzTbKD2gZZ/N9t26FBTfuNG42GJXMov1kzzm3VRa4V+IKluSKtRt5TBiWU4pJo17PUh/lx0KUog+0BD2AqGm/1NTeE71ZpAqK5iNdhN66wXQqnIQPf9JQ2NgqPaTG9TD6F3pUafO/GTJmlw2bPHz99F2y1ZMCETOD7Ddtj9UmerG7vgihIUg6UbMus7TN2+4htU5ADsJ1TcGBB7rIeI8+Lu8DLcWUgVFRh+qKJnpvi0omkcetsg2ELu0FycExZfGM3DF9d6ePl7EW8/D2+TYLOEAlKx+mBogiRXtKBDBCDth495nmSLr8Ebd/RyOCrDKXLYPVu/yo8r+otAyq+kdM+/lLk7Zt5l1jhFKtnLzXqMRKPrz3k1SP4x4ExoPw0MVDdzPZWYBB/yogrkIUIB2zsuaiAdCDPotioInzJVMsirlqSaLDThdRHrQ1xd9J3Q4KXLiGXLfiaXRrnhuCmIeodFamQlWmWSq802i7z1X0pjaBo3mTZ9XZ6EecFttBBPQJQyIC9P8T5JgJNdx102yawz6JsAPNoeh6S5Bwv1EGQD8eHfIzXj0G5BiEXDNuiXszqpOtC3TWadeFICJTev/+sh21RDwwAZV9O4KIZ7ruCZwB139kC2E142pnijL8ByKUTuA0KZW5kc3RyZWFtDQplbmRvYmoNCjI1IDAgb2JqDQo8PA0KL0NyZWF0b3IgKEFjdGl2ZVJlcG9ydHMgMTEpDQovUHJvZHVjZXIgKEFjdGl2ZVJlcG9ydHMgMTEpDQovQ3JlYXRpb25EYXRlIChEOjIwMTcwODIxMTY0NTE1LTA0JzAwJykNCj4+DQplbmRvYmoNCjI2IDAgb2JqDQo8PA0KL1R5cGUgL0NhdGFsb2cNCi9QYWdlcyAzIDAgUg0KL091dGxpbmVzIDEgMCBSDQovUGFnZU1vZGUgL1VzZU5vbmUNCi9WaWV3ZXJQcmVmZXJlbmNlcyA8PA0KL0hpZGVUb29sYmFyIGZhbHNlDQovSGlkZU1lbnViYXIgZmFsc2UNCi9IaWRlV2luZG93VUkgZmFsc2UNCi9GaXRXaW5kb3cgZmFsc2UNCi9DZW50ZXJXaW5kb3cgZmFsc2UNCi9EaXNwbGF5RG9jVGl0bGUgZmFsc2UNCj4+DQo+Pg0KZW5kb2JqDQp4cmVmDQowIDI3DQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTcgMDAwMDAgbg0KMDAwMDAwMDA1OSAwMDAwMCBuDQowMDAwMDAwMTAwIDAwMDAwIG4NCjAwMDAwMDAxODAgMDAwMDAgbg0KMDAwMDAwMTMyMiAwMDAwMCBuDQowMDAwMDAxNTExIDAwMDAwIG4NCjAwMDAwMDI2MzQgMDAwMDAgbg0KMDAwMDAwMjg2OCAwMDAwMCBuDQowMDAwMDIxMTE4IDAwMDAwIG4NCjAwMDAwMjIyNDcgMDAwMDAgbg0KMDAwMDAyMjQyOSAwMDAwMCBuDQowMDAwMDIyNTg2IDAwMDAwIG4NCjAwMDAwMjI3MDUgMDAwMDAgbg0KMDAwMDAyNDcwOCAwMDAwMCBuDQowMDAwMDMyOTk3IDAwMDAwIG4NCjAwMDAwMzQ3MjUgMDAwMDAgbg0KMDAwMDAzNDkzNCAwMDAwMCBuDQowMDAwMDM1MDkxIDAwMDAwIG4NCjAwMDAwMzUyMjIgMDAwMDAgbg0KMDAwMDAzNzIyNiAwMDAwMCBuDQowMDAwMDM4OTU0IDAwMDAwIG4NCjAwMDAwMzkxNjMgMDAwMDAgbg0KMDAwMDAzOTMyMCAwMDAwMCBuDQowMDAwMDM5NDUxIDAwMDAwIG4NCjAwMDAwNDE0NTUgMDAwMDAgbg0KMDAwMDA0MTU4MSAwMDAwMCBuDQp0cmFpbGVyDQo8PA0KL1NpemUgMjcNCi9Sb290IDI2IDAgUg0KL0lEIFs8MzA2ZTMzY2Q1NGM1NDdlMTg3YzQ3ZDg1YmYyZmIwY2Q+PDhlZjkyNGE3ZGRjNTQxN2U4NDA0Yzk2Mjk2MjFmNzRlPl0NCi9JbmZvIDI1IDAgUg0KPj4NCnN0YXJ0eHJlZg0KNDE4MjUNCiUlRU9GDQo=</GraphicImage>
|
64
|
+
</Image>
|
65
|
+
</Form>
|
55
66
|
</ShipmentResults>
|
56
67
|
</ShipmentAcceptResponse>
|
@@ -45,4 +45,33 @@ module ShippingOptions
|
|
45
45
|
value: '1234567890'
|
46
46
|
}
|
47
47
|
end
|
48
|
+
|
49
|
+
def invoice_form
|
50
|
+
{
|
51
|
+
invoice_number: '#P-1234',
|
52
|
+
invoice_date: '20170816',
|
53
|
+
reason_for_export: '',
|
54
|
+
currency_code: 'USD',
|
55
|
+
products: [
|
56
|
+
{
|
57
|
+
description: 'White coffee mug',
|
58
|
+
number: '1',
|
59
|
+
value: '14.02',
|
60
|
+
dimensions_unit: 'CM',
|
61
|
+
part_number: 'MUG-01-WHITE',
|
62
|
+
commodity_code: '1234',
|
63
|
+
origin_country_code: 'US'
|
64
|
+
},
|
65
|
+
{
|
66
|
+
description: 'Red coffee mug',
|
67
|
+
number: '1',
|
68
|
+
value: '14.05',
|
69
|
+
dimensions_unit: 'CM',
|
70
|
+
part_number: 'MUG-01-RED',
|
71
|
+
commodity_code: '5678',
|
72
|
+
origin_country_code: 'US'
|
73
|
+
}
|
74
|
+
]
|
75
|
+
}
|
76
|
+
end
|
48
77
|
end
|
@@ -12,6 +12,7 @@ class UPS::Builders::TestShipConfirmBuilder < Minitest::Test
|
|
12
12
|
builder.add_ship_from shipper
|
13
13
|
builder.add_package package
|
14
14
|
builder.add_label_specification 'gif', { height: '100', width: '100' }
|
15
|
+
builder.add_international_invoice invoice_form
|
15
16
|
builder.add_description 'Los Pollo Hermanos'
|
16
17
|
builder.add_reference_number reference_number
|
17
18
|
end
|
@@ -43,8 +43,24 @@ describe UPS::Connection do
|
|
43
43
|
it "should do what ever it takes to get that shipment shipped!" do
|
44
44
|
subject.wont_equal false
|
45
45
|
subject.success?.must_equal true
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return the label data" do
|
49
|
+
subject.label_graphic_image.must_be_kind_of File
|
50
|
+
subject.label_html_image.must_be_kind_of File
|
51
|
+
subject.label_graphic_extension.must_equal '.gif'
|
52
|
+
|
46
53
|
subject.graphic_image.must_be_kind_of File
|
47
54
|
subject.html_image.must_be_kind_of File
|
55
|
+
subject.graphic_extension.must_equal '.gif'
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should return the requested customs form data" do
|
59
|
+
subject.form_graphic_image.must_be_kind_of File
|
60
|
+
subject.form_graphic_extension.must_equal '.pdf'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should return the tracking number" do
|
48
64
|
subject.tracking_number.must_equal '1Z2220060292353829'
|
49
65
|
end
|
50
66
|
end
|
data/ups.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ups-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Veeqo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ox
|
@@ -98,6 +98,8 @@ files:
|
|
98
98
|
- lib/ups.rb
|
99
99
|
- lib/ups/builders/address_builder.rb
|
100
100
|
- lib/ups/builders/builder_base.rb
|
101
|
+
- lib/ups/builders/international_invoice_builder.rb
|
102
|
+
- lib/ups/builders/international_invoice_product_builder.rb
|
101
103
|
- lib/ups/builders/organisation_builder.rb
|
102
104
|
- lib/ups/builders/rate_builder.rb
|
103
105
|
- lib/ups/builders/ship_accept_builder.rb
|
@@ -159,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
161
|
version: 1.3.6
|
160
162
|
requirements: []
|
161
163
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.
|
164
|
+
rubygems_version: 2.6.8
|
163
165
|
signing_key:
|
164
166
|
specification_version: 4
|
165
167
|
summary: UPS
|