ArgsParser 0.0.2 → 0.0.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.
- data/Manifest.txt +2 -0
- data/README.rdoc +21 -5
- data/examples/example.rb +32 -0
- data/lib/ArgsParser.rb +1 -1
- data/lib/ArgsParser/Parser.rb +101 -0
- metadata +7 -5
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -1,18 +1,34 @@
|
|
1
1
|
= ArgsParser
|
2
2
|
|
3
|
-
* http://
|
3
|
+
* http://bitbucket.org/shokai/argsparser-ruby
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
6
|
|
7
|
-
|
7
|
+
* Parse args form command line.
|
8
8
|
|
9
9
|
== FEATURES/PROBLEMS:
|
10
10
|
|
11
|
-
*
|
11
|
+
*
|
12
12
|
|
13
13
|
== SYNOPSIS:
|
14
14
|
|
15
|
-
|
15
|
+
parser = ArgsParser.parser
|
16
|
+
parser.bind(:help, :h, "show help")
|
17
|
+
parser.bind(:size, :s, "size")
|
18
|
+
parser.comment(:min, "min size")
|
19
|
+
parser.comment(:max, "max size")
|
20
|
+
parser.comment(:debug, "debug mode")
|
21
|
+
|
22
|
+
params = parser.parse(ARGV)
|
23
|
+
|
24
|
+
if parser.has_option(:help) or !parser.has_params([:size, :max, :min])
|
25
|
+
puts parser.help
|
26
|
+
puts 'e.g. ./example.rb -s 320x240 -min 100 -max 500'
|
27
|
+
end
|
28
|
+
|
29
|
+
puts params[:size]
|
30
|
+
|
31
|
+
p params
|
16
32
|
|
17
33
|
== REQUIREMENTS:
|
18
34
|
|
@@ -20,7 +36,7 @@ FIX (describe your package)
|
|
20
36
|
|
21
37
|
== INSTALL:
|
22
38
|
|
23
|
-
*
|
39
|
+
* sudo gem install ArgsParser
|
24
40
|
|
25
41
|
== LICENSE:
|
26
42
|
|
data/examples/example.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
require '../lib/ArgsParser'
|
4
|
+
|
5
|
+
parser = ArgsParser.parser
|
6
|
+
parser.bind(:help, :h, "show help")
|
7
|
+
parser.bind(:frame, :f)
|
8
|
+
parser.bind(:message, :m, "message") # name, shortname, comment for help
|
9
|
+
parser.bind(:size, :s, "size")
|
10
|
+
parser.comment(:min, "minimum size") # add comment for help
|
11
|
+
parser.comment(:max, "maximum size")
|
12
|
+
parser.comment(:debug, "debug mode")
|
13
|
+
|
14
|
+
params = parser.parse(ARGV)
|
15
|
+
required_params = [:frame, :message, :size]
|
16
|
+
|
17
|
+
if parser.has_option(:help) or !parser.has_params(required_params)
|
18
|
+
puts parser.help
|
19
|
+
puts 'required params'
|
20
|
+
(required_params - params.keys).each{|param|
|
21
|
+
puts " -#{param}"
|
22
|
+
}
|
23
|
+
puts 'e.g. ruby example.rb -f frame.png -m "hello world" -s 320x240 -debug'
|
24
|
+
puts '-'*30
|
25
|
+
end
|
26
|
+
|
27
|
+
if parser.has_param(:size)
|
28
|
+
puts 'size : ' + params[:size]
|
29
|
+
end
|
30
|
+
|
31
|
+
# 引数を全て表示
|
32
|
+
p params
|
data/lib/ArgsParser.rb
CHANGED
@@ -0,0 +1,101 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# ARGSのparser
|
3
|
+
|
4
|
+
class Parser
|
5
|
+
|
6
|
+
def params
|
7
|
+
@params
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@binds = Hash.new
|
12
|
+
@comments = Hash.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse(argv)
|
16
|
+
# parse
|
17
|
+
@params = Hash.new
|
18
|
+
for i in 0...argv.size do
|
19
|
+
if argv[i].match(/^-+.+/)
|
20
|
+
term = argv[i].match(/^-+(.+)/)[1].to_sym
|
21
|
+
if i == argv.size-1 || argv[i+1].match(/^-+.+/)
|
22
|
+
@params[term] = true # option
|
23
|
+
else
|
24
|
+
@params[term] = argv[i+1] # param
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
@binds.keys.each{|name|
|
30
|
+
fullname = @binds[name]
|
31
|
+
if @params[fullname] == nil && @params[name] != nil
|
32
|
+
@params[fullname] = @params[name]
|
33
|
+
@params.delete(name)
|
34
|
+
end
|
35
|
+
}
|
36
|
+
|
37
|
+
return @params
|
38
|
+
end
|
39
|
+
|
40
|
+
def bind(fullname, name, comment=nil)
|
41
|
+
@binds[name.to_sym] = fullname.to_sym
|
42
|
+
if comment != nil
|
43
|
+
comment(fullname, comment)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def has_param(name)
|
48
|
+
@params[name].class == String
|
49
|
+
end
|
50
|
+
|
51
|
+
def has_params(params_arr)
|
52
|
+
params_arr.each{|name|
|
53
|
+
return false if !has_param(name)
|
54
|
+
}
|
55
|
+
return true
|
56
|
+
end
|
57
|
+
|
58
|
+
def has_option(name)
|
59
|
+
@params[name] == true
|
60
|
+
end
|
61
|
+
|
62
|
+
def has_options(options_arr)
|
63
|
+
options_arr.each{|name|
|
64
|
+
return false if !has_option(name)
|
65
|
+
}
|
66
|
+
return true
|
67
|
+
end
|
68
|
+
|
69
|
+
def comment(name, comment)
|
70
|
+
@comments[name.to_sym] = comment.to_s
|
71
|
+
end
|
72
|
+
|
73
|
+
def comments
|
74
|
+
@comments
|
75
|
+
end
|
76
|
+
|
77
|
+
def help
|
78
|
+
binds_reversed = Hash.new
|
79
|
+
most_longname_size = 0
|
80
|
+
@binds.keys.each{|key|
|
81
|
+
value = @binds[key]
|
82
|
+
binds_reversed[value] = key
|
83
|
+
if most_longname_size < len = key.to_s.size + value.to_s.size
|
84
|
+
most_longname_size = len
|
85
|
+
end
|
86
|
+
}
|
87
|
+
|
88
|
+
s = "options:\n"
|
89
|
+
@comments.keys.sort{|a,b| a.to_s <=> b.to_s }.each{|name|
|
90
|
+
comment = @comments[name]
|
91
|
+
if shortname = binds_reversed[name]
|
92
|
+
s += " -#{name} (-#{shortname})" +
|
93
|
+
" "*(most_longname_size-name.to_s.size-shortname.to_s.size+2) + "#{comment}\n"
|
94
|
+
else
|
95
|
+
s += " -#{name}" + " "*(most_longname_size-name.to_s.size+6) + "#{comment}\n"
|
96
|
+
end
|
97
|
+
}
|
98
|
+
return s
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- shokai
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
version: 2.5.0
|
60
60
|
type: :development
|
61
61
|
version_requirements: *id003
|
62
|
-
description:
|
62
|
+
description: "* Parse args form command line."
|
63
63
|
email:
|
64
64
|
- hashimoto@shokai.org
|
65
65
|
executables: []
|
@@ -77,13 +77,15 @@ files:
|
|
77
77
|
- README.rdoc
|
78
78
|
- Rakefile
|
79
79
|
- lib/ArgsParser.rb
|
80
|
+
- lib/ArgsParser/Parser.rb
|
81
|
+
- examples/example.rb
|
80
82
|
- script/console
|
81
83
|
- script/destroy
|
82
84
|
- script/generate
|
83
85
|
- test/test_ArgsParser.rb
|
84
86
|
- test/test_helper.rb
|
85
87
|
has_rdoc: true
|
86
|
-
homepage: http://
|
88
|
+
homepage: http://bitbucket.org/shokai/argsparser-ruby
|
87
89
|
licenses: []
|
88
90
|
|
89
91
|
post_install_message:
|
@@ -112,7 +114,7 @@ rubyforge_project: ArgsParser
|
|
112
114
|
rubygems_version: 1.3.6
|
113
115
|
signing_key:
|
114
116
|
specification_version: 3
|
115
|
-
summary:
|
117
|
+
summary: "* Parse args form command line."
|
116
118
|
test_files:
|
117
119
|
- test/test_ArgsParser.rb
|
118
120
|
- test/test_helper.rb
|