bogo-cli 0.3.0 → 0.3.2
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/CHANGELOG.md +6 -0
- data/lib/bogo-cli/command.rb +15 -19
- data/lib/bogo-cli/parser.rb +79 -7
- data/lib/bogo-cli/setup.rb +1 -1
- data/lib/bogo-cli/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4899068cfae5c27459a405ce500100febf1c43918ab3541b3a35d47b55f769a
|
4
|
+
data.tar.gz: 17c47fda512f339c3add1f6da24b5ab469e366f3f92f41159882c7f37be5bf00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe2e5e9e5383aae4cec18487f747b5103e4d149c9d86b605efe875fa34dbd0704a6d0474168988a2754bdae45b3768181860309078b039f0602dc2cc4d45cfce
|
7
|
+
data.tar.gz: 5757757b97cf2c0a28c5bbb97fd2320bfc2718998147fca391b3876d8eda7fe58b016a004f36dccf6817653b0a37e0bd91331c306a9a17f07e6bdb47f0f8e1af
|
data/CHANGELOG.md
CHANGED
data/lib/bogo-cli/command.rb
CHANGED
@@ -31,17 +31,19 @@ module Bogo
|
|
31
31
|
#
|
32
32
|
# @return [self]
|
33
33
|
def initialize(cli_opts, args)
|
34
|
-
@options = Smash.new
|
35
34
|
@defaults = Smash.new
|
35
|
+
@options = Smash.new
|
36
36
|
case cli_opts
|
37
|
-
when
|
37
|
+
when Bogo::Cli::Parser::OptionValues
|
38
38
|
process_cli_options(cli_opts)
|
39
|
+
when Bogo::Cli::Parser::Command
|
40
|
+
@options = cli_opts.parse(args).first
|
39
41
|
else
|
40
|
-
@options = cli_opts.
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
@options = cli_opts.to_h.to_smash(:snake)
|
43
|
+
end
|
44
|
+
[@options, *@options.values].compact.each do |hsh|
|
45
|
+
next unless hsh.is_a?(Hash)
|
46
|
+
hsh.delete_if { |k, v| v.nil? }
|
45
47
|
end
|
46
48
|
@arguments = validate_arguments!(args)
|
47
49
|
load_config!
|
@@ -179,9 +181,8 @@ module Bogo
|
|
179
181
|
ui.puts result
|
180
182
|
end
|
181
183
|
end
|
182
|
-
rescue
|
184
|
+
rescue
|
183
185
|
ui.puts ui.color("error!", :red, :bold)
|
184
|
-
ui.error "Reason - #{e}"
|
185
186
|
raise
|
186
187
|
end
|
187
188
|
true
|
@@ -193,19 +194,14 @@ module Bogo
|
|
193
194
|
# @param cli_opts [Slop]
|
194
195
|
# @return [NilClass]
|
195
196
|
def process_cli_options(cli_opts)
|
196
|
-
unless cli_opts.is_a?(OpenStruct)
|
197
|
-
raise TypeError,
|
198
|
-
"Expecting `OpenStruct' but received `#{cli_opts.class}'"
|
199
|
-
end
|
200
197
|
@options = Smash.new
|
201
198
|
@defaults = Smash.new
|
202
|
-
cli_opts.
|
203
|
-
unless
|
204
|
-
|
205
|
-
|
206
|
-
@defaults[opt_key] = cli_opt.value
|
199
|
+
cli_opts.each_pair do |key, value|
|
200
|
+
unless value.nil?
|
201
|
+
if cli_opts.default?(key)
|
202
|
+
@defaults[key] = value
|
207
203
|
else
|
208
|
-
@options[
|
204
|
+
@options[key] = value
|
209
205
|
end
|
210
206
|
end
|
211
207
|
end
|
data/lib/bogo-cli/parser.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'bogo'
|
2
|
+
require 'forwardable'
|
1
3
|
require 'optparse'
|
2
4
|
require 'ostruct'
|
3
5
|
|
@@ -8,6 +10,74 @@ module Bogo
|
|
8
10
|
# @return [Symbol] represent unset value
|
9
11
|
UNSET = :__unset__
|
10
12
|
|
13
|
+
class OptionValues
|
14
|
+
extend Forwardable
|
15
|
+
|
16
|
+
NONFORWARDABLE = [:is_a?, :respond_to?, :object_id, :inspect, :keys, :to_s, :[]=].freeze
|
17
|
+
|
18
|
+
Smash.public_instance_methods.each do |ifunc|
|
19
|
+
next if ifunc.to_s.start_with?("_") || NONFORWARDABLE.include?(ifunc)
|
20
|
+
def_delegator :composite, ifunc
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
@defaults = Smash.new
|
25
|
+
@sets = Smash.new
|
26
|
+
end
|
27
|
+
|
28
|
+
def []=(key, value)
|
29
|
+
assign(key, value)
|
30
|
+
end
|
31
|
+
|
32
|
+
def assign(key, value)
|
33
|
+
key = key.to_s.gsub("-", "_").to_sym
|
34
|
+
@sets[key] = value
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def set_default(key, value)
|
39
|
+
key = key.to_s.gsub("-", "_").to_sym
|
40
|
+
@defaults[key] = value
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
def keys
|
45
|
+
@sets.keys | @defaults.keys
|
46
|
+
end
|
47
|
+
|
48
|
+
def default?(key)
|
49
|
+
unless keys.include?(key)
|
50
|
+
raise KeyError,
|
51
|
+
"Unknown option key '#{key}'"
|
52
|
+
end
|
53
|
+
!@sets.keys.include?(key)
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_s
|
57
|
+
"<OptionValues: #{composite.inspect}>"
|
58
|
+
end
|
59
|
+
|
60
|
+
def inspect
|
61
|
+
"<OptionValues: #{@sets.inspect} | #{@defaults.inspect}>"
|
62
|
+
end
|
63
|
+
|
64
|
+
def is_a?(const)
|
65
|
+
super || composite.is_a?(const)
|
66
|
+
end
|
67
|
+
|
68
|
+
def respond_to?(method)
|
69
|
+
super || composite.respond_to?(method)
|
70
|
+
end
|
71
|
+
|
72
|
+
def composite
|
73
|
+
Smash.new.tap do |c|
|
74
|
+
keys.each do |k|
|
75
|
+
c[k] = @sets.fetch(k, @defaults[k])
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
11
81
|
# Modified option parser to include
|
12
82
|
# subcommand information
|
13
83
|
class OptionParser < ::OptionParser
|
@@ -47,7 +117,7 @@ module Bogo
|
|
47
117
|
@commands = []
|
48
118
|
@flags = []
|
49
119
|
@callable = nil
|
50
|
-
@options =
|
120
|
+
@options = OptionValues.new
|
51
121
|
end
|
52
122
|
|
53
123
|
# Add a new flag
|
@@ -118,13 +188,15 @@ module Bogo
|
|
118
188
|
def parse(arguments)
|
119
189
|
raise "Must call #generate before #parse" if
|
120
190
|
parser.nil?
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
191
|
+
flags.each do |f|
|
192
|
+
next if f.default.nil?
|
193
|
+
options.set_default(f.option_name, f.default)
|
194
|
+
end
|
195
|
+
init = OpenStruct.new
|
196
|
+
parser.parse!(arguments, into: init)
|
197
|
+
init.each_pair do |k, v|
|
198
|
+
options.assign(k, v)
|
126
199
|
end
|
127
|
-
parser.parse!(arguments, into: options)
|
128
200
|
[options, arguments]
|
129
201
|
end
|
130
202
|
|
data/lib/bogo-cli/setup.rb
CHANGED
@@ -39,7 +39,7 @@ module Bogo
|
|
39
39
|
err_msg << "\n#{err.original.message}"
|
40
40
|
end
|
41
41
|
output_error err_msg
|
42
|
-
if ENV["DEBUG"]
|
42
|
+
if ENV["DEBUG"] || (Command.ui && Command.ui.options[:debug])
|
43
43
|
output_debug "Stacktrace: #{err.class}: " \
|
44
44
|
"#{err.message}\n#{err.backtrace.join("\n")}"
|
45
45
|
if err.respond_to?(:original) && err.original
|
data/lib/bogo-cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bogo-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bogo
|
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
127
|
- !ruby/object:Gem::Version
|
128
128
|
version: '0'
|
129
129
|
requirements: []
|
130
|
-
rubygems_version: 3.
|
130
|
+
rubygems_version: 3.5.0.dev
|
131
131
|
signing_key:
|
132
132
|
specification_version: 4
|
133
133
|
summary: CLI Helper libraries
|