ArgsParser 0.0.10 → 1.0.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.
- data/.gemtest +0 -0
- data/History.txt +4 -0
- data/README.rdoc +3 -3
- data/examples/example.rb +7 -5
- data/examples/math.rb +3 -1
- data/examples/sum.rb +3 -1
- data/lib/ArgsParser.rb +1 -1
- data/lib/ArgsParser/Parser.rb +98 -86
- metadata +11 -28
data/.gemtest
ADDED
File without changes
|
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -10,16 +10,16 @@
|
|
10
10
|
|
11
11
|
parser = ArgsParser.parser
|
12
12
|
parser.bind(:help, :h, "show help")
|
13
|
-
parser.bind(:size, :s, "size")
|
13
|
+
parser.bind(:size, :s, "size", "320x240") # name, shortname, comment, default
|
14
14
|
parser.comment(:min, "min size")
|
15
15
|
parser.comment(:max, "max size")
|
16
|
-
parser.comment(:debug, "debug mode")
|
16
|
+
parser.comment(:debug, "debug mode", false) # name, comment, default
|
17
17
|
|
18
18
|
params = parser.parse(ARGV)
|
19
19
|
|
20
20
|
if parser.has_option(:help) or !parser.has_params([:size, :max, :min])
|
21
21
|
puts parser.help
|
22
|
-
puts 'e.g.
|
22
|
+
puts 'e.g. ruby example.rb -s 320x240 -min 100 -max 500'
|
23
23
|
end
|
24
24
|
|
25
25
|
puts params[:size]
|
data/examples/example.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
|
-
require '
|
3
|
+
require 'rubygems'
|
4
|
+
#require 'ArgsParser'
|
5
|
+
require File.dirname(__FILE__)+'/../lib/ArgsParser'
|
4
6
|
|
5
7
|
parser = ArgsParser.parser
|
6
8
|
parser.bind(:help, :h, "show help")
|
7
9
|
parser.bind(:frame, :f, "frame image (required)")
|
8
|
-
parser.bind(:message, :m, "message (required)") # name, shortname, comment
|
10
|
+
parser.bind(:message, :m, "message (required)", 'hello!!') # name, shortname, comment, default
|
9
11
|
parser.bind(:size, :s, "size (required)")
|
10
|
-
parser.comment(:min, "minimum size")
|
12
|
+
parser.comment(:min, "minimum size")
|
11
13
|
parser.comment(:max, "maximum size")
|
12
|
-
parser.comment(:debug, "debug mode")
|
14
|
+
parser.comment(:debug, "debug mode", false) # name, comment, default
|
13
15
|
|
14
16
|
first, params = parser.parse(ARGV)
|
15
|
-
required_params = [:frame, :
|
17
|
+
required_params = [:frame, :size]
|
16
18
|
|
17
19
|
if parser.has_option(:help) or !parser.has_params(required_params)
|
18
20
|
puts parser.help
|
data/examples/math.rb
CHANGED
data/examples/sum.rb
CHANGED
data/lib/ArgsParser.rb
CHANGED
data/lib/ArgsParser/Parser.rb
CHANGED
@@ -1,105 +1,117 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# ARGSのparser
|
3
3
|
|
4
|
-
|
4
|
+
module ArgsParser
|
5
|
+
class Parser
|
6
|
+
attr_reader :params, :comments, :first
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@comments = Hash.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def parse(argv)
|
14
|
-
# parse
|
15
|
-
@first = nil
|
16
|
-
if argv.size > 0 and !(argv.first =~ /^-+.+/)
|
17
|
-
@first = argv.shift
|
8
|
+
def initialize
|
9
|
+
@binds = Hash.new
|
10
|
+
@comments = Hash.new
|
11
|
+
@defaults = Hash.new
|
18
12
|
end
|
19
13
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@params[term] = true # option
|
26
|
-
else
|
27
|
-
@params[term] = argv[i+1] # param
|
28
|
-
end
|
14
|
+
def parse(argv)
|
15
|
+
# parse
|
16
|
+
@first = nil
|
17
|
+
if argv.size > 0 and !(argv.first =~ /^-+.+/)
|
18
|
+
@first = argv.shift
|
29
19
|
end
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
20
|
+
|
21
|
+
@params = Hash.new
|
22
|
+
for i in 0...argv.size do
|
23
|
+
if argv[i].match(/^-+.+/)
|
24
|
+
term = argv[i].match(/^-+(.+)/)[1].to_sym
|
25
|
+
if i == argv.size-1 || argv[i+1].match(/^-+.+/)
|
26
|
+
@params[term] = true # option
|
27
|
+
else
|
28
|
+
@params[term] = argv[i+1] # param
|
29
|
+
end
|
30
|
+
end
|
37
31
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
32
|
+
|
33
|
+
@binds.keys.each{|name|
|
34
|
+
fullname = @binds[name]
|
35
|
+
if @params[fullname] == nil && @params[name] != nil
|
36
|
+
@params[fullname] = @params[name]
|
37
|
+
@params.delete(name)
|
38
|
+
end
|
39
|
+
}
|
42
40
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
41
|
+
@defaults.each{|k,v|
|
42
|
+
if @params[k] == nil
|
43
|
+
@params[k] = v
|
44
|
+
end
|
45
|
+
}
|
46
|
+
|
47
|
+
return @first, @params
|
47
48
|
end
|
48
|
-
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
def bind(fullname, name, comment, default=nil)
|
51
|
+
@binds[name.to_sym] = fullname.to_sym
|
52
|
+
comment(fullname, comment, default)
|
53
|
+
end
|
53
54
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
return true
|
59
|
-
end
|
55
|
+
def comment(name, comment, default=nil)
|
56
|
+
@comments[name.to_sym] = comment.to_s
|
57
|
+
@defaults[name.to_sym] = default if default != nil
|
58
|
+
end
|
60
59
|
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
def has_param(name)
|
61
|
+
@params[name].class == String
|
62
|
+
end
|
64
63
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
64
|
+
def has_params(params_arr)
|
65
|
+
params_arr.each{|name|
|
66
|
+
return false if !has_param(name)
|
67
|
+
}
|
68
|
+
return true
|
69
|
+
end
|
71
70
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
def help
|
77
|
-
lines = Hash.new
|
78
|
-
@comments.each{|k,v|
|
79
|
-
lines[k] = {:comment => v}
|
80
|
-
}
|
71
|
+
def has_option(name)
|
72
|
+
@params[name] == true
|
73
|
+
end
|
81
74
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
name = " -#{k}"
|
89
|
-
name += " (-#{v[:binds]})" if v[:binds]
|
90
|
-
most_long = name.size if most_long < name.size
|
91
|
-
}
|
75
|
+
def has_options(options_arr)
|
76
|
+
options_arr.each{|name|
|
77
|
+
return false if !has_option(name)
|
78
|
+
}
|
79
|
+
return true
|
80
|
+
end
|
92
81
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
return s
|
103
|
-
end
|
82
|
+
def help
|
83
|
+
lines = Hash.new
|
84
|
+
@comments.each{|k,v|
|
85
|
+
lines[k] = {:comment => v}
|
86
|
+
}
|
87
|
+
|
88
|
+
@binds.each{|k,v|
|
89
|
+
lines[v][:binds] = k
|
90
|
+
}
|
104
91
|
|
92
|
+
@defaults.each{|k,v|
|
93
|
+
lines[k][:default] = v
|
94
|
+
}
|
95
|
+
|
96
|
+
most_long = 0
|
97
|
+
lines.each{|k,v|
|
98
|
+
name = " -#{k}"
|
99
|
+
name += " (-#{v[:binds]})" if v[:binds]
|
100
|
+
most_long = name.size if most_long < name.size
|
101
|
+
}
|
102
|
+
|
103
|
+
s = ""
|
104
|
+
lines.each{|k,v|
|
105
|
+
name = " -#{k}"
|
106
|
+
name += " (-#{v[:binds]})" if v[:binds]
|
107
|
+
line = name.ljust(most_long+2)
|
108
|
+
line += v[:comment]
|
109
|
+
line += " : default - " + v[:default].to_s if v[:default] != nil
|
110
|
+
s += line+"\n"
|
111
|
+
}
|
112
|
+
s = "options:\n" + s
|
113
|
+
return s
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
105
117
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ArgsParser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.10
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- shokai
|
@@ -15,41 +15,24 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
18
|
+
date: 2011-06-22 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
21
|
+
name: hoe
|
23
22
|
prerelease: false
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
28
|
+
hash: 35
|
30
29
|
segments:
|
31
30
|
- 2
|
32
|
-
-
|
31
|
+
- 9
|
33
32
|
- 4
|
34
|
-
version: 2.
|
33
|
+
version: 2.9.4
|
35
34
|
type: :development
|
36
35
|
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: hoe
|
39
|
-
prerelease: false
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 19
|
46
|
-
segments:
|
47
|
-
- 2
|
48
|
-
- 6
|
49
|
-
- 2
|
50
|
-
version: 2.6.2
|
51
|
-
type: :development
|
52
|
-
version_requirements: *id002
|
53
36
|
description: "* Parse args from command line."
|
54
37
|
email:
|
55
38
|
- hashimoto@shokai.org
|
@@ -77,7 +60,7 @@ files:
|
|
77
60
|
- spec/parser_spec.rb
|
78
61
|
- spec/spec.opts
|
79
62
|
- spec/spec_helper.rb
|
80
|
-
|
63
|
+
- .gemtest
|
81
64
|
homepage: http://github.com/shokai/argsparser-ruby
|
82
65
|
licenses: []
|
83
66
|
|
@@ -108,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
91
|
requirements: []
|
109
92
|
|
110
93
|
rubyforge_project: ArgsParser
|
111
|
-
rubygems_version: 1.
|
94
|
+
rubygems_version: 1.7.2
|
112
95
|
signing_key:
|
113
96
|
specification_version: 3
|
114
97
|
summary: "* Parse args from command line."
|