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 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: []