cmd.rb 0.4.1 → 0.5.0

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: 34d12924cba02103e5b13c1581d948f3fc862a588b452aef90b9797ab7bd605b
4
- data.tar.gz: c7a4aa7d0266f6c2ed91c6268189310462135b465d4d6a8cfcbb5b170b360480
3
+ metadata.gz: f520a73aaf3d0510069fb97555c4ec0510924906f7371bc205843ae27cdcdd27
4
+ data.tar.gz: 3e7b0ed7b8b0452ea9a1bab642aacd927fc1bfb3698e905b201020883ca3e364
5
5
  SHA512:
6
- metadata.gz: d98a6f7bcd51310076ec57fc8947f7d6922b5402a5e0aac5432174fb2db6cfc44e19e07b7e5f11f87eaffb31eb050774891f9f46cd1ab70a9102e36407c5abea
7
- data.tar.gz: 7b4620b67fd778a0f01d61dffb5b5dfde52aa10e92fdf15feb655f132638a3a26d0339840543d50665ec128c8a4a28c5d50508c672d59dfb636ef738175a37fe
6
+ metadata.gz: ca15e636c297e708d37a669f5508014915295a9aabccbc9d383916fc2534f8b209e12f0530c502a2c4732fc3caebe8a92722c7f4771ce960b64385fe48ae797d
7
+ data.tar.gz: df656157cf58c6bbc2b2a1abb65b1b9ca73641db17a70c25506b4a36c1e47062d86aaf73f5a1116075ee7ac994da09a9f2c031da1c430ac92e865c5586975034
data/README.md CHANGED
@@ -29,7 +29,7 @@ class Ls < Cmd
29
29
 
30
30
  def run
31
31
  options = parse_options(argv)
32
- options.help ? show_help : run_command(options)
32
+ run_command(options)
33
33
  end
34
34
 
35
35
  private
data/VERSION CHANGED
@@ -1 +1 @@
1
- v0.4.1
1
+ v0.5.0
data/cmd.rb.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
13
13
  gem.summary = "A library for building command-line applications, in Ruby."
14
14
  gem.description = gem.summary
15
15
  gem.add_runtime_dependency "ryo.rb", "~> 0.4"
16
- gem.add_runtime_dependency "cli-option_parser.rb", "~> 0.5"
16
+ gem.add_runtime_dependency "cli-option_parser.rb", "~> 0.6"
17
17
  gem.add_development_dependency "test-unit", "~> 3.5.7"
18
18
  gem.add_development_dependency "yard", "~> 0.9"
19
19
  gem.add_development_dependency "redcarpet", "~> 3.5"
@@ -0,0 +1,23 @@
1
+ module Cmd::Mixin::OptionParser
2
+ module Finder
3
+ extend self
4
+ ##
5
+ # @param [CLI::OptionParser] option_parser
6
+ # An instance of CLI::OptionParser.
7
+ #
8
+ # @param [String] short
9
+ # Short option.
10
+ #
11
+ # @param [String] long
12
+ # Long option.
13
+ #
14
+ # @return [CLI::OptionParser::Switch, nil]
15
+ # Returns a Switch, or nil.
16
+ def find(option_parser, short:, long:)
17
+ option_parser.top.list.find do |s|
18
+ s.short[0] == short[/[^\s]*/] &&
19
+ s.long[0] == long[/[^\s*]*/]
20
+ end
21
+ end
22
+ end
23
+ end
@@ -6,6 +6,7 @@
6
6
  # [OptionParser](https://docs.ruby-lang.org/en/3.2/OptionParser.html)
7
7
  # class.
8
8
  module Cmd::Mixin::OptionParser
9
+ require_relative "option_parser/finder"
9
10
  require "cli-option_parser"
10
11
  require "ryo"
11
12
 
@@ -50,8 +51,9 @@ module Cmd::Mixin::OptionParser
50
51
  # @return [void]
51
52
  def set_option(short, long, desc, as: String, default: nil)
52
53
  option_parser.on(short, long, desc, as) do |v|
53
- switch = __switch_search(short, long)
54
- v || __optional_switches.any? { _1 === switch } ? v : true
54
+ switch = Finder.find(option_parser, short:, long:)
55
+ is_optional = option_parser.optional_switches.any? { _1 === switch }
56
+ v || is_optional ? v : true
55
57
  end
56
58
  switch = option_parser.top.list[-1]
57
59
  set_default({
@@ -94,24 +96,6 @@ module Cmd::Mixin::OptionParser
94
96
  def defaults
95
97
  @defaults ||= Ryo({})
96
98
  end
97
-
98
- ##
99
- # @private
100
- def __switch_search(short, long)
101
- option_parser.top.list.find do |s|
102
- s.short[0] == short[/[^\s]*/] &&
103
- s.long[0] == long[/[^\s*]*/]
104
- end
105
- end
106
-
107
- ##
108
- # @private
109
- def __optional_switches
110
- [
111
- CLI::OptionParser::Switch::PlacedArgument,
112
- CLI::OptionParser::Switch::OptionalArgument
113
- ]
114
- end
115
99
  end
116
100
 
117
101
  ##
data/lib/cmd.rb CHANGED
@@ -7,6 +7,14 @@ class Cmd
7
7
  include Mixin::Help
8
8
 
9
9
  def self.inherited(klass)
10
- klass.class_eval { include(Mixin::OptionParser) }
10
+ klass.class_eval do
11
+ include Mixin::OptionParser
12
+ prepend Module.new {
13
+ def run(...)
14
+ options = parse_options(argv)
15
+ options.help ? show_help : super(...)
16
+ end
17
+ }
18
+ end
11
19
  end
12
20
  end
@@ -11,7 +11,7 @@ class Ls < Cmd
11
11
 
12
12
  def run
13
13
  options = parse_options(argv)
14
- options.help ? show_help : run_command(options)
14
+ run_command(options)
15
15
  end
16
16
 
17
17
  private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmd.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - '0x1eef'
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-16 00:00:00.000000000 Z
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ryo.rb
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.5'
33
+ version: '0.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.5'
40
+ version: '0.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: test-unit
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +146,7 @@ files:
146
146
  - lib/cmd/mixin/argv.rb
147
147
  - lib/cmd/mixin/help.rb
148
148
  - lib/cmd/mixin/option_parser.rb
149
+ - lib/cmd/mixin/option_parser/finder.rb
149
150
  - share/examples/cmd.rb/ls
150
151
  - share/examples/cmd.rb/setup.rb
151
152
  - test/cmd_test.rb