rbbt-util 5.5.32 → 5.5.33
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 +8 -8
- data/bin/rbbt_exec.rb +0 -1
- data/etc/app.d/base.rb +4 -0
- data/share/config.ru +3 -3
- data/share/rbbt_commands/app/template +66 -0
- data/share/rbbt_commands/tsv/info +17 -11
- data/{bin/rbbt_monitor.rb → share/rbbt_commands/workflow/monitor} +0 -1
- metadata +3 -9
- data/bin/run_workflow.rb +0 -240
- data/bin/tchash.rb +0 -15
- data/bin/tsv.rb +0 -14
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZWEwNDc0YzJmMjEzZTdmMDQzNTdiMzg0MTdiNWQ2OTA1ZTgzYTk3ZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWMzNGU3YTA5MGJiMzkyZDNkOGUyZjYyOTE5YTM0ZDkwYWM2Yzc3MA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MzMyM2RmMjRiMDkxMzIxMjQ0MmMxMjU4YWJmYTc4MThmNGJjOTZlZWI3YTNl
|
10
|
+
NGZjMGViMTFmOWRkN2FkYjIxODZlNjA1NmFhZGE3MTdhYmVmYzdiZmU2N2Ri
|
11
|
+
N2M2OGRkZTE1NmU3ODkyZWY2NjkyMmU2ZjlmZTJlN2UwMTk0ZGE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OGQ3MTI4Yzc2NjIzNjQ1NjFmNjI4YWUxMzZlOTViMWU0NWZmOWU5ZjQ1MWJi
|
14
|
+
ZjBkOWRiYjg4YWZkNmNmNGVmYTBmZDdmMGMwNmZiOTJmMDE0MDY0YzRmOTE0
|
15
|
+
Njc0N2FmZmMxZDQ0ODZjYzliYzFkZWIyNWFjY2VlYWY5YzMxM2I=
|
data/bin/rbbt_exec.rb
CHANGED
data/etc/app.d/base.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
#{{{ MODULES AND HELPERS
|
2
|
+
|
2
3
|
register Sinatra::RbbtRESTWorkflow
|
4
|
+
|
3
5
|
if Rbbt.etc.workflows.find.exists?
|
4
6
|
Rbbt.etc.workflows.find.read.split("\n").each do |workflow|
|
5
7
|
Workflow.require_workflow workflow
|
6
8
|
add_workflow Kernel.const_get(workflow), true
|
7
9
|
end
|
8
10
|
end
|
11
|
+
|
9
12
|
register Sinatra::RbbtRESTMain
|
10
13
|
register Sinatra::RbbtRESTEntity
|
11
14
|
register Sinatra::RbbtRESTFileServer # Remove to prevent serving files
|
@@ -13,6 +16,7 @@ register Sinatra::RbbtRESTKnowledgeBase
|
|
13
16
|
helpers Sinatra::RbbtMiscHelpers
|
14
17
|
|
15
18
|
#{{{ SESSIONS
|
19
|
+
|
16
20
|
use Rack::Session::Cookie, :key => 'rack.session',
|
17
21
|
:path => '/',
|
18
22
|
:expire_after => 2592000,
|
data/share/config.ru
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
+
require 'rbbt'
|
1
2
|
require 'rbbt/resource'
|
2
3
|
|
3
|
-
require 'rbbt'
|
4
4
|
load Rbbt.etc['app.d/init.rb'].find
|
5
5
|
|
6
6
|
$class_name = class_name = File.basename(FileUtils.pwd)
|
@@ -9,16 +9,16 @@ $app = app = eval "class #{class_name} < Sinatra::Base; self end"
|
|
9
9
|
|
10
10
|
$LOAD_PATH.unshift('lib')
|
11
11
|
|
12
|
-
#{{{
|
12
|
+
#{{{ PRE
|
13
13
|
Log.info{"Loading: " << Rbbt.etc['app.d/pre.rb'].find if Rbbt.etc['app.d/pre.rb'].exists?}
|
14
14
|
load Rbbt.etc['app.d/pre.rb'].find if Rbbt.etc['app.d/pre.rb'].exists?
|
15
15
|
|
16
|
+
#{{{ BASE
|
16
17
|
app.class_eval do
|
17
18
|
Log.info{"Loading: " << Rbbt.etc['app.d/base.rb'].find}
|
18
19
|
eval Rbbt.etc['app.d/base.rb'].read, nil, Rbbt.etc['app.d/base.rb'].find
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
22
|
#{{{ RESOURCES
|
23
23
|
Log.info{"Loading: " << Rbbt.etc['app.d/resources.rb'].find}
|
24
24
|
load Rbbt.etc['app.d/resources.rb'].find
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rbbt'
|
4
|
+
require 'rbbt/resource'
|
5
|
+
require 'rbbt-util'
|
6
|
+
require 'rbbt/util/simpleopt'
|
7
|
+
|
8
|
+
options = SOPT.get "-e--environment*:-p--port*:-s--server*:-h--host*:-f--finder"
|
9
|
+
options[:Port] ||= options[:port]
|
10
|
+
|
11
|
+
file = ARGV.shift
|
12
|
+
|
13
|
+
load Rbbt.etc['app.d/init.rb'].find
|
14
|
+
|
15
|
+
$class_name = class_name = "SingleTemplate"
|
16
|
+
|
17
|
+
$app = app = eval "class #{class_name} < Sinatra::Base; self end"
|
18
|
+
|
19
|
+
#$LOAD_PATH.unshift('lib')
|
20
|
+
|
21
|
+
#{{{ PRE
|
22
|
+
Log.info{"Loading: " << Rbbt.etc['app.d/pre.rb'].find if Rbbt.etc['app.d/pre.rb'].exists?}
|
23
|
+
load Rbbt.etc['app.d/pre.rb'].find if Rbbt.etc['app.d/pre.rb'].exists?
|
24
|
+
|
25
|
+
app.get '/' do
|
26
|
+
file = file.sub(/\.haml/,'')
|
27
|
+
template_render(file)
|
28
|
+
end
|
29
|
+
|
30
|
+
#{{{ BASE
|
31
|
+
app.class_eval do
|
32
|
+
Log.info{"Loading: " << Rbbt.etc['app.d/base.rb'].find}
|
33
|
+
eval Rbbt.etc['app.d/base.rb'].read, nil, Rbbt.etc['app.d/base.rb'].find
|
34
|
+
end
|
35
|
+
|
36
|
+
#{{{ RESOURCES
|
37
|
+
Log.info{"Loading: " << Rbbt.etc['app.d/resources.rb'].find}
|
38
|
+
load Rbbt.etc['app.d/resources.rb'].find
|
39
|
+
|
40
|
+
#{{{ ENTITIES
|
41
|
+
Log.info{"Loading: " << Rbbt.etc['app.d/entities.rb'].find}
|
42
|
+
load Rbbt.etc['app.d/entities.rb'].find
|
43
|
+
|
44
|
+
#{{{ FINDER
|
45
|
+
app.class_eval do
|
46
|
+
Log.info{"Loading: " << Rbbt.etc['app.d/finder.rb'].find}
|
47
|
+
eval Rbbt.etc['app.d/finder.rb'].read
|
48
|
+
end
|
49
|
+
|
50
|
+
#{{{ POST
|
51
|
+
Log.info{"Loading: " << Rbbt.etc['app.d/post.rb'].find if Rbbt.etc['app.d/post.rb'].exists?}
|
52
|
+
load Rbbt.etc['app.d/post.rb'].find if Rbbt.etc['app.d/post.rb'].exists?
|
53
|
+
|
54
|
+
#{{{ RUN
|
55
|
+
$title = class_name
|
56
|
+
require 'rack'
|
57
|
+
|
58
|
+
ENV["RBBT_FINDER"] = "true" if options.include?(:finder)
|
59
|
+
ENV["RACK_ENV"] = options[:environment] if options.include?(:environment)
|
60
|
+
|
61
|
+
RbbtRESTHelpers.template_resources.unshift Path.setup(File.expand_path(File.dirname(file)))
|
62
|
+
|
63
|
+
app.port = options[:port] if options[:port]
|
64
|
+
app.server = options[:server] if options[:server]
|
65
|
+
app.environment = options[:environment] if options[:environment]
|
66
|
+
app.run!
|
@@ -3,20 +3,26 @@
|
|
3
3
|
require 'rbbt-util'
|
4
4
|
require 'rbbt/util/simpleopt'
|
5
5
|
|
6
|
+
options = SOPT.get("-tc--tokyocabinet")
|
6
7
|
|
7
8
|
file = ARGV.shift
|
8
9
|
|
9
|
-
|
10
|
+
if options[:tokyocabinet]
|
11
|
+
tsv = Persist.open_tokyocabinet(file, false)
|
12
|
+
puts tsv.summary
|
13
|
+
else
|
14
|
+
header = TSV.parse_header(Open.open(file))
|
10
15
|
|
11
|
-
puts "File: #{ file }"
|
12
|
-
puts "Key: #{header.key_field}"
|
13
|
-
puts "Fields: "
|
14
|
-
header.fields.each_with_index do |f,i|
|
15
|
-
|
16
|
+
puts "File: #{ file }"
|
17
|
+
puts "Key: #{header.key_field}"
|
18
|
+
puts "Fields: "
|
19
|
+
header.fields.each_with_index do |f,i|
|
20
|
+
puts " - #{i + 1}: " << f
|
21
|
+
end
|
22
|
+
puts "Rows: #{`wc -l #{ file }|cut -f 1 -d' '`}"
|
23
|
+
puts "First line:"
|
24
|
+
parts = []
|
25
|
+
header.first_line.split(header.sep).each_with_index{|p,i| parts << "(#{i}) #{p}"}
|
26
|
+
puts parts * "\t"
|
16
27
|
end
|
17
|
-
puts "Rows: #{`wc -l #{ file }|cut -f 1 -d' '`}"
|
18
|
-
puts "First line:"
|
19
|
-
parts = []
|
20
|
-
header.first_line.split(header.sep).each_with_index{|p,i| parts << "(#{i}) #{p}"}
|
21
|
-
puts parts * "\t"
|
22
28
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.5.
|
4
|
+
version: 5.5.33
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
@@ -69,13 +69,9 @@ dependencies:
|
|
69
69
|
description: Utilities for handling tsv files, caches, etc
|
70
70
|
email: miguel.vazquez@cnio.es
|
71
71
|
executables:
|
72
|
-
- tsv.rb
|
73
|
-
- tchash.rb
|
74
|
-
- run_workflow.rb
|
75
72
|
- rbbt_query.rb
|
76
73
|
- rbbt_exec.rb
|
77
74
|
- rbbt_Rutil.rb
|
78
|
-
- rbbt_monitor.rb
|
79
75
|
- rbbt
|
80
76
|
- rbbt_dangling_locks.rb
|
81
77
|
extensions: []
|
@@ -89,11 +85,7 @@ files:
|
|
89
85
|
- bin/rbbt_Rutil.rb
|
90
86
|
- bin/rbbt_dangling_locks.rb
|
91
87
|
- bin/rbbt_exec.rb
|
92
|
-
- bin/rbbt_monitor.rb
|
93
88
|
- bin/rbbt_query.rb
|
94
|
-
- bin/run_workflow.rb
|
95
|
-
- bin/tchash.rb
|
96
|
-
- bin/tsv.rb
|
97
89
|
- etc/app.d/base.rb
|
98
90
|
- etc/app.d/entities.rb
|
99
91
|
- etc/app.d/finder.rb
|
@@ -158,6 +150,7 @@ files:
|
|
158
150
|
- share/install/software/lib/install_helpers
|
159
151
|
- share/rbbt_commands/app/install
|
160
152
|
- share/rbbt_commands/app/start
|
153
|
+
- share/rbbt_commands/app/template
|
161
154
|
- share/rbbt_commands/conf/web_user/add
|
162
155
|
- share/rbbt_commands/conf/web_user/list
|
163
156
|
- share/rbbt_commands/conf/web_user/remove
|
@@ -170,6 +163,7 @@ files:
|
|
170
163
|
- share/rbbt_commands/tsv/info
|
171
164
|
- share/rbbt_commands/workflow/cmd
|
172
165
|
- share/rbbt_commands/workflow/install
|
166
|
+
- share/rbbt_commands/workflow/monitor
|
173
167
|
- share/rbbt_commands/workflow/remote/add
|
174
168
|
- share/rbbt_commands/workflow/remote/list
|
175
169
|
- share/rbbt_commands/workflow/remote/remove
|
data/bin/run_workflow.rb
DELETED
@@ -1,240 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'rbbt'
|
4
|
-
require 'rbbt/util/simpleopt'
|
5
|
-
require 'rbbt/workflow'
|
6
|
-
require 'pp'
|
7
|
-
|
8
|
-
def usage(task)
|
9
|
-
puts task.usage
|
10
|
-
exit -1
|
11
|
-
end
|
12
|
-
|
13
|
-
def SOPT_options(workflow, task)
|
14
|
-
sopt_options = []
|
15
|
-
workflow.rec_inputs(task.name).each do |name|
|
16
|
-
short = name.to_s.chars.first
|
17
|
-
boolean = workflow.rec_input_types(task.name)[name].to_sym == :boolean
|
18
|
-
|
19
|
-
sopt_options << "-#{short}--#{name}#{boolean ? '' : '*'}"
|
20
|
-
end
|
21
|
-
|
22
|
-
sopt_options * ":"
|
23
|
-
end
|
24
|
-
|
25
|
-
def fix_options(workflow, task, job_options)
|
26
|
-
option_types = workflow.rec_input_types(task.name)
|
27
|
-
|
28
|
-
#workflow.resolve_locals(job_options)
|
29
|
-
|
30
|
-
job_options_cleaned = {}
|
31
|
-
|
32
|
-
job_options.each do |name, value|
|
33
|
-
value = case option_types[name].to_sym
|
34
|
-
when :float
|
35
|
-
value.to_f
|
36
|
-
when :integer
|
37
|
-
value.to_i
|
38
|
-
when :string, :text
|
39
|
-
case
|
40
|
-
when value == '-'
|
41
|
-
STDIN.read
|
42
|
-
when (String === value and File.exists?(value))
|
43
|
-
Open.read(value)
|
44
|
-
else
|
45
|
-
value
|
46
|
-
end
|
47
|
-
when :array
|
48
|
-
if Array === value
|
49
|
-
value
|
50
|
-
else
|
51
|
-
case
|
52
|
-
when value == '-'
|
53
|
-
STDIN.read
|
54
|
-
when (String === value and File.exists?(value))
|
55
|
-
Open.read(value)
|
56
|
-
else
|
57
|
-
value
|
58
|
-
end.split(/[,|\s]/)
|
59
|
-
end
|
60
|
-
when :tsv
|
61
|
-
if TSV === value
|
62
|
-
value
|
63
|
-
else
|
64
|
-
begin
|
65
|
-
if value == '-'
|
66
|
-
TSV.open(STDIN).to_s :sort
|
67
|
-
else
|
68
|
-
TSV.new(value).to_s :sort
|
69
|
-
end
|
70
|
-
rescue
|
71
|
-
value
|
72
|
-
end
|
73
|
-
end
|
74
|
-
else
|
75
|
-
value
|
76
|
-
end
|
77
|
-
job_options_cleaned[name] = value
|
78
|
-
end
|
79
|
-
|
80
|
-
job_options_cleaned
|
81
|
-
end
|
82
|
-
|
83
|
-
options = SOPT.get "-t--task*:--profile:-l--log*:-h--help:-n--name*:-cl--clean:-rcl-recursive_clean:-pn--printname:-srv--server:-p--port*"
|
84
|
-
|
85
|
-
workflow = ARGV.first
|
86
|
-
|
87
|
-
if options[:server]
|
88
|
-
|
89
|
-
require 'zurb-foundation'
|
90
|
-
require 'modular-scale'
|
91
|
-
|
92
|
-
require 'rbbt/rest/main'
|
93
|
-
require 'rbbt/rest/entity'
|
94
|
-
require 'rbbt/rest/workflow'
|
95
|
-
require 'rbbt/rest/file_server'
|
96
|
-
require 'rbbt/rest/helpers'
|
97
|
-
|
98
|
-
YAML::ENGINE.yamler = 'syck' if defined? YAML::ENGINE and YAML::ENGINE.respond_to? :yamler
|
99
|
-
|
100
|
-
Workflow.require_workflow workflow
|
101
|
-
|
102
|
-
class WorkflowRest < Sinatra::Base
|
103
|
-
get '/' do
|
104
|
-
redirect to(File.join('/', Workflow.workflows.last.to_s))
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
if options[:profile]
|
109
|
-
WorkflowRest.before File.join('/', Workflow.workflows.last.to_s, '*') do
|
110
|
-
@profile = true
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
class WorkflowRest < Sinatra::Base
|
115
|
-
|
116
|
-
#{{{ MODULES AND HELPERS
|
117
|
-
register Sinatra::RbbtRESTMain
|
118
|
-
register Sinatra::RbbtRESTWorkflow
|
119
|
-
register Sinatra::RbbtRESTEntity
|
120
|
-
helpers Sinatra::RbbtMiscHelpers
|
121
|
-
|
122
|
-
#{{{ DIRECTORIES
|
123
|
-
local_var = Rbbt.var.find(:lib)
|
124
|
-
set :cache_dir , local_var.sinatra.cache.find
|
125
|
-
set :file_dir , local_var.sinatra.files.find
|
126
|
-
set :favourites_dir , local_var.sinatra.favourites.find
|
127
|
-
set :favourite_lists_dir , local_var.sinatra.favourite_lists
|
128
|
-
|
129
|
-
#{{{ SESSIONS
|
130
|
-
use Rack::Session::Cookie, :key => 'rack.session',
|
131
|
-
:path => '/',
|
132
|
-
:expire_after => 2592000,
|
133
|
-
:secret => "Workflow #{Workflow.workflows.inspect} secret!!"
|
134
|
-
|
135
|
-
#{{{ FOUNDATION RESOURCES
|
136
|
-
add_sass_load_path "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"
|
137
|
-
add_sass_load_path "#{Gem.loaded_specs['zurb-foundation'].full_gem_path}/scss/"
|
138
|
-
add_sass_load_path "#{Gem.loaded_specs['modular-scale'].full_gem_path}/stylesheets/"
|
139
|
-
RbbtRESTHelpers.javascript_resources << Path.setup("#{Gem.loaded_specs['zurb-foundation'].full_gem_path}/js/foundation")
|
140
|
-
RbbtRESTHelpers.javascript_resources << Path.setup("#{Gem.loaded_specs['zurb-foundation'].full_gem_path}/js/vendor")
|
141
|
-
|
142
|
-
$title = "Workflow Scout"
|
143
|
-
use Rack::Deflater
|
144
|
-
end
|
145
|
-
|
146
|
-
WorkflowRest.add_workflow Workflow.workflows.last, true
|
147
|
-
|
148
|
-
WorkflowRest.port = options[:port] || 4567
|
149
|
-
WorkflowRest.run!
|
150
|
-
else
|
151
|
-
|
152
|
-
# Set log, fork, clean, recursive_clean and help
|
153
|
-
Log.severity = options[:log].to_i if options.include? :log
|
154
|
-
help = !!options.delete(:help)
|
155
|
-
do_fork = !!options.delete(:fork)
|
156
|
-
clean = !!options.delete(:clean)
|
157
|
-
recursive_clean = !!options.delete(:recursive_clean)
|
158
|
-
|
159
|
-
|
160
|
-
# Get workflow
|
161
|
-
|
162
|
-
if Rbbt.etc.remote_workflows.exists?
|
163
|
-
remote_workflows = Rbbt.etc.remote_workflows.yaml
|
164
|
-
else
|
165
|
-
remote_workflows = {}
|
166
|
-
end
|
167
|
-
|
168
|
-
if remote_workflows.include? workflow
|
169
|
-
require 'rbbt/workflow/rest/client'
|
170
|
-
workflow = RbbtRestClient.new remote_workflows[workflow], workflow
|
171
|
-
else
|
172
|
-
Workflow.require_workflow workflow
|
173
|
-
workflow = Workflow.workflows.last
|
174
|
-
end
|
175
|
-
|
176
|
-
# Set task
|
177
|
-
namespace, task = nil, nil
|
178
|
-
|
179
|
-
case
|
180
|
-
when (not options[:task])
|
181
|
-
usage if help
|
182
|
-
task = workflow.last_task
|
183
|
-
namespace = workflow
|
184
|
-
when (options[:task] =~ /\./)
|
185
|
-
namespace, task = options.delete(:task).split('.')
|
186
|
-
namespace = Misc.string2const(namespace)
|
187
|
-
else
|
188
|
-
task_name = options.delete(:task).to_sym
|
189
|
-
task = workflow.tasks[task_name]
|
190
|
-
raise "Task not found: #{ task_name }" if task.nil?
|
191
|
-
end
|
192
|
-
|
193
|
-
|
194
|
-
workflow.usage(task) if help
|
195
|
-
|
196
|
-
name = options.delete(:name) || "Default"
|
197
|
-
|
198
|
-
# get job args
|
199
|
-
sopt_option_string = SOPT_options(workflow,task)
|
200
|
-
job_options = SOPT.get sopt_option_string
|
201
|
-
job_options = fix_options(workflow,task, job_options)
|
202
|
-
|
203
|
-
#- get job
|
204
|
-
job = workflow.job(task.name, name, job_options)
|
205
|
-
|
206
|
-
# clean job
|
207
|
-
job.clean if clean
|
208
|
-
job.recursive_clean if recursive_clean
|
209
|
-
|
210
|
-
# run
|
211
|
-
if do_fork
|
212
|
-
job.fork
|
213
|
-
while not job.done?
|
214
|
-
Log.debug "#{job.step}: #{job.messages.last}"
|
215
|
-
sleep 2
|
216
|
-
end
|
217
|
-
raise job.messages.last if job.error?
|
218
|
-
res = job.load
|
219
|
-
else
|
220
|
-
res = job.run
|
221
|
-
end
|
222
|
-
|
223
|
-
if options.delete(:printname)
|
224
|
-
puts job.name
|
225
|
-
exit
|
226
|
-
else
|
227
|
-
Log.low "Job name: #{job.name}"
|
228
|
-
end
|
229
|
-
|
230
|
-
case
|
231
|
-
when Array === res
|
232
|
-
puts res * "\n"
|
233
|
-
when TSV === res
|
234
|
-
puts res
|
235
|
-
when Hash === res
|
236
|
-
puts res.to_yaml
|
237
|
-
else
|
238
|
-
puts res
|
239
|
-
end
|
240
|
-
end
|
data/bin/tchash.rb
DELETED
data/bin/tsv.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'rbbt/util/simpleopt'
|
4
|
-
|
5
|
-
options = SOPT.get "-h--help:-to--tsv-options*:-p--persistence"
|
6
|
-
|
7
|
-
command = ARGV.shift
|
8
|
-
file = ARGV.shift
|
9
|
-
|
10
|
-
case command
|
11
|
-
when 'cat'
|
12
|
-
puts TSV.new(file, options["tsv-options"].merge(options["persistence"]))
|
13
|
-
when
|
14
|
-
|