simple-command-parser 1.1 → 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: 5fef68772b204390647749cf55822d27f3c99fa98f62f958b4f556021fbfb511
4
- data.tar.gz: 84fadcbd63484d4034b33609e6b72c23ac96502209de576a6314fb2d7f2b9635
3
+ metadata.gz: 1db79f6094f5dd583d08d8fd1247f7343c0b4f4f8a7b54d1660c669505d70036
4
+ data.tar.gz: ecb15dd54360a6d0973bd1566a56db9862c6ce1d066e7d81149b54953f5d6d3b
5
5
  SHA512:
6
- metadata.gz: c350db31c5837dae7b2c74576144e0783bc28478c626db00dff434be90ee3af329033e03ad66e76072deabf0eaf3634da44b3ead5340d663f2cfa59206b45a0d
7
- data.tar.gz: 3b7e75977e0e85e66d1fa3eb4cb7026314f74a7c476d3a0a31402d109364ccd5f1ddb19445bc8804b5f2149c04b7ea72d6fdff6b592a268826021d1c95c4df39
6
+ metadata.gz: f09a4fdac10a54db359f3be01cb9f189f6d997ca3cdd73ffa1439d63f6481c7412b6544c7ef4b6991df6290c17cdb2c1b359126de82ba8a41f7a1ba47446fbec
7
+ data.tar.gz: 7f2484e8964bf10a474d78b1b60949b3310cf8aa3c33ba1e8997b1f150e9cb9985646011b2d913d98d0298921f813b0d44fffd83c64f39122832ea79732a56f4
data/Rakefile CHANGED
@@ -1,9 +1 @@
1
- require 'bundler/gem_tasks'
2
- Bundler.require
3
- require 'rake/testtask'
4
-
5
- Rake::TestTask.new do |t|
6
- t.test_files = FileList['test/*test.rb']
7
- end
8
-
9
- task :default => :test
1
+ require 'simple-rake-tasks'
@@ -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.1'
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,10 +14,10 @@ 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 'bundler', '~> 2.6'
20
- s.add_development_dependency 'minitest', '~> 5.22'
19
+ s.add_development_dependency 'minitest', '~> 6.0'
21
20
  s.add_development_dependency 'minitest-power_assert', '~> 0.3'
22
21
  s.add_development_dependency 'rake', '~> 13.3'
22
+ s.add_development_dependency 'simple-rake-tasks', '~> 0.1'
23
23
  end
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.1'
4
+ version: '1.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Labovitz
@@ -15,70 +15,70 @@ 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
- name: bundler
27
+ name: minitest
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '2.6'
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: '2.6'
39
+ version: '6.0'
40
40
  - !ruby/object:Gem::Dependency
41
- name: minitest
41
+ name: minitest-power_assert
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '5.22'
46
+ version: '0.3'
47
47
  type: :development
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '5.22'
53
+ version: '0.3'
54
54
  - !ruby/object:Gem::Dependency
55
- name: minitest-power_assert
55
+ name: rake
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '0.3'
60
+ version: '13.3'
61
61
  type: :development
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.3'
67
+ version: '13.3'
68
68
  - !ruby/object:Gem::Dependency
69
- name: rake
69
+ name: simple-rake-tasks
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '13.3'
74
+ version: '0.1'
75
75
  type: :development
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '13.3'
81
+ version: '0.1'
82
82
  description: Simple::CommandParser is a simple command parser.
83
83
  email: johnl@johnlabovitz.com
84
84
  executables: []
@@ -86,7 +86,6 @@ extensions: []
86
86
  extra_rdoc_files: []
87
87
  files:
88
88
  - ".gitignore"
89
- - Gemfile
90
89
  - README.md
91
90
  - Rakefile
92
91
  - lib/simple-command-parser.rb
@@ -110,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
109
  - !ruby/object:Gem::Version
111
110
  version: '0'
112
111
  requirements: []
113
- rubygems_version: 3.6.9
112
+ rubygems_version: 4.0.4
114
113
  specification_version: 4
115
114
  summary: A simple command parser.
116
115
  test_files:
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec