bogo-cli 0.3.0 → 0.3.2

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: 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