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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97c776598127786a35b12a9d95a6d8453c3606aca1551b5acbb374a99606061d
4
- data.tar.gz: e97a5d3ad04f9e7573f11146c46e3b24e4536dfc1c758cbf56802723275adfd4
3
+ metadata.gz: d4899068cfae5c27459a405ce500100febf1c43918ab3541b3a35d47b55f769a
4
+ data.tar.gz: 17c47fda512f339c3add1f6da24b5ab469e366f3f92f41159882c7f37be5bf00
5
5
  SHA512:
6
- metadata.gz: b651506c2871283b831264a32a8cadd8414a1dc1743b1a57fd54ba44cf7756c899752307237d4efc77f2d3d0dc86291b62a183ee43f48bd57427f472644b6e1d
7
- data.tar.gz: 6a99913415692998685c3e60e803a2ac5df8dfd299f8b9e94b6dfe89c105d2beacf67339f4b1ea99a342e13d1ac603d9c66cda07d9483f295b62092443547d7f
6
+ metadata.gz: fe2e5e9e5383aae4cec18487f747b5103e4d149c9d86b605efe875fa34dbd0704a6d0474168988a2754bdae45b3768181860309078b039f0602dc2cc4d45cfce
7
+ data.tar.gz: 5757757b97cf2c0a28c5bbb97fd2320bfc2718998147fca391b3876d8eda7fe58b016a004f36dccf6817653b0a37e0bd91331c306a9a17f07e6bdb47f0f8e1af
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # v0.3.2
2
+ * Format option keys for long flags with dashes (#16)
3
+
4
+ # v0.3.1
5
+ * Add context for option parsing (#15)
6
+
1
7
  # v0.3.0
2
8
  * Remove dependency on slop library (#14)
3
9
 
@@ -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 OpenStruct
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.to_hash.to_smash(:snake)
41
- [@options, *@options.values].compact.each do |hsh|
42
- next unless hsh.is_a?(Hash)
43
- hsh.delete_if { |k, v| v.nil? }
44
- end
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 => e
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.each do |cli_opt|
203
- unless cli_opt.value.nil?
204
- opt_key = Bogo::Utility.snake(cli_opt.key)
205
- if cli_opt.default?
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[opt_key] = cli_opt.value
204
+ @options[key] = value
209
205
  end
210
206
  end
211
207
  end
@@ -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 = OpenStruct.new
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
- @options = OpenStruct.new.tap do |opts|
122
- flags.each do |f|
123
- next if f.default.nil?
124
- opts[f.option_name] = f.default
125
- end
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
 
@@ -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
@@ -1,6 +1,6 @@
1
1
  module Bogo
2
2
  module Cli
3
3
  # Current library version
4
- VERSION = Gem::Version.new("0.3.0")
4
+ VERSION = Gem::Version.new("0.3.2")
5
5
  end
6
6
  end
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.0
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: 2022-10-15 00:00:00.000000000 Z
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.4.0.dev
130
+ rubygems_version: 3.5.0.dev
131
131
  signing_key:
132
132
  specification_version: 4
133
133
  summary: CLI Helper libraries