clamp 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -42,7 +42,7 @@ Calling `run` on a command class creates an instance of it, then invokes it usin
42
42
 
43
43
  SpeakCommand.run
44
44
 
45
- Class-level methods like `option` and `parameter` declare attributes (in a similar way to `attr_accessor`), and arrange for them to be populated automatically based on command-line arguments. They are aso used to generate `help` documentation.
45
+ Class-level methods like `option` and `parameter` declare attributes (in a similar way to `attr_accessor`), and arrange for them to be populated automatically based on command-line arguments. They are also used to generate `help` documentation.
46
46
 
47
47
  Declaring options
48
48
  -----------------
@@ -148,6 +148,26 @@ While Clamp provides an attribute-writer method for each declared option or para
148
148
  @server_address, @server_port = server.split(":")
149
149
  end
150
150
 
151
+ ### Default values
152
+
153
+ Default values can be specified for options:
154
+
155
+ option "--flavour", "FLAVOUR", "ice-cream flavour", :default => "chocolate"
156
+
157
+ and also for optional parameters
158
+
159
+ parameter "[HOST]", "server host", :default => "localhost"
160
+
161
+ For more advanced cases, you can also specify default values by defining a method called "`default_#{attribute_name}`":
162
+
163
+ option "--http-port", "PORT", "web-server port", :default => 9000
164
+
165
+ option "--admin-port", "PORT", "admin port"
166
+
167
+ def default_admin_port
168
+ http_port + 1
169
+ end
170
+
151
171
  Declaring Subcommands
152
172
  ---------------------
153
173
 
data/clamp.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
 
14
14
  s.summary = %q{a minimal framework for command-line utilities}
15
15
  s.description = <<EOF
16
- Clamp makes provides an object-model for command-line utilities.
16
+ Clamp provides an object-model for command-line utilities.
17
17
  It handles parsing of command-line options, and generation of usage help.
18
18
  EOF
19
19
 
@@ -6,6 +6,7 @@ module Clamp
6
6
 
7
7
  def define_accessors_for(attribute, &block)
8
8
  define_reader_for(attribute)
9
+ define_default_for(attribute)
9
10
  define_writer_for(attribute, &block)
10
11
  end
11
12
 
@@ -18,7 +19,15 @@ module Clamp
18
19
  instance_variable_get(ivar_name)
19
20
  elsif parent_command && parent_command.respond_to?(reader_name)
20
21
  parent_command.send(reader_name)
21
- elsif attribute.respond_to?(:default_value)
22
+ elsif respond_to?("default_#{attribute.attribute_name}")
23
+ send("default_#{attribute.attribute_name}")
24
+ end
25
+ end
26
+ end
27
+
28
+ def define_default_for(attribute)
29
+ if attribute.respond_to?(:default_value)
30
+ define_method("default_#{attribute.attribute_name}") do
22
31
  attribute.default_value
23
32
  end
24
33
  end
@@ -9,12 +9,19 @@ module Clamp
9
9
  if options.has_key?(:attribute_name)
10
10
  @attribute_name = options[:attribute_name].to_s
11
11
  end
12
+ if options.has_key?(:default)
13
+ @default_value = options[:default]
14
+ end
12
15
  end
13
16
 
14
- attr_reader :name, :description, :attribute_name
17
+ attr_reader :name, :description, :attribute_name, :default_value
15
18
 
16
19
  def help
17
- [name, description]
20
+ rhs = description
21
+ if defined?(@default_value)
22
+ rhs += " (default: #{@default_value.inspect})"
23
+ end
24
+ [name, rhs]
18
25
  end
19
26
 
20
27
  def consume(arguments)
data/lib/clamp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Clamp
2
- VERSION = "0.1.5".freeze
2
+ VERSION = "0.1.6".freeze
3
3
  end
@@ -79,20 +79,37 @@ describe Clamp::Command do
79
79
 
80
80
  end
81
81
 
82
- describe "with :default value" do
82
+ describe "with default method" do
83
83
 
84
- given_command("cmd") do
85
- option "--nodes", "N", "number of nodes", :default => 2
84
+ before do
85
+ @command.class.option "--port", "PORT", "port"
86
+ @command.class.class_eval do
87
+ def default_port
88
+ 4321
89
+ end
90
+ end
86
91
  end
87
92
 
88
93
  it "sets the specified default value" do
89
- @command.nodes.should == 2
94
+ @command.port.should == 4321
95
+ end
96
+
97
+ end
98
+
99
+ describe "with :default value" do
100
+
101
+ before do
102
+ @command.class.option "--port", "PORT", "port to listen on", :default => 4321
103
+ end
104
+
105
+ it "declares default method" do
106
+ @command.default_port.should == 4321
90
107
  end
91
108
 
92
109
  describe "#help" do
93
110
 
94
111
  it "describes the default value" do
95
- @command.help.should include("number of nodes (default: 2)")
112
+ @command.help.should include("port to listen on (default: 4321)")
96
113
  end
97
114
 
98
115
  end
@@ -297,6 +314,26 @@ describe Clamp::Command do
297
314
 
298
315
  end
299
316
 
317
+ describe "with :default value" do
318
+
319
+ before do
320
+ @command.class.parameter "[FLAVOUR]", "flavour of the month", :default => "chocolate"
321
+ end
322
+
323
+ it "sets the specified default value" do
324
+ @command.flavour.should == "chocolate"
325
+ end
326
+
327
+ describe "#help" do
328
+
329
+ it "describes the default value" do
330
+ @command.help.should include("flavour of the month (default: \"chocolate\")")
331
+ end
332
+
333
+ end
334
+
335
+ end
336
+
300
337
  describe "with a block" do
301
338
 
302
339
  before do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clamp
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 5
10
- version: 0.1.5
9
+ - 6
10
+ version: 0.1.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mike Williams
@@ -15,12 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-02 00:00:00 +11:00
18
+ date: 2011-01-29 00:00:00 +11:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
22
22
  description: |
23
- Clamp makes provides an object-model for command-line utilities.
23
+ Clamp provides an object-model for command-line utilities.
24
24
  It handles parsing of command-line options, and generation of usage help.
25
25
 
26
26
  email: mdub@dogbiscuit.org
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  requirements: []
90
90
 
91
91
  rubyforge_project:
92
- rubygems_version: 1.3.7
92
+ rubygems_version: 1.4.2
93
93
  signing_key:
94
94
  specification_version: 3
95
95
  summary: a minimal framework for command-line utilities