newgistics 1.0.0 → 1.1.0

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
2
  SHA1:
3
- metadata.gz: a4bcf5101a15db9de29e852df07c6561d08858ae
4
- data.tar.gz: 7f608f2476a8d3cf2bd9ee34122cfb5ea1c1f757
3
+ metadata.gz: 9e4beb6b736d1470b531b46cac3356b06405e5bd
4
+ data.tar.gz: c6743453796386f18b6a7f1b35472e67f491190f
5
5
  SHA512:
6
- metadata.gz: e7b56a167e8451fdf7c0cb5b5a631f8c62d485fc83c9036e07826c9d8a411531db8f80ff43db72ed4aeba07357ce0cf58c34b511467ee5e3b74530a8e1ea7556
7
- data.tar.gz: df095043057ee1c87513bd1e14e15604ef04f8553356beb1035b3a0e46e858c4c9626f2b234540000add8cafbceb17c9b2ceb005b22fad4f9bbfb726c9ca3455
6
+ metadata.gz: 6991c8ec582649313e5c5575a2644d16ea4df560208cbaec6b01218513fea8273b79c22032af7fc85156c96eba0ae98b188776f6d6e87fbebeea0a9746d2ef7e
7
+ data.tar.gz: 472593db28710abbafceb6bd491f38de105919eedd6e27c05586e0bce7618a775d9f9dc9cd13abb12f042bfc7ed86c08509f49d86732649cfdaca4807125ab2f
data/README.md CHANGED
@@ -11,7 +11,7 @@ This Ruby gem allows you to interact with the Newgistics Fulfillment API.
11
11
  Add this line to your application's Gemfile:
12
12
 
13
13
  ```ruby
14
- gem 'newgistics', github: 'rocketsofawesome/newgistics-ruby'
14
+ gem 'newgistics'
15
15
  ```
16
16
 
17
17
  And then execute:
@@ -168,6 +168,20 @@ Newgistics::Inventory.
168
168
  You can use the `where` method to specify the parameters for the Search. Parameter keys will be automatically camelized when sent to
169
169
  Newgistics, for a full list of the available parameters refer to the Newgistics API documentation.
170
170
 
171
+ ### Manifests
172
+
173
+ #### Creating a new Manifest in Newgistics
174
+
175
+ ```ruby
176
+ manifest = Newgistics::Manifest.new(manifest_attributes)
177
+ manifest.save
178
+ ```
179
+
180
+ `manifest_attributes` is a `Hash` containing all the attributes for the manifest, the attributes should map one-to-one to the Newgistics API spec.
181
+
182
+ `manifest.save` will return `true` if the manifest is placed successfully and `false` otherwise, any errors or warnings generated when creating the manifest are available under `manifest.errors` and `manifest.warnings` respectively
183
+
184
+
171
185
  ## Development
172
186
 
173
187
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -25,6 +25,7 @@ require "newgistics/requests/cancel_shipment"
25
25
  require "newgistics/requests/post_shipment"
26
26
  require "newgistics/requests/post_inbound_return"
27
27
  require "newgistics/requests/search"
28
+ require "newgistics/requests/post_manifest"
28
29
  require "newgistics/requests/update_shipment_contents"
29
30
  require "newgistics/response_handlers/cancel_shipment"
30
31
  require "newgistics/response_handlers/post_shipment"
@@ -32,6 +33,9 @@ require "newgistics/response_handlers/post_inbound_return"
32
33
  require "newgistics/response_handlers/post_errors"
33
34
  require "newgistics/response_handlers/search"
34
35
  require "newgistics/response_handlers/update_shipment_contents"
36
+ require "newgistics/response_handlers/post_manifest"
37
+ require "newgistics/manifest_item"
38
+ require "newgistics/manifest"
35
39
  require "newgistics/fee"
36
40
  require "newgistics/shipment"
37
41
  require "newgistics/version"
@@ -0,0 +1,29 @@
1
+ module Newgistics
2
+ class Manifest
3
+ include Virtus.model
4
+
5
+ attribute :id, String
6
+ attribute :manifest_po, String
7
+ attribute :manifest_name, String
8
+ attribute :warehouse_id, String
9
+ attribute :status, String
10
+ attribute :ship_date, Date
11
+ attribute :shipped_via, String
12
+ attribute :tracking_no, String
13
+ attribute :created_date, Timestamp
14
+ attribute :estimated_arrival_date, Date
15
+ attribute :pallet_count, Integer
16
+ attribute :carton_count, Integer
17
+ attribute :weight, Float
18
+ attribute :notes, String
19
+ attribute :contents, Array[ManifestItem], default: []
20
+
21
+ attribute :errors, Array[String], default: []
22
+ attribute :warnings, Array[String], default: []
23
+
24
+ def save
25
+ Requests::PostManifest.new(self).perform
26
+ errors.empty?
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ module Newgistics
2
+ class ManifestItem
3
+ include Virtus.model
4
+
5
+ attribute :sku, String
6
+ attribute :description, String
7
+ attribute :original_qty, Integer
8
+ attribute :received_qty, Integer
9
+ end
10
+ end
@@ -0,0 +1,90 @@
1
+ module Newgistics
2
+ module Requests
3
+ class PostManifest
4
+ attr_reader :manifest, :response_handler
5
+
6
+ def initialize(manifest, response_handler: nil)
7
+ @manifest = manifest
8
+ @response_handler = response_handler || default_response_handler
9
+ end
10
+
11
+ def path
12
+ '/post_manifests.aspx'
13
+ end
14
+
15
+ def body
16
+ xml_builder.to_xml
17
+ end
18
+
19
+ def perform
20
+ Newgistics.api.post(self, response_handler)
21
+ end
22
+
23
+ private
24
+
25
+ def api_key
26
+ Newgistics.configuration.api_key
27
+ end
28
+
29
+ def xml_builder
30
+ Nokogiri::XML::Builder.new do |xml|
31
+ manifests_xml(xml)
32
+ end
33
+ end
34
+
35
+ def manifests_xml(xml)
36
+ xml.manifests(apiKey: api_key) do
37
+ manifest_xml(xml)
38
+ end
39
+ end
40
+
41
+ def manifest_xml(xml)
42
+ xml.manifest do
43
+ manifest_slip_xml(xml)
44
+ contents_xml(xml)
45
+ end
46
+ end
47
+
48
+ def manifest_slip_xml(xml)
49
+ xml.manifest_slip do
50
+ xml.manifest_po manifest.manifest_po
51
+ xml.manifest_name manifest.manifest_name
52
+ xml.warehouse_id manifest.warehouse_id
53
+ xml.status manifest.status
54
+ xml.tracking_no manifest.tracking_no
55
+ xml.pallet_count manifest.pallet_count
56
+ xml.carton_count manifest.carton_count
57
+ xml.weight manifest.weight
58
+ xml.notes manifest.notes
59
+
60
+ date_xml(xml, :ship_date)
61
+ date_xml(xml, :estimated_arrival_date)
62
+ end
63
+ end
64
+
65
+ def date_xml(xml, attribute)
66
+ date = manifest.send(attribute)
67
+ xml.send(attribute, date.strftime("%m/%d/%Y")) unless date.nil?
68
+ end
69
+
70
+ def contents_xml(xml)
71
+ xml.contents do
72
+ manifest.contents.each { |item| item_xml(item, xml) }
73
+ end
74
+ end
75
+
76
+ def item_xml(item, xml)
77
+ xml.item do
78
+ xml.sku item.sku
79
+ xml.description item.description
80
+ xml.original_qty item.original_qty
81
+ xml.received_qty item.received_qty
82
+ end
83
+ end
84
+
85
+ def default_response_handler
86
+ ResponseHandlers::PostManifest.new(manifest)
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,23 @@
1
+ module Newgistics
2
+ module ResponseHandlers
3
+ class PostManifest
4
+ attr_reader :manifest
5
+
6
+ def initialize(manifest)
7
+ @manifest = manifest
8
+ end
9
+
10
+ def handle(response)
11
+ PostErrors.new(manifest).handle(response)
12
+ handle_successful_response(response) if manifest.errors.empty?
13
+ end
14
+
15
+ private
16
+
17
+ def handle_successful_response(response)
18
+ xml = Nokogiri::XML(response.body)
19
+ manifest.id = xml.at_css('manifest')['id']
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module Newgistics
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newgistics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Martinez
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-05-02 00:00:00.000000000 Z
12
+ date: 2018-09-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: virtus
@@ -193,7 +193,6 @@ files:
193
193
  - ".rspec"
194
194
  - ".ruby-version"
195
195
  - ".simplecov"
196
- - ".travis.yml"
197
196
  - CODE_OF_CONDUCT.md
198
197
  - Gemfile
199
198
  - LICENSE.txt
@@ -211,17 +210,21 @@ files:
211
210
  - lib/newgistics/inbound_return.rb
212
211
  - lib/newgistics/inventory.rb
213
212
  - lib/newgistics/item.rb
213
+ - lib/newgistics/manifest.rb
214
+ - lib/newgistics/manifest_item.rb
214
215
  - lib/newgistics/order.rb
215
216
  - lib/newgistics/product.rb
216
217
  - lib/newgistics/query.rb
217
218
  - lib/newgistics/requests/cancel_shipment.rb
218
219
  - lib/newgistics/requests/post_inbound_return.rb
220
+ - lib/newgistics/requests/post_manifest.rb
219
221
  - lib/newgistics/requests/post_shipment.rb
220
222
  - lib/newgistics/requests/search.rb
221
223
  - lib/newgistics/requests/update_shipment_contents.rb
222
224
  - lib/newgistics/response_handlers/cancel_shipment.rb
223
225
  - lib/newgistics/response_handlers/post_errors.rb
224
226
  - lib/newgistics/response_handlers/post_inbound_return.rb
227
+ - lib/newgistics/response_handlers/post_manifest.rb
225
228
  - lib/newgistics/response_handlers/post_shipment.rb
226
229
  - lib/newgistics/response_handlers/search.rb
227
230
  - lib/newgistics/response_handlers/update_shipment_contents.rb
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.1
5
- before_install: gem install bundler -v 1.15.3