executable 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.index +71 -0
- data/.ruby +1 -61
- data/Config.rb +16 -0
- data/{DEMO.rdoc → DEMO.md} +108 -108
- data/{HISTORY.rdoc → HISTORY.md} +16 -4
- data/LICENSE.txt +22 -0
- data/{README.rdoc → README.md} +44 -29
- data/demo/{00_introduction.rdoc → 00_introduction.md} +1 -1
- data/demo/{01_single_command.rdoc → 01_single_command.md} +1 -1
- data/demo/{02_multiple_commands.rdoc → 02_multiple_commands.md} +1 -1
- data/demo/{03_help_text.rdoc → 03_help_text.md} +5 -5
- data/demo/{04_manpage.rdoc → 04_manpage.md} +4 -4
- data/demo/{06_delegate_example.rdoc → 06_delegate_example.md} +1 -1
- data/demo/{07_command_methods.rdoc → 07_command_methods.md} +1 -1
- data/demo/{08_dispatach.rdoc → 08_dispatach.md} +1 -1
- data/demo/{05_optparse_example.rdoc → 09_optparse_example.md} +1 -1
- data/demo/samples/bin/hello +9 -2
- data/lib/executable.rb +1 -1
- data/lib/executable.yml +71 -0
- data/lib/executable/dispatch.rb +1 -1
- data/lib/executable/domain.rb +41 -1
- data/lib/executable/help.rb +10 -7
- data/lib/executable/version.rb +7 -10
- metadata +53 -41
- data/COPYING.rdoc +0 -35
- data/Schedule.reap +0 -17
- data/meta/authors +0 -2
- data/meta/copyrights +0 -3
- data/meta/created +0 -1
- data/meta/description +0 -6
- data/meta/name +0 -1
- data/meta/organization +0 -1
- data/meta/repositories +0 -2
- data/meta/requirements +0 -6
- data/meta/resources +0 -7
- data/meta/summary +0 -1
- data/meta/version +0 -1
data/.index
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
---
|
2
|
+
type: ruby
|
3
|
+
revision: 2013
|
4
|
+
sources:
|
5
|
+
- var
|
6
|
+
authors:
|
7
|
+
- name: 7rans
|
8
|
+
email: transfire@gmail.com
|
9
|
+
organizations: []
|
10
|
+
requirements:
|
11
|
+
- groups:
|
12
|
+
- test
|
13
|
+
development: true
|
14
|
+
name: qed
|
15
|
+
- groups:
|
16
|
+
- test
|
17
|
+
development: true
|
18
|
+
name: ae
|
19
|
+
- groups:
|
20
|
+
- build
|
21
|
+
development: true
|
22
|
+
name: detroit
|
23
|
+
- groups:
|
24
|
+
- build
|
25
|
+
development: true
|
26
|
+
name: simplecov
|
27
|
+
conflicts: []
|
28
|
+
alternatives: []
|
29
|
+
resources:
|
30
|
+
- type: home
|
31
|
+
uri: http://rubyworks.github.com/executable
|
32
|
+
label: Homepage
|
33
|
+
- type: code
|
34
|
+
uri: http://github.com/rubyworks/executable
|
35
|
+
label: Source Code
|
36
|
+
- type: bugs
|
37
|
+
uri: http://github.com/rubyworks/executable/issues
|
38
|
+
label: Issue Tracker
|
39
|
+
- type: mail
|
40
|
+
uri: http://groups.google.com/rubyworks-mailinglist
|
41
|
+
label: Mailing List
|
42
|
+
- type: chat
|
43
|
+
uri: irc://chat.us.freenode.net#rubyworks
|
44
|
+
label: IRC Channel
|
45
|
+
repositories:
|
46
|
+
- name: upstream
|
47
|
+
scm: git
|
48
|
+
uri: git://github.com/rubyworks/executable.git
|
49
|
+
categories: []
|
50
|
+
paths:
|
51
|
+
load:
|
52
|
+
- lib
|
53
|
+
copyrights:
|
54
|
+
- holder: Rubyworks
|
55
|
+
year: '2008'
|
56
|
+
license: BSD-2-Clause
|
57
|
+
created: '2008-08-08'
|
58
|
+
summary: Commandline Object Mapper
|
59
|
+
version: 1.2.1
|
60
|
+
name: executable
|
61
|
+
title: Executable
|
62
|
+
description: ! 'Think of Executable as a *COM*, a Commandline Object Mapper,
|
63
|
+
|
64
|
+
in much the same way that ActiveRecord is an ORM,
|
65
|
+
|
66
|
+
an Object Relational Mapper. A class utilizing Executable
|
67
|
+
|
68
|
+
can define a complete command line tool using nothing more
|
69
|
+
|
70
|
+
than Ruby''s own method definitions.'
|
71
|
+
date: '2012-12-18'
|
data/.ruby
CHANGED
@@ -1,61 +1 @@
|
|
1
|
-
|
2
|
-
source:
|
3
|
-
- meta
|
4
|
-
authors:
|
5
|
-
- name: 7rans
|
6
|
-
email: transfire@gmail.com
|
7
|
-
copyrights:
|
8
|
-
- holder: Rubyworks
|
9
|
-
year: '2008'
|
10
|
-
license: BSD-2-Clause
|
11
|
-
replacements: []
|
12
|
-
alternatives: []
|
13
|
-
requirements:
|
14
|
-
- name: qed
|
15
|
-
groups:
|
16
|
-
- test
|
17
|
-
development: true
|
18
|
-
- name: ae
|
19
|
-
groups:
|
20
|
-
- test
|
21
|
-
development: true
|
22
|
-
- name: detroit
|
23
|
-
groups:
|
24
|
-
- build
|
25
|
-
development: true
|
26
|
-
- name: simplecov
|
27
|
-
groups:
|
28
|
-
- build
|
29
|
-
development: true
|
30
|
-
dependencies: []
|
31
|
-
conflicts: []
|
32
|
-
repositories:
|
33
|
-
- uri: git://github.com/rubyworks/executable.git
|
34
|
-
scm: git
|
35
|
-
name: upstream
|
36
|
-
resources:
|
37
|
-
home: http://rubyworks.github.com/executable
|
38
|
-
code: http://github.com/rubyworks/executable
|
39
|
-
bugs: http://github.com/rubyworks/executable/issues
|
40
|
-
mail: http://groups.google.com/rubyworks-mailinglist
|
41
|
-
chat: irc://chat.us.freenode.net#rubyworks
|
42
|
-
extra: {}
|
43
|
-
load_path:
|
44
|
-
- lib
|
45
|
-
revision: 0
|
46
|
-
created: '2008-08-08'
|
47
|
-
summary: Commandline Object Mapper
|
48
|
-
version: 1.2.0
|
49
|
-
name: executable
|
50
|
-
title: Executable
|
51
|
-
description: ! 'Think of Executable as a *COM*, a Commandline Object Mapper,
|
52
|
-
|
53
|
-
in much the same way that ActiveRecord is an ORM,
|
54
|
-
|
55
|
-
an Object Relational Mapper. A class utilizing Executable
|
56
|
-
|
57
|
-
can define a complete command line tool using nothing more
|
58
|
-
|
59
|
-
than Ruby''s own method definitions.'
|
60
|
-
organization: rubyworks
|
61
|
-
date: '2012-01-31'
|
1
|
+
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]
|
data/Config.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Code coverage.
|
4
|
+
profile :cov do
|
5
|
+
|
6
|
+
# Setup QED.
|
7
|
+
config :qed do
|
8
|
+
require 'simplecov'
|
9
|
+
SimpleCov.start do
|
10
|
+
coverage_dir 'log/coverage'
|
11
|
+
add_filter "/demo/"
|
12
|
+
#add_group "RSpec", "lib/assay/rspec.rb"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/{DEMO.rdoc → DEMO.md}
RENAMED
@@ -301,6 +301,114 @@ method will automatically find the manpage and display it.
|
|
301
301
|
|
302
302
|
|
303
303
|
|
304
|
+
= Subclass Example
|
305
|
+
|
306
|
+
Lets say we have a class that we would like to work with on
|
307
|
+
the command line, but want to keep the class itself unchanaged
|
308
|
+
without mixin.
|
309
|
+
|
310
|
+
class Hello
|
311
|
+
attr_accessor :name
|
312
|
+
|
313
|
+
def initialize(name="World")
|
314
|
+
@name = name
|
315
|
+
end
|
316
|
+
|
317
|
+
def hello
|
318
|
+
@output = "Hello, #{name}!"
|
319
|
+
end
|
320
|
+
|
321
|
+
def output
|
322
|
+
@output
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
Rather then including Exectuable in the class directly, we can
|
327
|
+
create a subclass and use it instead.
|
328
|
+
|
329
|
+
class HelloCommand < Hello
|
330
|
+
include Executable
|
331
|
+
|
332
|
+
def call(*args)
|
333
|
+
hello
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
Now we can execute the command perfectly well.
|
338
|
+
|
339
|
+
cmd = HelloCommand.execute(['hello', '--name=Fred'])
|
340
|
+
cmd.output.assert == "Hello, Fred!"
|
341
|
+
|
342
|
+
And the original class remains undisturbed.
|
343
|
+
|
344
|
+
|
345
|
+
= README Example
|
346
|
+
|
347
|
+
This is the example used in the documentation.
|
348
|
+
|
349
|
+
class Example
|
350
|
+
include Executable
|
351
|
+
|
352
|
+
attr_switch :quiet
|
353
|
+
|
354
|
+
def bread(*args)
|
355
|
+
["bread", quiet?, *args]
|
356
|
+
end
|
357
|
+
|
358
|
+
def butter(*args)
|
359
|
+
["butter", quiet?, *args]
|
360
|
+
end
|
361
|
+
|
362
|
+
# Route call to methods.
|
363
|
+
def call(name, *args)
|
364
|
+
meth = public_method(name)
|
365
|
+
meth.call(*args)
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
Use a subcommand and an argument.
|
370
|
+
|
371
|
+
c, a = Example.parse(['butter', 'yum'])
|
372
|
+
r = c.call(*a)
|
373
|
+
r.assert == ["butter", nil, "yum"]
|
374
|
+
|
375
|
+
A subcommand and a boolean option.
|
376
|
+
|
377
|
+
c, a = Example.parse(['bread', '--quiet'])
|
378
|
+
r = c.call(*a)
|
379
|
+
r.assert == ["bread", true]
|
380
|
+
|
381
|
+
|
382
|
+
== Legacy/Dispath
|
383
|
+
|
384
|
+
The Dispatch mixin, which is also called Legacy b/c this is how older
|
385
|
+
version of Executable worked, provides Executable with a `#call` method
|
386
|
+
that automatically routes the to a method given by the first argument.
|
387
|
+
|
388
|
+
class DispatchExample < Executable::Command
|
389
|
+
include Legacy
|
390
|
+
|
391
|
+
attr :result
|
392
|
+
|
393
|
+
def foo
|
394
|
+
@result = :foo
|
395
|
+
end
|
396
|
+
|
397
|
+
def bar
|
398
|
+
@result = :bar
|
399
|
+
end
|
400
|
+
|
401
|
+
end
|
402
|
+
|
403
|
+
Now when we invoke the command, the
|
404
|
+
|
405
|
+
eg = DispatchExample.run('foo')
|
406
|
+
eg.result.assert == :foo
|
407
|
+
|
408
|
+
eg = DispatchExample.run('bar')
|
409
|
+
eg.result.assert == :bar
|
410
|
+
|
411
|
+
|
304
412
|
== OptionParser Example
|
305
413
|
|
306
414
|
This example mimics the one given in optparse.rb documentation.
|
@@ -454,114 +562,6 @@ Ensure extension begins with dot and inplace is set to true.
|
|
454
562
|
cli.options.inplace.assert == true
|
455
563
|
|
456
564
|
|
457
|
-
= Subclass Example
|
458
|
-
|
459
|
-
Lets say we have a class that we would like to work with on
|
460
|
-
the command line, but want to keep the class itself unchanaged
|
461
|
-
without mixin.
|
462
|
-
|
463
|
-
class Hello
|
464
|
-
attr_accessor :name
|
465
|
-
|
466
|
-
def initialize(name="World")
|
467
|
-
@name = name
|
468
|
-
end
|
469
|
-
|
470
|
-
def hello
|
471
|
-
@output = "Hello, #{name}!"
|
472
|
-
end
|
473
|
-
|
474
|
-
def output
|
475
|
-
@output
|
476
|
-
end
|
477
|
-
end
|
478
|
-
|
479
|
-
Rather then including Exectuable in the class directly, we can
|
480
|
-
create a subclass and use it instead.
|
481
|
-
|
482
|
-
class HelloCommand < Hello
|
483
|
-
include Executable
|
484
|
-
|
485
|
-
def call(*args)
|
486
|
-
hello
|
487
|
-
end
|
488
|
-
end
|
489
|
-
|
490
|
-
Now we can execute the command perfectly well.
|
491
|
-
|
492
|
-
cmd = HelloCommand.execute(['hello', '--name=Fred'])
|
493
|
-
cmd.output.assert == "Hello, Fred!"
|
494
|
-
|
495
|
-
And the original class remains undisturbed.
|
496
|
-
|
497
|
-
|
498
|
-
= README Example
|
499
|
-
|
500
|
-
This is the example used in the documentation.
|
501
|
-
|
502
|
-
class Example
|
503
|
-
include Executable
|
504
|
-
|
505
|
-
attr_switch :quiet
|
506
|
-
|
507
|
-
def bread(*args)
|
508
|
-
["bread", quiet?, *args]
|
509
|
-
end
|
510
|
-
|
511
|
-
def butter(*args)
|
512
|
-
["butter", quiet?, *args]
|
513
|
-
end
|
514
|
-
|
515
|
-
# Route call to methods.
|
516
|
-
def call(name, *args)
|
517
|
-
meth = public_method(name)
|
518
|
-
meth.call(*args)
|
519
|
-
end
|
520
|
-
end
|
521
|
-
|
522
|
-
Use a subcommand and an argument.
|
523
|
-
|
524
|
-
c, a = Example.parse(['butter', 'yum'])
|
525
|
-
r = c.call(*a)
|
526
|
-
r.assert == ["butter", nil, "yum"]
|
527
|
-
|
528
|
-
A subcommand and a boolean option.
|
529
|
-
|
530
|
-
c, a = Example.parse(['bread', '--quiet'])
|
531
|
-
r = c.call(*a)
|
532
|
-
r.assert == ["bread", true]
|
533
|
-
|
534
|
-
|
535
|
-
== Legacy/Dispath
|
536
|
-
|
537
|
-
The Dispatch mixin, which is also called Legacy b/c this is how older
|
538
|
-
version of Executable worked, provides Executable with a `#call` method
|
539
|
-
that automatically routes the to a method given by the first argument.
|
540
|
-
|
541
|
-
class DispatchExample < Executable::Command
|
542
|
-
include Legacy
|
543
|
-
|
544
|
-
attr :result
|
545
|
-
|
546
|
-
def foo
|
547
|
-
@result = :foo
|
548
|
-
end
|
549
|
-
|
550
|
-
def bar
|
551
|
-
@result = :bar
|
552
|
-
end
|
553
|
-
|
554
|
-
end
|
555
|
-
|
556
|
-
Now when we invoke the command, the
|
557
|
-
|
558
|
-
eg = DispatchExample.run('foo')
|
559
|
-
eg.result.assert == :foo
|
560
|
-
|
561
|
-
eg = DispatchExample.run('bar')
|
562
|
-
eg.result.assert == :bar
|
563
|
-
|
564
|
-
|
565
565
|
|
566
566
|
|
567
567
|
|
data/{HISTORY.rdoc → HISTORY.md}
RENAMED
@@ -1,6 +1,18 @@
|
|
1
|
-
|
1
|
+
# RELEASE HISTORY
|
2
2
|
|
3
|
-
|
3
|
+
## 1.2.1 / 2012-12-19
|
4
|
+
|
5
|
+
This release imporves the help output and manpage lookup
|
6
|
+
as well as a few helpful additions the the API.
|
7
|
+
|
8
|
+
Changes:
|
9
|
+
|
10
|
+
* Improve manpage lookup.
|
11
|
+
* Improve overall help output.
|
12
|
+
* Add alias_switch and alias_accessor helpers.
|
13
|
+
|
14
|
+
|
15
|
+
## 1.2.0 / 2012-01-31
|
4
16
|
|
5
17
|
Version 1.2.0 is complete rewrite of Executable. Actually it was decided that
|
6
18
|
the old design was too simplistic in it design concept, so another library
|
@@ -20,7 +32,7 @@ Changes:
|
|
20
32
|
* Supports manpage look-up and display.
|
21
33
|
|
22
34
|
|
23
|
-
|
35
|
+
## 1.1.0 / 2011-04-21
|
24
36
|
|
25
37
|
This release simplifies Executable, removing the #option_missing method
|
26
38
|
and using the standard #method_missing callback instead. Along with this
|
@@ -44,7 +56,7 @@ Changes:
|
|
44
56
|
* The #method_missing callback takes the value of the option being set.
|
45
57
|
|
46
58
|
|
47
|
-
|
59
|
+
## 1.0.0 / 2011-04-15
|
48
60
|
|
49
61
|
This is the initialize release of Executable (as a stand alone project).
|
50
62
|
Executable is a mixin that can turn any class into an commandline interface.
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
BSD-2-Clause License
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
4
|
+
modification, are permitted provided that the following conditions are met:
|
5
|
+
|
6
|
+
1. Redistributions of source code must retain the above copyright notice,
|
7
|
+
this list of conditions and the following disclaimer.
|
8
|
+
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright
|
10
|
+
notice, this list of conditions and the following disclaimer in the
|
11
|
+
documentation and/or other materials provided with the distribution.
|
12
|
+
|
13
|
+
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
14
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
16
|
+
COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
17
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
18
|
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
19
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
20
|
+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
21
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
22
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/{README.rdoc → README.md}
RENAMED
@@ -1,14 +1,10 @@
|
|
1
|
-
|
1
|
+
[Website](http://rubyworks.github.com/executable) |
|
2
|
+
[Report Issue](http://github.com/rubyworks/executable/features) |
|
3
|
+
[Source Code](http://github.com/rubyworks/executable)
|
4
|
+
( [![Build Status](https://secure.travis-ci.org/rubyworks/indexer.png)](http://travis-ci.org/rubyworks/indexer) )
|
2
5
|
|
3
|
-
{Website}[http://rubyworks.github.com/executable] |
|
4
|
-
{Source Code}[http://github.com/rubyworks/executable] |
|
5
|
-
{Report Issue}[http://github.com/rubyworks/executable/features] |
|
6
|
-
{#rubyworks}[irc://irc.freenode.org/rubyworks]
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
== DESCRIPTION
|
7
|
+
# Executable
|
12
8
|
|
13
9
|
Executable is to the commandline, what ActiveRecord is the database.
|
14
10
|
You can think of Executable as a *COM*, a Command-line Object Mapper,
|
@@ -18,7 +14,7 @@ a complete command line tool using nothing more than Ruby's standard
|
|
18
14
|
syntax. No special DSL is required.
|
19
15
|
|
20
16
|
|
21
|
-
|
17
|
+
## Features
|
22
18
|
|
23
19
|
* Easy to use, just mixin or subclass.
|
24
20
|
* Define #call to control the command procedure.
|
@@ -28,18 +24,13 @@ syntax. No special DSL is required.
|
|
28
24
|
* Generate help in plain text or markdown.
|
29
25
|
|
30
26
|
|
31
|
-
|
27
|
+
## Limitations
|
32
28
|
|
33
29
|
* Ruby 1.9+ only.
|
34
30
|
* Help doesn't handle aliases well (yet).
|
35
31
|
|
36
32
|
|
37
|
-
|
38
|
-
|
39
|
-
Please see HISTORY.rdoc file.
|
40
|
-
|
41
|
-
|
42
|
-
== SYNOPSIS
|
33
|
+
## Instructions
|
43
34
|
|
44
35
|
CLIs can be built by using a Executable as a mixin, or by subclassing
|
45
36
|
`Executable::Command`. Methods seemlessly handle command-line options.
|
@@ -48,13 +39,14 @@ methods (those ending in '?') modify them to be boolean switches.
|
|
48
39
|
|
49
40
|
For example, here is a simple "Hello, World!" commandline tool.
|
50
41
|
|
42
|
+
```ruby
|
51
43
|
require 'executable'
|
52
44
|
|
53
45
|
class HelloCommand
|
54
46
|
include Executable
|
55
47
|
|
56
48
|
# Say it in uppercase?
|
57
|
-
def
|
49
|
+
def loud=(bool)
|
58
50
|
@loud = bool
|
59
51
|
end
|
60
52
|
|
@@ -78,17 +70,21 @@ For example, here is a simple "Hello, World!" commandline tool.
|
|
78
70
|
puts str
|
79
71
|
end
|
80
72
|
end
|
73
|
+
```
|
81
74
|
|
82
75
|
To make the command available on the command line, add an executable
|
83
|
-
to your project
|
76
|
+
to your project calling the #execute or #run methods.
|
84
77
|
|
78
|
+
```ruby
|
85
79
|
#!usr/bin/env ruby
|
86
80
|
require 'hello.rb'
|
87
81
|
HelloCommand.run
|
82
|
+
```
|
88
83
|
|
89
84
|
If we named this file `hello`, set its execute flag and made it available
|
90
85
|
on our systems $PATH, then:
|
91
86
|
|
87
|
+
```
|
92
88
|
$ hello
|
93
89
|
Hello, World!
|
94
90
|
|
@@ -97,9 +93,11 @@ on our systems $PATH, then:
|
|
97
93
|
|
98
94
|
$ hello --loud John
|
99
95
|
HELLO, JOHN!
|
96
|
+
```
|
100
97
|
|
101
98
|
Executable can also generate help text for commands.
|
102
99
|
|
100
|
+
```
|
103
101
|
$ hello --help
|
104
102
|
USAGE: hello [options]
|
105
103
|
|
@@ -107,38 +105,55 @@ Executable can also generate help text for commands.
|
|
107
105
|
|
108
106
|
--loud Say it in uppercase?
|
109
107
|
--help Show this message
|
108
|
+
```
|
110
109
|
|
111
110
|
If you look back at the class definition you can see it's pulling
|
112
111
|
comments from the source to provide descriptions. It pulls the
|
113
|
-
description the command itself from the `#call` method.
|
112
|
+
description for the command itself from the `#call` method.
|
114
113
|
|
115
114
|
Basic help like this is fine for personal tools, but for public facing
|
116
115
|
production applications it is desirable to utilize manpages. To this end,
|
117
116
|
Executable provides Markdown formatted help as well. We can access this,
|
118
117
|
for example, via `HelloCommand.help.markdown`. The idea with this is that
|
119
118
|
we can save the output to `man/hello.ronn` or copy it the top of our `bin/`
|
120
|
-
file, edit it to perfection and then use tools such a
|
121
|
-
|
119
|
+
file, edit it to perfection and then use tools such a [ronn](https://github.com/rtomayko/ronn),
|
120
|
+
[binman](https://github.com/sunaku/binman) or [md2man](https://github.com/sunaku/md2man)
|
122
121
|
to generate the manpages. What's particularly cool about Executable,
|
123
122
|
is that once we have a manpage in the standard `man/` location in our project,
|
124
123
|
the `#show_help` method will use it instead of the plain text.
|
125
124
|
|
126
|
-
For a more detail example see
|
127
|
-
and
|
125
|
+
For a more detail example see [QED](demo.html)
|
126
|
+
and [API](http://rubydoc.info/gems/executable/frames) documentation.
|
128
127
|
|
129
128
|
|
130
|
-
|
129
|
+
## Installation
|
131
130
|
|
132
131
|
Install with RubyGems in the usual fashion.
|
133
132
|
|
133
|
+
```
|
134
134
|
$ gem install executable
|
135
|
+
```
|
136
|
+
|
137
|
+
## CONTRIBUTING
|
138
|
+
|
139
|
+
Executable is a Rubyworks project. As such we largely use in house tools
|
140
|
+
for development.
|
141
|
+
|
142
|
+
### Testing
|
143
|
+
|
144
|
+
QED and Microtest are being used for this project.
|
145
|
+
|
146
|
+
### Getting In Touch
|
147
|
+
|
148
|
+
* [#rubyworks](irc://irc.freenode.org/rubyworks)
|
135
149
|
|
136
150
|
|
137
|
-
|
151
|
+
## Copyrights
|
138
152
|
|
139
|
-
|
153
|
+
Executable is copyrighted open source software.
|
140
154
|
|
141
|
-
|
155
|
+
Copyright (c) 2008 Rubyworks (BSD-2-Clause License)
|
142
156
|
|
143
|
-
|
157
|
+
It can be distributed and modified in accordance with the *BSD-2-Clause* license.
|
144
158
|
|
159
|
+
See LICENSE.txt for details.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
## Command Help
|
2
2
|
|
3
3
|
Executable Commands can generate help output. It does this by extracting
|
4
4
|
the commenst associated with the option methods. A description of the
|
@@ -62,7 +62,7 @@ The help output,
|
|
62
62
|
|
63
63
|
should be clearly laid out as follows:
|
64
64
|
|
65
|
-
Usage:
|
65
|
+
Usage: my c1 [options...] [subcommand]
|
66
66
|
|
67
67
|
This does c1.
|
68
68
|
|
@@ -81,12 +81,12 @@ The help feature can also output ronn-style markdown,
|
|
81
81
|
|
82
82
|
should be clearly laid out as follows:
|
83
83
|
|
84
|
-
|
85
|
-
|
84
|
+
my-c1(1) - This does c1.
|
85
|
+
========================
|
86
86
|
|
87
87
|
## SYNOPSIS
|
88
88
|
|
89
|
-
`
|
89
|
+
`my c1` [options...] [subcommand]
|
90
90
|
|
91
91
|
## DESCRIPTION
|
92
92
|
|
@@ -1,14 +1,14 @@
|
|
1
|
-
|
1
|
+
### Manpages
|
2
2
|
|
3
3
|
If a man page is available for a given command using the #show_help
|
4
4
|
method will automatically find the manpage and display it.
|
5
5
|
|
6
6
|
sample = File.dirname(__FILE__) + '/samples'
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
manpage = Hello.cli.manpage
|
8
|
+
manpage = `ruby #{sample}/bin/hello --manpage`.strip
|
11
9
|
|
12
10
|
manpage.assert == sample + '/man/hello.1'
|
13
11
|
|
12
|
+
Note: Would rather use #load for this, but without a `.rb` on
|
13
|
+
the `hello` file, it doesn't seem possible.
|
14
14
|
|
data/demo/samples/bin/hello
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'executable'
|
4
4
|
|
5
5
|
class Hello < Executable::Command
|
6
6
|
# Say it in uppercase?
|
7
|
-
def
|
7
|
+
def loud=(bool)
|
8
8
|
@loud = bool
|
9
9
|
end
|
10
10
|
|
@@ -27,5 +27,12 @@ class Hello < Executable::Command
|
|
27
27
|
str = str.upcase if loud?
|
28
28
|
puts str
|
29
29
|
end
|
30
|
+
|
31
|
+
# Where's the manpage?
|
32
|
+
def manpage!
|
33
|
+
puts cli.manpage
|
34
|
+
exit
|
35
|
+
end
|
30
36
|
end
|
31
37
|
|
38
|
+
Hello.execute
|
data/lib/executable.rb
CHANGED
@@ -22,7 +22,7 @@ module Executable
|
|
22
22
|
|
23
23
|
#
|
24
24
|
# Default initializer, simply takes a hash of settings
|
25
|
-
# to set attributes via writer methods. Not
|
25
|
+
# to set attributes via writer methods. Not existant
|
26
26
|
# attributes are simply ignored.
|
27
27
|
#
|
28
28
|
def initialize(settings={})
|
data/lib/executable.yml
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
---
|
2
|
+
type: ruby
|
3
|
+
revision: 2013
|
4
|
+
sources:
|
5
|
+
- var
|
6
|
+
authors:
|
7
|
+
- name: 7rans
|
8
|
+
email: transfire@gmail.com
|
9
|
+
organizations: []
|
10
|
+
requirements:
|
11
|
+
- groups:
|
12
|
+
- test
|
13
|
+
development: true
|
14
|
+
name: qed
|
15
|
+
- groups:
|
16
|
+
- test
|
17
|
+
development: true
|
18
|
+
name: ae
|
19
|
+
- groups:
|
20
|
+
- build
|
21
|
+
development: true
|
22
|
+
name: detroit
|
23
|
+
- groups:
|
24
|
+
- build
|
25
|
+
development: true
|
26
|
+
name: simplecov
|
27
|
+
conflicts: []
|
28
|
+
alternatives: []
|
29
|
+
resources:
|
30
|
+
- type: home
|
31
|
+
uri: http://rubyworks.github.com/executable
|
32
|
+
label: Homepage
|
33
|
+
- type: code
|
34
|
+
uri: http://github.com/rubyworks/executable
|
35
|
+
label: Source Code
|
36
|
+
- type: bugs
|
37
|
+
uri: http://github.com/rubyworks/executable/issues
|
38
|
+
label: Issue Tracker
|
39
|
+
- type: mail
|
40
|
+
uri: http://groups.google.com/rubyworks-mailinglist
|
41
|
+
label: Mailing List
|
42
|
+
- type: chat
|
43
|
+
uri: irc://chat.us.freenode.net#rubyworks
|
44
|
+
label: IRC Channel
|
45
|
+
repositories:
|
46
|
+
- name: upstream
|
47
|
+
scm: git
|
48
|
+
uri: git://github.com/rubyworks/executable.git
|
49
|
+
categories: []
|
50
|
+
paths:
|
51
|
+
load:
|
52
|
+
- lib
|
53
|
+
copyrights:
|
54
|
+
- holder: Rubyworks
|
55
|
+
year: '2008'
|
56
|
+
license: BSD-2-Clause
|
57
|
+
created: '2008-08-08'
|
58
|
+
summary: Commandline Object Mapper
|
59
|
+
version: 1.2.1
|
60
|
+
name: executable
|
61
|
+
title: Executable
|
62
|
+
description: ! 'Think of Executable as a *COM*, a Commandline Object Mapper,
|
63
|
+
|
64
|
+
in much the same way that ActiveRecord is an ORM,
|
65
|
+
|
66
|
+
an Object Relational Mapper. A class utilizing Executable
|
67
|
+
|
68
|
+
can define a complete command line tool using nothing more
|
69
|
+
|
70
|
+
than Ruby''s own method definitions.'
|
71
|
+
date: '2012-12-18'
|
data/lib/executable/dispatch.rb
CHANGED
@@ -2,7 +2,7 @@ module Executable
|
|
2
2
|
|
3
3
|
# Variation of Executable which provides basic compatibility with
|
4
4
|
# previous versions of Executable. It provides a call method that
|
5
|
-
# automatically dispatches to
|
5
|
+
# automatically dispatches to public methods.
|
6
6
|
#
|
7
7
|
# Among other uses, Dispatch can be useful for dropping into any class
|
8
8
|
# as a quick and dirty way to work with it on the command line.
|
data/lib/executable/domain.rb
CHANGED
@@ -3,6 +3,28 @@ module Executable
|
|
3
3
|
#
|
4
4
|
module Domain
|
5
5
|
|
6
|
+
#
|
7
|
+
def usage_name
|
8
|
+
list = []
|
9
|
+
ancestors.each do |ancestor|
|
10
|
+
break if Executable == ancestor
|
11
|
+
list.unshift calculate_command_name(ancestor).to_s.strip
|
12
|
+
end
|
13
|
+
list.reject{|n| n.empty?}.join(" ")
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
def calculate_command_name(ancestor)
|
18
|
+
if ancestor.methods(false).include?(:command_name)
|
19
|
+
command_name.to_s
|
20
|
+
else
|
21
|
+
cname = ancestor.name.sub(/\#\<.*?\>\:\:/,'').split('::').last.downcase
|
22
|
+
cname.chomp('command').chomp('cli')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private :calculate_command_name
|
27
|
+
|
6
28
|
#
|
7
29
|
# Helper method for creating switch attributes.
|
8
30
|
#
|
@@ -26,6 +48,22 @@ module Executable
|
|
26
48
|
}
|
27
49
|
end
|
28
50
|
|
51
|
+
#
|
52
|
+
#
|
53
|
+
#
|
54
|
+
def alias_switch(name, origin)
|
55
|
+
alias_method "#{name}=", "#{origin}="
|
56
|
+
alias_method "#{name}?", "#{origin}?"
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
#
|
61
|
+
#
|
62
|
+
def alias_accessor(name, origin)
|
63
|
+
alias_method "#{name}=", "#{origin}="
|
64
|
+
alias_method "#{name}", "#{origin}"
|
65
|
+
end
|
66
|
+
|
29
67
|
#
|
30
68
|
# Inspection method. This must be redefined b/c #to_s is overridden.
|
31
69
|
#
|
@@ -93,7 +131,9 @@ module Executable
|
|
93
131
|
consts.inject({}) do |h, c|
|
94
132
|
c = const_get(c)
|
95
133
|
if Class === c && Executable > c
|
96
|
-
n = c.name.split('::').last
|
134
|
+
n = c.name.split('::').last
|
135
|
+
n = n.chomp('Command').chomp('CLI')
|
136
|
+
n = n.downcase
|
97
137
|
h[n] = c
|
98
138
|
end
|
99
139
|
h
|
data/lib/executable/help.rb
CHANGED
@@ -63,10 +63,7 @@ module Executable
|
|
63
63
|
# @method name(text=nil)
|
64
64
|
#
|
65
65
|
section(:name) do
|
66
|
-
|
67
|
-
str.chomp!('command')
|
68
|
-
str.chomp!('cli')
|
69
|
-
str
|
66
|
+
cli_class.usage_name
|
70
67
|
end
|
71
68
|
|
72
69
|
#
|
@@ -122,7 +119,7 @@ module Executable
|
|
122
119
|
#
|
123
120
|
# Show help.
|
124
121
|
#
|
125
|
-
# @todo man-pages will probably fail on Windows
|
122
|
+
# @todo man-pages will probably fail on Windows.
|
126
123
|
#
|
127
124
|
def show_help(hint=nil)
|
128
125
|
if file = manpage(hint)
|
@@ -132,6 +129,9 @@ module Executable
|
|
132
129
|
end
|
133
130
|
end
|
134
131
|
|
132
|
+
#
|
133
|
+
alias :show :show_help
|
134
|
+
|
135
135
|
#
|
136
136
|
def show_manpage(file)
|
137
137
|
#exec "man #{file}"
|
@@ -155,8 +155,10 @@ module Executable
|
|
155
155
|
dir = File.dirname(file)
|
156
156
|
end
|
157
157
|
|
158
|
+
man_name = name.gsub(/\s+/, '-') + '.1'
|
159
|
+
|
158
160
|
if dir
|
159
|
-
glob = "man/{man1/,}#{
|
161
|
+
glob = "man/{man1/,}#{man_name}"
|
160
162
|
lookup(glob, dir)
|
161
163
|
else
|
162
164
|
nil
|
@@ -216,10 +218,11 @@ module Executable
|
|
216
218
|
def markdown
|
217
219
|
commands = text_subcommands
|
218
220
|
options = text_options
|
221
|
+
dashname = name.sub(/\s+/, '-')
|
219
222
|
|
220
223
|
s = []
|
221
224
|
|
222
|
-
h = "#{
|
225
|
+
h = "#{dashname}(1) - #{text_description}"
|
223
226
|
s << h + "\n" + ("=" * h.size)
|
224
227
|
|
225
228
|
s << "## SYNOPSIS"
|
data/lib/executable/version.rb
CHANGED
@@ -4,20 +4,17 @@ module Exectuable
|
|
4
4
|
DIRECTORY = File.dirname(__FILE__)
|
5
5
|
|
6
6
|
#
|
7
|
-
def self.
|
8
|
-
|
9
|
-
require 'yaml'
|
10
|
-
YAML.load(File.new(DIRECTORY + '/version.yml'))
|
11
|
-
)
|
7
|
+
def self.const_missing(name)
|
8
|
+
index[name.to_s.downcase] || super(name)
|
12
9
|
end
|
13
10
|
|
14
11
|
#
|
15
|
-
def self.
|
16
|
-
|
12
|
+
def self.index
|
13
|
+
@index ||= (
|
14
|
+
require 'yaml'
|
15
|
+
YAML.load(File.new(DIRECTORY + '/../executable.yml'))
|
16
|
+
)
|
17
17
|
end
|
18
18
|
|
19
|
-
# because Ruby 1.8~ gets in the way
|
20
|
-
remove_const(:VERSION) if const_defined?(:VERSION)
|
21
|
-
|
22
19
|
end
|
23
20
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: executable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: qed
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: ae
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: detroit
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: simplecov
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,7 +69,12 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
description: ! 'Think of Executable as a *COM*, a Commandline Object Mapper,
|
59
79
|
|
60
80
|
in much the same way that ActiveRecord is an ORM,
|
@@ -69,22 +89,23 @@ email:
|
|
69
89
|
executables: []
|
70
90
|
extensions: []
|
71
91
|
extra_rdoc_files:
|
72
|
-
-
|
73
|
-
-
|
74
|
-
- README.
|
75
|
-
-
|
92
|
+
- LICENSE.txt
|
93
|
+
- HISTORY.md
|
94
|
+
- README.md
|
95
|
+
- DEMO.md
|
76
96
|
files:
|
97
|
+
- .index
|
77
98
|
- .ruby
|
78
99
|
- .yardopts
|
79
|
-
- demo/00_introduction.
|
80
|
-
- demo/01_single_command.
|
81
|
-
- demo/02_multiple_commands.
|
82
|
-
- demo/03_help_text.
|
83
|
-
- demo/04_manpage.
|
84
|
-
- demo/
|
85
|
-
- demo/
|
86
|
-
- demo/
|
87
|
-
- demo/
|
100
|
+
- demo/00_introduction.md
|
101
|
+
- demo/01_single_command.md
|
102
|
+
- demo/02_multiple_commands.md
|
103
|
+
- demo/03_help_text.md
|
104
|
+
- demo/04_manpage.md
|
105
|
+
- demo/06_delegate_example.md
|
106
|
+
- demo/07_command_methods.md
|
107
|
+
- demo/08_dispatach.md
|
108
|
+
- demo/09_optparse_example.md
|
88
109
|
- demo/applique/ae.rb
|
89
110
|
- demo/applique/compare.rb
|
90
111
|
- demo/applique/exec.rb
|
@@ -101,23 +122,13 @@ files:
|
|
101
122
|
- lib/executable/utils.rb
|
102
123
|
- lib/executable/version.rb
|
103
124
|
- lib/executable.rb
|
104
|
-
-
|
105
|
-
- meta/copyrights
|
106
|
-
- meta/created
|
107
|
-
- meta/description
|
108
|
-
- meta/name
|
109
|
-
- meta/organization
|
110
|
-
- meta/repositories
|
111
|
-
- meta/requirements
|
112
|
-
- meta/resources
|
113
|
-
- meta/summary
|
114
|
-
- meta/version
|
125
|
+
- lib/executable.yml
|
115
126
|
- test/test_executable.rb
|
116
|
-
-
|
117
|
-
-
|
118
|
-
-
|
119
|
-
-
|
120
|
-
-
|
127
|
+
- LICENSE.txt
|
128
|
+
- HISTORY.md
|
129
|
+
- README.md
|
130
|
+
- DEMO.md
|
131
|
+
- Config.rb
|
121
132
|
homepage: http://rubyworks.github.com/executable
|
122
133
|
licenses:
|
123
134
|
- BSD-2-Clause
|
@@ -139,8 +150,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
150
|
version: '0'
|
140
151
|
requirements: []
|
141
152
|
rubyforge_project:
|
142
|
-
rubygems_version: 1.8.
|
153
|
+
rubygems_version: 1.8.23
|
143
154
|
signing_key:
|
144
155
|
specification_version: 3
|
145
156
|
summary: Commandline Object Mapper
|
146
|
-
test_files:
|
157
|
+
test_files:
|
158
|
+
- test/test_executable.rb
|
data/COPYING.rdoc
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
= COPYRIGHT
|
2
|
-
|
3
|
-
== NOTICES
|
4
|
-
|
5
|
-
=== Executable
|
6
|
-
|
7
|
-
Copyright:: (c) 2012 Rubyworks. All rights reserved.
|
8
|
-
License:: (r) BSD-2-Clause
|
9
|
-
Website:: http://rubyworks.github.com/assay
|
10
|
-
|
11
|
-
|
12
|
-
== LICENSES
|
13
|
-
|
14
|
-
=== BSD-2-Clause License
|
15
|
-
|
16
|
-
Redistribution and use in source and binary forms, with or without
|
17
|
-
modification, are permitted provided that the following conditions are met:
|
18
|
-
|
19
|
-
1. Redistributions of source code must retain the above copyright notice,
|
20
|
-
this list of conditions and the following disclaimer.
|
21
|
-
|
22
|
-
2. Redistributions in binary form must reproduce the above copyright
|
23
|
-
notice, this list of conditions and the following disclaimer in the
|
24
|
-
documentation and/or other materials provided with the distribution.
|
25
|
-
|
26
|
-
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
27
|
-
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
28
|
-
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
29
|
-
COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
30
|
-
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
31
|
-
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
32
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
33
|
-
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
34
|
-
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
35
|
-
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Schedule.reap
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
task :default => [:test]
|
2
|
-
|
3
|
-
desc "run unit tests (needs rubytest)"
|
4
|
-
task :test do
|
5
|
-
sh "rubytest -Ilib test/*.rb"
|
6
|
-
end
|
7
|
-
|
8
|
-
desc "render README.rdoc to web/readme.html (need malt)"
|
9
|
-
task :readme do
|
10
|
-
sh "malt README.rdoc > web/readme.html"
|
11
|
-
end
|
12
|
-
|
13
|
-
# if `README.rdoc` changes generate `web/readme.html`.
|
14
|
-
file 'README.rdoc' do
|
15
|
-
sh "malt README.rdoc > web/readme.html"
|
16
|
-
end
|
17
|
-
|
data/meta/authors
DELETED
data/meta/copyrights
DELETED
data/meta/created
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2008-08-08
|
data/meta/description
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
Think of Executable as a *COM*, a Commandline Object Mapper,
|
2
|
-
in much the same way that ActiveRecord is an ORM,
|
3
|
-
an Object Relational Mapper. A class utilizing Executable
|
4
|
-
can define a complete command line tool using nothing more
|
5
|
-
than Ruby's own method definitions.
|
6
|
-
|
data/meta/name
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
executable
|
data/meta/organization
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rubyworks
|
data/meta/repositories
DELETED
data/meta/requirements
DELETED
data/meta/resources
DELETED
data/meta/summary
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
Commandline Object Mapper
|
data/meta/version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.2.0
|