appl 1.5.1 → 1.10
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.
- checksums.yaml +4 -4
- data/bin/intar +26 -37
- data/doc/demoappl +7 -8
- data/doc/demofan +90 -0
- data/lib/appl.rb +51 -70
- data/lib/applfan.rb +79 -0
- data/lib/intar.rb +7 -6
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1688b3e222470fd0e8d460eb628e5cd0d367f6310657f55fe465f004b7d09974
|
4
|
+
data.tar.gz: 2377f5d01f50f75922cd10fef21d17ef123cfec1d8bce0cf8873283cd73df2ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c4a1b091ac1e4bdab240d55627eb78811fddeb0962b30aef7185f2fe466809a3d8cbf847387b1aa1ab07e782770e7b4e3507821682557e7388915d2cc1b1056
|
7
|
+
data.tar.gz: ee2e1d53b6f6c32a8be5d48e7f1489104d3f316d58a67f82318f0f21b16d038676812a063d5500d80663050963d086ad9bbcdff00b810d299d3ac731c0abba3b
|
data/bin/intar
CHANGED
@@ -17,44 +17,21 @@ class IntarApp < Application
|
|
17
17
|
LICENSE = "BSD"
|
18
18
|
AUTHOR = "Bertram Scharpf <software@bertram-scharpf.de>"
|
19
19
|
|
20
|
-
DESCRIPTION =
|
21
|
-
Prompt for Ruby statements, evaluate them. This is a replacement
|
22
|
-
for "irb". The underlying library may be entered from inside any
|
23
|
-
Ruby program.
|
20
|
+
DESCRIPTION = <<~EOT
|
21
|
+
Prompt for Ruby statements, evaluate them. This is a replacement
|
22
|
+
for "irb". The underlying library may be entered from inside any
|
23
|
+
Ruby program.
|
24
24
|
|
25
|
-
Example:
|
25
|
+
Example:
|
26
26
|
|
27
|
-
|
27
|
+
$ intar -p '%(33 1)c%t%c%> '
|
28
28
|
|
29
|
-
EOT
|
29
|
+
EOT
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
Intar.show = s.to_i
|
36
|
-
end
|
37
|
-
def prompt= p
|
38
|
-
Intar.prompt = p if p
|
39
|
-
end
|
40
|
-
def bw!
|
41
|
-
Intar.colour = false
|
42
|
-
end
|
43
|
-
def catch_exit!
|
44
|
-
Intar.catch_exit = (Intar.catch_exit||0) + 3
|
45
|
-
end
|
46
|
-
def histall!
|
47
|
-
Intar.histhid = false
|
48
|
-
end
|
49
|
-
def histfile= h
|
50
|
-
Intar.histfile = nil_if_none h
|
51
|
-
end
|
52
|
-
def histmax= m
|
53
|
-
Intar.histmax = (Integer m rescue m.to_i)
|
54
|
-
end
|
55
|
-
def configfile= c
|
56
|
-
@configfile = nil_if_none c
|
57
|
-
end
|
31
|
+
attr_writer :show, :prompt, :histmax
|
32
|
+
def histfile= f ; @histfile = nil_if_none f ; end
|
33
|
+
def configfile= f ; @configfile = nil_if_none f ; end
|
34
|
+
attr_bang :quiet, :bw, :catch_exit, :histall
|
58
35
|
|
59
36
|
define_option "p", :prompt=, "STR",
|
60
37
|
"prompt - see source code for % escapes"
|
@@ -63,8 +40,8 @@ EOT
|
|
63
40
|
define_option "q", :quiet!, "don't show results"
|
64
41
|
alias_option "q", "quiet"
|
65
42
|
|
66
|
-
define_option "
|
67
|
-
alias_option "
|
43
|
+
define_option "s", :show=, "N", "show result line limit (0=all)"
|
44
|
+
alias_option "s", "show"
|
68
45
|
|
69
46
|
define_option "r", :require, "FILE", "Ruby require"
|
70
47
|
alias_option "r", "require"
|
@@ -75,7 +52,7 @@ EOT
|
|
75
52
|
"config file, NONE means none"
|
76
53
|
alias_option "c", "configfile"
|
77
54
|
|
78
|
-
define_option "H", :histfile=, "FILE",
|
55
|
+
define_option "H", :histfile=, "FILE",
|
79
56
|
"history file, NONE means none"
|
80
57
|
alias_option "H", "histfile"
|
81
58
|
|
@@ -103,6 +80,18 @@ EOT
|
|
103
80
|
def run
|
104
81
|
# @debug = true # Only development.
|
105
82
|
read_cfg
|
83
|
+
if @quiet then
|
84
|
+
Intar.show = 0
|
85
|
+
elsif @show then
|
86
|
+
Intar.show = Integer @show
|
87
|
+
end
|
88
|
+
Intar.prompt = @prompt if @prompt
|
89
|
+
Intar.colour = false if @bw
|
90
|
+
Intar.catch_exit = (Intar.catch_exit||0) + 3 if @catch_exit
|
91
|
+
Intar.histhid = false if @histall
|
92
|
+
Intar.histfile = @histfile if @histfile
|
93
|
+
Intar.histmax = Integer @histmax if @histmax
|
94
|
+
|
106
95
|
main = eval "self", TOPLEVEL_BINDING
|
107
96
|
Intar.open main do |i|
|
108
97
|
i.run *(@args.shift @args.length)
|
data/doc/demoappl
CHANGED
@@ -15,11 +15,10 @@ class DemoAppl < Application
|
|
15
15
|
LICENSE = "For internal use only"
|
16
16
|
AUTHOR = "Bertram Scharpf <software@bertram-scharpf.de>"
|
17
17
|
|
18
|
-
DESCRIPTION =
|
19
|
-
This is an example how to define an Application subclass.
|
20
|
-
The program just prints out its parameters.
|
21
|
-
|
22
|
-
EOT
|
18
|
+
DESCRIPTION = <<~EOT
|
19
|
+
This is an example how to define an Application subclass.
|
20
|
+
The program just prints out its parameters.
|
21
|
+
EOT
|
23
22
|
|
24
23
|
OPTIONS_ENV = "DEMO_OPTS"
|
25
24
|
|
@@ -47,9 +46,9 @@ EOT
|
|
47
46
|
define_option "V", :version, "show version information"
|
48
47
|
alias_option "V", "version"
|
49
48
|
|
50
|
-
|
51
|
-
|
52
|
-
UNPROCA = "Warning
|
49
|
+
STOPOPT = "Stop option processing"
|
50
|
+
UNKNOWN = "Not a valid option: `%s'."
|
51
|
+
UNPROCA = "Warning. Unprocessed arguments: %s"
|
53
52
|
|
54
53
|
def run
|
55
54
|
puts inspect
|
data/doc/demofan
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
#
|
4
|
+
# demofan -- Test the Application class with commands
|
5
|
+
#
|
6
|
+
|
7
|
+
require "applfan"
|
8
|
+
|
9
|
+
|
10
|
+
class DemoFan < ApplicationFan
|
11
|
+
|
12
|
+
NAME = "demofan"
|
13
|
+
VERSION = "1.0"
|
14
|
+
SUMMARY = "Test the Application class with commands"
|
15
|
+
COPYRIGHT = "(C) 2020 Bertram Scharpf"
|
16
|
+
LICENSE = "For internal use only"
|
17
|
+
AUTHOR = "Bertram Scharpf <software@bertram-scharpf.de>"
|
18
|
+
|
19
|
+
DESCRIPTION = <<~EOT
|
20
|
+
This is an example how to define an Application subclass
|
21
|
+
with commands inside.
|
22
|
+
EOT
|
23
|
+
|
24
|
+
attr_bang :verbose
|
25
|
+
define_option "v", :verbose!, "verbose mode"
|
26
|
+
|
27
|
+
define_option "h", :help, "show this options list"
|
28
|
+
alias_option "h", "help"
|
29
|
+
define_option "V", :version, "show version information"
|
30
|
+
alias_option "V", "version"
|
31
|
+
|
32
|
+
def run
|
33
|
+
super do |cmd|
|
34
|
+
cmd.verbose! if @verbose
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Init < Command
|
39
|
+
NAME = "init"
|
40
|
+
SUMMARY = "Initialize"
|
41
|
+
DESCRIPTION = <<~EOT
|
42
|
+
Initialization of nothing.
|
43
|
+
EOT
|
44
|
+
define_option "h", :help, "show init's options list"
|
45
|
+
alias_option "h", "help"
|
46
|
+
def verbose! ; end
|
47
|
+
def run
|
48
|
+
puts "Initializing...done."
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Run < Command
|
53
|
+
NAME = "run"
|
54
|
+
SUMMARY = "Run a job"
|
55
|
+
DESCRIPTION = <<~EOT
|
56
|
+
Running nothing.
|
57
|
+
EOT
|
58
|
+
define_option "h", :help, "show run's options list"
|
59
|
+
alias_option "h", "help"
|
60
|
+
def verbose! ; @verbose = true ; end
|
61
|
+
def run
|
62
|
+
if @verbose then
|
63
|
+
puts "Starting..."
|
64
|
+
puts "Running..."
|
65
|
+
puts "Done."
|
66
|
+
else
|
67
|
+
puts "Running...done."
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class Cleanup < Command
|
73
|
+
NAME = "cleanup"
|
74
|
+
SUMMARY = "Cleanup"
|
75
|
+
DESCRIPTION = <<~EOT
|
76
|
+
Cleanup of nothing.
|
77
|
+
EOT
|
78
|
+
define_option "h", :help, "show cleanup's options list"
|
79
|
+
alias_option "h", "help"
|
80
|
+
def verbose! ; end
|
81
|
+
def run
|
82
|
+
puts "Cleaning up...done."
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
DemoFan.run
|
90
|
+
|
data/lib/appl.rb
CHANGED
@@ -5,13 +5,16 @@
|
|
5
5
|
|
6
6
|
class Application
|
7
7
|
|
8
|
-
APPL_VERSION = "1.
|
8
|
+
APPL_VERSION = "1.10".freeze
|
9
9
|
|
10
10
|
OPTIONS_ENV = nil
|
11
11
|
|
12
12
|
STOPOPT = "stop option processing"
|
13
|
-
UNKNOWN = "Unknown option"
|
14
|
-
UNPROCA = "Warning: unprocessed arguments"
|
13
|
+
UNKNOWN = "Unknown option: `%s'."
|
14
|
+
UNPROCA = "Warning: unprocessed arguments: %s"
|
15
|
+
|
16
|
+
W_OPTS = 10
|
17
|
+
W_ARGS = 16
|
15
18
|
|
16
19
|
class OptionError < StandardError ; end
|
17
20
|
class Done < Exception ; end
|
@@ -46,45 +49,33 @@ class Application
|
|
46
49
|
end
|
47
50
|
|
48
51
|
def help
|
49
|
-
|
50
|
-
puts c.version
|
51
|
-
puts
|
52
|
-
puts c::DESCRIPTION
|
53
|
-
puts
|
54
|
-
c.show_options
|
55
|
-
if block_given? then
|
56
|
-
puts
|
57
|
-
yield
|
58
|
-
end
|
52
|
+
self.class.help
|
59
53
|
raise Done
|
60
54
|
end
|
61
55
|
|
62
56
|
def version
|
63
|
-
self.class.
|
57
|
+
self.class.version
|
64
58
|
raise Done
|
65
59
|
end
|
66
60
|
|
67
|
-
VERSION = "0"
|
68
|
-
NAME = "appl"
|
69
|
-
SUMMARY = "Dummy application"
|
70
|
-
DESCRIPTION = <<-EOT
|
71
|
-
This base class does nothing by default.
|
72
|
-
EOT
|
73
|
-
|
74
61
|
def run
|
75
62
|
end
|
76
63
|
|
77
|
-
def
|
78
|
-
run
|
64
|
+
def warn_unprocessed
|
79
65
|
if @args.any? then
|
80
|
-
|
81
|
-
puts "#{self.class::UNPROCA}: #{u}"
|
66
|
+
$stderr.puts self.class.root::UNPROCA % (@args.join " ")
|
82
67
|
end
|
83
|
-
|
68
|
+
end
|
69
|
+
|
70
|
+
def execute
|
71
|
+
r = run
|
72
|
+
r = 0 unless Integer === r
|
73
|
+
warn_unprocessed
|
74
|
+
r
|
84
75
|
rescue SignalException
|
85
76
|
raise if @debug
|
86
77
|
self.class.show_message $!.inspect
|
87
|
-
128 +
|
78
|
+
128 + $!.signo
|
88
79
|
rescue
|
89
80
|
raise if @debug
|
90
81
|
self.class.show_message "Error: #$!", "(#{$!.class})"
|
@@ -98,14 +89,6 @@ This base class does nothing by default.
|
|
98
89
|
exit e
|
99
90
|
end
|
100
91
|
|
101
|
-
def version
|
102
|
-
if self::VERSION =~ %r/\s/ then
|
103
|
-
self::VERSION
|
104
|
-
else
|
105
|
-
"#{self::NAME} #{self::VERSION} -- #{self::SUMMARY}"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
92
|
private
|
110
93
|
|
111
94
|
def execute args = nil
|
@@ -119,7 +102,9 @@ This base class does nothing by default.
|
|
119
102
|
end
|
120
103
|
|
121
104
|
def inherited sub
|
122
|
-
sub.
|
105
|
+
sub.name or return
|
106
|
+
o, a = @options.dup.to_h, @aliases.dup.to_h
|
107
|
+
sub.instance_eval { @options, @aliases = o, a }
|
123
108
|
end
|
124
109
|
|
125
110
|
def attr_bang *syms
|
@@ -162,16 +147,12 @@ This base class does nothing by default.
|
|
162
147
|
end
|
163
148
|
|
164
149
|
def delete_option opt
|
165
|
-
self < Application or return
|
166
|
-
superclass.delete_option opt
|
167
|
-
@options.delete opt
|
168
150
|
@aliases.reject! { |k,v| v == opt }
|
151
|
+
@options.delete opt
|
169
152
|
nil
|
170
153
|
end
|
171
154
|
|
172
155
|
def unalias_option opt
|
173
|
-
self < Application or return
|
174
|
-
superclass.unalias_option opt
|
175
156
|
@aliases.delete opt
|
176
157
|
nil
|
177
158
|
end
|
@@ -179,32 +160,12 @@ This base class does nothing by default.
|
|
179
160
|
protected
|
180
161
|
|
181
162
|
def find_option_act opt
|
182
|
-
|
183
|
-
@options[ opt] || @options[ @aliases[ opt]] ||
|
184
|
-
(superclass.find_option_act opt)
|
185
|
-
end
|
186
|
-
|
187
|
-
def all_options
|
188
|
-
if self < Application then
|
189
|
-
r = superclass.all_options
|
190
|
-
r.update @options
|
191
|
-
else
|
192
|
-
{}
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
def all_aliases
|
197
|
-
if self < Application then
|
198
|
-
r = superclass.all_aliases
|
199
|
-
r.update @aliases
|
200
|
-
else
|
201
|
-
{}
|
202
|
-
end
|
163
|
+
@options[ opt] || @options[ @aliases[ opt]]
|
203
164
|
end
|
204
165
|
|
205
166
|
def options_desc &block
|
206
167
|
a = Hash.new do |h,k| h[ k] = [] end
|
207
|
-
|
168
|
+
@aliases.each { |k,v|
|
208
169
|
a[ v].push k
|
209
170
|
}
|
210
171
|
each_option { |opt,desc,arg,dfl,|
|
@@ -213,14 +174,13 @@ This base class does nothing by default.
|
|
213
174
|
yield l, nil, nil, nil
|
214
175
|
}
|
215
176
|
}
|
216
|
-
yield "", nil, nil,
|
177
|
+
yield "", nil, nil, root::STOPOPT
|
217
178
|
end
|
218
179
|
|
219
180
|
public
|
220
181
|
|
221
182
|
def each_option
|
222
|
-
|
223
|
-
o.each { |opt,(desc,arg,dfl,act)|
|
183
|
+
@options.each { |opt,(desc,arg,dfl,act)|
|
224
184
|
case dfl
|
225
185
|
when Symbol then dfl = const_get dfl
|
226
186
|
end
|
@@ -230,7 +190,7 @@ This base class does nothing by default.
|
|
230
190
|
|
231
191
|
def option_act args, opt, rest
|
232
192
|
dada = find_option_act opt
|
233
|
-
dada or raise OptionError,
|
193
|
+
dada or raise OptionError, root::UNKNOWN % opt
|
234
194
|
desc, arg, dfl, act = *dada
|
235
195
|
r = [ act]
|
236
196
|
if arg then
|
@@ -246,12 +206,32 @@ This base class does nothing by default.
|
|
246
206
|
arg &&= "#{arg}"
|
247
207
|
dfl &&= "[#{dfl}]"
|
248
208
|
arg << dfl if arg && dfl
|
249
|
-
puts "
|
209
|
+
puts " %-*s %-*s %s" % [ root::W_OPTS, opt, root::W_ARGS, arg, desc]
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def root
|
214
|
+
self
|
215
|
+
end
|
216
|
+
|
217
|
+
def applname
|
218
|
+
self::NAME
|
219
|
+
end
|
220
|
+
|
221
|
+
def help
|
222
|
+
puts "#{applname} -- #{self::SUMMARY}"
|
223
|
+
puts
|
224
|
+
puts self::DESCRIPTION
|
225
|
+
puts
|
226
|
+
show_options
|
227
|
+
if block_given? then
|
228
|
+
puts
|
229
|
+
yield
|
250
230
|
end
|
251
231
|
end
|
252
232
|
|
253
|
-
def
|
254
|
-
puts
|
233
|
+
def version
|
234
|
+
puts "#{applname} #{self::VERSION} -- #{self::SUMMARY}"
|
255
235
|
puts self::COPYRIGHT if const_defined? :COPYRIGHT
|
256
236
|
puts "License: #{self::LICENSE}" if const_defined? :LICENSE
|
257
237
|
a = []
|
@@ -264,6 +244,7 @@ This base class does nothing by default.
|
|
264
244
|
h = a.length == 1 ? "Author" : "Authors"
|
265
245
|
puts "#{h}: #{j}"
|
266
246
|
end
|
247
|
+
puts "Ruby version: #{RUBY_VERSION}"
|
267
248
|
end
|
268
249
|
|
269
250
|
def show_message msg, extra = nil
|
data/lib/applfan.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# lib/applfan.rb -- ApplicationFan class
|
3
|
+
#
|
4
|
+
|
5
|
+
require "appl"
|
6
|
+
|
7
|
+
|
8
|
+
ApplicationFan = Class.new Application
|
9
|
+
|
10
|
+
class ApplicationFan
|
11
|
+
|
12
|
+
AVAILCMDS = "Available commands (say -h after one for help)"
|
13
|
+
NOCOMMAND = "No command given. Say -h for a list."
|
14
|
+
UNKNWNCMD = "Unknown command: `%s'. Say -h for a list."
|
15
|
+
|
16
|
+
W_CMDS = 16
|
17
|
+
|
18
|
+
class CommandError < StandardError ; end
|
19
|
+
|
20
|
+
class <<self
|
21
|
+
|
22
|
+
attr_accessor :commands
|
23
|
+
|
24
|
+
def find_command name
|
25
|
+
@commands.find { |c| c::NAME == name }
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def help
|
30
|
+
super do
|
31
|
+
if block_given? then
|
32
|
+
yield
|
33
|
+
puts
|
34
|
+
end
|
35
|
+
puts self::AVAILCMDS
|
36
|
+
puts
|
37
|
+
@commands.each { |c|
|
38
|
+
puts " %-*s %s" % [ self::W_CMDS, c::NAME, c::SUMMARY]
|
39
|
+
}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def inherited sub
|
46
|
+
sub.instance_eval do
|
47
|
+
@commands = []
|
48
|
+
const_set :Command, (
|
49
|
+
Class.new Application do
|
50
|
+
define_singleton_method :inherited do |c|
|
51
|
+
sub.commands.push c
|
52
|
+
super c
|
53
|
+
end
|
54
|
+
define_singleton_method :root do
|
55
|
+
sub
|
56
|
+
end
|
57
|
+
define_singleton_method :applname do
|
58
|
+
"#{root::NAME} #{self::NAME}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
)
|
62
|
+
end
|
63
|
+
super
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
def run
|
69
|
+
c = @args.shift
|
70
|
+
c or raise CommandError, self.class::NOCOMMAND
|
71
|
+
cmd = self.class.find_command c
|
72
|
+
cmd or raise CommandError, self.class::UNKNWNCMD % c
|
73
|
+
sub = cmd.new @args.slice! 0, @args.length
|
74
|
+
yield sub if block_given?
|
75
|
+
sub.execute
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
data/lib/intar.rb
CHANGED
@@ -128,7 +128,7 @@ class Intar
|
|
128
128
|
|
129
129
|
class <<self
|
130
130
|
|
131
|
-
attr_accessor :prompt, :show, :colour
|
131
|
+
attr_accessor :prompt, :show, :shownil, :colour
|
132
132
|
|
133
133
|
attr_reader :histfile
|
134
134
|
def histfile= hf
|
@@ -158,6 +158,7 @@ class Intar
|
|
158
158
|
s = superclass
|
159
159
|
@prompt = s.prompt
|
160
160
|
@show = s.show
|
161
|
+
@shownil = s.shownil
|
161
162
|
@colour = s.colour
|
162
163
|
@histfile = s.histfile
|
163
164
|
@histmax = s.histmax
|
@@ -206,6 +207,7 @@ class Intar
|
|
206
207
|
|
207
208
|
self.prompt = "%(32)c%i%c:%1c%03n%c%> "
|
208
209
|
self.show = 1
|
210
|
+
self.shownil = false
|
209
211
|
self.colour = true
|
210
212
|
self.histfile = nil
|
211
213
|
self.histmax = 500
|
@@ -221,7 +223,7 @@ class Intar
|
|
221
223
|
@n = 0
|
222
224
|
end
|
223
225
|
|
224
|
-
OLDSET =
|
226
|
+
OLDSET = <<~EOT
|
225
227
|
_, __, ___ = nil, nil, nil
|
226
228
|
proc { |r,n|
|
227
229
|
Array === __ or __ = []
|
@@ -312,19 +314,18 @@ class Intar
|
|
312
314
|
# :startdoc:
|
313
315
|
|
314
316
|
def display r
|
315
|
-
return if r.nil?
|
317
|
+
return if r.nil? and not self.class.shownil
|
316
318
|
show = (self.class.show or return)
|
317
|
-
i =
|
319
|
+
i = ARROW.dup
|
320
|
+
i << r.inspect
|
318
321
|
if show > 0 then
|
319
322
|
siz, = $stdout.winsize
|
320
323
|
siz *= show
|
321
|
-
siz -= ARROW.length
|
322
324
|
if i.length > siz then
|
323
325
|
i.cut! siz-ELLIPSIS.length
|
324
326
|
i << ELLIPSIS
|
325
327
|
end
|
326
328
|
end
|
327
|
-
i.prepend ARROW
|
328
329
|
puts i
|
329
330
|
end
|
330
331
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.10'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bertram Scharpf
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
A base class for command line applications doing options parsing
|
@@ -21,13 +21,15 @@ extra_rdoc_files: []
|
|
21
21
|
files:
|
22
22
|
- bin/intar
|
23
23
|
- doc/demoappl
|
24
|
+
- doc/demofan
|
24
25
|
- lib/appl.rb
|
26
|
+
- lib/applfan.rb
|
25
27
|
- lib/intar.rb
|
26
28
|
homepage: http://www.bertram-scharpf.de/software/appl
|
27
29
|
licenses:
|
28
30
|
- BSD-2-Clause
|
29
31
|
metadata: {}
|
30
|
-
post_install_message:
|
32
|
+
post_install_message:
|
31
33
|
rdoc_options: []
|
32
34
|
require_paths:
|
33
35
|
- lib
|
@@ -43,9 +45,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
45
|
version: '0'
|
44
46
|
requirements:
|
45
47
|
- Just Ruby
|
46
|
-
|
47
|
-
|
48
|
-
signing_key:
|
48
|
+
rubygems_version: 3.0.6
|
49
|
+
signing_key:
|
49
50
|
specification_version: 4
|
50
51
|
summary: Easy option parsing
|
51
52
|
test_files: []
|