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 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