simple-command-parser 1.2 → 1.4

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: 16cd07f174304e5638c44cba3f2a5a9c16c72e6261740d780b8b66a373e27618
4
- data.tar.gz: 51144364948e633245a6905fe28fff3abfd513a635e56b8fa2720b1610aa9f84
3
+ metadata.gz: 43782f38998248c2bee3cd938562cf2e6ccf957894ae46a3739abb13c9d61092
4
+ data.tar.gz: 00771d4e6e45430cc7c5bd8b6ad3e227e809389cdc76244eb88e3acb144b8501
5
5
  SHA512:
6
- metadata.gz: 9c0eaf2507ec0fa82229b940dee182916b037359aede01f5e41fb5c8f55a7f18d3567a310e98cb04ff2350ed89ffd7c82b6939f483abc09b37a1529bd7de8c2c
7
- data.tar.gz: 2eec0d8655855c24492597a61b111a6184dbe8782f5309df887ab2836b9dd6e07f40f8e5418b4f015a4479f2fd577258f519dd1ae78f3954999d255fd61daf11
6
+ metadata.gz: 0c6b65da73616bf264f09188e41bfaf4be4ff6b5a23413e5446f46a244d9fd2ef52fb253c49a1dcb1d1b7a168d2129c071de548b3d0498e588cb464af32d1299
7
+ data.tar.gz: a9d205597d294eca69c9a883a44681faa5850724b33cc50f17c5fbfe87ee57974aa27eb0560f5d00d45406cd70f6671478b6630f4f0260994f1a2625fe187b75
@@ -9,34 +9,38 @@ module Simple
9
9
  def self.run!(*args)
10
10
  begin
11
11
  run(*args)
12
+ rescue Interrupt => e
13
+ warn "\n[Interrupt]"
12
14
  rescue UsageError => e
13
15
  warn "#{$0}: #{e}"
14
16
  exit(1)
15
17
  end
16
18
  end
17
19
 
18
- def self.run(args=ARGV, **defaults)
20
+ def self.run(args=ARGV, base_class=Command, **defaults)
19
21
  cmd_name = args.shift or raise UsageError, "No command given"
20
- cmd_class = Command.find_command(cmd_name) or raise UsageError, "Unknown command: #{cmd_name.inspect}"
22
+ cmd_class = base_class.find_command(cmd_name) or raise UsageError, "Unknown command: #{cmd_name.inspect}"
21
23
  options = defaults.merge(cmd_class.defaults.merge(SimpleOptionParser.parse(args)))
22
24
  cmd_class.new(options).tap { |cmd| cmd.run(args) }
23
25
  end
24
26
 
25
27
  class Command
26
28
 
27
- def self.inherited(klass)
28
- @@command_classes ||= []
29
- @@command_classes << klass
29
+ def self.find_command(name)
30
+ @command_map ||= leaf_descendants.map { |k| [k.command_name, k] }.to_h
31
+ @command_map[name]
30
32
  end
31
33
 
32
- def self.find_command(name)
33
- @@command_classes ||= []
34
- map = @@command_classes.select { |k| k.subclasses.empty? }.map { |k| [k.command_name, k] }.to_h
35
- map[name]
34
+ def self.descendants
35
+ subclasses + subclasses.flat_map(&:descendants)
36
+ end
37
+
38
+ def self.leaf_descendants
39
+ descendants.select { |c| c.subclasses.empty? }
36
40
  end
37
41
 
38
42
  def self.command_name
39
- name.to_s.
43
+ @command_name ||= name.to_s.
40
44
  split('::').last.
41
45
  gsub(/([a-z])([A-Z])/, '\1-\2').
42
46
  downcase
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'simple-command-parser'
3
- s.version = '1.2'
3
+ s.version = '1.4'
4
4
  s.summary = 'A simple command parser.'
5
5
  s.author = 'John Labovitz'
6
6
  s.email = 'johnl@johnlabovitz.com'
@@ -14,9 +14,9 @@ Gem::Specification.new do |s|
14
14
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
15
15
  s.require_path = 'lib'
16
16
 
17
- s.add_dependency 'simple_option_parser', '~> 0.8'
17
+ s.add_dependency 'simple_option_parser', '~> 0.9'
18
18
 
19
- s.add_development_dependency 'minitest', '~> 5.25'
19
+ s.add_development_dependency 'minitest', '~> 6.0'
20
20
  s.add_development_dependency 'minitest-power_assert', '~> 0.3'
21
21
  s.add_development_dependency 'rake', '~> 13.3'
22
22
  s.add_development_dependency 'simple-rake-tasks', '~> 0.1'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-command-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.2'
4
+ version: '1.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Labovitz
@@ -15,28 +15,28 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '0.8'
18
+ version: '0.9'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '0.8'
25
+ version: '0.9'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: minitest
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.25'
32
+ version: '6.0'
33
33
  type: :development
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: '5.25'
39
+ version: '6.0'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: minitest-power_assert
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []
112
- rubygems_version: 3.7.2
112
+ rubygems_version: 4.0.6
113
113
  specification_version: 4
114
114
  summary: A simple command parser.
115
115
  test_files: