linen 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +28 -2
- data/Rakefile +24 -22
- data/examples/host.rb +128 -0
- data/examples/math.rb +80 -0
- data/lib/indifferent_hash.rb +18 -7
- data/lib/linen.rb +21 -9
- data/lib/linen/argument.rb +18 -7
- data/lib/linen/exceptions.rb +20 -7
- data/lib/linen/handler.rb +18 -7
- data/lib/linen/handlers/cli.rb +19 -7
- data/lib/linen/plugin.rb +20 -7
- data/lib/linen/plugin_registry.rb +17 -7
- data/lib/linen/simple_command.rb +17 -7
- data/lib/linen/two_phase_command.rb +17 -7
- data/lib/linen/workspace.rb +17 -7
- data/lib/string_extensions.rb +18 -8
- metadata +4 -2
data/LICENSE
CHANGED
@@ -1,2 +1,28 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Copyright (c) 2007, LAIKA Inc. All rights reserved.
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
4
|
+
modification, are permitted provided that the following conditions are
|
5
|
+
met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright
|
8
|
+
notice, this list of conditions and the following disclaimer.
|
9
|
+
|
10
|
+
* Redistributions in binary form must reproduce the above copyright
|
11
|
+
notice, this list of conditions and the following disclaimer in the
|
12
|
+
documentation and/or other materials provided with the distribution.
|
13
|
+
|
14
|
+
* Neither the name of the LAIKA, Inc nor the names of its contributors
|
15
|
+
may be used to endorse or promote products derived from this software
|
16
|
+
without specific prior written permission.
|
17
|
+
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
19
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
20
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
21
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
22
|
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
24
|
+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
25
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
26
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
27
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
28
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Rakefile
CHANGED
@@ -1,15 +1,25 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Based heavily on Ben Bleything's Rakefile for plist, which
|
4
|
+
# is in turn based on Geoffrey Grosenbach's Rakefile for
|
5
|
+
# gruff.
|
6
|
+
#
|
7
|
+
# Includes whitespace-fixing task based on code from Typo.
|
8
|
+
#
|
9
|
+
# == Authors
|
10
|
+
#
|
11
|
+
# * Ben Bleything <bbleything@laika.com>
|
12
|
+
#
|
13
|
+
# == Copyright
|
14
|
+
#
|
15
|
+
# Copyright (c) 2007 Laika, Inc.
|
16
|
+
#
|
17
|
+
# This code released under the terms of the BSD license.
|
18
|
+
#
|
19
|
+
# == Version
|
20
|
+
#
|
21
|
+
# $Id: Rakefile 273 2007-07-25 20:41:32Z bbleything $
|
22
|
+
#
|
13
23
|
|
14
24
|
require 'fileutils'
|
15
25
|
require 'rubygems'
|
@@ -18,24 +28,18 @@ require 'rake/testtask'
|
|
18
28
|
require 'rake/rdoctask'
|
19
29
|
require 'rake/packagetask'
|
20
30
|
require 'rake/gempackagetask'
|
21
|
-
require 'rake/contrib/rubyforgepublisher'
|
22
31
|
|
23
32
|
$:.unshift(File.dirname(__FILE__) + "/lib")
|
24
33
|
require 'linen'
|
25
34
|
|
26
35
|
PKG_NAME = 'linen'
|
27
36
|
PKG_VERSION = Linen::VERSION
|
28
|
-
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
29
|
-
|
30
|
-
RELEASE_NAME = "REL #{PKG_VERSION}"
|
31
|
-
|
32
|
-
RUBYFORGE_PROJECT = "linen"
|
33
|
-
RUBYFORGE_USER = ENV['RUBYFORGE_USER']
|
34
37
|
|
35
38
|
TEXT_FILES = %w( Rakefile README LICENSE )
|
36
39
|
TEST_FILES = Dir.glob('test/test_*').delete_if { |item| item.include?( "\.svn" ) }
|
37
40
|
LIB_FILES = Dir.glob('lib/**/*').delete_if { |item| item.include?( "\.svn" ) }
|
38
|
-
|
41
|
+
EXAMPLE_FILES = Dir.glob('examples/*.rb')
|
42
|
+
RELEASE_FILES = TEXT_FILES + LIB_FILES + TEST_FILES + EXAMPLE_FILES
|
39
43
|
|
40
44
|
task :default => [ :test ]
|
41
45
|
|
@@ -138,8 +142,6 @@ Linen is a library which can be used to build a command-line interface for any p
|
|
138
142
|
s.authors = "LAIKA, Inc."
|
139
143
|
s.homepage = "http://opensource.laika.com"
|
140
144
|
|
141
|
-
s.rubyforge_project = RUBYFORGE_PROJECT
|
142
|
-
|
143
145
|
s.has_rdoc = true
|
144
146
|
|
145
147
|
s.files = RELEASE_FILES
|
data/examples/host.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Demonstrates more complex arguments and commands than
|
4
|
+
# math.rb, including a two-phase command (edit).
|
5
|
+
#
|
6
|
+
# == Authors
|
7
|
+
#
|
8
|
+
# * Ben Bleything <bbleything@laika.com>
|
9
|
+
#
|
10
|
+
# == Copyright
|
11
|
+
#
|
12
|
+
# Copyright (c) 2007 Laika, Inc.
|
13
|
+
#
|
14
|
+
# This code released under the terms of the BSD license.
|
15
|
+
#
|
16
|
+
# == Version
|
17
|
+
#
|
18
|
+
# $Id: host.rb 274 2007-07-25 21:06:42Z bbleything $
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'rubygems'
|
22
|
+
require 'linen'
|
23
|
+
require 'ostruct'
|
24
|
+
require 'ping'
|
25
|
+
require 'socket'
|
26
|
+
|
27
|
+
class HostPlugin < Linen::Plugin
|
28
|
+
description "Inspect and check machines on your network."
|
29
|
+
|
30
|
+
argument :ip,
|
31
|
+
:prompt => 'Please enter the IP address: ',
|
32
|
+
:regex => /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,
|
33
|
+
:process => lambda { |ip|
|
34
|
+
ip.split('.').each do |octet|
|
35
|
+
octet = octet.to_f
|
36
|
+
|
37
|
+
fail "#{ip} is not valid: #{octet.to_i} must be between 0 and 255." if octet < 0 or octet > 255
|
38
|
+
end
|
39
|
+
|
40
|
+
return ip
|
41
|
+
}
|
42
|
+
|
43
|
+
argument :hostname,
|
44
|
+
:prompt => 'Please enter the hostname: ',
|
45
|
+
:regex => /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/
|
46
|
+
# pattern yoinked from http://regexlib.com/REDetails.aspx?regexp_id=391
|
47
|
+
|
48
|
+
argument :mac,
|
49
|
+
:prompt => 'Please enter the MAC address: ',
|
50
|
+
:process => proc {|mac|
|
51
|
+
stripped_mac = mac.gsub( /:/, '' )
|
52
|
+
fail "MAC Address is too short." unless stripped_mac.length == 12
|
53
|
+
fail "MAC Address contains invalid characters." unless stripped_mac =~ /^[0-9a-f]*/i
|
54
|
+
|
55
|
+
return stripped_mac.scan( /../ ).join( ':' )
|
56
|
+
}
|
57
|
+
|
58
|
+
command :lookup do
|
59
|
+
help_message "Attempts to do a DNS lookup on the IP or hostname provided."
|
60
|
+
|
61
|
+
one_of :ip, :hostname
|
62
|
+
|
63
|
+
action do
|
64
|
+
ip_addr_info = Socket.getaddrinfo( ip, nil ) rescue nil
|
65
|
+
hn_addr_info = Socket.getaddrinfo( hostname, nil ) rescue nil
|
66
|
+
|
67
|
+
if ip_addr_info
|
68
|
+
say "IP address #{ip} has hostname #{ip_addr_info[0][2]}."
|
69
|
+
elsif hn_addr_info
|
70
|
+
say "Hostname '#{hostname}' has IP address #{hn_addr_info[0][3]}."
|
71
|
+
else
|
72
|
+
say "You said something I do not understand. I am sorry."
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
command :check do
|
78
|
+
help_message "Attempts to ping the IP or hostname provided."
|
79
|
+
|
80
|
+
one_of :ip, :hostname
|
81
|
+
|
82
|
+
require_confirmation
|
83
|
+
|
84
|
+
action do
|
85
|
+
to_check = ip || hostname
|
86
|
+
|
87
|
+
if Ping.pingecho( to_check, 5 )
|
88
|
+
say "Host #{to_check} is alive!"
|
89
|
+
else
|
90
|
+
say "Host #{to_check} appears to be dead :("
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
command :edit, :lookup_first => true do
|
96
|
+
help_message "Lets you pretend to change the host's IP and MAC addresses. Lookup by hostname."
|
97
|
+
|
98
|
+
lookup_by :hostname do |hostname|
|
99
|
+
out = OpenStruct.new
|
100
|
+
out.hostname = hostname
|
101
|
+
out.ip = Socket.getaddrinfo( hostname, nil )[0][3]
|
102
|
+
|
103
|
+
# yoinked this from a thread on ruby-talk about UUID generation
|
104
|
+
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/242664
|
105
|
+
out.mac = ("%012x" % rand(1 << 12*4)).scan( /../ ).join( ':')
|
106
|
+
|
107
|
+
# return
|
108
|
+
out
|
109
|
+
end
|
110
|
+
|
111
|
+
inspect do
|
112
|
+
say "Hostname: #{hostname.hostname}"
|
113
|
+
say "IP Address: #{hostname.ip}"
|
114
|
+
say "MAC Address: #{hostname.mac}"
|
115
|
+
end
|
116
|
+
|
117
|
+
editable_attributes :ip, :mac
|
118
|
+
|
119
|
+
action do
|
120
|
+
say "If this was real, you would have just changed #{hostname.hostname}'s IP address to " +
|
121
|
+
"#{ip.empty? ? 'nothing' : ip} and its MAC address to #{mac.empty? ? 'nothing' : mac}. " +
|
122
|
+
"It's not real, though, so rest easy."
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
Linen::CLI.prompt = "host > "
|
128
|
+
Linen.start
|
data/examples/math.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Demonstrates a simple plugin that does basic math.
|
4
|
+
#
|
5
|
+
# == Authors
|
6
|
+
#
|
7
|
+
# * Ben Bleything <bbleything@laika.com>
|
8
|
+
#
|
9
|
+
# == Copyright
|
10
|
+
#
|
11
|
+
# Copyright (c) 2007 Laika, Inc.
|
12
|
+
#
|
13
|
+
# This code released under the terms of the BSD license.
|
14
|
+
#
|
15
|
+
# == Version
|
16
|
+
#
|
17
|
+
# $Id: math.rb 274 2007-07-25 21:06:42Z bbleything $
|
18
|
+
#
|
19
|
+
|
20
|
+
require 'rubygems'
|
21
|
+
require 'linen'
|
22
|
+
|
23
|
+
class MathPlugin < Linen::Plugin
|
24
|
+
description "Perform simple mathematical operations. Currently supports addition, subtraction, multiplication, and division."
|
25
|
+
|
26
|
+
floating_point_regex = /^\d+(\.\d+)?$/
|
27
|
+
|
28
|
+
argument :lhs,
|
29
|
+
:prompt => 'Please enter the left-hand operand: ',
|
30
|
+
:regex => floating_point_regex,
|
31
|
+
:process => Proc.new {|i| i.to_f }
|
32
|
+
|
33
|
+
argument :rhs,
|
34
|
+
:prompt => 'Please enter the right-hand operand: ',
|
35
|
+
:regex => floating_point_regex,
|
36
|
+
:process => Proc.new {|i| i.to_f }
|
37
|
+
|
38
|
+
command :add do
|
39
|
+
help_message "Adds two operands. (lhs + rhs)"
|
40
|
+
|
41
|
+
required_arguments :lhs, :rhs
|
42
|
+
|
43
|
+
action do
|
44
|
+
say "#{lhs} + #{rhs} = #{lhs + rhs}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
command :subtract do
|
49
|
+
help_message "Subtracts the second operand from the first. (lhs - rhs)"
|
50
|
+
|
51
|
+
required_arguments :lhs, :rhs
|
52
|
+
|
53
|
+
action do
|
54
|
+
say "#{lhs} - #{rhs} = #{lhs - rhs}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
command :multiply do
|
59
|
+
help_message "Multiplies two operands. (lhs * rhs)"
|
60
|
+
|
61
|
+
required_arguments :lhs, :rhs
|
62
|
+
|
63
|
+
action do
|
64
|
+
say "#{lhs} * #{rhs} = #{lhs * rhs}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
command :divide do
|
69
|
+
help_message "Divides the first operand by the second. (lhs / rhs)"
|
70
|
+
|
71
|
+
required_arguments :lhs, :rhs
|
72
|
+
|
73
|
+
action do
|
74
|
+
say "#{lhs} / #{rhs} = #{lhs / rhs}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
Linen::CLI.prompt = "math > "
|
80
|
+
Linen.start
|
data/lib/indifferent_hash.rb
CHANGED
@@ -1,11 +1,22 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# Authors
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# Contains IndifferentHash, which can be deferenced by
|
4
|
+
# strings or symbols. It doesn't care, it's laid back.
|
5
|
+
#
|
6
|
+
# == Authors
|
7
|
+
#
|
8
|
+
# * Ben Bleything <bbleything@laika.com>
|
9
|
+
#
|
10
|
+
# == Copyright
|
11
|
+
#
|
12
|
+
# Copyright (c) 2007 Laika, Inc.
|
13
|
+
#
|
14
|
+
# This code released under the terms of the BSD license.
|
15
|
+
#
|
16
|
+
# == Version
|
17
|
+
#
|
18
|
+
# $Id: indifferent_hash.rb 274 2007-07-25 21:06:42Z bbleything $
|
19
|
+
#
|
9
20
|
|
10
21
|
class IndifferentHash < Hash
|
11
22
|
def []( key )
|
data/lib/linen.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# Linen is a framework for creating applications that use a command line
|
4
|
+
# interface. It features a simple plugin system, readline integration
|
5
|
+
# for history and completion, and other features.
|
6
|
+
#
|
7
|
+
# == Authors
|
8
|
+
#
|
9
|
+
# * Ben Bleything <bbleything@laika.com>
|
10
|
+
#
|
11
|
+
# == Copyright
|
12
|
+
#
|
13
|
+
# Copyright (c) 2007 Laika, Inc.
|
14
|
+
#
|
15
|
+
# This code released under the terms of the BSD license.
|
16
|
+
#
|
17
|
+
# == Version
|
18
|
+
#
|
19
|
+
# $Id: linen.rb 276 2007-07-25 21:14:39Z bbleything $
|
20
|
+
#
|
9
21
|
|
10
22
|
### External libraries
|
11
23
|
require 'abbrev'
|
@@ -18,8 +30,8 @@ require 'string_extensions'
|
|
18
30
|
|
19
31
|
|
20
32
|
module Linen
|
21
|
-
VERSION = "0.
|
22
|
-
SVNRev = %q$Rev:
|
33
|
+
VERSION = "0.8.0"
|
34
|
+
SVNRev = %q$Rev: 276 $
|
23
35
|
|
24
36
|
|
25
37
|
def self::plugins
|
data/lib/linen/argument.rb
CHANGED
@@ -1,11 +1,22 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# Authors
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# Contains Linen::Argument, which encapsulates most of the
|
4
|
+
# argument parsing/processing logic.
|
5
|
+
#
|
6
|
+
# == Authors
|
7
|
+
#
|
8
|
+
# * Ben Bleything <bbleything@laika.com>
|
9
|
+
#
|
10
|
+
# == Copyright
|
11
|
+
#
|
12
|
+
# Copyright (c) 2007 Laika, Inc.
|
13
|
+
#
|
14
|
+
# This code released under the terms of the BSD license.
|
15
|
+
#
|
16
|
+
# == Version
|
17
|
+
#
|
18
|
+
# $Id: argument.rb 274 2007-07-25 21:06:42Z bbleything $
|
19
|
+
#
|
9
20
|
|
10
21
|
class Linen::Plugin::Argument
|
11
22
|
attr_reader :prompt
|
data/lib/linen/exceptions.rb
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# Defines a number of exceptions used throughout Linen.
|
4
|
+
#
|
5
|
+
# == Authors
|
6
|
+
#
|
7
|
+
# * Ben Bleything <bbleything@laika.com>
|
8
|
+
#
|
9
|
+
# == Copyright
|
10
|
+
#
|
11
|
+
# Copyright (c) 2007 Laika, Inc.
|
12
|
+
#
|
13
|
+
# This code released under the terms of the BSD license.
|
14
|
+
#
|
15
|
+
# == Version
|
16
|
+
#
|
17
|
+
# $Id: exceptions.rb 274 2007-07-25 21:06:42Z bbleything $
|
18
|
+
#
|
9
19
|
|
10
20
|
class Linen::Plugin::ArgumentError < ArgumentError ; end
|
11
21
|
class Linen::Plugin::PluginError < TypeError ; end
|
@@ -13,6 +23,9 @@ class Linen::Plugin::PluginError < TypeError ; end
|
|
13
23
|
class Linen::CLI::PluginNotFoundError < NameError ; end
|
14
24
|
class Linen::CLI::CommandNotFoundError < NameError ; end
|
15
25
|
|
26
|
+
### ambiguity errors can sometimes carry a payload of possible
|
27
|
+
### completions for the ambiguous input; those are stored in the
|
28
|
+
### exception when it's raised.
|
16
29
|
class Linen::CLI::AbstractAmbiguityError < NameError
|
17
30
|
attr_accessor :candidates, :input
|
18
31
|
|
data/lib/linen/handler.rb
CHANGED
@@ -1,11 +1,22 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# Authors
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# The abstract handler from which all other handlers must
|
4
|
+
# inherit.
|
5
|
+
#
|
6
|
+
# == Authors
|
7
|
+
#
|
8
|
+
# * Ben Bleything <bbleything@laika.com>
|
9
|
+
#
|
10
|
+
# == Copyright
|
11
|
+
#
|
12
|
+
# Copyright (c) 2007 Laika, Inc.
|
13
|
+
#
|
14
|
+
# This code released under the terms of the BSD license.
|
15
|
+
#
|
16
|
+
# == Version
|
17
|
+
#
|
18
|
+
# $Id: handler.rb 274 2007-07-25 21:06:42Z bbleything $
|
19
|
+
#
|
9
20
|
|
10
21
|
class Linen::Handler
|
11
22
|
def self::say( input = '' )
|
data/lib/linen/handlers/cli.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# The CLI handler. This uses Readline and friends to provide
|
4
|
+
# a command-line-like interface to the loaded plugins. It is
|
5
|
+
# the default handler.
|
6
|
+
#
|
7
|
+
# == Authors
|
8
|
+
#
|
9
|
+
# * Ben Bleything <bbleything@laika.com>
|
10
|
+
#
|
11
|
+
# == Copyright
|
12
|
+
#
|
13
|
+
# Copyright (c) 2007 Laika, Inc.
|
14
|
+
#
|
15
|
+
# This code released under the terms of the BSD license.
|
16
|
+
#
|
17
|
+
# == Version
|
18
|
+
#
|
19
|
+
# $Id: cli.rb 274 2007-07-25 21:06:42Z bbleything $
|
20
|
+
#
|
9
21
|
|
10
22
|
class Linen::CLI < Linen::Handler
|
11
23
|
class << self
|
data/lib/linen/plugin.rb
CHANGED
@@ -1,11 +1,24 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# Defines Linen::Plugin, which defines the structure of
|
4
|
+
# a plugin, as well as the DSL used to write a plugin.
|
5
|
+
#
|
6
|
+
# Also includes some "meta-functions", like help.
|
7
|
+
#
|
8
|
+
# == Authors
|
9
|
+
#
|
10
|
+
# * Ben Bleything <bbleything@laika.com>
|
11
|
+
#
|
12
|
+
# == Copyright
|
13
|
+
#
|
14
|
+
# Copyright (c) 2007 Laika, Inc.
|
15
|
+
#
|
16
|
+
# This code released under the terms of the BSD license.
|
17
|
+
#
|
18
|
+
# == Version
|
19
|
+
#
|
20
|
+
# $Id: plugin.rb 274 2007-07-25 21:06:42Z bbleything $
|
21
|
+
#
|
9
22
|
|
10
23
|
class Linen::Plugin
|
11
24
|
class << self
|
@@ -1,11 +1,21 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# An array-like register of all loaded plugins.
|
4
|
+
#
|
5
|
+
# == Authors
|
6
|
+
#
|
7
|
+
# * Ben Bleything <bbleything@laika.com>
|
8
|
+
#
|
9
|
+
# == Copyright
|
10
|
+
#
|
11
|
+
# Copyright (c) 2007 Laika, Inc.
|
12
|
+
#
|
13
|
+
# This code released under the terms of the BSD license.
|
14
|
+
#
|
15
|
+
# == Version
|
16
|
+
#
|
17
|
+
# $Id: plugin_registry.rb 274 2007-07-25 21:06:42Z bbleything $
|
18
|
+
#
|
9
19
|
|
10
20
|
require 'singleton'
|
11
21
|
|
data/lib/linen/simple_command.rb
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# A simple, single-phased command.
|
4
|
+
#
|
5
|
+
# == Authors
|
6
|
+
#
|
7
|
+
# * Ben Bleything <bbleything@laika.com>
|
8
|
+
#
|
9
|
+
# == Copyright
|
10
|
+
#
|
11
|
+
# Copyright (c) 2007 Laika, Inc.
|
12
|
+
#
|
13
|
+
# This code released under the terms of the BSD license.
|
14
|
+
#
|
15
|
+
# == Version
|
16
|
+
#
|
17
|
+
# $Id: simple_command.rb 274 2007-07-25 21:06:42Z bbleything $
|
18
|
+
#
|
9
19
|
|
10
20
|
class Linen::Plugin::SimpleCommand
|
11
21
|
attr_reader :name
|
@@ -1,11 +1,21 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# A two-phase command, commonly used for editing data.
|
4
|
+
#
|
5
|
+
# == Authors
|
6
|
+
#
|
7
|
+
# * Ben Bleything <bbleything@laika.com>
|
8
|
+
#
|
9
|
+
# == Copyright
|
10
|
+
#
|
11
|
+
# Copyright (c) 2007 Laika, Inc.
|
12
|
+
#
|
13
|
+
# This code released under the terms of the BSD license.
|
14
|
+
#
|
15
|
+
# == Version
|
16
|
+
#
|
17
|
+
# $Id: two_phase_command.rb 274 2007-07-25 21:06:42Z bbleything $
|
18
|
+
#
|
9
19
|
|
10
20
|
class Linen::Plugin::TwoPhaseCommand
|
11
21
|
attr_reader :name, :editable_attrs, :lookup_attr
|
data/lib/linen/workspace.rb
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# The semi-specialized binding in which commands are executed.
|
4
|
+
#
|
5
|
+
# == Authors
|
6
|
+
#
|
7
|
+
# * Ben Bleything <bbleything@laika.com>
|
8
|
+
#
|
9
|
+
# == Copyright
|
10
|
+
#
|
11
|
+
# Copyright (c) 2007 Laika, Inc.
|
12
|
+
#
|
13
|
+
# This code released under the terms of the BSD license.
|
14
|
+
#
|
15
|
+
# == Version
|
16
|
+
#
|
17
|
+
# $Id: workspace.rb 274 2007-07-25 21:06:42Z bbleything $
|
18
|
+
#
|
9
19
|
|
10
20
|
class Linen::Workspace
|
11
21
|
def self::register_handler( handler_class )
|
data/lib/string_extensions.rb
CHANGED
@@ -1,15 +1,25 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
2
|
+
#
|
3
|
+
# Adds String#wrap, which can be used to wrap at a particular column.
|
4
|
+
#
|
5
|
+
# == Authors
|
6
|
+
#
|
7
|
+
# * Ben Bleything <bbleything@laika.com>
|
8
|
+
#
|
9
|
+
# == Copyright
|
10
|
+
#
|
11
|
+
# Copyright (c) 2007 Laika, Inc.
|
12
|
+
#
|
13
|
+
# This code released under the terms of the BSD license.
|
14
|
+
#
|
15
|
+
# == Version
|
16
|
+
#
|
17
|
+
# $Id: string_extensions.rb 274 2007-07-25 21:06:42Z bbleything $
|
18
|
+
#
|
9
19
|
|
10
20
|
class String
|
21
|
+
### Wraps a string at the given column (or 72, if none provided)
|
11
22
|
def wrap(line_width = 72)
|
12
23
|
self.gsub(/\n/, "\n\n").gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").chomp
|
13
24
|
end
|
14
25
|
end
|
15
|
-
|
metadata
CHANGED
@@ -3,14 +3,14 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: linen
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
6
|
+
version: 0.8.0
|
7
7
|
date: 2007-09-10 00:00:00 -07:00
|
8
8
|
summary: Linen - A pluggable command-line interface library
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email:
|
12
12
|
homepage: http://opensource.laika.com
|
13
|
-
rubyforge_project:
|
13
|
+
rubyforge_project:
|
14
14
|
description: Linen is a library which can be used to build a command-line interface for any purpose. It features a plugin architecture to specify new tasks, Readline support, history, and more.
|
15
15
|
autorequire: linen
|
16
16
|
default_executable:
|
@@ -49,6 +49,8 @@ files:
|
|
49
49
|
- test/test_cli.rb
|
50
50
|
- test/test_indifferent_hash.rb
|
51
51
|
- test/test_plugins.rb
|
52
|
+
- examples/host.rb
|
53
|
+
- examples/math.rb
|
52
54
|
test_files:
|
53
55
|
- test/test_cli.rb
|
54
56
|
- test/test_indifferent_hash.rb
|