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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 89bbfb0b8419f723b3961add32b0ab0dc1b6c70a
4
- data.tar.gz: 0a8cbe3047e4e1331423f66d7b7b95513419c91e
2
+ SHA256:
3
+ metadata.gz: 667c712dfc6b1d986624a4595a42cae4719dbcfa72049d3f8c5e8d9938f6171e
4
+ data.tar.gz: bbf53fd0f93133f7f3baed35440340cbcb87e8e5cee1f45b945ab277e0d29d3c
5
5
  SHA512:
6
- metadata.gz: 74ed395a7d1f728a9f4d0c2f65d8ecc4ce552b4f266e86fff6a15034945a2c4b81a822b81b6d4f3bbb2465005228d8fa00bbc56c581c2a1bdcd01836aba92c93
7
- data.tar.gz: 66a084e8ef02b7acb4211a27c38baf098cdbd44cc3dcca31e765aa82f9dbf9966cd56807daf9ca279ea62c6a540f47d16a3219e87d8a3e8e671cd9111bf2c48e
6
+ metadata.gz: 9769a9dcae8c327efa69cc6b7ccc518362323bd7e5cf8fd0f358a4ee32aaf79f40c4ecc2626dba29d21d378d7466fadcdff8e422e5f5167e491f925f7f478dce
7
+ data.tar.gz: 8b8eeca66eb86873a07ed24bbb00605f4111870c70e6c735f3b1c6c4551352bdd5b5d18671c76da86dabba79e1891e1e3f0cc5dab3a77b81fa123dcdb54baa3a
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.1
1
+ 2.3.6
@@ -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 = {}, &block)
12
+ def self.all(options = {})
13
13
  requires!(options, :username, :password)
14
- new(options).all &block
14
+ new(options).all
15
15
  end
16
16
 
17
- def all(&block)
17
+ def all
18
+ items = []
18
19
  tempfile = get_file(CATALOG_FILENAME)
19
20
 
20
- Nokogiri::XML::Reader.from_io(tempfile).each do |node|
21
- next unless node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT
22
- next unless node.name == ITEM_NODE_NAME
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
- yield map_hash(Nokogiri::XML::DocumentFragment.parse(node.inner_xml))
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
@@ -8,9 +8,9 @@ module Zanders
8
8
  @options = options
9
9
  end
10
10
 
11
- def self.all(options = {}, &block)
11
+ def self.all(options = {})
12
12
  requires!(options, :username, :password)
13
- new(options).all &block
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 = {}, &block)
21
+ def self.quantity(options = {})
22
22
  requires!(options, :username, :password)
23
- new(options).all &block
23
+ new(options).all
24
24
  end
25
25
 
26
- def all(&block)
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
- yield map_hash(item)
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
- { key: 'itemNumber', value: item[:item_number], attributes!: { key: {'xsi:type' => 'xsd:string'}, value: {'xsi:type' => 'xsd:string'} }},
52
- { key: 'quantity', value: item[:quantity] , attributes!: { key: {'xsi:type' => 'xsd:string'}, value: {'xsi:type' => 'xsd:string'} }},
53
- { key: 'allowBackOrder', value: false, attributes!: { key: { 'xsi:type' => 'xsd:string' }, value: {'xsi:type' => 'xsd:boolean'} }}
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', value: address[:name] },
78
- { key: 'shipToAddress1', value: address[:address1] },
79
- { key: 'shipToAddress2', value: address[:address2] },
80
- { key: 'shipToCity', value: address[:city] },
81
- { key: 'shipToState', value: address[:state] },
82
- { key: 'shipToZip', value: address[:zip] }
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: {"xsi:type" => "xsd:string"},
111
- value: {"enc:itemType" => "ns2:Map[#{order_items.count}]", "enc:arraySize" => order_items.count.to_s, "xsi:type" => "enc:Array"}
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
- response = soap_client(ORDER_API_URL).call(:create_order, message: order)
116
- response = response.body[:create_order_response][:return][:item]
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 response.first[:value] == "0"
119
- { success: true, order_number: response.last[:value] }
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
- { success: false, error_code: response.first[:value], error_message: response.last[:value] }
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 = Hash.new
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
- hash = {
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
@@ -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(namespaces)
25
+ namespaces(NAMESPACES)
26
26
  namespace_identifier(:ns1)
27
27
  strip_namespaces true
28
28
  ssl_verify_mode :none
@@ -1,3 +1,3 @@
1
1
  module Zanders
2
- VERSION = '3.0.0'.freeze
2
+ VERSION = '5.0.1'.freeze
3
3
  end
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
- @ftp_host ||= "ftp2.gzanders.com"
46
- @ftp_directory ||= "Inventory/AmmoReady"
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 = ["viacoffee@gmail.com"]
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.add_dependency "nokogiri", "~> 1.6"
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", "~> 1.14"
31
- spec.add_development_dependency "rake", "~> 10.0"
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: 3.0.0
4
+ version: 5.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Knight
8
- autorequire:
8
+ - Jeffrey Dill
9
+ autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2018-07-17 00:00:00.000000000 Z
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: '1.6'
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: '1.6'
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: '1.14'
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: '1.14'
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: '10.0'
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: '10.0'
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
- - viacoffee@gmail.com
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: '0'
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
- rubyforge_project:
175
- rubygems_version: 2.6.12
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: []