l43_opt_parser 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: e144f1cebe465e80a8e104c546ecb0024b9ec0b2dc74dec99e0acf1970b11254
4
- data.tar.gz: 180b81f733118b0aa427acd802a16d0f32968eb8f64740fd75439a34ed991f62
3
+ metadata.gz: 470ed33a63e0d7d6065fb876a621a492ccc4778a807afcd08d0afe34486de442
4
+ data.tar.gz: 4dfd5ac9412c4938a23b5b411822f0b406b5d8d176599fbd042c4a8d409cd396
5
5
  SHA512:
6
- metadata.gz: 2347bc5fa8dbe0ae1b51beaa02e53328ca8381888ea17193746c27132c7d17497844c1c5b43fb225ffcbbc9e276c9812675eaf28b181a6296336e88513e8a56a
7
- data.tar.gz: 5f3815d126de479d238852bba576610fc1319ec8ef5a9f0618039d3753c156f630385679c0ba33196f78b8de805ba6f8a3c17a7597e0b46389d0767d67ac0b84
6
+ metadata.gz: cb1d25c590bda0e1e09dad0f895e7edbb03b5c9351ac6b701e8513c45636a9a3d920624c8943f50a24c928aa581a651bc1c2e92efd9fa2c6015667be809af74c
7
+ data.tar.gz: e90c4840a684fe032a9b7d3b429481a57008f21de0489ff761b0373ef794e2981f288b63c7c8622ea0c8dd8bf6da803864e7339785cef9284deb4f494e7021ca
@@ -1,21 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'l43/simple_color/file_colorizer'
3
4
  require 'l43/core/none'
5
+ require 'l43/core/forwarder'
4
6
  module L43
5
7
  class OptParser
6
8
  class Description
9
+ extend Core::Forwarder
10
+ forward :xcolorize_file, to: L43::SimpleColor
7
11
 
8
12
  def add_desc(*chunks, indent: 5)
9
13
  self << [indent, *chunks]
10
14
  end
11
15
 
12
- def add_flag(flag, indent: 3, color: :cyan)
16
+ def add_desc_from_file(file)
17
+ xcolorize_file(file).each do |colored, _|
18
+ _lines << colored
19
+ end
20
+ self
21
+ end
22
+
23
+ def add_flag(flag, indent: 4, color: :cyan)
13
24
  return unless flag.desc
14
25
  short = flag.short ? ":#{flag.short}|" : ""
15
26
  self << [indent, color, short, ":", flag.name.to_s, :reset, 1, flag.desc ]
16
27
  end
17
28
 
18
- def add_kwd(kwd, indent: 3, color: :cyan, vcolor: [:bold,:blue])
29
+ def add_kwd(kwd, indent: 4, color: :cyan, vcolor: [:bold,:blue])
19
30
  return unless kwd.desc
20
31
  short = kwd.short ? "#{kwd.short}:|" : ""
21
32
  default = kwd.default == Core::None ? [] : [1, :dim, "defaults to: ", :bold, kwd.default.inspect]
@@ -26,20 +37,20 @@ module L43
26
37
  self << chunks
27
38
  end
28
39
 
29
- def add_section(text, indent: 1, color: [:bold, :green])
40
+ def add_section(text, indent: 2, color: [:bold, :green])
30
41
  self << [nil, indent, color, text]
31
42
  end
32
43
 
33
44
  def add_usage(name, options:, args:)
34
45
  options = "options" if options == true
35
46
  args = "args" if args == true
36
- @__lines__ = [[:bold, name, " ", *_args(options, [:bold, :cyan]), ' ', *_args(args, [:bold, :blue], "...")], *_lines]
47
+ @__lines__ = [[:bold, "usage: ", :green, name, :reset, *_args(options, [:bold, :cyan]), *_args(args, [:bold, :blue], "...")], *_lines]
37
48
  end
38
49
 
39
50
  def lines = _lines.dup.freeze
40
51
 
41
52
  private
42
- def _args(args, cols, pfx='')
53
+ def _args(args, cols, pfx=' ')
43
54
  case args
44
55
  when nil
45
56
  []
@@ -54,7 +65,7 @@ module L43
54
65
 
55
66
 
56
67
  def <<(*line)
57
- _lines << [nil, *line.flatten, :reset]
68
+ _lines << [*line.flatten, :reset]
58
69
  end
59
70
  end
60
71
  end
@@ -28,7 +28,11 @@ module L43
28
28
  multiple: false,
29
29
  set: nil,
30
30
  short: nil,
31
- value: nil
31
+ value: nil do |values|
32
+ if Array === values.set
33
+ {set: Set.new(values.set)}
34
+ end
35
+ end
32
36
 
