simple-command-parser 1.2 → 1.3

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: 1db79f6094f5dd583d08d8fd1247f7343c0b4f4f8a7b54d1660c669505d70036
4
+ data.tar.gz: ecb15dd54360a6d0973bd1566a56db9862c6ce1d066e7d81149b54953f5d6d3b
5
5
  SHA512:
6
- metadata.gz: 9c0eaf2507ec0fa82229b940dee182916b037359aede01f5e41fb5c8f55a7f18d3567a310e98cb04ff2350ed89ffd7c82b6939f483abc09b37a1529bd7de8c2c
7
- data.tar.gz: 2eec0d8655855c24492597a61b111a6184dbe8782f5309df887ab2836b9dd6e07f40f8e5418b4f015a4479f2fd577258f519dd1ae78f3954999d255fd61daf11
6
+ metadata.gz: f09a4fdac10a54db359f3be01cb9f189f6d997ca3cdd73ffa1439d63f6481c7412b6544c7ef4b6991df6290c17cdb2c1b359126de82ba8a41f7a1ba47446fbec
7
+ data.tar.gz: 7f2484e8964bf10a474d78b1b60949b3310cf8aa3c33ba1e8997b1f150e9cb9985646011b2d913d98d0298921f813b0d44fffd83c64f39122832ea79732a56f4
@@ -15,28 +15,30 @@ module Simple
15
15
  end
16
16
  end
17
17
 
18
- def self.run(args=ARGV, **defaults)
18
+ def self.run(args=ARGV, base_class=Command, **defaults)
19
19
  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}"
20
+ cmd_class = base_class.find_command(cmd_name) or raise UsageError, "Unknown command: #{cmd_name.inspect}"
21
21
  options = defaults.merge(cmd_class.defaults.merge(SimpleOptionParser.parse(args)))
22
22
  cmd_class.new(options).tap { |cmd| cmd.run(args) }
23
23
  end
24
24
 
25
25
  class Command
26
26
 
27
- def self.inherited(klass)
28
- @@command_classes ||= []
29
- @@command_classes << klass
27
+ def self.find_command(name)
28
+ @command_map ||= leaf_descendants.map { |k| [k.command_name, k] }.to_h
29
+ @command_map[name]
30
30
  end
31
31
 
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]
32
+ def self.descendants
33
+ subclasses + subclasses.flat_map(&:descendants)
34
+ end
35
+
36
+ def self.leaf_descendants
37
+ descendants.select { |c| c.subclasses.empty? }
36
38
  end
37
39
 
38
40
  def self.command_name
39
- name.to_s.
41
+ @command_name ||= name.to_s.
40
42
  split('::').last.
41
43
  gsub(/([a-z])([A-Z])/, '\1-\2').
42
44
  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.3'
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.3'
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.4
113
113
  specification_version: 4
114
114
  summary: A simple command parser.
115
115
  test_files: