weighflow_cli 0.2.1 → 0.2.6
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 +4 -4
- data/.byebug_history +19 -0
- data/Gemfile.lock +2 -2
- data/README.md +6 -4
- data/lib/weighflow_cli.rb +36 -8
- data/lib/weighflow_cli/cli.rb +137 -13
- data/lib/weighflow_cli/client.rb +24 -6
- data/lib/weighflow_cli/order_handler.rb +11 -3
- data/lib/weighflow_cli/rendering.rb +1 -1
- data/lib/weighflow_cli/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c003dbce7d10d625735cafea74cdf9deee25abc1c98efc66439a437c7070d918
|
4
|
+
data.tar.gz: 21778039bbb29a51798a296f04e98c6bbc7d3d437633bc68370a738b6de9ae88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b65df818087d76d495e53c346617f32182444d254bd3794332205eb3e78bf1bbae8469ad486cfae31f74e8b59d2a7384b998b56728f6cae7c6bbdab98dea5257
|
7
|
+
data.tar.gz: 721899efee2b692248458c01e75ff21e3f859b46ed8a45e5704e35fcb24809ed100022bc15caf1b95a20aadaeede59d3db51e94343adb91f8b65edee8fb5d355
|
data/.byebug_history
CHANGED
@@ -1,4 +1,23 @@
|
|
1
1
|
c
|
2
|
+
weight_params
|
3
|
+
c
|
4
|
+
weight_params
|
5
|
+
q
|
6
|
+
weight_params
|
7
|
+
c
|
8
|
+
weight_params
|
9
|
+
q
|
10
|
+
weight_params
|
11
|
+
ap weight_params
|
12
|
+
c
|
13
|
+
ap weight_params
|
14
|
+
require 'awesome_print'
|
15
|
+
ap weight_params
|
16
|
+
c
|
17
|
+
commodity_inbounds[:orders]
|
18
|
+
inventory_inbounds[:orders]
|
19
|
+
inventory_outbounds[:orders]
|
20
|
+
c
|
2
21
|
response.code
|
3
22
|
response.success?
|
4
23
|
c
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
weighflow_cli (0.2.
|
4
|
+
weighflow_cli (0.2.5)
|
5
5
|
httparty
|
6
6
|
thor (~> 1.1.0)
|
7
7
|
|
@@ -17,7 +17,7 @@ GEM
|
|
17
17
|
multi_xml (>= 0.5.2)
|
18
18
|
mime-types (3.3.1)
|
19
19
|
mime-types-data (~> 3.2015)
|
20
|
-
mime-types-data (3.
|
20
|
+
mime-types-data (3.2021.0225)
|
21
21
|
multi_xml (0.6.0)
|
22
22
|
rake (13.0.3)
|
23
23
|
rspec (3.10.0)
|
data/README.md
CHANGED
@@ -22,13 +22,15 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
From a console prompt simple type:
|
26
26
|
|
27
|
-
|
27
|
+
```bash
|
28
28
|
|
29
|
-
|
29
|
+
$ weighflow_cli
|
30
30
|
|
31
|
-
|
31
|
+
```
|
32
|
+
|
33
|
+
Follow menu instructions
|
32
34
|
|
33
35
|
## Contributing
|
34
36
|
|
data/lib/weighflow_cli.rb
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'thor'
|
4
4
|
require 'httparty'
|
5
|
-
require 'awesome_print'
|
6
|
-
require 'byebug'
|
7
5
|
|
8
6
|
require_relative "weighflow_cli/version"
|
9
7
|
require_relative 'weighflow_cli/rendering'
|
@@ -17,18 +15,27 @@ module WeighflowCli
|
|
17
15
|
|
18
16
|
class Error < StandardError; end
|
19
17
|
#
|
20
|
-
_ROOT_PATH = File.expand_path('
|
18
|
+
_ROOT_PATH = File.expand_path('~/.weighflow_cli').freeze
|
21
19
|
#
|
22
|
-
|
23
|
-
DATA_PATH = ENV['WEIGHFLOW_CLI_PATH'] || File.join(_ROOT_PATH, '.data')
|
20
|
+
Dir.mkdir(_ROOT_PATH) unless Dir.exists?(_ROOT_PATH)
|
24
21
|
#
|
22
|
+
# Provide an override to relocate data directory
|
23
|
+
DATA_PATH = ENV['WEIGHFLOW_CLI_PATH'] || File.join(_ROOT_PATH, 'data')
|
25
24
|
#
|
26
|
-
#
|
25
|
+
#
|
26
|
+
# Ensure data path
|
27
27
|
Dir.mkdir(DATA_PATH) unless Dir.exists?(DATA_PATH)
|
28
28
|
#
|
29
29
|
|
30
30
|
Configuration = Struct.new(:secret, :url)
|
31
31
|
|
32
|
+
##
|
33
|
+
# This can be used to set the +secret+ and +url+ for api credentials
|
34
|
+
# this setting can be done at the console, via
|
35
|
+
# weighflow_cli login
|
36
|
+
# or through in code if using the gem within your own code by supplying
|
37
|
+
# a block and passing in the credientials.
|
38
|
+
#
|
32
39
|
def self.configuration
|
33
40
|
if block_given?
|
34
41
|
configuration = Configuration.new
|
@@ -39,24 +46,45 @@ module WeighflowCli
|
|
39
46
|
end
|
40
47
|
|
41
48
|
|
49
|
+
##
|
50
|
+
# Creates an instance of the API client lib for direct access to the api
|
42
51
|
def self.client
|
43
52
|
@client ||= Client.new(configuration)
|
44
53
|
end
|
45
54
|
|
46
55
|
|
56
|
+
##
|
57
|
+
# Pull down the orders and store in the local repository data path
|
58
|
+
# * This is used to management order changes
|
59
|
+
#
|
47
60
|
def self.pull
|
48
61
|
WeighflowCli::OrderHandler.pull
|
49
62
|
end
|
50
63
|
|
51
64
|
|
65
|
+
##
|
66
|
+
# Find a specific order based on the +external_id+ given withing the orders
|
67
|
+
# + Helps to pull order details when needed.
|
52
68
|
def self.find_order(external_id)
|
53
69
|
WeighflowCli::OrderHandler.find_order(external_id)
|
54
70
|
end
|
55
71
|
|
56
72
|
|
57
|
-
def self.list
|
58
|
-
WeighflowCli::OrderHandler.list
|
73
|
+
def self.list(indexes_only: false)
|
74
|
+
WeighflowCli::OrderHandler.list(indexes_only: indexes_only)
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.weights
|
78
|
+
client.weights
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def self.create_weight(params: {})
|
83
|
+
client.create_weight(params: params)
|
59
84
|
end
|
60
85
|
|
86
|
+
def self.void_weight(weight_id, reason)
|
87
|
+
client.void_weight(weight_id, reason)
|
88
|
+
end
|
61
89
|
|
62
90
|
end
|
data/lib/weighflow_cli/cli.rb
CHANGED
@@ -1,23 +1,141 @@
|
|
1
|
-
|
1
|
+
require 'byebug'
|
2
|
+
|
3
|
+
module WeighflowCli
|
4
|
+
|
5
|
+
class Weights < Thor
|
6
|
+
include Rendering
|
7
|
+
|
8
|
+
desc 'from_index [INDEX ID]', 'create weight from index'
|
9
|
+
#option :index, required: true, banner: 'ie. CommodityOrder-T-I-002-3340455-01'
|
10
|
+
option :gross, aliases: '-g', type: :numeric, required: true
|
11
|
+
option :tare, aliases: '-t', type: :numeric, required: true
|
12
|
+
option :certificate, aliases: '-c', required: true
|
13
|
+
def from_index(index_id)
|
14
|
+
raise 'index_id required' unless index_id
|
15
|
+
index = WeighflowCli.find_order(index_id)
|
16
|
+
raise 'index not found for id' unless index && index.data
|
17
|
+
#
|
18
|
+
# parse external id parts
|
19
|
+
order_type, transport, io, location, order_num, lin = index.data[:external_unique_id].to_s.split('-')
|
20
|
+
#
|
21
|
+
# correct for diff in type between order and weight processor
|
22
|
+
order_type = 'Inventory' if order_type == 'BulkInventory'
|
23
|
+
#
|
24
|
+
weight_params = {
|
25
|
+
io: index.data[:i_o],
|
26
|
+
order_id: index.data[:order_id],
|
27
|
+
order_type: order_type,
|
28
|
+
gross_weight: options[:gross].to_i,
|
29
|
+
tare_weight: options[:tare].to_i,
|
30
|
+
weighed_at: Time.now.round,
|
31
|
+
certificate_number: options[:certificate].to_s
|
32
|
+
}
|
33
|
+
|
34
|
+
options_renderer(WeighflowCli.create_weight(params: weight_params), options)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
desc 'template [INDEX_ID]', 'create weight template'
|
39
|
+
def template(index_id)
|
40
|
+
aise 'index_id required' unless index_id
|
41
|
+
index = WeighflowCli.find_order(index_id)
|
42
|
+
raise 'index not found for id' unless index && index.data
|
43
|
+
#
|
44
|
+
# parse external id parts
|
45
|
+
order_type, transport, io, location, order_num, lin = index.data[:external_unique_id].to_s.split('-')
|
46
|
+
#
|
47
|
+
# correct for diff in type between order and weight processor
|
48
|
+
order_type = 'Inventory' if order_type == 'BulkInventory'
|
49
|
+
#
|
50
|
+
weight_params = {
|
51
|
+
io: index.data[:i_o],
|
52
|
+
order_id: index.data[:order_id],
|
53
|
+
order_type: order_type,
|
54
|
+
gross_weight: 0,
|
55
|
+
tare_weight: 0,
|
56
|
+
weighed_at: Time.now.round,
|
57
|
+
certificate_number: "{cert number}"
|
58
|
+
}
|
59
|
+
options_renderer(weight_params, options)
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
desc 'list', 'List weights within the last 24 hours'
|
64
|
+
def list
|
65
|
+
options_renderer(WeighflowCli.weights, options)
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
desc 'create', 'Create a weight given an order'
|
71
|
+
long_desc <<~DESC
|
72
|
+
|
73
|
+
weighflow_cli --file weight.json
|
74
|
+
|
75
|
+
This file should contain a minimum of :
|
76
|
+
|
77
|
+
{
|
78
|
+
order_type: "Commodity",
|
79
|
+
io: "O",
|
80
|
+
order_id: "{integer}",
|
81
|
+
gross_weight: "75000",
|
82
|
+
tare_weight: "25444",
|
83
|
+
weighed_at: "2021-02-26 10:15:41 am",
|
84
|
+
release_number: "",
|
85
|
+
truck_license_number: "",
|
86
|
+
trailer1_license_number: "",
|
87
|
+
trailer2_license_number: "",
|
88
|
+
truck_number: "",
|
89
|
+
driver_name: "",
|
90
|
+
driver_number: ""
|
91
|
+
}
|
92
|
+
|
93
|
+
--
|
94
|
+
DESC
|
95
|
+
option :file, aliases: '-f', required: true, banner: '[File name] json format'
|
96
|
+
def create
|
97
|
+
weight_params = JSON.parse(File.read(options[:file]), symbolize_names: true)
|
98
|
+
puts weight_params
|
99
|
+
|
100
|
+
options_renderer(WeighflowCli.create_weight(params: weight_params), options)
|
101
|
+
#options_renderer(options, options)
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
desc 'void', 'Voided a weight within 24 hours'
|
106
|
+
option :weight_id, required: true
|
107
|
+
option :reason, required: true
|
108
|
+
def void
|
109
|
+
options_renderer(WeighflowCli.void_weight(options[:weight_id], options[:reason]), options)
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
2
114
|
class Cli < Thor
|
3
115
|
include Rendering
|
4
116
|
package_name "WeighflowCli"
|
117
|
+
class_option :yaml, type: :boolean
|
5
118
|
|
119
|
+
desc 'weights', 'weights commands'
|
120
|
+
subcommand 'weights', Weights
|
6
121
|
|
7
122
|
def self.exit_on_failure?
|
8
123
|
false
|
9
124
|
end
|
10
125
|
|
11
|
-
desc "status", "Get system status"
|
12
|
-
method_options yaml: :boolean
|
126
|
+
desc "status", "Get system status"
|
13
127
|
def status
|
14
|
-
|
128
|
+
options_renderer(WeighflowCli.client.status, options)
|
15
129
|
end
|
16
130
|
|
17
131
|
|
132
|
+
desc 'data_path', "Current data path"
|
133
|
+
def data_path
|
134
|
+
puts DATA_PATH
|
135
|
+
end
|
18
136
|
|
19
137
|
|
20
|
-
desc "login", "Save Login
|
138
|
+
desc "login", "Save Login Credentials"
|
21
139
|
def login
|
22
140
|
Credentials.login
|
23
141
|
end
|
@@ -25,9 +143,7 @@ module WeighflowCli
|
|
25
143
|
|
26
144
|
|
27
145
|
|
28
|
-
|
29
|
-
desc "pull", "Pull Orders from Weighflow"
|
30
|
-
method_options yaml: :boolean
|
146
|
+
desc "pull", "Pull Orders from Weighflow"
|
31
147
|
def pull
|
32
148
|
options_renderer(WeighflowCli.pull, options)
|
33
149
|
end
|
@@ -35,18 +151,26 @@ module WeighflowCli
|
|
35
151
|
|
36
152
|
|
37
153
|
|
38
|
-
desc 'list', "List currently pulled orders"
|
39
|
-
method_options yaml: :boolean
|
154
|
+
desc 'list', "List currently pulled orders"
|
40
155
|
def list
|
41
156
|
options_renderer(WeighflowCli.list, options)
|
42
157
|
end
|
43
158
|
|
159
|
+
desc 'indexes', "List currently pulled order indexes"
|
160
|
+
def indexes
|
161
|
+
options_renderer(WeighflowCli.list(indexes_only: true), options)
|
162
|
+
end
|
163
|
+
|
44
164
|
|
45
165
|
|
46
|
-
|
47
166
|
|
48
|
-
|
49
|
-
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
desc 'find_order', 'Find order details'
|
50
174
|
def find_order(external_id)
|
51
175
|
if index = WeighflowCli.find_order(external_id)
|
52
176
|
options_renderer(index.data, options)
|
data/lib/weighflow_cli/client.rb
CHANGED
@@ -15,9 +15,23 @@ module WeighflowCli
|
|
15
15
|
|
16
16
|
|
17
17
|
def status
|
18
|
-
response = self.class.get('/')
|
19
|
-
|
20
|
-
|
18
|
+
response = self.class.get('/')
|
19
|
+
render_json(response)
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_weight(params: {})
|
23
|
+
response = self.class.post('/weights', body: params)
|
24
|
+
render_json(response)
|
25
|
+
end
|
26
|
+
|
27
|
+
def void_weight(weight_id, reason)
|
28
|
+
response = self.class.delete("/weights/#{weight_id}", body: { reason: reason })
|
29
|
+
render_json(response)
|
30
|
+
end
|
31
|
+
|
32
|
+
def weights
|
33
|
+
response = self.class.get('/weights')
|
34
|
+
render_json(response)
|
21
35
|
end
|
22
36
|
|
23
37
|
|
@@ -42,15 +56,19 @@ module WeighflowCli
|
|
42
56
|
private
|
43
57
|
|
44
58
|
def find_orders(selection: 'OC')
|
45
|
-
response = self.class.get('/orders
|
46
|
-
|
47
|
-
JSON.parse(response.body, symbolize_names: true)
|
59
|
+
response = self.class.get('/orders', query: { s: selection })
|
60
|
+
render_json(response)
|
48
61
|
end
|
49
62
|
|
50
63
|
def render_error(response)
|
51
64
|
raise Error, "Problem accessing Weighflow API #{response.code} : #{response.body}"
|
52
65
|
end
|
53
66
|
|
67
|
+
def render_json(response)
|
68
|
+
render_error(response) unless response.success?
|
69
|
+
JSON.parse(response.body, symbolize_names: true)
|
70
|
+
end
|
71
|
+
|
54
72
|
end
|
55
73
|
|
56
74
|
end
|
@@ -15,6 +15,7 @@ module WeighflowCli
|
|
15
15
|
inventory_inbounds = WeighflowCli.client.bulk_inventory_inbound_truck
|
16
16
|
#
|
17
17
|
# combine
|
18
|
+
|
18
19
|
orders = commodity_outbounds[:orders] + commodity_inbounds[:orders] + inventory_outbounds[:orders] + inventory_inbounds[:orders]
|
19
20
|
#
|
20
21
|
diff = OrderRepository.new(orders)
|
@@ -38,11 +39,15 @@ module WeighflowCli
|
|
38
39
|
|
39
40
|
#
|
40
41
|
# List all orders currently in stored repository
|
41
|
-
def self.list
|
42
|
+
def self.list(indexes_only: false)
|
42
43
|
result = []
|
43
44
|
finder = Finder.new
|
44
45
|
finder.for_each_index do |index|
|
45
|
-
|
46
|
+
if indexes_only
|
47
|
+
result << index.index
|
48
|
+
else
|
49
|
+
result << index.data
|
50
|
+
end
|
46
51
|
end
|
47
52
|
result
|
48
53
|
end
|
@@ -155,7 +160,8 @@ module WeighflowCli
|
|
155
160
|
|
156
161
|
def data
|
157
162
|
return @data if defined?(@data)
|
158
|
-
return
|
163
|
+
return {} unless @file_name
|
164
|
+
return {} unless File.exists?(@file_name)
|
159
165
|
@data = JSON.parse(File.read(@file_name), symbolize_names: true)
|
160
166
|
end
|
161
167
|
|
@@ -166,6 +172,8 @@ module WeighflowCli
|
|
166
172
|
end
|
167
173
|
|
168
174
|
|
175
|
+
#
|
176
|
+
#
|
169
177
|
class Finder
|
170
178
|
include Handlers
|
171
179
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weighflow_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruce Martin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|