moister 0.2.0 → 0.3.0
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 +4 -4
- data/lib/moister.rb +56 -5
- data/lib/moister/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f34abd6542354861f7906c23a802a75825f360e
|
4
|
+
data.tar.gz: 0a2ed87afece35b57db47b54a672babdbb74fe33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71dfa2354c457163c5059e95aab6d86c72f683a2d3ae038562748303f122c418742fa7a53f825b30d8d7126627803c942fae4b3b2e250bbf9b8760247784b68a
|
7
|
+
data.tar.gz: cc489bf49fa04bcb378c97e0943da37a8a4f296e49f34d0d30b02578b839f772fde371f92ff24fd997ded7fc7e9bd9fe0f5a38e0cb84930c1f19d01b79d2f761
|
data/lib/moister.rb
CHANGED
@@ -28,11 +28,17 @@ module Moister
|
|
28
28
|
# options applicable to all subcommands
|
29
29
|
@for_all = []
|
30
30
|
@subcommands = {}
|
31
|
+
@aliases = {}
|
31
32
|
super
|
32
33
|
end
|
33
34
|
|
34
35
|
def subcommand name, banner, &block
|
35
|
-
|
36
|
+
name, *positionals = name.split ' '
|
37
|
+
name, *aliases = name.split(',')
|
38
|
+
subcmd = { name: name, banner: banner, parse_cmdline: block }
|
39
|
+
subcmd[:positionals] = positionals unless positionals.empty?
|
40
|
+
@subcommands[name] = subcmd
|
41
|
+
aliases.each { |_alias| @aliases[_alias] = name }
|
36
42
|
end
|
37
43
|
|
38
44
|
# add a block to configure every subcommand
|
@@ -42,10 +48,16 @@ module Moister
|
|
42
48
|
|
43
49
|
def to_s
|
44
50
|
ret = super
|
45
|
-
|
46
|
-
ret += "\ncommands:\n"
|
47
|
-
@subcommands.values.each do |subcmd|
|
51
|
+
prefixes = @subcommands.values.map do |subcmd|
|
48
52
|
prefix = subcmd[:name]
|
53
|
+
prefix += ' ' + subcmd[:positionals].join(' ') if subcmd.has_key? :positionals
|
54
|
+
prefix
|
55
|
+
end
|
56
|
+
max_len = prefixes.map(&:length).max
|
57
|
+
|
58
|
+
ret += "\ncommands:\n"
|
59
|
+
@subcommands.values.each_with_index do |subcmd, idx|
|
60
|
+
prefix = prefixes[idx]
|
49
61
|
prefix += ' ' * (max_len - prefix.length + 2)
|
50
62
|
ret += " #{prefix} #{subcmd[:banner]}\n"
|
51
63
|
end
|
@@ -61,17 +73,56 @@ module Moister
|
|
61
73
|
ParseResults.new(nil, [], @config)
|
62
74
|
else
|
63
75
|
cmd = args.first
|
76
|
+
_alias = @aliases[cmd]
|
77
|
+
cmd = _alias if _alias
|
64
78
|
subcmd_meta = @subcommands[cmd]
|
65
79
|
raise "invalid subcommand: #{cmd}" unless @subcommands.has_key? cmd
|
66
80
|
args.shift
|
67
81
|
|
68
|
-
|
82
|
+
subcmd_config = @config[cmd] = {}
|
83
|
+
positionals = OptionParserExtra.new(@config[cmd]) do |subop|
|
69
84
|
apply_for_all subop
|
70
85
|
subop.banner = subcmd_meta[:banner]
|
71
86
|
parse_cmdline = subcmd_meta[:parse_cmdline]
|
72
87
|
parse_cmdline.call(subop) if parse_cmdline
|
73
88
|
end.order! args
|
74
89
|
|
90
|
+
positionals_meta = subcmd_meta[:positionals]
|
91
|
+
if positionals_meta
|
92
|
+
positionals_meta.each do |positional_meta|
|
93
|
+
array_match = false
|
94
|
+
optional = if positional_meta =~ /^\[.+\]$/
|
95
|
+
optional = true
|
96
|
+
positional_meta = positional_meta[1..-2]
|
97
|
+
end
|
98
|
+
|
99
|
+
positional_name = if positional_meta =~ /^\*[a-z\-]+$/
|
100
|
+
array_match = true
|
101
|
+
positional_meta[1..-1]
|
102
|
+
else
|
103
|
+
positional_meta
|
104
|
+
end
|
105
|
+
|
106
|
+
if array_match
|
107
|
+
if positionals.empty?
|
108
|
+
if optional
|
109
|
+
subcmd_config[positional_name] = []
|
110
|
+
next
|
111
|
+
end
|
112
|
+
raise "`#{cmd}' subcommand requires at least one `#{positional_name}' parameter"
|
113
|
+
end
|
114
|
+
subcmd_config[positional_name] = positionals
|
115
|
+
positionals = []
|
116
|
+
else
|
117
|
+
if positionals.empty?
|
118
|
+
next if optional
|
119
|
+
raise "`#{cmd}' subcommand requires `#{positional_name}' parameter"
|
120
|
+
end
|
121
|
+
subcmd_config[positional_name] = positionals.shift
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
75
126
|
ParseResults.new(cmd, positionals, @config)
|
76
127
|
end
|
77
128
|
end
|
data/lib/moister/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moister
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Pike
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
93
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.
|
94
|
+
rubygems_version: 2.5.1
|
95
95
|
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: An OptionParser wrapper that supports subcommands and shorter syntax.
|