tapsoob 0.2.6 → 0.2.7
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/tapsoob +2 -187
- data/lib/tapsoob/cli.rb +192 -0
- data/lib/tapsoob/utils.rb +4 -3
- data/lib/tapsoob/version.rb +1 -1
- data/tapsoob.gemspec +3 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c6a5d0ed2f7a08b6cb726bc5665c2d5a092e55fa68a6ea746127b210c32958c
|
4
|
+
data.tar.gz: cde8aeb717eed72da5b30090ce0d6e3b4771a9a4b01073941560f07d4ddcaa4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dd87ff8b5d2e0d28437b2d6bc315ef52dd6aa87406393aa882573848eacb0fee97207fe7a3d8ce8dc716aa1e0f269eb3f43501b4754a3f95a195add4b4fd34c
|
7
|
+
data.tar.gz: 0deaf4217e61ce5ca09db15b0314135ae45b57482fdb96adabf2e818c0fb64374a1efeb66395421cc44cf4e61ca76f1d11631ebb85facbf61a3285ef5b7734a4
|
data/bin/tapsoob
CHANGED
@@ -1,191 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'rubygems'
|
4
|
-
require 'fileutils'
|
5
|
-
require 'sequel'
|
6
|
-
require 'tempfile'
|
7
|
-
require 'thor'
|
8
|
-
|
9
3
|
$:.unshift File.dirname(__FILE__) + '/../lib'
|
10
|
-
require 'tapsoob/
|
11
|
-
require 'tapsoob/log'
|
12
|
-
require 'tapsoob/operation'
|
13
|
-
require 'tapsoob/schema'
|
14
|
-
require 'tapsoob/version'
|
15
|
-
|
16
|
-
Tapsoob::Config.tapsoob_database_url = ENV['TAPSOOB_DATABASE_URL'] || begin
|
17
|
-
# this is dirty but it solves a weird problem where the tempfile disappears mid-process
|
18
|
-
#require ((RUBY_PLATFORM =~ /java/).nil? ? 'sqlite3' : 'jdbc-sqlite3')
|
19
|
-
$__taps_database = Tempfile.new('tapsoob.db')
|
20
|
-
$__taps_database.open()
|
21
|
-
"sqlite://#{$__taps_database.path}"
|
22
|
-
end
|
23
|
-
|
24
|
-
module TapsoobCLI
|
25
|
-
class Schema < Thor
|
26
|
-
desc "console DATABASE_URL", "Create an IRB REPL connected to a database"
|
27
|
-
def console(database_url)
|
28
|
-
$db = Sequel.connect(database_url)
|
29
|
-
require 'irb'
|
30
|
-
require 'irb/completion'
|
31
|
-
IRB.start
|
32
|
-
end
|
33
|
-
|
34
|
-
desc "dump DATABASE_URL", "Dump a database using a database URL"
|
35
|
-
def dump(database_url)
|
36
|
-
puts Tapsoob::Schema.dump(database_url)
|
37
|
-
end
|
38
|
-
|
39
|
-
desc "dump_table DATABASE_URL TABLE", "Dump a table from a database using a database URL"
|
40
|
-
def dump_table(database_url, table)
|
41
|
-
puts Tapsoob::Schema.dump_table(database_url, table)
|
42
|
-
end
|
43
|
-
|
44
|
-
desc "indexes DATABASE_URL", "Dump indexes from a database using a database URL"
|
45
|
-
def indexes(database_url)
|
46
|
-
puts Tapsoob::Schema.indexes(database_url)
|
47
|
-
end
|
48
|
-
|
49
|
-
desc "indexes_individual DATABASE_URL", "Dump indexes per table individually using a database URL"
|
50
|
-
def indexes_individual(database_url)
|
51
|
-
puts Tapsoob::Schema.indexes_individual(database_url)
|
52
|
-
end
|
53
|
-
|
54
|
-
desc "reset_db_sequences DATABASE_URL", "Reset database sequences using a database URL"
|
55
|
-
def reset_db_sequences(database_url)
|
56
|
-
Tapsoob::Schema.reset_db_sequences(database_url)
|
57
|
-
end
|
58
|
-
|
59
|
-
desc "load DATABASE_URL FILENAME", "Load a database schema from a file to a database using a database URL"
|
60
|
-
def load(database_url, filename)
|
61
|
-
schema = File.read(filename) rescue help
|
62
|
-
Tapsoob::Schema.load(database_url, schema)
|
63
|
-
end
|
64
|
-
|
65
|
-
desc "load_indexes DATABASE_URL FILENAME", "Load indexes from a file to a database using a database URL"
|
66
|
-
def load_indexes(database_url, filename)
|
67
|
-
indexes = File.read(filename) rescue help
|
68
|
-
Tapsoob::Schema.load_indexes(database_url, indexes)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
class Root < Thor
|
73
|
-
desc "pull DUMP_PATH DATABASE_URL", "Pull a dump from a database to a folder"
|
74
|
-
option :"skip-schema", desc: "Don't transfer the schema just data", default: false, type: :boolean, aliases: "-s"
|
75
|
-
option :"indexes-first", desc: "Transfer indexes first before data", default: false, type: :boolean, aliases: "-i"
|
76
|
-
option :resume, desc: "Resume a Tapsoob Session from a stored file", type: :string, aliases: "-r"
|
77
|
-
option :chunksize, desc: "Initial chunksize", default: 1000, type: :numeric, aliases: "-c"
|
78
|
-
option :"disable-compression", desc: "Disable Compression", default: false, type: :boolean, aliases: "-g"
|
79
|
-
option :filter, desc: "Regex Filter for tables", type: :string, aliases: "-f"
|
80
|
-
option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
|
81
|
-
option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
|
82
|
-
option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
|
83
|
-
def pull(dump_path, database_url)
|
84
|
-
opts = parse_opts(options)
|
85
|
-
Tapsoob.log.level = Logger::DEBUG if opts[:debug]
|
86
|
-
if opts[:resume_filename]
|
87
|
-
clientresumexfer(:pull, dump_path, database_url, opts)
|
88
|
-
else
|
89
|
-
clientxfer(:pull, dump_path, database_url, opts)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
desc "push DUMP_PATH DATABASE_URL", "Push a previously tapsoob dump to a database"
|
94
|
-
option :"skip-schema", desc: "Don't transfer the schema just data", default: false, type: :boolean, aliases: "-s"
|
95
|
-
option :"indexes-first", desc: "Transfer indexes first before data", default: false, type: :boolean, aliases: "-i"
|
96
|
-
option :resume, desc: "Resume a Tapsoob Session from a stored file", type: :string, aliases: "-r"
|
97
|
-
option :chunksize, desc: "Initial chunksize", default: 1000, type: :numeric, aliases: "-c"
|
98
|
-
option :"disable-compression", desc: "Disable Compression", default: false, type: :boolean, aliases: "-g"
|
99
|
-
option :filter, desc: "Regex Filter for tables", type: :string, aliases: "-f"
|
100
|
-
option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
|
101
|
-
option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
|
102
|
-
option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
|
103
|
-
def push(dump_path, database_url)
|
104
|
-
opts = parse_opts(options)
|
105
|
-
Tapsoob.log.level = Logger::DEBUG if opts[:debug]
|
106
|
-
if opts[:resume_filename]
|
107
|
-
clientresumexfer(:push, dump_path, database_url, opts)
|
108
|
-
else
|
109
|
-
clientxfer(:push, dump_path, database_url, opts)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
desc "version", "Show tapsoob version"
|
114
|
-
def version
|
115
|
-
puts Tapsoob::VERSION.dup
|
116
|
-
end
|
117
|
-
|
118
|
-
desc "schema SUBCOMMAND ...ARGS", "Direct access to Tapsoob::Schema class methods"
|
119
|
-
subcommand "schema", Schema
|
120
|
-
|
121
|
-
private
|
122
|
-
def parse_opts(options)
|
123
|
-
# Default options
|
124
|
-
opts = {
|
125
|
-
skip_schema: options[:"skip-schema"],
|
126
|
-
indexes_first: options[:"indexes_first"],
|
127
|
-
disable_compression: options[:"disable-compression"],
|
128
|
-
debug: options[:debug]
|
129
|
-
}
|
130
|
-
|
131
|
-
# Resume
|
132
|
-
if options[:resume]
|
133
|
-
if File.exists?(options[:resume])
|
134
|
-
opts[:resume_file] = options[:resume]
|
135
|
-
else
|
136
|
-
raise "Unable to find resume file."
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
# Default chunksize
|
141
|
-
if options[:chunksize]
|
142
|
-
opts[:default_chunksize] = (options[:chunksize] < 10 ? 10 : options[:chunksize])
|
143
|
-
end
|
144
|
-
|
145
|
-
# Regex filter
|
146
|
-
opts[:table_filter] = options[:filter] if options[:filter]
|
147
|
-
|
148
|
-
# Table filter
|
149
|
-
if options[:tables]
|
150
|
-
r_tables = options[:tables].collect { |t| "^#{t}" }.join("|")
|
151
|
-
opts[:table_filter] = "#{r_tables}"
|
152
|
-
end
|
153
|
-
|
154
|
-
# Exclude tables
|
155
|
-
opts[:exclude_tables] = options[:"exclude-tables"] if options[:"exclude-tables"]
|
156
|
-
|
157
|
-
opts
|
158
|
-
end
|
159
|
-
|
160
|
-
def clientxfer(method, dump_path, database_url, opts)
|
161
|
-
Tapsoob::Config.verify_database_url(database_url)
|
162
|
-
|
163
|
-
FileUtils.mkpath "#{dump_path}/schemas"
|
164
|
-
FileUtils.mkpath "#{dump_path}/data"
|
165
|
-
FileUtils.mkpath "#{dump_path}/indexes"
|
166
|
-
|
167
|
-
require 'tapsoob/operation'
|
168
|
-
|
169
|
-
Tapsoob::Operation.factory(method, database_url, dump_path, opts).run
|
170
|
-
end
|
171
|
-
|
172
|
-
def clientresumexfer(method, dump_path, database_url, opts)
|
173
|
-
session = JSON.parse(File.read(opts.delete(:resume_filename)))
|
174
|
-
session.symbolize_recursively!
|
175
|
-
|
176
|
-
dump_path = dump_path || session.delete(:dump_path)
|
177
|
-
|
178
|
-
require 'taps/operation'
|
179
|
-
|
180
|
-
newsession = session.merge({
|
181
|
-
:default_chunksize => opts[:default_chunksize],
|
182
|
-
:disable_compression => opts[:disable_compression],
|
183
|
-
:resume => true
|
184
|
-
})
|
185
|
-
|
186
|
-
Tapsoob::Operation.factory(method, database_url, dump_path, newsession).run
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
4
|
+
require 'tapsoob/cli'
|
190
5
|
|
191
|
-
|
6
|
+
Tapsoob::CLI::Root.start(ARGV)
|
data/lib/tapsoob/cli.rb
ADDED
@@ -0,0 +1,192 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'sequel'
|
6
|
+
require 'tempfile'
|
7
|
+
require 'thor'
|
8
|
+
|
9
|
+
# tapsoob deps
|
10
|
+
require 'tapsoob/config'
|
11
|
+
require 'tapsoob/log'
|
12
|
+
require 'tapsoob/operation'
|
13
|
+
require 'tapsoob/schema'
|
14
|
+
require 'tapsoob/version'
|
15
|
+
|
16
|
+
Tapsoob::Config.tapsoob_database_url = ENV['TAPSOOB_DATABASE_URL'] || begin
|
17
|
+
# this is dirty but it solves a weird problem where the tempfile disappears mid-process
|
18
|
+
#require ((RUBY_PLATFORM =~ /java/).nil? ? 'sqlite3' : 'jdbc-sqlite3')
|
19
|
+
$__taps_database = Tempfile.new('tapsoob.db')
|
20
|
+
$__taps_database.open()
|
21
|
+
"sqlite://#{$__taps_database.path}"
|
22
|
+
end
|
23
|
+
|
24
|
+
module Tapsoob
|
25
|
+
module CLI
|
26
|
+
class Schema < Thor
|
27
|
+
desc "console DATABASE_URL", "Create an IRB REPL connected to a database"
|
28
|
+
def console(database_url)
|
29
|
+
$db = Sequel.connect(database_url)
|
30
|
+
require 'irb'
|
31
|
+
require 'irb/completion'
|
32
|
+
IRB.start
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "dump DATABASE_URL", "Dump a database using a database URL"
|
36
|
+
def dump(database_url)
|
37
|
+
puts Tapsoob::Schema.dump(database_url)
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "dump_table DATABASE_URL TABLE", "Dump a table from a database using a database URL"
|
41
|
+
def dump_table(database_url, table)
|
42
|
+
puts Tapsoob::Schema.dump_table(database_url, table)
|
43
|
+
end
|
44
|
+
|
45
|
+
desc "indexes DATABASE_URL", "Dump indexes from a database using a database URL"
|
46
|
+
def indexes(database_url)
|
47
|
+
puts Tapsoob::Schema.indexes(database_url)
|
48
|
+
end
|
49
|
+
|
50
|
+
desc "indexes_individual DATABASE_URL", "Dump indexes per table individually using a database URL"
|
51
|
+
def indexes_individual(database_url)
|
52
|
+
puts Tapsoob::Schema.indexes_individual(database_url)
|
53
|
+
end
|
54
|
+
|
55
|
+
desc "reset_db_sequences DATABASE_URL", "Reset database sequences using a database URL"
|
56
|
+
def reset_db_sequences(database_url)
|
57
|
+
Tapsoob::Schema.reset_db_sequences(database_url)
|
58
|
+
end
|
59
|
+
|
60
|
+
desc "load DATABASE_URL FILENAME", "Load a database schema from a file to a database using a database URL"
|
61
|
+
def load(database_url, filename)
|
62
|
+
schema = File.read(filename) rescue help
|
63
|
+
Tapsoob::Schema.load(database_url, schema)
|
64
|
+
end
|
65
|
+
|
66
|
+
desc "load_indexes DATABASE_URL FILENAME", "Load indexes from a file to a database using a database URL"
|
67
|
+
def load_indexes(database_url, filename)
|
68
|
+
indexes = File.read(filename) rescue help
|
69
|
+
Tapsoob::Schema.load_indexes(database_url, indexes)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class Root < Thor
|
74
|
+
desc "pull DUMP_PATH DATABASE_URL", "Pull a dump from a database to a folder"
|
75
|
+
option :"skip-schema", desc: "Don't transfer the schema just data", default: false, type: :boolean, aliases: "-s"
|
76
|
+
option :"indexes-first", desc: "Transfer indexes first before data", default: false, type: :boolean, aliases: "-i"
|
77
|
+
option :resume, desc: "Resume a Tapsoob Session from a stored file", type: :string, aliases: "-r"
|
78
|
+
option :chunksize, desc: "Initial chunksize", default: 1000, type: :numeric, aliases: "-c"
|
79
|
+
option :"disable-compression", desc: "Disable Compression", default: false, type: :boolean, aliases: "-g"
|
80
|
+
option :filter, desc: "Regex Filter for tables", type: :string, aliases: "-f"
|
81
|
+
option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
|
82
|
+
option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
|
83
|
+
option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
|
84
|
+
def pull(dump_path, database_url)
|
85
|
+
opts = parse_opts(options)
|
86
|
+
Tapsoob.log.level = Logger::DEBUG if opts[:debug]
|
87
|
+
if opts[:resume_filename]
|
88
|
+
clientresumexfer(:pull, dump_path, database_url, opts)
|
89
|
+
else
|
90
|
+
clientxfer(:pull, dump_path, database_url, opts)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
desc "push DUMP_PATH DATABASE_URL", "Push a previously tapsoob dump to a database"
|
95
|
+
option :"skip-schema", desc: "Don't transfer the schema just data", default: false, type: :boolean, aliases: "-s"
|
96
|
+
option :"indexes-first", desc: "Transfer indexes first before data", default: false, type: :boolean, aliases: "-i"
|
97
|
+
option :resume, desc: "Resume a Tapsoob Session from a stored file", type: :string, aliases: "-r"
|
98
|
+
option :chunksize, desc: "Initial chunksize", default: 1000, type: :numeric, aliases: "-c"
|
99
|
+
option :"disable-compression", desc: "Disable Compression", default: false, type: :boolean, aliases: "-g"
|
100
|
+
option :filter, desc: "Regex Filter for tables", type: :string, aliases: "-f"
|
101
|
+
option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
|
102
|
+
option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
|
103
|
+
option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
|
104
|
+
def push(dump_path, database_url)
|
105
|
+
opts = parse_opts(options)
|
106
|
+
Tapsoob.log.level = Logger::DEBUG if opts[:debug]
|
107
|
+
if opts[:resume_filename]
|
108
|
+
clientresumexfer(:push, dump_path, database_url, opts)
|
109
|
+
else
|
110
|
+
clientxfer(:push, dump_path, database_url, opts)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
desc "version", "Show tapsoob version"
|
115
|
+
def version
|
116
|
+
puts Tapsoob::VERSION.dup
|
117
|
+
end
|
118
|
+
|
119
|
+
desc "schema SUBCOMMAND ...ARGS", "Direct access to Tapsoob::Schema class methods"
|
120
|
+
subcommand "schema", Schema
|
121
|
+
|
122
|
+
private
|
123
|
+
def parse_opts(options)
|
124
|
+
# Default options
|
125
|
+
opts = {
|
126
|
+
skip_schema: options[:"skip-schema"],
|
127
|
+
indexes_first: options[:"indexes_first"],
|
128
|
+
disable_compression: options[:"disable-compression"],
|
129
|
+
debug: options[:debug]
|
130
|
+
}
|
131
|
+
|
132
|
+
# Resume
|
133
|
+
if options[:resume]
|
134
|
+
if File.exists?(options[:resume])
|
135
|
+
opts[:resume_file] = options[:resume]
|
136
|
+
else
|
137
|
+
raise "Unable to find resume file."
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# Default chunksize
|
142
|
+
if options[:chunksize]
|
143
|
+
opts[:default_chunksize] = (options[:chunksize] < 10 ? 10 : options[:chunksize])
|
144
|
+
end
|
145
|
+
|
146
|
+
# Regex filter
|
147
|
+
opts[:table_filter] = options[:filter] if options[:filter]
|
148
|
+
|
149
|
+
# Table filter
|
150
|
+
if options[:tables]
|
151
|
+
r_tables = options[:tables].collect { |t| "^#{t}" }.join("|")
|
152
|
+
opts[:table_filter] = "#{r_tables}"
|
153
|
+
end
|
154
|
+
|
155
|
+
# Exclude tables
|
156
|
+
opts[:exclude_tables] = options[:"exclude-tables"] if options[:"exclude-tables"]
|
157
|
+
|
158
|
+
opts
|
159
|
+
end
|
160
|
+
|
161
|
+
def clientxfer(method, dump_path, database_url, opts)
|
162
|
+
Tapsoob::Config.verify_database_url(database_url)
|
163
|
+
|
164
|
+
FileUtils.mkpath "#{dump_path}/schemas"
|
165
|
+
FileUtils.mkpath "#{dump_path}/data"
|
166
|
+
FileUtils.mkpath "#{dump_path}/indexes"
|
167
|
+
|
168
|
+
require 'tapsoob/operation'
|
169
|
+
|
170
|
+
Tapsoob::Operation.factory(method, database_url, dump_path, opts).run
|
171
|
+
end
|
172
|
+
|
173
|
+
def clientresumexfer(method, dump_path, database_url, opts)
|
174
|
+
session = JSON.parse(File.read(opts.delete(:resume_filename)))
|
175
|
+
session.symbolize_recursively!
|
176
|
+
|
177
|
+
dump_path = dump_path || session.delete(:dump_path)
|
178
|
+
|
179
|
+
require 'taps/operation'
|
180
|
+
|
181
|
+
newsession = session.merge({
|
182
|
+
:default_chunksize => opts[:default_chunksize],
|
183
|
+
:disable_compression => opts[:disable_compression],
|
184
|
+
:resume => true
|
185
|
+
})
|
186
|
+
|
187
|
+
Tapsoob::Operation.factory(method, database_url, dump_path, newsession).run
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
data/lib/tapsoob/utils.rb
CHANGED
@@ -154,10 +154,11 @@ Data : #{data}
|
|
154
154
|
Tapsoob::Schema.load_indexes(database_url, index)
|
155
155
|
end
|
156
156
|
|
157
|
-
def schema_bin(*args)
|
158
|
-
|
157
|
+
def schema_bin(command, *args)
|
158
|
+
require 'tapsoob/cli'
|
159
159
|
subcommand = "schema"
|
160
|
-
|
160
|
+
script = Tapsoob::CLI::Schema.new
|
161
|
+
script.invoke(command, args.map { |a| "#{a}" })
|
161
162
|
end
|
162
163
|
|
163
164
|
def primary_key(db, table)
|
data/lib/tapsoob/version.rb
CHANGED
data/tapsoob.gemspec
CHANGED
@@ -30,8 +30,8 @@ Gem::Specification.new do |s|
|
|
30
30
|
else
|
31
31
|
s.platform = 'java'
|
32
32
|
|
33
|
-
s.
|
34
|
-
s.
|
35
|
-
s.
|
33
|
+
s.add_dependency "jdbc-mysql", "~> 5.1.44"
|
34
|
+
s.add_dependency "jdbc-postgres", "~> 42.1.4"
|
35
|
+
s.add_dependency "jdbc-sqlite3", "~> 3.20.1"
|
36
36
|
end
|
37
37
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tapsoob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Félix Bellanger
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-02-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- bin/tapsoob
|
98
98
|
- lib/tapsoob.rb
|
99
99
|
- lib/tapsoob/chunksize.rb
|
100
|
+
- lib/tapsoob/cli.rb
|
100
101
|
- lib/tapsoob/config.rb
|
101
102
|
- lib/tapsoob/data_stream.rb
|
102
103
|
- lib/tapsoob/errors.rb
|