commandable 0.2.1 → 0.2.2
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/README.markdown +16 -6
- data/lib/commandable/commandable.rb +7 -2
- data/lib/commandable/version.rb +1 -1
- data/lib/monkey_patch/file_utils.rb +10 -10
- data/spec/commandable/commandable_spec.rb +1 -1
- data/spec/commandable/kernel_exit_spec.rb +27 -0
- data/spec/source_code_examples/kernel_exit_class.rb +10 -0
- metadata +15 -14
- data/lib/monkey_patch/os.rb +0 -8
data/README.markdown
CHANGED
@@ -36,11 +36,11 @@ And of course upload them when it asks you if it can. You can take a look at the
|
|
36
36
|
Thanks for your help.
|
37
37
|
|
38
38
|
|
39
|
-
##
|
39
|
+
## Latest version
|
40
40
|
|
41
|
-
2011-
|
41
|
+
2011-08-31 - Version: 0.2.2
|
42
42
|
|
43
|
-
See change history for
|
43
|
+
See change history for specific changes.
|
44
44
|
|
45
45
|
## Principle of Least Surprise
|
46
46
|
|
@@ -49,7 +49,7 @@ I've tried to follow the principle of least surprise so Commandable should just
|
|
49
49
|
## Requirements ##
|
50
50
|
|
51
51
|
* Ruby 1.9.2
|
52
|
-
*
|
52
|
+
* OS X or any Posix OS (It works, mostly, on Windows but ironically some of the tests won't run because of some Unix commands I use in the tests)
|
53
53
|
|
54
54
|
## Installation
|
55
55
|
From the command line:
|
@@ -198,7 +198,7 @@ Note: Class methods are called directly on the class while instance methods have
|
|
198
198
|
|
199
199
|
### Automatic usage/help generation ###
|
200
200
|
|
201
|
-
One of the great features of **Commandable** is that automatically creates usage instructions based on your methods and the descriptions you provide for them
|
201
|
+
One of the great features of **Commandable** is that it automatically creates usage instructions based on your methods and the descriptions you provide for them. It then adds a `help` command for you that will print out these usage instructions when called.
|
202
202
|
|
203
203
|
If your app has no `:default` method or it has a default command that requires parameters the help/usage instructions will be printed if a user just runs your app without any input.
|
204
204
|
|
@@ -268,7 +268,7 @@ The help information can be colored using the standard ANSI escape commands foun
|
|
268
268
|
|
269
269
|
Then you can do something like this:
|
270
270
|
|
271
|
-
require 'term/
|
271
|
+
require 'term/ansicolorhi'
|
272
272
|
|
273
273
|
c = Term::ANSIColorHI
|
274
274
|
|
@@ -403,6 +403,11 @@ You just need to configure your bin file with the app settings and then run `Com
|
|
403
403
|
# See the Widget app for an example of this.
|
404
404
|
require 'yourappname'
|
405
405
|
Commandable.execute(ARGV)
|
406
|
+
|
407
|
+
# If you don't want the output from your methods to be printed automatically
|
408
|
+
# for instance if your method already outputs some text, you can add :silent
|
409
|
+
# to the execute command like this:
|
410
|
+
# Commandable.execute(ARGV, :silent)
|
406
411
|
|
407
412
|
|
408
413
|
I actually prefer to create a separate file for my **Commandable** configuration and load it in my main app file in the `lib` directory. Again, take a look at `Widget` to see what I mean.
|
@@ -422,6 +427,11 @@ Most of all it should be simple to use so if you have any problems please drop m
|
|
422
427
|
|
423
428
|
## Version History ##
|
424
429
|
|
430
|
+
2011-08-31 - Version: 0.2.2
|
431
|
+
|
432
|
+
* Added ability to do use Kernel.exit without Commandable trapping the error.
|
433
|
+
* Kernel.exit properly forwards exit status if given one.
|
434
|
+
|
425
435
|
2011-04-04 - Version: 0.2.1
|
426
436
|
|
427
437
|
* Added ability to use attr\_accessor and att\_writer as commands. You can only write to them of course but it's an easy way to set values.
|
@@ -142,8 +142,11 @@ module Commandable
|
|
142
142
|
end
|
143
143
|
|
144
144
|
# A wrapper for the execution_queue that runs the queue and traps errors.
|
145
|
-
# If an error occurs inside this method it will print out a complete
|
146
|
-
# of availavle methods with usage
|
145
|
+
# If an error occurs inside this method it will print out a complete list
|
146
|
+
# of availavle methods with usage instructions and exit gracefully.
|
147
|
+
#
|
148
|
+
# If you do not want the output from your methods to be printed out automatically
|
149
|
+
# run the execute command with silent set to anything other than false or nil.
|
147
150
|
def execute(argv, silent=false)
|
148
151
|
begin
|
149
152
|
command_queue = execution_queue(argv)
|
@@ -151,6 +154,8 @@ module Commandable
|
|
151
154
|
return_value = com[:proc].call
|
152
155
|
puts return_value unless silent
|
153
156
|
end
|
157
|
+
rescue SystemExit => kernel_exit
|
158
|
+
Kernel.exit kernel_exit.status
|
154
159
|
rescue Exception => exception
|
155
160
|
if exception.respond_to?(:friendly_name)
|
156
161
|
set_colors
|
data/lib/commandable/version.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require 'fileutils'
|
1
|
+
require 'fileutils'
|
2
2
|
|
3
|
-
module FileUtils
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
3
|
+
module FileUtils
|
4
|
+
# Monkeypatch FileUtils really annoying lack of proper directory copying
|
5
|
+
def copy_dir(source, dest)
|
6
|
+
files = Dir.glob("#{source}/**")
|
7
|
+
mkdir_p dest
|
8
|
+
cp_r files, dest
|
9
|
+
end
|
10
|
+
module_function :copy_dir
|
11
|
+
end
|
@@ -19,7 +19,7 @@ describe Commandable do
|
|
19
19
|
|
20
20
|
context "when checking syntax" do
|
21
21
|
|
22
|
-
it "shouldn't
|
22
|
+
it "shouldn't raise an error if nothing more than 'switch' is used" do
|
23
23
|
lambda{load 'no_description.rb'}.should_not raise_error(Commandable::SyntaxError)
|
24
24
|
end
|
25
25
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Commandable do
|
4
|
+
|
5
|
+
before(:each) {
|
6
|
+
Commandable.reset_all
|
7
|
+
Commandable.app_exe = "mycoolapp"
|
8
|
+
Commandable.app_info =
|
9
|
+
"""
|
10
|
+
My Cool App - It does stuff and things!
|
11
|
+
Copyright (c) 2011 Acme Inc.
|
12
|
+
"""
|
13
|
+
|
14
|
+
load 'kernel_exit_class.rb'
|
15
|
+
}
|
16
|
+
|
17
|
+
it "should not trap kernel exits" do
|
18
|
+
lambda{execute_queue(['exit'])}.should raise_error(SystemExit)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should forward kernel exit status codes" do
|
22
|
+
lambda{execute_queue(['exit', '40'])}.should raise_error(SystemExit) { |error|
|
23
|
+
error.status.should == 40
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commandable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
13
|
-
default_executable:
|
12
|
+
date: 2011-08-31 00:00:00.000000000Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: term-ansicolor-hi
|
17
|
-
requirement: &
|
16
|
+
requirement: &70343654860340 !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ~>
|
@@ -22,10 +21,10 @@ dependencies:
|
|
22
21
|
version: 1.0.7
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements: *
|
24
|
+
version_requirements: *70343654860340
|
26
25
|
- !ruby/object:Gem::Dependency
|
27
26
|
name: rspec
|
28
|
-
requirement: &
|
27
|
+
requirement: &70343654859880 !ruby/object:Gem::Requirement
|
29
28
|
none: false
|
30
29
|
requirements:
|
31
30
|
- - ~>
|
@@ -33,10 +32,10 @@ dependencies:
|
|
33
32
|
version: '2.5'
|
34
33
|
type: :development
|
35
34
|
prerelease: false
|
36
|
-
version_requirements: *
|
35
|
+
version_requirements: *70343654859880
|
37
36
|
- !ruby/object:Gem::Dependency
|
38
37
|
name: cucumber
|
39
|
-
requirement: &
|
38
|
+
requirement: &70343654859420 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
40
|
requirements:
|
42
41
|
- - ~>
|
@@ -44,10 +43,10 @@ dependencies:
|
|
44
43
|
version: '0.10'
|
45
44
|
type: :development
|
46
45
|
prerelease: false
|
47
|
-
version_requirements: *
|
46
|
+
version_requirements: *70343654859420
|
48
47
|
- !ruby/object:Gem::Dependency
|
49
48
|
name: aruba
|
50
|
-
requirement: &
|
49
|
+
requirement: &70343654858960 !ruby/object:Gem::Requirement
|
51
50
|
none: false
|
52
51
|
requirements:
|
53
52
|
- - ~>
|
@@ -55,7 +54,7 @@ dependencies:
|
|
55
54
|
version: '0.3'
|
56
55
|
type: :development
|
57
56
|
prerelease: false
|
58
|
-
version_requirements: *
|
57
|
+
version_requirements: *70343654858960
|
59
58
|
description: ! 'The easiest way to add command line control to your Ruby app. You
|
60
59
|
can add a single line above an existing method and that method will be available
|
61
60
|
from the command line.
|
@@ -93,7 +92,6 @@ files:
|
|
93
92
|
- lib/commandable/exceptions.rb
|
94
93
|
- lib/commandable/version.rb
|
95
94
|
- lib/monkey_patch/file_utils.rb
|
96
|
-
- lib/monkey_patch/os.rb
|
97
95
|
- spec/commandable/app_controller_spec.rb
|
98
96
|
- spec/commandable/attr_accessor_spec.rb
|
99
97
|
- spec/commandable/command_line_execution_spec.rb
|
@@ -101,6 +99,7 @@ files:
|
|
101
99
|
- spec/commandable/help_generator_spec.rb
|
102
100
|
- spec/commandable/helpers_spec.rb
|
103
101
|
- spec/commandable/instance_methods_spec.rb
|
102
|
+
- spec/commandable/kernel_exit_spec.rb
|
104
103
|
- spec/commandable/required_default_spec.rb
|
105
104
|
- spec/commandable/reset_spec.rb
|
106
105
|
- spec/commandable/xor_groups_spec.rb
|
@@ -116,6 +115,7 @@ files:
|
|
116
115
|
- spec/source_code_examples/default_method_no_params.rb
|
117
116
|
- spec/source_code_examples/instance_methods.rb
|
118
117
|
- spec/source_code_examples/instance_methods2.rb
|
118
|
+
- spec/source_code_examples/kernel_exit_class.rb
|
119
119
|
- spec/source_code_examples/multi_line_description.rb
|
120
120
|
- spec/source_code_examples/multi_line_description_no_params.rb
|
121
121
|
- spec/source_code_examples/no_description.rb
|
@@ -130,7 +130,6 @@ files:
|
|
130
130
|
- spec/source_code_for_errors/default_method_bad.rb
|
131
131
|
- spec/source_code_for_errors/private_methods_bad.rb
|
132
132
|
- spec/spec_helper.rb
|
133
|
-
has_rdoc: true
|
134
133
|
homepage: http://mikbe.tk
|
135
134
|
licenses:
|
136
135
|
- MIT
|
@@ -152,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
151
|
version: '0'
|
153
152
|
requirements: []
|
154
153
|
rubyforge_project:
|
155
|
-
rubygems_version: 1.
|
154
|
+
rubygems_version: 1.8.7
|
156
155
|
signing_key:
|
157
156
|
specification_version: 3
|
158
157
|
summary: The easiest way to add command line control to your Ruby apps.
|
@@ -165,6 +164,7 @@ test_files:
|
|
165
164
|
- spec/commandable/help_generator_spec.rb
|
166
165
|
- spec/commandable/helpers_spec.rb
|
167
166
|
- spec/commandable/instance_methods_spec.rb
|
167
|
+
- spec/commandable/kernel_exit_spec.rb
|
168
168
|
- spec/commandable/required_default_spec.rb
|
169
169
|
- spec/commandable/reset_spec.rb
|
170
170
|
- spec/commandable/xor_groups_spec.rb
|
@@ -180,6 +180,7 @@ test_files:
|
|
180
180
|
- spec/source_code_examples/default_method_no_params.rb
|
181
181
|
- spec/source_code_examples/instance_methods.rb
|
182
182
|
- spec/source_code_examples/instance_methods2.rb
|
183
|
+
- spec/source_code_examples/kernel_exit_class.rb
|
183
184
|
- spec/source_code_examples/multi_line_description.rb
|
184
185
|
- spec/source_code_examples/multi_line_description_no_params.rb
|
185
186
|
- spec/source_code_examples/no_description.rb
|