rex11 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/.gitignore +18 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +110 -0
  6. data/Rakefile +7 -0
  7. data/lib/rex11/client.rb +307 -0
  8. data/lib/rex11/version.rb +3 -0
  9. data/lib/rex11.rb +2 -5
  10. data/rex11.gemspec +25 -0
  11. data/spec/fixtures/authentication_token_get_request.xml +10 -0
  12. data/spec/fixtures/authentication_token_get_response_error.xml +9 -0
  13. data/spec/fixtures/authentication_token_get_response_success.xml +7 -0
  14. data/spec/fixtures/cancel_pick_ticket_request.xml +9 -0
  15. data/spec/fixtures/cancel_pick_ticket_response_error.xml +22 -0
  16. data/spec/fixtures/cancel_pick_ticket_response_success.xml +16 -0
  17. data/spec/fixtures/get_pick_ticket_object_by_bar_code_request.xml +9 -0
  18. data/spec/fixtures/get_pick_ticket_object_by_bar_code_response_error.xml +16 -0
  19. data/spec/fixtures/get_pick_ticket_object_by_bar_code_response_success.xml +106 -0
  20. data/spec/fixtures/pick_ticket_add_request.xml +52 -0
  21. data/spec/fixtures/pick_ticket_add_response_error.xml +27 -0
  22. data/spec/fixtures/pick_ticket_add_response_success.xml +16 -0
  23. data/spec/fixtures/receiving_ticket_add_request.xml +46 -0
  24. data/spec/fixtures/receiving_ticket_add_response_error.xml +22 -0
  25. data/spec/fixtures/receiving_ticket_add_response_success.xml +10 -0
  26. data/spec/fixtures/style_master_product_add_request.xml +20 -0
  27. data/spec/fixtures/style_master_product_add_response_error.xml +32 -0
  28. data/spec/fixtures/style_master_product_add_response_success.xml +16 -0
  29. data/spec/fixtures/text.xml +103 -0
  30. data/spec/lib/client_spec.rb +341 -0
  31. data/spec/spec_helper.rb +9 -0
  32. data/spec/support/spec_helper_methods.rb +6 -0
  33. data/spec/test_run.rb +125 -0
  34. metadata +127 -7
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ .idea
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.3@rex11
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rex11.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Andy Shin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # Rex11
2
+
3
+ Ruby Library for REX11 Warehouse Management System
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rex11'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install rex11
18
+
19
+ ## Usage
20
+
21
+ Initialize Rex11 client:
22
+
23
+ require "rex11"
24
+ client = Rex11::Client.new("rex_username", "rex_password", "rex_web_address")
25
+
26
+ Create style master:
27
+
28
+ item = {
29
+ :style => "ABC123",
30
+ :upc => "ABC123",
31
+ :size => "LARGE",
32
+ :price => "100.0",
33
+ :color => "Black",
34
+ :description => "Chanel Red Skirt"
35
+ }
36
+
37
+ client.add_style(item)
38
+
39
+ Create pick ticket for items:
40
+
41
+ items = [
42
+ {:style => "ABC123",
43
+ :upc => "ABC123",
44
+ :size => "LARGE",
45
+ :color => "Black",
46
+ :description => "Chanel Red Skirt",
47
+ :quantity => "1",
48
+ :comments => "These are the comments.",
49
+ :shipment_type => "GOH"
50
+ },
51
+ {:style => "DEF123",
52
+ :upc => "DEF123",
53
+ :size => "SMALL",
54
+ :color => "Blue",
55
+ :description => "Balenciaga Purple Blouse",
56
+ :quantity => "1",
57
+ :comments => "Slightly damaged",
58
+ :shipment_type => "FLAT"
59
+ }
60
+ ]
61
+
62
+ ship_to_address = {:first_name => "Joe",
63
+ :last_name => "Shmoe",
64
+ :company_name => "Time Magazine",
65
+ :address1 => "1271 Avenue of the Americas",
66
+ :city => "New York",
67
+ :state => "NY",
68
+ :zip => "10020",
69
+ :country => "US",
70
+ :phone => "212-522-1212",
71
+ :email => "time@magazine.com"
72
+ }
73
+
74
+ pick_ticket_id = "23022012012557"
75
+ pick_ticket_options = {
76
+ :pick_ticket_id => pick_ticket_id,
77
+ :warehouse => "The Warehouse",
78
+ :payment_terms => "NET",
79
+ :use_ups_account => "1",
80
+ :ship_via_account_number => "1AB345",
81
+ :ship_via => "UPS",
82
+ :ship_service => "UPS GROUND - Commercial",
83
+ :billing_option => "PREPAID",
84
+ :bill_to_address => {
85
+ :first_name => "Jane",
86
+ :last_name => "Smith",
87
+ :company_name => "Netaporter",
88
+ :address1 => "725 Darlington Avenue",
89
+ :city => "Mahwah",
90
+ :state => "NJ",
91
+ :zip => "07430",
92
+ :country => "US",
93
+ :phone => "212-522-1212",
94
+ :email => "net@netaporter.com"
95
+ }
96
+ }
97
+
98
+ client.create_pick_ticket(items, ship_to_address, pick_ticket_options)
99
+
100
+
101
+
102
+
103
+
104
+ ## Contributing
105
+
106
+ 1. Fork it
107
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
108
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
109
+ 4. Push to the branch (`git push origin my-new-feature`)
110
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -0,0 +1,307 @@
1
+ require "builder"
2
+ require 'xmlsimple'
3
+ require 'net/http'
4
+
5
+ module Rex11
6
+ class Client
7
+
8
+ TEST_HOST = "sync.rex11.com"
9
+ TEST_PATH = "/ws/v2staging/publicapiws.asmx"
10
+ LIVE_HOST = "sync.rex11.com"
11
+ LIVE_PATH = "/ws/v2prod/publicapiws.asmx"
12
+
13
+ attr_accessor :auth_token
14
+
15
+ def initialize(username, password, web_address, testing = false, options = {})
16
+ raise "Username is required" unless username
17
+ raise "Password is required" unless password
18
+
19
+ default_options = {
20
+ :logging => true,
21
+ }
22
+ @options = default_options.update(options)
23
+
24
+ @username = username
25
+ @password = password
26
+ @web_address = web_address
27
+
28
+ @logging = options[:logging]
29
+ @host = testing ? TEST_HOST : LIVE_HOST
30
+ @path = testing ? TEST_PATH : LIVE_PATH
31
+
32
+ end
33
+
34
+ def authenticate
35
+ xml = Builder::XmlMarkup.new
36
+ xml.instruct!
37
+ xml.soap :Envelope, :"xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/", :"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", :"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" do
38
+ xml.soap :Body do
39
+ xml.AuthenticationTokenGet(:xmlns => "http://rex11.com/webmethods/") do |xml|
40
+ xml.WebAddress(@web_address)
41
+ xml.UserName(@username)
42
+ xml.Password(@password)
43
+ end
44
+ end
45
+ end
46
+ parse_authenticate_response(commit(xml.target!))
47
+ end
48
+
49
+ def add_style(item)
50
+ require_auth_token
51
+ xml_request = Builder::XmlMarkup.new
52
+ xml_request.instruct!
53
+ xml_request.soap :Envelope, :"xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/", :"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", :"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" do
54
+ xml_request.soap :Body do
55
+ xml_request.StyleMasterProductAdd(:xmlns => "http://rex11.com/webmethods/") do |xml_request|
56
+ xml_request.AuthenticationString(@auth_token)
57
+ xml_request.products do |xml_request|
58
+ xml_request.StyleMasterProduct do |xml_request|
59
+ xml_request.Style(item[:style], :xmlns => "http://rex11.com/swpublicapi/StyleMasterProduct.xsd")
60
+ xml_request.UPC(item[:upc], :xmlns => "http://rex11.com/swpublicapi/StyleMasterProduct.xsd")
61
+ xml_request.Size(item[:size], :xmlns => "http://rex11.com/swpublicapi/StyleMasterProduct.xsd")
62
+ xml_request.Color(item[:color], :xmlns => "http://rex11.com/swpublicapi/StyleMasterProduct.xsd")
63
+ xml_request.Description(item[:description], :xmlns => "http://rex11.com/swpublicapi/StyleMasterProduct.xsd")
64
+ xml_request.Price(item[:price], :xmlns => "http://rex11.com/swpublicapi/StyleMasterProduct.xsd")
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ parse_add_style_response(commit(xml_request.target!))
71
+ end
72
+
73
+ def create_pick_ticket(items, ship_to_address, pick_ticket_options)
74
+ require_auth_token
75
+ xml_request = Builder::XmlMarkup.new
76
+ xml_request.instruct!
77
+ xml_request.soap :Envelope, :"xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/", :"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", :"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" do
78
+ xml_request.soap :Body do
79
+ xml_request.PickTicketAdd(:xmlns => "http://rex11.com/webmethods/") do |xml_request|
80
+ xml_request.AuthenticationString(@auth_token)
81
+ xml_request.PickTicket(:xmlns => "http://rex11.com/swpublicapi/PickTicket.xsd") do |xml_request|
82
+ xml_request.PickTicketNumber(pick_ticket_options[:pick_ticket_id])
83
+ xml_request.WareHouse(pick_ticket_options[:warehouse])
84
+ xml_request.PaymentTerms(pick_ticket_options[:payment_terms])
85
+ xml_request.UseAccountUPS(pick_ticket_options[:use_ups_account])
86
+ xml_request.ShipViaAccountNumber(pick_ticket_options[:ship_via_account_number])
87
+ xml_request.ShipVia(pick_ticket_options[:ship_via])
88
+ xml_request.ShipService(pick_ticket_options[:ship_service])
89
+ xml_request.BillingOption(pick_ticket_options[:billing_option])
90
+ xml_request.BillToAddress do |xml_request|
91
+ xml_request.FirstName(pick_ticket_options[:bill_to_address][:first_name], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
92
+ xml_request.LastName(pick_ticket_options[:bill_to_address][:last_name], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
93
+ xml_request.CompanyName(pick_ticket_options[:bill_to_address][:company_name], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
94
+ xml_request.Address1(pick_ticket_options[:bill_to_address][:address1], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
95
+ xml_request.Address2(pick_ticket_options[:bill_to_address][:address2], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
96
+ xml_request.City(pick_ticket_options[:bill_to_address][:city], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
97
+ xml_request.State(pick_ticket_options[:bill_to_address][:state], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
98
+ xml_request.Zip(pick_ticket_options[:bill_to_address][:zip], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
99
+ xml_request.Country(pick_ticket_options[:bill_to_address][:country], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
100
+ xml_request.Phone(pick_ticket_options[:bill_to_address][:phone], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
101
+ xml_request.Email(pick_ticket_options[:bill_to_address][:email], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
102
+ end
103
+ xml_request.ShipToAddress do |xml_request|
104
+ xml_request.FirstName(ship_to_address[:first_name], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
105
+ xml_request.LastName(ship_to_address[:last_name], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
106
+ xml_request.CompanyName(ship_to_address[:company_name], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
107
+ xml_request.Address1(ship_to_address[:address1], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
108
+ xml_request.Address2(ship_to_address[:address2], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
109
+ xml_request.City(ship_to_address[:city], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
110
+ xml_request.State(ship_to_address[:state], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
111
+ xml_request.Zip(ship_to_address[:zip], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
112
+ xml_request.Country(ship_to_address[:country], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
113
+ xml_request.Phone(ship_to_address[:phone], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
114
+ xml_request.Email(ship_to_address[:email], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
115
+ end
116
+
117
+ items.each do |item|
118
+ xml_request.LineItem do |xml_request|
119
+ xml_request.UPC(item[:upc], :xmlns => "http://rex11.com/swpublicapi/PickTicketDetails.xsd")
120
+ xml_request.Quantity(item[:quantity], :xmlns => "http://rex11.com/swpublicapi/PickTicketDetails.xsd")
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ parse_pick_ticket_add_response(commit(xml_request.target!))
128
+ end
129
+
130
+ def cancel_pick_ticket(pick_ticket_id)
131
+ require_auth_token
132
+ xml_request = Builder::XmlMarkup.new
133
+ xml_request.instruct!
134
+ xml_request.soap :Envelope, :"xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/", :"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", :"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" do
135
+ xml_request.soap :Body do
136
+ xml_request.CancelPickTicket(:xmlns => "http://rex11.com/webmethods/") do |xml_request|
137
+ xml_request.AuthenticationString(@auth_token)
138
+ xml_request.PickTicketId(pick_ticket_id)
139
+ end
140
+ end
141
+ end
142
+ parse_cancel_pick_ticket(commit(xml_request.target!))
143
+ end
144
+
145
+ def parse_cancel_pick_ticket(xml_response)
146
+ response = XmlSimple.xml_in(xml_response, :ForceArray => ["Notification"])
147
+ response_content = response["Body"]["CancelPickTicketResponse"]["CancelPickTicketResult"]
148
+ error_string = parse_error(response_content)
149
+
150
+ if error_string.empty?
151
+ true
152
+ else
153
+ raise error_string
154
+ end
155
+
156
+ end
157
+
158
+ def pick_ticket_by_number(pick_ticket_id)
159
+ require_auth_token
160
+ xml_request = Builder::XmlMarkup.new
161
+ xml_request.instruct!
162
+ xml_request.soap :Envelope, :"xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/", :"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", :"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" do
163
+ xml_request.soap :Body do
164
+ xml_request.GetPickTicketObjectByBarCode(:xmlns => "http://rex11.com/webmethods/") do |xml_request|
165
+ xml_request.AuthenticationString(@auth_token)
166
+ xml_request.ptbarcode(pick_ticket_id)
167
+ end
168
+ end
169
+ end
170
+ parse_get_pick_ticket_object_by_bar_code(commit(xml_request.target!))
171
+ end
172
+
173
+ def create_receiving_ticket(items, receiving_ticket_options)
174
+ require_auth_token
175
+ xml_request = Builder::XmlMarkup.new
176
+ xml_request.instruct!
177
+ xml_request.soap :Envelope, :"xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/", :"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", :"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" do
178
+ xml_request.soap :Body do
179
+ xml_request.ReceivingTicketAdd(:xmlns => "http://rex11.com/webmethods/") do |xml_request|
180
+ xml_request.AuthenticationString(@auth_token)
181
+ xml_request.receivingTicket(:xmlns => "http://rex11.com/swpublicapi/ReceivingTicket.xsd") do |xml_request|
182
+ items.each do |item|
183
+ xml_request.Shipmentitemslist do |xml_request|
184
+ xml_request.Style(item[:style], :xmlns => "http://rex11.com/swpublicapi/ReceivingTicketItems.xsd")
185
+ xml_request.UPC(item[:upc], :xmlns => "http://rex11.com/swpublicapi/ReceivingTicketItems.xsd")
186
+ xml_request.Size(item[:size], :xmlns => "http://rex11.com/swpublicapi/ReceivingTicketItems.xsd")
187
+ xml_request.Color(item[:color], :xmlns => "http://rex11.com/swpublicapi/ReceivingTicketItems.xsd")
188
+ xml_request.ProductDescription(item[:description], :xmlns => "http://rex11.com/swpublicapi/ReceivingTicketItems.xsd")
189
+ xml_request.ExpectedQuantity(item[:quantity], :xmlns => "http://rex11.com/swpublicapi/ReceivingTicketItems.xsd")
190
+ xml_request.Comments(item[:comments], :xmlns => "http://rex11.com/swpublicapi/ReceivingTicketItems.xsd")
191
+ xml_request.ShipmentType(item[:shipment_type], :xmlns => "http://rex11.com/swpublicapi/ReceivingTicketItems.xsd")
192
+ end
193
+ xml_request.ShipmentTypelist(item[:shipment_type])
194
+ end
195
+ xml_request.Warehouse(receiving_ticket_options[:warehouse])
196
+ xml_request.Memo(receiving_ticket_options[:memo])
197
+ xml_request.Carrier(receiving_ticket_options[:carrier])
198
+ xml_request.SupplierDetails do |xml_request|
199
+ xml_request.CompanyName(receiving_ticket_options[:supplier][:company_name], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
200
+ xml_request.Address1(receiving_ticket_options[:supplier][:address1], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
201
+ xml_request.Address2(receiving_ticket_options[:supplier][:address2], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
202
+ xml_request.City(receiving_ticket_options[:supplier][:city], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
203
+ xml_request.State(receiving_ticket_options[:supplier][:state], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
204
+ xml_request.Zip(receiving_ticket_options[:supplier][:zip], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
205
+ xml_request.Country(receiving_ticket_options[:supplier][:country], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
206
+ xml_request.Phone(receiving_ticket_options[:supplier][:phone], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
207
+ xml_request.Email(receiving_ticket_options[:supplier][:email], :xmlns => "http://rex11.com/swpublicapi/CustomerOrder.xsd")
208
+ end
209
+
210
+ end
211
+ end
212
+ end
213
+ end
214
+ parse_receiving_ticket_add_response(commit(xml_request.target!))
215
+ end
216
+
217
+ private
218
+ def commit(xml_request)
219
+ http = Net::HTTP.new(@host, 80)
220
+ response = http.post(@path, xml_request, {'Content-Type' => 'text/xml'})
221
+ puts response.body if @options[:logging]
222
+ response.body
223
+ end
224
+
225
+ def require_auth_token
226
+ raise "Authentication required for api call" unless @auth_token
227
+ end
228
+
229
+ def parse_authenticate_response(xml_response)
230
+ response = XmlSimple.xml_in(xml_response, :ForceArray => false)
231
+ response_content = response["Body"]["AuthenticationTokenGetResponse"]["AuthenticationTokenGetResult"]
232
+ if response_content and !response_content.empty?
233
+ @auth_token = response_content
234
+ true
235
+ else
236
+ raise "Failed Authentication due invalid username, password, or endpoint"
237
+ end
238
+ end
239
+
240
+ def parse_add_style_response(xml_response)
241
+ response = XmlSimple.xml_in(xml_response, :ForceArray => ["Notification"])
242
+ response_content = response["Body"]["StyleMasterProductAddResponse"]["StyleMasterProductAddResult"]
243
+ error_string = parse_error(response_content)
244
+
245
+ if error_string.empty?
246
+ true
247
+ else
248
+ raise error_string
249
+ end
250
+ end
251
+
252
+ def parse_pick_ticket_add_response(xml_response)
253
+ response = XmlSimple.xml_in(xml_response, :ForceArray => ["Notification"])
254
+ response_content = response["Body"]["PickTicketAddResponse"]["PickTicketAddResult"]
255
+ error_string = parse_error(response_content)
256
+
257
+ if error_string.empty?
258
+ true
259
+ else
260
+ raise error_string
261
+ end
262
+ end
263
+
264
+ def parse_get_pick_ticket_object_by_bar_code(xml_response)
265
+ return_hash = {}
266
+ response = XmlSimple.xml_in(xml_response, :ForceArray => ["Notification"])
267
+ response_content = response["Body"]["GetPickTicketObjectByBarCodeResponse"]["GetPickTicketObjectByBarCodeResult"]
268
+
269
+ pick_ticket_hash = response_content["PickTicket"]
270
+ if pick_ticket_hash and !pick_ticket_hash.empty?
271
+ return_hash.merge!({
272
+ :pick_ticket_id => (value = pick_ticket_hash["PickTicketNumber"]) ? value["content"] : nil,
273
+ :pick_ticket_status => (value = pick_ticket_hash["ShipmentStatus"]) ? value["content"] : nil,
274
+ :pick_ticket_status_code => (value = pick_ticket_hash["ShipmentStatusCode"]) ? value["content"] : nil,
275
+ :shipping_charge => (value = pick_ticket_hash["FreightCharge"]) ? value["content"] : nil,
276
+ :tracking_number => (tracking_number = pick_ticket_hash["TrackingNumber"]) ? tracking_number["content"] : nil
277
+ })
278
+ else
279
+ error_string = parse_error(response_content)
280
+ raise error_string unless error_string.empty?
281
+ end
282
+ end
283
+
284
+ def parse_receiving_ticket_add_response(xml_response)
285
+ response = XmlSimple.xml_in(xml_response, :ForceArray => ["Notification"])
286
+ response_content = response["Body"]["ReceivingTicketAddResponse"]["ReceivingTicketAddResult"]
287
+
288
+ receiving_ticket_id = response_content["ReceivingTicketId"]
289
+ if receiving_ticket_id and !receiving_ticket_id.empty?
290
+ {:receiving_ticket_id => receiving_ticket_id}
291
+ else
292
+ error_string = parse_error(response_content)
293
+ raise error_string unless error_string.empty?
294
+ end
295
+ end
296
+
297
+ def parse_error(response_content)
298
+ error_string = ""
299
+ response_content["Notifications"]["Notification"].each do |notification|
300
+ if notification["ErrorCode"] != "0"
301
+ error_string += "Error " + notification["ErrorCode"] + ": " + notification["Message"] + ". "
302
+ end
303
+ end
304
+ error_string
305
+ end
306
+ end
307
+ end
@@ -0,0 +1,3 @@
1
+ module Rex11
2
+ VERSION = "0.1.0"
3
+ end
data/lib/rex11.rb CHANGED
@@ -1,5 +1,2 @@
1
- class Hola
2
- def self.hi
3
- puts "Hello world!"
4
- end
5
- end
1
+ require 'rex11/client'
2
+ require "rex11/version"
data/rex11.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rex11/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "rex11"
8
+ gem.version = Rex11::VERSION
9
+ gem.authors = ["Andy Shin"]
10
+ gem.email = ["andrewkshin@gmail.com"]
11
+ gem.description = "Ruby Library for REX11 Warehouse Management System"
12
+ gem.summary = "This is a library for interfacing with REX11 Warehouse Management System"
13
+ gem.homepage = "https://www.vaunte.com"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency('builder')
21
+ gem.add_dependency('xml-simple')
22
+
23
+ gem.add_development_dependency 'rake'
24
+ gem.add_development_dependency 'rspec'
25
+ end
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
+ <soap:Body>
4
+ <AuthenticationTokenGet xmlns="http://rex11.com/webmethods/">
5
+ <WebAddress>the_web_address</WebAddress>
6
+ <UserName>the_username</UserName>
7
+ <Password>the_password</Password>
8
+ </AuthenticationTokenGet>
9
+ </soap:Body>
10
+ </soap:Envelope>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
4
+ <soap:Body>
5
+ <AuthenticationTokenGetResponse xmlns="http://rex11.com/webmethods/">
6
+ <AuthenticationTokenGetResult/>
7
+ </AuthenticationTokenGetResponse>
8
+ </soap:Body>
9
+ </soap:Envelope>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
+ <soap:Body><AuthenticationTokenGetResponse xmlns="http://rex11.com/webmethods/">
4
+ <AuthenticationTokenGetResult>4vxVebc3D1zwsXjH9fkFpgpOhewauJbVu25WXjQ1gOo=</AuthenticationTokenGetResult>
5
+ </AuthenticationTokenGetResponse>
6
+ </soap:Body>
7
+ </soap:Envelope>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
+ <soap:Body>
4
+ <CancelPickTicket xmlns="http://rex11.com/webmethods/">
5
+ <AuthenticationString>4vxVebc3D1zwsXjH9fkFpgpOhewauJbVu25WXjQ1gOo=</AuthenticationString>
6
+ <PickTicketId>the_pick_ticket_id</PickTicketId>
7
+ </CancelPickTicket>
8
+ </soap:Body>
9
+ </soap:Envelope>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
4
+ <soap:Body>
5
+ <CancelPickTicketResponse xmlns="http://rex11.com/webmethods/">
6
+ <CancelPickTicketResult>
7
+ <Notifications>
8
+ <Notification>
9
+ <ErrorCode>45</ErrorCode>
10
+ <Severity>PickTicketError</Severity>
11
+ <Message>PickTicket can not be cancelled</Message>
12
+ </Notification>
13
+ <Notification>
14
+ <ErrorCode>45</ErrorCode>
15
+ <Severity>PickTicketError</Severity>
16
+ <Message>PickTicket does not exist</Message>
17
+ </Notification>
18
+ </Notifications>
19
+ </CancelPickTicketResult>
20
+ </CancelPickTicketResponse>
21
+ </soap:Body>
22
+ </soap:Envelope>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
+ <soap:Body>
4
+ <CancelPickTicketResponse xmlns="http://rex11.com/webmethods/">
5
+ <CancelPickTicketResult>
6
+ <Notifications>
7
+ <Notification>
8
+ <ErrorCode>0</ErrorCode>
9
+ <Severity>Success</Severity>
10
+ <Message>PickTicket cancelled</Message>
11
+ </Notification>
12
+ </Notifications>
13
+ </CancelPickTicketResult>
14
+ </CancelPickTicketResponse>
15
+ </soap:Body>
16
+ </soap:Envelope>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
+ <soap:Body>
4
+ <GetPickTicketObjectByBarCode xmlns="http://rex11.com/webmethods/">
5
+ <AuthenticationString>4vxVebc3D1zwsXjH9fkFpgpOhewauJbVu25WXjQ1gOo=</AuthenticationString>
6
+ <ptbarcode>the_pick_ticket_id</ptbarcode>
7
+ </GetPickTicketObjectByBarCode>
8
+ </soap:Body>
9
+ </soap:Envelope>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
+ <soap:Body>
4
+ <GetPickTicketObjectByBarCodeResponse xmlns="http://rex11.com/webmethods/">
5
+ <GetPickTicketObjectByBarCodeResult>
6
+ <Notifications>
7
+ <Notification>
8
+ <ErrorCode>83</ErrorCode>
9
+ <Severity>BarCodeError</Severity>
10
+ <Message>BarCode doesn't exist</Message>
11
+ </Notification>
12
+ </Notifications>
13
+ </GetPickTicketObjectByBarCodeResult>
14
+ </GetPickTicketObjectByBarCodeResponse>
15
+ </soap:Body>
16
+ </soap:Envelope>