33
37
  def check_value(value, keywords)
34
38
  if keywords.has_key?(real_name) && !multiple
@@ -51,6 +55,7 @@ module L43
51
55
  "bad value for keyword #{name}: #{value} (not in set: #{set.keys.inspect})"
52
56
  end
53
57
  end
58
+
54
59
  end
55
60
  end
56
61
  end
@@ -10,6 +10,7 @@ module L43
10
10
  def defaults = @__defaults__ ||= {}
11
11
  def errors = @__errors__ ||= []
12
12
  def flags = @__flags__ ||= {}
13
+ def given_kwds = @__given_kwds__ ||= Set.new
13
14
  def hooks = @__hooks__ ||= []
14
15
  def keywords = @__keywords__ ||= {}
15
16
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module L43
4
4
  class OptParser
5
- VERSION = '0.3.0'
5
+ VERSION = '0.3.2'
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'l43/color/colorschemes'
4
- require 'l43/color/output'
3
+ require 'l43/simple_color'
4
+ require 'l43/simple_color/file_colorizer'
5
5
  require 'l43/core/none'
6
6
  require 'l43/open_struct'
7
7
  require 'l43/open_object'
@@ -16,7 +16,7 @@ require_relative 'opt_parser/meta'
16
16
  module L43
17
17
  class OptParser
18
18
 
19
- include Color::Output
19
+ include SimpleColor
20
20
  include Core
21
21
  include Memos
22
22
  include Meta
@@ -77,12 +77,17 @@ module L43
77
77
  self
78
78
  end
79
79
 
80
- def add_desc(*chunks)
81
- description.add_desc(*chunks)
80
+ def add_desc(*chunks, file: nil)
81
+ raise ArgumentError, "cannot use chunks and file" unless chunks.empty? || file.nil?
82
+ if file
83
+ description.add_desc_from_file(file)
84
+ else
85
+ description.add_desc(*chunks)
86
+ end
82
87
  self
83
88
  end
84
89
 
85
- def section(line, indent: 1, color: [:bold, :green])
90
+ def section(line, indent: 2, color: [:bold, :green])
86
91
  description.add_section(line, indent:, color:)
87
92
  self
88
93
  end
@@ -91,7 +96,11 @@ module L43
91
96
  # --------
92
97
 
93
98
  def descriptions = description.lines
94
- def help(device: $stderr) = cs_put(descriptions, device:)
99
+ def help(device: $stderr)
100
+ descriptions.each do
101
+ xputcol(it, device:)
102
+ end
103
+ end
95
104
 
96
105
 
97
106
  # Business Logic
@@ -100,13 +109,13 @@ module L43
100
109
  @arguments = arguments
101
110
  parse_arguments
102
111
 
103
- return Result.error(errors) unless errors.empty?
112
+ return Result.error(errors.uniq) unless errors.empty?
104
113
  if constrained
105
114
  mo = make_open_object
106
115
  kwds = mo.new(**defaults.merge(keywords_values))
107
116
  post_checks!(kwds)
108
117
  kwds = run_hooks(kwds)
109
- result = OpenStruct.new(kwds_name => kwds, args:, errors: errors.uniq).freeze
118
+ result = OpenStruct.new(kwds_name => kwds, args:, given_kwds:).freeze
110
119
  Result.ok(result)
111
120
  else
112
121
  Result.ok(OpenStruct.new(args:, errors:, kwds: OpenStruct.new(**keywords_values)).freeze)
@@ -167,6 +176,7 @@ module L43
167
176
  end
168
177
 
169
178
  def assign_value(keyword, value)
179
+ given_kwds << keyword.real_name
170
180
  if keyword.multiple
171
181
  keywords_values[keyword.real_name] << value
172
182
  else
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: l43_opt_parser
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
  - Robert Dober
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-04-27 00:00:00.000000000 Z
10
+ date: 2026-05-06 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ostruct
@@ -24,19 +24,19 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: 0.6.3
26
26
  - !ruby/object:Gem::Dependency
27
- name: l43_color
27
+ name: l43_simple_color
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: 0.2.1
32
+ version: 0.2.2
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.2.1
39
+ version: 0.2.2
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: l43_core
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -57,14 +57,14 @@ dependencies:
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 0.2.9
60
+ version: 0.3.0
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 0.2.9
67
+ version: 0.3.0
68
68
  description: |
69
69
  A highly customizable option parser, allowing for different
70
70
  option syntax and returning custom classes' instances depending on
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  requirements: []
103
- rubygems_version: 4.0.6
103
+ rubygems_version: 4.0.10
104
104
  specification_version: 4
105
105
  summary: Extract Specs from Markdown
106
106
  test_files: []