weighflow_cli 0.2.4 → 0.2.5

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
2
  SHA256:
3
- metadata.gz: 2832116659539919d396f7461858ed6257755b6c7c86356aa87f099c126fb637
4
- data.tar.gz: 395c8a76161378454bb3d0083e3410f489c07b7f2450a7594d4d7c9ed868bf43
3
+ metadata.gz: 6f43616755fac94a4e1b1afc3095bdfd03ac5dc50dd2b42ee5ae838cf6023f37
4
+ data.tar.gz: 4710b9900bca368eb76a530a15e15681357f513efdb2bdf559ce29e36393f7ba
5
5
  SHA512:
6
- metadata.gz: 5e20d405fe9ce4fafbd0cb91edac5f89825b1b7dfa555d5b5cd086b8ecac3589ee5865f31efe9f9f6a2c309417069a52a69d2ad62e6e06d476760db9ce628b16
7
- data.tar.gz: 20b78c91b1d66d61c2669690b041ac5e27393a33314d0044f5aff8bfd26be6ea90a39c0c0cf9d66db01fcfee3a109431cd9de99cdf9c399a3df535c57359bc7f
6
+ metadata.gz: 8afc73d0d13f07e9f1b893f80040b4dd4d5fa02ad664e7dc55e3567eb9430687cfe9ab956aac8c93bcef93fa80cceb0aa1940010203c2fdc67fbb2fb0f34c7a8
7
+ data.tar.gz: ce913eb0ba65a20389c685c1a5aa4a4f51cd90f2d036949c9ae40930da53b49eecb9ec7bcc1e1dc2dd3ef64666841ba71a18117888daac1309b6f4a69d94c72b
data/.byebug_history CHANGED
@@ -1,4 +1,19 @@
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
2
17
  commodity_inbounds[:orders]
3
18
  inventory_inbounds[:orders]
4
19
  inventory_outbounds[:orders]
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- weighflow_cli (0.2.3)
4
+ weighflow_cli (0.2.4)
5
5
  httparty
6
6
  thor (~> 1.1.0)
7
7
 
data/README.md CHANGED
@@ -22,13 +22,15 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ From a console prompt simple type:
26
26
 
27
- ## Development
27
+ ```bash
28
28
 
29
- 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.
29
+ $ weighflow_cli
30
30
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
31
+ ```
32
+
33
+ Follow menu instructions
32
34
 
33
35
  ## Contributing
34
36
 
data/lib/weighflow_cli.rb CHANGED
@@ -16,18 +16,26 @@ module WeighflowCli
16
16
  class Error < StandardError; end
17
17
  #
18
18
  _ROOT_PATH = File.expand_path('~/.weighflow_cli').freeze
19
+ #
19
20
  Dir.mkdir(_ROOT_PATH) unless Dir.exists?(_ROOT_PATH)
20
21
  #
21
- # Provide an orderride to relocate data directory
22
+ # Provide an override to relocate data directory
22
23
  DATA_PATH = ENV['WEIGHFLOW_CLI_PATH'] || File.join(_ROOT_PATH, 'data')
23
24
  #
24
25
  #
25
- # ensure data path
26
+ # Ensure data path
26
27
  Dir.mkdir(DATA_PATH) unless Dir.exists?(DATA_PATH)
27
28
  #
28
29
 
29
30
  Configuration = Struct.new(:secret, :url)
30
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
+ #
31
39
  def self.configuration
32
40
  if block_given?
33
41
  configuration = Configuration.new
@@ -38,24 +46,45 @@ module WeighflowCli
38
46
  end
39
47
 
40
48
 
49
+ ##
50
+ # Creates an instance of the API client lib for direct access to the api
41
51
  def self.client
42
52
  @client ||= Client.new(configuration)
43
53
  end
44
54
 
45
55
 
56
+ ##
57
+ # Pull down the orders and store in the local repository data path
58
+ # * This is used to management order changes
59
+ #
46
60
  def self.pull
47
61
  WeighflowCli::OrderHandler.pull
48
62
  end
49
63
 
50
64
 
65
+ ##
66
+ # Find a specific order based on the +external_id+ given withing the orders
67
+ # + Helps to pull order details when needed.
51
68
  def self.find_order(external_id)
52
69
  WeighflowCli::OrderHandler.find_order(external_id)
53
70
  end
54
71
 
55
72
 
56
- def self.list
57
- 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)
58
84
  end
59
85
 
86
+ def self.void_weight(weight_id, reason)
87
+ client.void_weight(weight_id, reason)
88
+ end
60
89
 
61
90
  end
@@ -1,15 +1,129 @@
1
- module WeighflowCli
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
@@ -29,8 +143,7 @@ module WeighflowCli
29
143
 
30
144
 
31
145
 
32
- desc "pull", "Pull Orders from Weighflow"
33
- method_options yaml: :boolean
146
+ desc "pull", "Pull Orders from Weighflow"
34
147
  def pull
35
148
  options_renderer(WeighflowCli.pull, options)
36
149
  end
@@ -38,18 +151,26 @@ module WeighflowCli
38
151
 
39
152
 
40
153
 
41
- desc 'list', "List currently pulled orders"
42
- method_options yaml: :boolean
154
+ desc 'list', "List currently pulled orders"
43
155
  def list
44
156
  options_renderer(WeighflowCli.list, options)
45
157
  end
46
158
 
159
+ desc 'indexes', "List currently pulled order indexes"
160
+ def indexes
161
+ options_renderer(WeighflowCli.list(indexes_only: true), options)
162
+ end
47
163
 
48
164
 
49
-
50
165
 
51
- desc 'find_order', 'Find order details'
52
- method_options yaml: :boolean
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+ desc 'find_order', 'Find order details'
53
174
  def find_order(external_id)
54
175
  if index = WeighflowCli.find_order(external_id)
55
176
  options_renderer(index.data, options)
@@ -15,9 +15,23 @@ module WeighflowCli
15
15
 
16
16
 
17
17
  def status
18
- response = self.class.get('/')
19
- render_error(response) unless response.success?
20
- JSON.parse(response.body, symbolize_names: true)
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', query: { s: selection })
46
- render_error(response) unless response.success?
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
@@ -39,11 +39,15 @@ module WeighflowCli
39
39
 
40
40
  #
41
41
  # List all orders currently in stored repository
42
- def self.list
42
+ def self.list(indexes_only: false)
43
43
  result = []
44
44
  finder = Finder.new
45
45
  finder.for_each_index do |index|
46
- result << index.data
46
+ if indexes_only
47
+ result << index.index
48
+ else
49
+ result << index.data
50
+ end
47
51
  end
48
52
  result
49
53
  end
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
  module WeighflowCli
6
- VERSION = "0.2.4"
6
+ VERSION = "0.2.5"
7
7
 
8
8
 
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weighflow_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruce Martin