purolator-web-services 3.0.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.
@@ -0,0 +1,3 @@
1
+ module PurolatorWebServices
2
+ VERSION = "3.0.0"
3
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'purolator_web_services/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "purolator-web-services"
8
+ spec.version = PurolatorWebServices::VERSION
9
+ spec.authors = ["Brian Abreu"]
10
+ spec.email = ["brian@nuts.com"]
11
+ spec.description = "Provies an interface to the Purolator web services API"
12
+ spec.summary = "Interfaces with the Purolator SOAP API"
13
+ spec.homepage = "https://github.com/brewski/purolator-web-services"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "soap4r-ruby1.9"
22
+ spec.required_ruby_version = '>= 2.0.0'
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.3"
25
+ spec.add_development_dependency "rake"
26
+ end
@@ -0,0 +1,21 @@
1
+ task :generate_definitions do
2
+ require 'wsdl/soap/wsdl2ruby'
3
+
4
+ require 'fileutils'
5
+
6
+ module_path = File.join(%w(lib purolator_web_services soap))
7
+
8
+ Dir.glob(File.expand_path("../wsdl/*.wsdl", __FILE__)).each do |wsdl_file|
9
+ worker = WSDL::SOAP::WSDL2Ruby.new
10
+ worker.basedir = FileUtils.mkdir_p(File.join(module_path)).first
11
+ worker.location = File.new(wsdl_file).path
12
+ worker.logger.level = Logger::WARN
13
+ worker.opt.update(
14
+ "module_path" => "PurolatorWebServices::Soap",
15
+ "mapping_registry" => nil,
16
+ "driver" => nil,
17
+ "classdef" => nil
18
+ )
19
+ worker.run
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ namespace :purolator_web_services do
2
+ task :test do
3
+ Dir.glob(File.expand_path("../../test/*.rb", __FILE__)).each { |file| require file }
4
+ end
5
+ end
@@ -0,0 +1,150 @@
1
+ require 'minitest/autorun'
2
+ require 'purolator_web_services'
3
+ require 'purolator_web_services/soap'
4
+
5
+ require 'date'
6
+ require 'securerandom'
7
+
8
+ class IntegrationTest < MiniTest::Unit::TestCase
9
+ include PurolatorWebServices::Soap
10
+
11
+ def setup
12
+ username, password, client_id = %w(USERNAME PASSWORD CLIENT_ID).map(&ENV.method(:[]))
13
+ unless (username && password && client_id)
14
+ $stderr.puts "missing environment variable USERNAME" unless (username)
15
+ $stderr.puts "missing environment variable PASSWORD" unless (password)
16
+ $stderr.puts "missing environment variable CLIENT_ID" unless (client_id)
17
+ exit
18
+ end
19
+
20
+ @credentials = CredentialInfo.new(username, password, client_id)
21
+ @api = PurolatorWebServices::Api.new(:test)
22
+ end
23
+
24
+ def test_add_order_request
25
+ add_order = AddOrder.new(order_request([ 10.5, 1.0 ]))
26
+ add_order_response = @api.addOrder(add_order)
27
+ assert_equal(0, add_order_response.status)
28
+ assert_equal(2, add_order_response.packages.size)
29
+ ensure
30
+ handle_service_exceptions
31
+ end
32
+
33
+ def test_closeout_request
34
+ add_order = AddOrder.new(order_request([ 10.0, 15.0, 12 ]))
35
+ add_order_response = @api.addOrder(add_order)
36
+ assert_equal(0, add_order_response.status)
37
+
38
+ closeout = Closeout.new(
39
+ CloseoutRequest.new.tap do |closeout_req|
40
+ closeout_req.credentials = @credentials
41
+ closeout_req.shipDate = Date.today
42
+ closeout_req.packIDType = "Pin"
43
+ closeout_req.skidCount = 1
44
+ closeout_req.packageIDs = add_order_response.packages.map(&:trackingNumber)
45
+ end
46
+ )
47
+ closeout_response = @api.closeout(closeout)
48
+ assert_equal(0, closeout_response.status)
49
+ ensure
50
+ handle_service_exceptions
51
+ end
52
+
53
+ def test_void_request
54
+ add_order_a = AddOrder.new(order_request([ 15, 12, 22, 13 ]))
55
+ add_order_b = AddOrder.new(order_request([ 15, 12 ]))
56
+
57
+ assert_equal(0, @api.addOrder(add_order_a).status)
58
+ assert_equal(0, @api.addOrder(add_order_b).status)
59
+
60
+ shipment_numbers = [ add_order_a.request.orderNumber, add_order_b.request.orderNumber ]
61
+ void_orders = VoidOrders.new(
62
+ OrderListRequest.new.tap do |order_list|
63
+ order_list.credentials = @credentials
64
+ order_list.orderNumbers = shipment_numbers
65
+ end
66
+ )
67
+ void_orders_response = @api.voidOrders(void_orders)
68
+ assert_equal(0, void_orders_response.status)
69
+ ensure
70
+ handle_service_exceptions
71
+ end
72
+
73
+ def test_rate_request
74
+ get_rates = GetRates.new(order_request([ 10.0, 15.0, 12.5 ]))
75
+ get_rates_response = @api.getRates(get_rates)
76
+ assert_equal(0, get_rates_response.status)
77
+ ensure
78
+ handle_service_exceptions
79
+ end
80
+
81
+ private
82
+ def handle_service_exceptions
83
+ if ($!.is_a?(PurolatorWebServices::Api::ServiceException))
84
+ flunk("error creating shipment: #{$!.message}")
85
+ end
86
+ end
87
+
88
+ def order_request(package_weights)
89
+ from_address = Address.new
90
+ from_address.name = "Joe Shmoe"
91
+ from_address.add1 = "123 4th St."
92
+ from_address.city = "San Luis Obispo"
93
+ from_address.stateProv = "CA"
94
+ from_address.postalCode = "93401"
95
+ from_address.country = "US"
96
+ from_address.phone = "(123) 456 789"
97
+ from_address.email = "joe@shmoe.com"
98
+
99
+ to_address = Address.new
100
+ to_address.name = "Test Customer Name"
101
+ to_address.add1 = "560 Kings Road"
102
+ to_address.city = "Sydney"
103
+ to_address.stateProv = "NS"
104
+ to_address.postalCode = "B1S1B8"
105
+ to_address.country = "CA"
106
+
107
+ packages = package_weights.map do |weight|
108
+ RequestPackage.new.tap do |package|
109
+ package.packageID = SecureRandom.uuid
110
+ package.weightUOM = "LB"
111
+ package.weight = weight
112
+ package.dimensionUOM = "IN"
113
+ package.dimL = nil
114
+ package.dimW = nil
115
+ package.dimH = nil
116
+ end
117
+ end
118
+
119
+ items = [
120
+ RequestItem.new.tap do |item|
121
+ item.sKU = "SK401232"
122
+ item.customsDesc = "Roasted Nuts"
123
+ item.quantity = 11
124
+ item.totalValue = "98.99"
125
+ item.currency = "USD"
126
+ item.countryOfOrigin = "VN"
127
+ item.hSCode = "2008199020"
128
+ item.nAFTAEligible = false
129
+ item.fDAFood = false
130
+ item.textile = false
131
+ end
132
+ ]
133
+
134
+ request = OrderRequestV3.new
135
+ request.credentials = @credentials
136
+ request.orderNumber = SecureRandom.uuid
137
+ request.shipDate = Date.today
138
+ request.shipMethod = "Ground"
139
+ request.billingOption = "Prepaid"
140
+ request.labelType = "ZPL"
141
+ request.shipFromAddress = from_address
142
+ request.shipToAddress = to_address
143
+ request.declaredValue = "98.99"
144
+ request.currency = "USD"
145
+ request.packages = packages
146
+ request.items = items
147
+
148
+ request
149
+ end
150
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: purolator-web-services
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brian Abreu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: soap4r-ruby1.9
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Provies an interface to the Purolator web services API
56
+ email:
57
+ - brian@nuts.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - lib/purolator_web_services.rb
68
+ - lib/purolator_web_services/api.rb
69
+ - lib/purolator_web_services/railtie.rb
70
+ - lib/purolator_web_services/soap.rb
71
+ - lib/purolator_web_services/soap/default.rb
72
+ - lib/purolator_web_services/soap/defaultDriver.rb
73
+ - lib/purolator_web_services/soap/defaultMappingRegistry.rb
74
+ - lib/purolator_web_services/version.rb
75
+ - purolator-web-services.gemspec
76
+ - tasks/generate_definitions.rake
77
+ - tasks/test.rake
78
+ - test/integration_test.rb
79
+ homepage: https://github.com/brewski/purolator-web-services
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 2.0.0
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.2.0
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: Interfaces with the Purolator SOAP API
103
+ test_files:
104
+ - test/integration_test.rb