micro-optparse 0.8.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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/lib/micro-optparse.rb +19 -0
- data/lib/micro-optparse/parser.rb +70 -0
- data/lib/micro-optparse/version.rb +5 -0
- data/micro-optparse.gemspec +21 -0
- metadata +74 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'micro-optparse/parser'
|
2
|
+
#
|
3
|
+
# options = Parser.new do |p|
|
4
|
+
# # p.banner = "test"
|
5
|
+
# p.version = "OptParseWrapper 0.8 (c) Florian Pilz 2011"
|
6
|
+
# p.option :severity, "set severity", :default => 4, :value_in_set => [4,5,6,7,8]
|
7
|
+
# p.option :verbose, "enable verbose output"
|
8
|
+
# p.option :mutation, "set mutation", :default => "MightyMutation", :value_matches => /Mutation/
|
9
|
+
# p.option :plus_selection, "use plus-selection if set", :default => true
|
10
|
+
# p.option :selection, "selection used", :default => "BestSelection"#, :short => "l"
|
11
|
+
# p.option :chance, "set mutation chance", :default => 0.8, :value_satisfies => lambda {|x| x >= 0.0 && x <= 1.0}
|
12
|
+
# end.process!
|
13
|
+
#
|
14
|
+
# puts options[:severity]
|
15
|
+
# puts options[:verbose]
|
16
|
+
# puts options[:mutation]
|
17
|
+
# puts options[:plus_selection]
|
18
|
+
# puts options[:selection]
|
19
|
+
# puts options[:chance]
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'optparse'
|
3
|
+
|
4
|
+
class Parser
|
5
|
+
attr_accessor :banner, :version
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@options = []
|
9
|
+
@used_short = []
|
10
|
+
yield self
|
11
|
+
end
|
12
|
+
|
13
|
+
def option(name, desc, settings = {})
|
14
|
+
@options << [name, desc, settings]
|
15
|
+
end
|
16
|
+
|
17
|
+
def short_from(name)
|
18
|
+
name.to_s.chars.each do |c|
|
19
|
+
next if @used_short.include?(c)
|
20
|
+
return c # returns from short_from method
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def validate(options) # remove this method if you want fewer lines of code and don't need validations
|
25
|
+
options.each_pair do |key, value|
|
26
|
+
opt = nil
|
27
|
+
@options.each { |o| opt = o if o[0] == key }
|
28
|
+
unless opt[2][:value_in_set].nil? || opt[2][:value_in_set].include?(value)
|
29
|
+
puts "Parameter for " << key.to_s << " must be in [" << opt[2][:value_in_set].join(",") << "]" ; exit(1)
|
30
|
+
end
|
31
|
+
unless opt[2][:value_matches].nil? || opt[2][:value_matches] =~ value
|
32
|
+
puts "Parameter must match /" << opt[2][:value_matches].source << "/" ; exit(1)
|
33
|
+
end
|
34
|
+
unless opt[2][:value_satisfies].nil? || opt[2][:value_satisfies].call(value)
|
35
|
+
puts "Parameter must satisfy given conditions (see description)" ; exit(1)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def process!
|
41
|
+
options = {}
|
42
|
+
optionparser = OptionParser.new do |p|
|
43
|
+
@options.each do |o|
|
44
|
+
@used_short << short = o[2][:short] || short_from(o[0])
|
45
|
+
options[o[0]] = o[2][:default] || false # set default
|
46
|
+
klass = o[2][:default].class == Fixnum ? Integer : o[2][:default].class
|
47
|
+
|
48
|
+
if klass == TrueClass || klass == FalseClass || klass == NilClass # boolean switch
|
49
|
+
p.on("-" << short, "--[no-]" << o[0].to_s.gsub("_", "-"), o[1]) {|x| options[o[0]] = x}
|
50
|
+
else # argument with parameter
|
51
|
+
p.on("-" << short, "--" << o[0].to_s.gsub("_", "-") << " " << o[2][:default].to_s, klass, o[1]) {|x| options[o[0]] = x}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
p.banner = @banner unless @banner.nil?
|
56
|
+
p.on_tail("-h", "--help", "Show this message") {puts p ; exit}
|
57
|
+
short = @used_short.include?("v") ? "-V" : "-v"
|
58
|
+
p.on_tail(short, "--version", "Print version") {puts @version ; exit} unless @version.nil?
|
59
|
+
end
|
60
|
+
|
61
|
+
begin
|
62
|
+
optionparser.parse!(ARGV)
|
63
|
+
rescue OptionParser::ParseError => e
|
64
|
+
puts e.message ; exit(1)
|
65
|
+
end
|
66
|
+
|
67
|
+
validate(options) if self.respond_to?("validate")
|
68
|
+
options
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "micro-optparse/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "micro-optparse"
|
7
|
+
s.version = Micro::Optparse::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Florian Pilz"]
|
10
|
+
s.email = ["fpilz87@googlemail.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{A very small wrapper around optparse.}
|
13
|
+
s.description = %q{This gem wraps all the functionality of optparse into an easy to use, clear and short syntax. In addtion, strong validations are added. You can either use this gem as a lightweight alternative to trollop or copy all its 75 lines into your script to have an command-line parser without injecting a gem dependency.}
|
14
|
+
|
15
|
+
s.license = "MIT"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: micro-optparse
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 63
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
- 0
|
10
|
+
version: 0.8.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Florian Pilz
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-02-26 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: This gem wraps all the functionality of optparse into an easy to use, clear and short syntax. In addtion, strong validations are added. You can either use this gem as a lightweight alternative to trollop or copy all its 75 lines into your script to have an command-line parser without injecting a gem dependency.
|
23
|
+
email:
|
24
|
+
- fpilz87@googlemail.com
|
25
|
+
executables: []
|
26
|
+
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Gemfile
|
34
|
+
- Rakefile
|
35
|
+
- lib/micro-optparse.rb
|
36
|
+
- lib/micro-optparse/parser.rb
|
37
|
+
- lib/micro-optparse/version.rb
|
38
|
+
- micro-optparse.gemspec
|
39
|
+
has_rdoc: true
|
40
|
+
homepage: ""
|
41
|
+
licenses:
|
42
|
+
- MIT
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
hash: 3
|
54
|
+
segments:
|
55
|
+
- 0
|
56
|
+
version: "0"
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 3
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
requirements: []
|
67
|
+
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 1.4.2
|
70
|
+
signing_key:
|
71
|
+
specification_version: 3
|
72
|
+
summary: A very small wrapper around optparse.
|
73
|
+
test_files: []
|
74
|
+
|