acclaim 0.0.1.alpha2 → 0.0.1
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.
- data/lib/acclaim/command.rb +6 -1
- data/lib/acclaim/option/parser.rb +34 -12
- data/lib/acclaim/version.rb +1 -1
- metadata +7 -7
data/lib/acclaim/command.rb
CHANGED
@@ -95,8 +95,13 @@ module Acclaim
|
|
95
95
|
# otherwise.
|
96
96
|
def invoke(opts, args = [])
|
97
97
|
opts.merge! parse_options!(args)
|
98
|
+
arg_separator = args.find { |arg| arg =~ Option::Parser::ARGUMENT_SEPARATOR }
|
99
|
+
separator_index = args.index arg_separator
|
98
100
|
subcommands.find do |subcommand|
|
99
|
-
|
101
|
+
index = args.index subcommand.line
|
102
|
+
# If we have the subcommand AND the separator, then we have it if the
|
103
|
+
# subcommand is before the separator.
|
104
|
+
index and not separator_index or index < separator_index
|
100
105
|
end.tap do |subcommand|
|
101
106
|
if subcommand
|
102
107
|
args.delete subcommand.line
|
@@ -6,6 +6,32 @@ module Acclaim
|
|
6
6
|
# Parses arrays of strings and returns an Options instance containing data.
|
7
7
|
class Parser
|
8
8
|
|
9
|
+
# Regular expression for any kind of option switch.
|
10
|
+
#
|
11
|
+
# Matches strings that begin with 1 or 2 dashes, are followed by at least
|
12
|
+
# one word character or number, and may be followed by any other word
|
13
|
+
# character, number or dash.
|
14
|
+
#
|
15
|
+
# Examples: -s, --long, -multiple, -1, --no-feature, --with_underscore,
|
16
|
+
# --_private_option, etc.
|
17
|
+
SWITCH = /^-{1,2}[\w\d]+[\w\d-]*$/
|
18
|
+
|
19
|
+
# Regular expression for multiple short options in a single "short"
|
20
|
+
# switch.
|
21
|
+
#
|
22
|
+
# Matches strings that begin with a single dash and are followed by 2 or
|
23
|
+
# more word characters, among which is the underscore but not the dash
|
24
|
+
# character.
|
25
|
+
#
|
26
|
+
# Examples: -xvf, -abc, -de_f
|
27
|
+
MULTIPLE_SHORT_SWITCHES = /^-\w{2,}$/
|
28
|
+
|
29
|
+
# Regular expression for the string that separates options and their
|
30
|
+
# parameters from arguments like filenames.
|
31
|
+
#
|
32
|
+
# Matches strings made up of 2 or more dashes.
|
33
|
+
ARGUMENT_SEPARATOR = /^-{2,}$/
|
34
|
+
|
9
35
|
class Error < StandardError
|
10
36
|
|
11
37
|
def self.raise_wrong_arg_number(actual, minimum, optional)
|
@@ -35,7 +61,7 @@ module Acclaim
|
|
35
61
|
|
36
62
|
private
|
37
63
|
|
38
|
-
# Argument array preprocessing.
|
64
|
+
# Argument array preprocessing.
|
39
65
|
def preprocess_argv!
|
40
66
|
split_multiple_short_options!
|
41
67
|
# TODO: normalize parameter formats?
|
@@ -46,18 +72,14 @@ module Acclaim
|
|
46
72
|
end
|
47
73
|
|
48
74
|
def split_multiple_short_options!
|
49
|
-
argv.find_all { |arg| arg =~
|
75
|
+
argv.find_all { |arg| arg =~ MULTIPLE_SHORT_SWITCHES }.each do |multiples|
|
50
76
|
multiples_index = argv.index multiples
|
51
77
|
argv.delete multiples
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
last_option_index = argv.index separated_options.last
|
58
|
-
parameters.each_index do |parameter_index|
|
59
|
-
argv.insert last_option_index + paramter_index + 1,
|
60
|
-
parameters[parameter_index]
|
78
|
+
letters = multiples.sub!(/^-/, '').split(//)
|
79
|
+
letters.each { |letter| letter.prepend '-' }.tap do |options|
|
80
|
+
options.each_index do |option_index|
|
81
|
+
argv.insert multiples_index + option_index, options[option_index]
|
82
|
+
end
|
61
83
|
end
|
62
84
|
end
|
63
85
|
end
|
@@ -84,7 +106,7 @@ module Acclaim
|
|
84
106
|
values = []
|
85
107
|
params.each do |param|
|
86
108
|
case param
|
87
|
-
when nil,
|
109
|
+
when nil, SWITCH, ARGUMENT_SEPARATOR then break
|
88
110
|
else
|
89
111
|
break if optional >= 0 and values.count >= minimum + optional
|
90
112
|
values << param
|
data/lib/acclaim/version.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acclaim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Matheus Afonso Martins Moreira
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &11364480 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *11364480
|
25
25
|
description: Command-line option parser and command interface.
|
26
26
|
email: matheus.a.m.moreira@gmail.com
|
27
27
|
executables: []
|
@@ -57,9 +57,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
57
57
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
58
|
none: false
|
59
59
|
requirements:
|
60
|
-
- - ! '
|
60
|
+
- - ! '>='
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
62
|
+
version: '0'
|
63
63
|
requirements: []
|
64
64
|
rubyforge_project:
|
65
65
|
rubygems_version: 1.8.10
|