zanders 3.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|