zanders 3.0.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.ruby-version +1 -1
- data/lib/zanders/catalog.rb +16 -9
- data/lib/zanders/inventory.rb +11 -6
- data/lib/zanders/order.rb +45 -22
- data/lib/zanders/soap_client.rb +9 -9
- data/lib/zanders/version.rb +1 -1
- data/lib/zanders.rb +4 -2
- data/zanders.gemspec +8 -5
- metadata +34 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 667c712dfc6b1d986624a4595a42cae4719dbcfa72049d3f8c5e8d9938f6171e
|
|
4
|
+
data.tar.gz: bbf53fd0f93133f7f3baed35440340cbcb87e8e5cee1f45b945ab277e0d29d3c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9769a9dcae8c327efa69cc6b7ccc518362323bd7e5cf8fd0f358a4ee32aaf79f40c4ecc2626dba29d21d378d7466fadcdff8e422e5f5167e491f925f7f478dce
|
|
7
|
+
data.tar.gz: 8b8eeca66eb86873a07ed24bbb00605f4111870c70e6c735f3b1c6c4551352bdd5b5d18671c76da86dabba79e1891e1e3f0cc5dab3a77b81fa123dcdb54baa3a
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.3.
|
|
1
|
+
2.3.6
|
data/lib/zanders/catalog.rb
CHANGED
|
@@ -1,31 +1,38 @@
|
|
|
1
1
|
module Zanders
|
|
2
2
|
class Catalog < Base
|
|
3
3
|
|
|
4
|
-
CATALOG_FILENAME = 'zandersinv.xml'
|
|
5
|
-
ITEM_NODE_NAME = 'ZandersDataOut'
|
|
4
|
+
CATALOG_FILENAME = 'zandersinv.xml'.freeze
|
|
5
|
+
ITEM_NODE_NAME = 'ZandersDataOut'.freeze
|
|
6
6
|
|
|
7
7
|
def initialize(options = {})
|
|
8
8
|
requires!(options, :username, :password)
|
|
9
9
|
@options = options
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
def self.all(options = {}
|
|
12
|
+
def self.all(options = {})
|
|
13
13
|
requires!(options, :username, :password)
|
|
14
|
-
new(options).all
|
|
14
|
+
new(options).all
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def all
|
|
17
|
+
def all
|
|
18
|
+
items = []
|
|
18
19
|
tempfile = get_file(CATALOG_FILENAME)
|
|
19
20
|
|
|
20
|
-
Nokogiri::XML::Reader.from_io(tempfile).each do |
|
|
21
|
-
next unless
|
|
22
|
-
next unless
|
|
21
|
+
Nokogiri::XML::Reader.from_io(tempfile, nil, Zanders.config.file_encoding).each do |reader|
|
|
22
|
+
next unless reader.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT
|
|
23
|
+
next unless reader.name == ITEM_NODE_NAME
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
node = Nokogiri::XML.parse(reader.outer_xml)
|
|
26
|
+
|
|
27
|
+
_map_hash = map_hash(node.css(ITEM_NODE_NAME))
|
|
28
|
+
|
|
29
|
+
items << _map_hash unless _map_hash.nil?
|
|
25
30
|
end
|
|
26
31
|
|
|
27
32
|
tempfile.close
|
|
28
33
|
tempfile.unlink
|
|
34
|
+
|
|
35
|
+
items
|
|
29
36
|
end
|
|
30
37
|
|
|
31
38
|
protected
|
data/lib/zanders/inventory.rb
CHANGED
|
@@ -8,9 +8,9 @@ module Zanders
|
|
|
8
8
|
@options = options
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def self.all(options = {}
|
|
11
|
+
def self.all(options = {})
|
|
12
12
|
requires!(options, :username, :password)
|
|
13
|
-
new(options).all
|
|
13
|
+
new(options).all
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def self.get_quantity_file(options = {})
|
|
@@ -18,20 +18,25 @@ module Zanders
|
|
|
18
18
|
new(options).get_quantity_file
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def self.quantity(options = {}
|
|
21
|
+
def self.quantity(options = {})
|
|
22
22
|
requires!(options, :username, :password)
|
|
23
|
-
new(options).all
|
|
23
|
+
new(options).all
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
def all
|
|
26
|
+
def all
|
|
27
|
+
items = []
|
|
27
28
|
tempfile = get_file(INVENTORY_FILENAME)
|
|
28
29
|
|
|
29
30
|
Nokogiri::XML(tempfile).xpath('//ZandersDataOut').each do |item|
|
|
30
|
-
|
|
31
|
+
_map_hash = map_hash(item)
|
|
32
|
+
|
|
33
|
+
items << _map_hash unless _map_hash.nil?
|
|
31
34
|
end
|
|
32
35
|
|
|
33
36
|
tempfile.close
|
|
34
37
|
tempfile.unlink
|
|
38
|
+
|
|
39
|
+
items
|
|
35
40
|
end
|
|
36
41
|
|
|
37
42
|
def get_quantity_file
|
data/lib/zanders/order.rb
CHANGED
|
@@ -48,9 +48,19 @@ module Zanders
|
|
|
48
48
|
|
|
49
49
|
items.each do |item|
|
|
50
50
|
order_items.push(item: [
|
|
51
|
-
{
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
{
|
|
52
|
+
key: 'itemNumber',
|
|
53
|
+
value: item[:item_number],
|
|
54
|
+
attributes!: { key: { 'xsi:type' => 'xsd:string' }, value: { 'xsi:type' => 'xsd:string' } }
|
|
55
|
+
}, {
|
|
56
|
+
key: 'quantity',
|
|
57
|
+
value: item[:quantity],
|
|
58
|
+
attributes!: { key: { 'xsi:type' => 'xsd:string' }, value: { 'xsi:type' => 'xsd:string' } }
|
|
59
|
+
}, {
|
|
60
|
+
key: 'allowBackOrder',
|
|
61
|
+
value: false,
|
|
62
|
+
attributes!: { key: { 'xsi:type' => 'xsd:string' }, value: { 'xsi:type' => 'xsd:boolean' } }
|
|
63
|
+
}
|
|
54
64
|
])
|
|
55
65
|
end
|
|
56
66
|
|
|
@@ -74,12 +84,12 @@ module Zanders
|
|
|
74
84
|
end
|
|
75
85
|
else
|
|
76
86
|
shipping_information.push(*[
|
|
77
|
-
{ key: 'shipToName',
|
|
78
|
-
{ key: 'shipToAddress1',
|
|
79
|
-
{ key: 'shipToAddress2',
|
|
80
|
-
{ key: 'shipToCity',
|
|
81
|
-
{ key: 'shipToState',
|
|
82
|
-
{ key: 'shipToZip',
|
|
87
|
+
{ key: 'shipToName', value: address[:name] },
|
|
88
|
+
{ key: 'shipToAddress1', value: address[:address1] },
|
|
89
|
+
{ key: 'shipToAddress2', value: address[:address2] },
|
|
90
|
+
{ key: 'shipToCity', value: address[:city] },
|
|
91
|
+
{ key: 'shipToState', value: address[:state] },
|
|
92
|
+
{ key: 'shipToZip', value: address[:zip] }
|
|
83
93
|
])
|
|
84
94
|
end
|
|
85
95
|
|
|
@@ -107,18 +117,33 @@ module Zanders
|
|
|
107
117
|
key: 'items',
|
|
108
118
|
value: order_items,
|
|
109
119
|
attributes!: {
|
|
110
|
-
key: {
|
|
111
|
-
|
|
120
|
+
key: {
|
|
121
|
+
"xsi:type" => "xsd:string"
|
|
122
|
+
},
|
|
123
|
+
value: {
|
|
124
|
+
"enc:itemType" => "ns2:Map[#{order_items.count}]",
|
|
125
|
+
"enc:arraySize" => order_items.count.to_s,
|
|
126
|
+
"xsi:type" => "enc:Array"
|
|
127
|
+
}
|
|
112
128
|
}
|
|
113
129
|
})
|
|
114
130
|
|
|
115
|
-
|
|
116
|
-
|
|
131
|
+
soap_response = soap_client(ORDER_API_URL).call(:create_order, message: order)
|
|
132
|
+
hash = soap_response.body[:create_order_response][:return][:item]
|
|
117
133
|
|
|
118
|
-
if
|
|
119
|
-
{
|
|
134
|
+
if hash.first[:value] == "0"
|
|
135
|
+
{
|
|
136
|
+
success: true,
|
|
137
|
+
order_number: hash.find { |h| h[:key] == 'orderNumber' }&.dig(:value),
|
|
138
|
+
removed_items: hash.find { |h| h[:key] == 'removedItems' }&.dig(:value, :item),
|
|
139
|
+
raw_xml: soap_response.to_xml
|
|
140
|
+
}
|
|
120
141
|
else
|
|
121
|
-
{
|
|
142
|
+
{
|
|
143
|
+
success: false,
|
|
144
|
+
error_code: hash.first[:value],
|
|
145
|
+
error_message: hash.last[:value]
|
|
146
|
+
}
|
|
122
147
|
end
|
|
123
148
|
end
|
|
124
149
|
|
|
@@ -176,15 +201,15 @@ module Zanders
|
|
|
176
201
|
end
|
|
177
202
|
|
|
178
203
|
def get_shipments(order_number)
|
|
179
|
-
order = build_order_data.merge({ ordernumber: order_number })
|
|
204
|
+
order = build_order_data.merge({ ordernumber: { "@xsi:type" => "xsd:string", :content! => order_number } })
|
|
180
205
|
|
|
181
206
|
response = soap_client(ORDER_API_URL).call(:get_tracking_info, message: order)
|
|
182
207
|
response = response.body[:get_tracking_info_response][:return][:item]
|
|
183
208
|
|
|
184
209
|
if response.first[:value] == "0"
|
|
185
|
-
info =
|
|
210
|
+
info = { shipments: [] }
|
|
211
|
+
|
|
186
212
|
info[:number_of_shipments] = response.find { |i| i[:key] == "numberOfShipments" }[:value].to_i
|
|
187
|
-
info[:shipments] = Array.new
|
|
188
213
|
|
|
189
214
|
if info[:number_of_shipments] > 0
|
|
190
215
|
tracking_numbers = response.find { |i| i[:key] == "trackingNumbers" }[:value]
|
|
@@ -231,7 +256,7 @@ module Zanders
|
|
|
231
256
|
#
|
|
232
257
|
# Returns Hash of username, password, and cast assignments
|
|
233
258
|
def build_order_data
|
|
234
|
-
|
|
259
|
+
{
|
|
235
260
|
:attributes! => {
|
|
236
261
|
order: { "xsi:type" => "ns2:Map" }
|
|
237
262
|
},
|
|
@@ -239,8 +264,6 @@ module Zanders
|
|
|
239
264
|
password: @password,
|
|
240
265
|
testing: @testing
|
|
241
266
|
}
|
|
242
|
-
|
|
243
|
-
hash
|
|
244
267
|
end
|
|
245
268
|
|
|
246
269
|
# Private: Formats the name and phone number into a
|
data/lib/zanders/soap_client.rb
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
module Zanders
|
|
2
2
|
class SoapClient < Base
|
|
3
3
|
|
|
4
|
+
NAMESPACES = {
|
|
5
|
+
"xmlns:env" => "http://www.w3.org/2003/05/soap-envelope",
|
|
6
|
+
"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema",
|
|
7
|
+
"xmlns:xsl" => "http://www.w3.org/2001/XMLSchema-Instance",
|
|
8
|
+
"xmlns:ns2" => "http://xml.apache.org/xml-soap",
|
|
9
|
+
"xmlns:enc" => "http://www.w3.org/2003/05/soap-encoding"
|
|
10
|
+
}
|
|
11
|
+
|
|
4
12
|
##
|
|
5
13
|
# == Item Service
|
|
6
14
|
#
|
|
@@ -12,17 +20,9 @@ module Zanders
|
|
|
12
20
|
protected
|
|
13
21
|
|
|
14
22
|
def soap_client(api_url)
|
|
15
|
-
namespaces = {
|
|
16
|
-
"xmlns:env" => "http://www.w3.org/2003/05/soap-envelope",
|
|
17
|
-
"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema",
|
|
18
|
-
"xmlns:xsl" => "http://www.w3.org/2001/XMLSchema-Instance",
|
|
19
|
-
"xmlns:ns2" => "http://xml.apache.org/xml-soap",
|
|
20
|
-
"xmlns:enc" => "http://www.w3.org/2003/05/soap-encoding"
|
|
21
|
-
}
|
|
22
|
-
|
|
23
23
|
@soap_client ||= Savon.client do
|
|
24
24
|
wsdl(api_url)
|
|
25
|
-
namespaces(
|
|
25
|
+
namespaces(NAMESPACES)
|
|
26
26
|
namespace_identifier(:ns1)
|
|
27
27
|
strip_namespaces true
|
|
28
28
|
ssl_verify_mode :none
|
data/lib/zanders/version.rb
CHANGED
data/lib/zanders.rb
CHANGED
|
@@ -35,6 +35,7 @@ module Zanders
|
|
|
35
35
|
|
|
36
36
|
class Configuration
|
|
37
37
|
attr_accessor :debug_mode
|
|
38
|
+
attr_accessor :file_encoding
|
|
38
39
|
attr_accessor :ftp_host
|
|
39
40
|
attr_accessor :ftp_directory
|
|
40
41
|
|
|
@@ -42,8 +43,9 @@ module Zanders
|
|
|
42
43
|
|
|
43
44
|
def initialize
|
|
44
45
|
@debug_mode ||= false
|
|
45
|
-
@
|
|
46
|
-
@
|
|
46
|
+
@file_encoding ||= 'Windows-1252'
|
|
47
|
+
@ftp_host ||= 'ftp2.gzanders.com'
|
|
48
|
+
@ftp_directory ||= 'Inventory/AmmoReady'
|
|
47
49
|
end
|
|
48
50
|
end
|
|
49
51
|
end
|
data/zanders.gemspec
CHANGED
|
@@ -6,8 +6,8 @@ require 'zanders/version'
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "zanders"
|
|
8
8
|
spec.version = Zanders::VERSION
|
|
9
|
-
spec.authors = ["David Knight"]
|
|
10
|
-
spec.email = ["
|
|
9
|
+
spec.authors = ["David Knight", "Jeffrey Dill"]
|
|
10
|
+
spec.email = ["jeffdill2@gmail.com"]
|
|
11
11
|
|
|
12
12
|
spec.summary = %q{Ruby library for Zanders}
|
|
13
13
|
spec.description = %q{}
|
|
@@ -21,14 +21,17 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
22
22
|
spec.require_paths = ["lib"]
|
|
23
23
|
|
|
24
|
-
spec.
|
|
24
|
+
spec.required_ruby_version = '~> 2.3'
|
|
25
|
+
|
|
26
|
+
spec.add_dependency "nokogiri", "~> 1.11.0"
|
|
25
27
|
spec.add_dependency "savon", "~> 2.11.1"
|
|
28
|
+
spec.add_dependency "wasabi", "~> 3.5.0"
|
|
26
29
|
|
|
27
30
|
spec.add_runtime_dependency "smarter_csv", "~> 1.1.4"
|
|
28
31
|
|
|
29
32
|
spec.add_development_dependency "activesupport", "~> 5"
|
|
30
|
-
spec.add_development_dependency "bundler", "
|
|
31
|
-
spec.add_development_dependency "rake", "
|
|
33
|
+
spec.add_development_dependency "bundler", ">= 2.2.10"
|
|
34
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
|
32
35
|
spec.add_development_dependency "rspec", "~> 3.3"
|
|
33
36
|
spec.add_development_dependency "webmock", "~> 3.4"
|
|
34
37
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: zanders
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 5.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Knight
|
|
8
|
-
|
|
8
|
+
- Jeffrey Dill
|
|
9
|
+
autorequire:
|
|
9
10
|
bindir: exe
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
+
date: 2021-09-15 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: nokogiri
|
|
@@ -16,14 +17,14 @@ dependencies:
|
|
|
16
17
|
requirements:
|
|
17
18
|
- - "~>"
|
|
18
19
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
20
|
+
version: 1.11.0
|
|
20
21
|
type: :runtime
|
|
21
22
|
prerelease: false
|
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
24
|
requirements:
|
|
24
25
|
- - "~>"
|
|
25
26
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
27
|
+
version: 1.11.0
|
|
27
28
|
- !ruby/object:Gem::Dependency
|
|
28
29
|
name: savon
|
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -38,6 +39,20 @@ dependencies:
|
|
|
38
39
|
- - "~>"
|
|
39
40
|
- !ruby/object:Gem::Version
|
|
40
41
|
version: 2.11.1
|
|
42
|
+
- !ruby/object:Gem::Dependency
|
|
43
|
+
name: wasabi
|
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - "~>"
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: 3.5.0
|
|
49
|
+
type: :runtime
|
|
50
|
+
prerelease: false
|
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - "~>"
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: 3.5.0
|
|
41
56
|
- !ruby/object:Gem::Dependency
|
|
42
57
|
name: smarter_csv
|
|
43
58
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -70,30 +85,30 @@ dependencies:
|
|
|
70
85
|
name: bundler
|
|
71
86
|
requirement: !ruby/object:Gem::Requirement
|
|
72
87
|
requirements:
|
|
73
|
-
- - "
|
|
88
|
+
- - ">="
|
|
74
89
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
90
|
+
version: 2.2.10
|
|
76
91
|
type: :development
|
|
77
92
|
prerelease: false
|
|
78
93
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
94
|
requirements:
|
|
80
|
-
- - "
|
|
95
|
+
- - ">="
|
|
81
96
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
97
|
+
version: 2.2.10
|
|
83
98
|
- !ruby/object:Gem::Dependency
|
|
84
99
|
name: rake
|
|
85
100
|
requirement: !ruby/object:Gem::Requirement
|
|
86
101
|
requirements:
|
|
87
|
-
- - "
|
|
102
|
+
- - ">="
|
|
88
103
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
104
|
+
version: 12.3.3
|
|
90
105
|
type: :development
|
|
91
106
|
prerelease: false
|
|
92
107
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
108
|
requirements:
|
|
94
|
-
- - "
|
|
109
|
+
- - ">="
|
|
95
110
|
- !ruby/object:Gem::Version
|
|
96
|
-
version:
|
|
111
|
+
version: 12.3.3
|
|
97
112
|
- !ruby/object:Gem::Dependency
|
|
98
113
|
name: rspec
|
|
99
114
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -124,7 +139,7 @@ dependencies:
|
|
|
124
139
|
version: '3.4'
|
|
125
140
|
description: ''
|
|
126
141
|
email:
|
|
127
|
-
-
|
|
142
|
+
- jeffdill2@gmail.com
|
|
128
143
|
executables: []
|
|
129
144
|
extensions: []
|
|
130
145
|
extra_rdoc_files: []
|
|
@@ -156,24 +171,23 @@ homepage: ''
|
|
|
156
171
|
licenses:
|
|
157
172
|
- MIT
|
|
158
173
|
metadata: {}
|
|
159
|
-
post_install_message:
|
|
174
|
+
post_install_message:
|
|
160
175
|
rdoc_options: []
|
|
161
176
|
require_paths:
|
|
162
177
|
- lib
|
|
163
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
179
|
requirements:
|
|
165
|
-
- - "
|
|
180
|
+
- - "~>"
|
|
166
181
|
- !ruby/object:Gem::Version
|
|
167
|
-
version: '
|
|
182
|
+
version: '2.3'
|
|
168
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
184
|
requirements:
|
|
170
185
|
- - ">="
|
|
171
186
|
- !ruby/object:Gem::Version
|
|
172
187
|
version: '0'
|
|
173
188
|
requirements: []
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
signing_key:
|
|
189
|
+
rubygems_version: 3.0.8
|
|
190
|
+
signing_key:
|
|
177
191
|
specification_version: 4
|
|
178
192
|
summary: Ruby library for Zanders
|
|
179
193
|
test_files: []
|