ArgsParser 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -4,6 +4,8 @@ PostInstall.txt
4
4
  README.rdoc
5
5
  Rakefile
6
6
  lib/ArgsParser.rb
7
+ lib/ArgsParser/Parser.rb
8
+ examples/example.rb
7
9
  script/console
8
10
  script/destroy
9
11
  script/generate
data/README.rdoc CHANGED
@@ -1,18 +1,34 @@
1
1
  = ArgsParser
2
2
 
3
- * http://github.com/#{github_username}/#{project_name}
3
+ * http://bitbucket.org/shokai/argsparser-ruby
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- FIX (describe your package)
7
+ * Parse args form command line.
8
8
 
9
9
  == FEATURES/PROBLEMS:
10
10
 
11
- * FIX (list of features or problems)
11
+ *
12
12
 
13
13
  == SYNOPSIS:
14
14
 
15
- FIX (code sample of usage)
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
- * FIX (sudo gem install, anything else)
39
+ * sudo gem install ArgsParser
24
40
 
25
41
  == LICENSE:
26
42
 
@@ -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
@@ -5,7 +5,7 @@ directory = File.expand_path(File.dirname(__FILE__))
5
5
 
6
6
  require File.join(directory, 'ArgsParser', 'Parser')
7
7
  module ArgsParser
8
- VERSION = '0.0.2'
8
+ VERSION = '0.0.3'
9
9
 
10
10
  def ArgsParser.parser
11
11
  Parser.new
@@ -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
- - 2
9
- version: 0.0.2
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: FIX (describe your package)
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://github.com/#{github_username}/#{project_name}
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: FIX (describe your package)
117
+ summary: "* Parse args form command line."
116
118
  test_files:
117
119
  - test/test_ArgsParser.rb
118
120
  - test/test_helper.rb