optitron 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/README.rdoc +44 -7
- data/examples/cli.rb +15 -0
- data/lib/optitron/class_dsl.rb +1 -1
- data/lib/optitron/version.rb +1 -1
- data/spec/option_spec.rb +16 -0
- metadata +5 -4
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
== Sensible options parsing
|
4
4
|
|
5
|
-
Optitron strives to be simple, minimal and to do the "right thing" most of the time. The structure is
|
5
|
+
Optitron strives to be simple, minimal and to do the "right thing" most of the time. The structure is easy: you have global options, a list of commands, and each of those commands takes a number of arguments and options.
|
6
6
|
|
7
7
|
== Usage
|
8
8
|
|
9
|
-
To create an Optitron CLI, start with a class you want to wire up as a CLI. In our example, we'll use the class Runner, which we want to work as a CLI.
|
9
|
+
To create an Optitron command line interface (CLI), start with a class you want to wire up as a CLI. In our example, we'll use the class Runner, which we want to work as a CLI.
|
10
10
|
|
11
11
|
class Runner
|
12
12
|
def start
|
@@ -41,7 +41,48 @@ To make this class suitable for use as a CLI, either extend <tt>Optitron::CLI</t
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
=== Help command
|
45
|
+
|
46
|
+
Help is added by default, but, if you don't want to use this, include the command +dont_use_help+ in your class. Help is available from either <tt>--help</tt> or <tt>-?</tt>.
|
47
|
+
|
48
|
+
=== Arguments
|
49
|
+
|
50
|
+
Only methods described will be available to the CLI. If you have a method that needs arguments, simply include them as method arguments. It will respect splats and defaults. For instance
|
51
|
+
|
52
|
+
desc "Starts the process"
|
53
|
+
def start(mode)
|
54
|
+
# ... starts
|
55
|
+
end
|
56
|
+
|
57
|
+
Will generate
|
58
|
+
|
59
|
+
start [mode] # Starts the process
|
60
|
+
|
61
|
+
In your help file.
|
62
|
+
|
63
|
+
desc "Starts the process"
|
64
|
+
def start(mode = 'production')
|
65
|
+
# ... starts
|
66
|
+
end
|
67
|
+
|
68
|
+
Will generate
|
69
|
+
|
70
|
+
start <mode="production"> # Starts the process
|
71
|
+
|
72
|
+
And
|
73
|
+
|
74
|
+
desc "Starts the process"
|
75
|
+
def start(*modes)
|
76
|
+
# ... starts
|
77
|
+
end
|
78
|
+
|
79
|
+
Will generate
|
80
|
+
|
81
|
+
start <modes1 modes2 ...> # Starts the process
|
82
|
+
|
83
|
+
=== Options
|
84
|
+
|
85
|
+
Options are specified with the +opt+ method in your class, as follows:
|
45
86
|
|
46
87
|
class Runner < Optitron::CLI
|
47
88
|
desc "Starts the process"
|
@@ -70,10 +111,6 @@ The last line in your runner has to be the class name and dispatch. This will pa
|
|
70
111
|
# ... your methods
|
71
112
|
end
|
72
113
|
Runner.dispatch
|
73
|
-
|
74
|
-
As well, help is added by default, but, if you don't want to use this, include the command +dont_use_help+ in your class.
|
75
|
-
|
76
|
-
== How to configure options
|
77
114
|
|
78
115
|
Options can have defaults, types and inclusion checks. Here are all the options available on an opt:
|
79
116
|
|
data/examples/cli.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'optitron'
|
2
|
+
|
3
|
+
class Runner < Optitron::CLI
|
4
|
+
class_opt 'verbose'
|
5
|
+
class_opt 'environment', :in => %w(production stage development test), :default => 'development'
|
6
|
+
class_opt 'volume', :in => 1..10
|
7
|
+
|
8
|
+
desc "Install stuff"
|
9
|
+
opt 'force'
|
10
|
+
def install(file, source = ".")
|
11
|
+
puts "Installing #{file} from #{source.inspect} with params: #{params.inspect}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Runner.dispatch
|
data/lib/optitron/class_dsl.rb
CHANGED
@@ -126,7 +126,7 @@ class Optitron
|
|
126
126
|
|
127
127
|
def build
|
128
128
|
unless @built
|
129
|
-
optitron_dsl.root.help
|
129
|
+
optitron_dsl.root.help unless send(:class_variable_defined?, :@@suppress_help)
|
130
130
|
@cmds.each do |(cmd_name, cmd_desc, opts)|
|
131
131
|
args = method_args[cmd_name.to_sym]
|
132
132
|
arity = instance_method(cmd_name).arity
|
data/lib/optitron/version.rb
CHANGED
data/spec/option_spec.rb
CHANGED
@@ -133,4 +133,20 @@ describe "Optitron::Parser options" do
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
+
context "array options with a comment" do
|
137
|
+
before(:each) do
|
138
|
+
@parser = Optitron.new {
|
139
|
+
cmd "install" do
|
140
|
+
opt "things", :type => :array
|
141
|
+
end
|
142
|
+
}
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should parse '--things=one two three install'" do
|
146
|
+
response = @parser.parse(%w(--things=one two three install))
|
147
|
+
response.valid?.should be_true
|
148
|
+
response.params.should == {'things' => ['one', 'two', 'three']}
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
136
152
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: optitron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joshua Hull
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-21 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- Gemfile.lock
|
143
143
|
- README.rdoc
|
144
144
|
- Rakefile
|
145
|
+
- examples/cli.rb
|
145
146
|
- lib/optitron.rb
|
146
147
|
- lib/optitron/class_dsl.rb
|
147
148
|
- lib/optitron/cli.rb
|