schlepp 0.0.1.pre.alpha.1 → 0.0.1.pre.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -5
  3. data/Gemfile +2 -1
  4. data/lib/schlepp/sink/filter/chunker.rb +40 -0
  5. data/lib/schlepp/sink/filter/compressor/stream.rb +44 -0
  6. data/lib/schlepp/sink/filter/compressor/writer.rb +36 -0
  7. data/lib/schlepp/sink/filter/compressor.rb +20 -0
  8. data/lib/schlepp/sink/filter/formatter/csv/writer.rb +25 -0
  9. data/lib/schlepp/sink/filter/formatter/csv.rb +21 -0
  10. data/lib/schlepp/sink/filter.rb +20 -0
  11. data/lib/schlepp/sink/table_object/carosel.rb +65 -0
  12. data/lib/schlepp/sink/table_object/factory.rb +28 -0
  13. data/lib/schlepp/sink/table_object/filter/observer.rb +23 -0
  14. data/lib/schlepp/sink/table_object/filter/writer.rb +26 -0
  15. data/lib/schlepp/sink/table_object/filters.rb +22 -0
  16. data/lib/schlepp/sink/table_object/stream.rb +25 -0
  17. data/lib/schlepp/sink/table_object/writer/factory.rb +22 -0
  18. data/lib/schlepp/sink.rb +17 -2
  19. data/lib/schlepp/source/csv.rb +1 -1
  20. data/lib/schlepp/version.rb +1 -1
  21. data/test/integration/mock/sink.rb +51 -0
  22. data/test/integration/mock/source.rb +9 -0
  23. data/test/integration/schlepp_test.rb +27 -8
  24. data/test/integration/test_helper.rb +13 -6
  25. data/test/unit/schlepp/table_object/carosel_test.rb +104 -0
  26. data/test/unit/schlepp/table_object/factory_test.rb +55 -0
  27. data/test/unit/schlepp_test.rb +5 -4
  28. data/test/unit/test_helper.rb +13 -6
  29. metadata +27 -29
  30. data/bin/schlepp.rb +0 -29
  31. data/lib/schlepp/sink/chunker.rb +0 -30
  32. data/lib/schlepp/sink/data_object.rb +0 -26
  33. data/lib/schlepp/sink/data_stream.rb +0 -39
  34. data/lib/schlepp/sink/loader.rb +0 -35
  35. data/lib/schlepp/sink/sequencer.rb +0 -42
  36. data/lib/schlepp/sinks/fs/chunker.rb +0 -38
  37. data/lib/schlepp/sinks/fs/sequencer.rb +0 -21
  38. data/lib/schlepp/sinks/fs/table_object/collection.rb +0 -23
  39. data/lib/schlepp/sinks/fs/table_object/writer.rb +0 -33
  40. data/lib/schlepp/sinks/fs/table_object.rb +0 -31
  41. data/lib/schlepp/sinks/fs.rb +0 -2
  42. data/lib/schlepp/table_object/chunker.rb +0 -33
  43. data/test/unit/schlepp/sink/data_object_test.rb +0 -0
  44. data/test/unit/schlepp/sink/data_stream_test.rb +0 -0
  45. data/test/unit/schlepp/sink/loader_test.rb +0 -29
  46. data/test/unit/schlepp/sink/sequencer_test.rb +0 -0
  47. data/test/unit/schlepp/table_object/chunker_test.rb +0 -0
  48. /data/test/unit/schlepp/{sink/chunker_test.rb → table_object/writer/factory_test.rb} +0 -0
@@ -0,0 +1,104 @@
1
+ require File.expand_path('../../../test_helper', __FILE__)
2
+
3
+ require 'schlepp/sink/table_object/carosel'
4
+
5
+ class Schlepp::Sink::TableObject::CaroselTest < Test::Unit::TestCase
6
+ include TestHelper
7
+
8
+ setup do
9
+ @mock_factory = mock
10
+
11
+ @mock_table_object = mock
12
+
13
+ @mock_filters = 5.times.map do |wf|
14
+ mock
15
+ end
16
+
17
+ @mock_table_object_factory = mock
18
+ Schlepp::Sink::TableObject::Factory.expects(:new).with(@mock_factory, @mock_filters).returns(@mock_table_object_factory)
19
+
20
+ @mock_table_object_factory.expects(:new).returns(@mock_table_object)
21
+
22
+ mock_table_object_writer_factory = mock
23
+ Schlepp::Sink::TableObject::Writer::Factory.expects(:new).with(@mock_factory, @mock_filters, @mock_table_object).returns(mock_table_object_writer_factory)
24
+
25
+ @mock_writer = mock
26
+ mock_table_object_writer_factory.expects(:new).returns(@mock_writer)
27
+
28
+ @carosel = Schlepp::Sink::TableObject::Carosel.new(@mock_factory, @mock_filters)
29
+ end
30
+
31
+ test "#write" do
32
+ mock_data = mock
33
+
34
+ @mock_filters.each do |f|
35
+ f.expects(:should_rotate?).returns(false)
36
+ end
37
+
38
+ @mock_writer.expects(:write).with(mock_data)
39
+
40
+ @carosel.write(mock_data)
41
+ end
42
+
43
+ test "#write with rotation" do
44
+ mock_data = mock
45
+
46
+ rotation_state = states('rotation').starts_as('unrotated')
47
+
48
+ @mock_filters.first.expects(:should_rotate?).
49
+ when(rotation_state.is('unrotated')).
50
+ then(rotation_state.is('rotated')).
51
+ returns(true)
52
+
53
+
54
+ @mock_filters.each do |f|
55
+ f.expects(:should_rotate?).when(rotation_state.is('rotated')).returns(false)
56
+ end
57
+
58
+ @mock_writer.expects(:finalize)
59
+
60
+ mock_second_table_object = mock
61
+ @mock_table_object_factory.expects(:new).returns(mock_second_table_object)
62
+
63
+ mock_table_object_writer_factory = mock
64
+ Schlepp::Sink::TableObject::Writer::Factory.expects(:new).with(@mock_factory, @mock_filters, mock_second_table_object).returns(mock_table_object_writer_factory)
65
+
66
+ mock_replacement_writer = mock
67
+ mock_table_object_writer_factory.expects(:new).returns(mock_replacement_writer)
68
+
69
+ mock_replacement_writer.expects(:write).with(mock_data)
70
+
71
+ @carosel.write(mock_data)
72
+ end
73
+ test "#write with endless rotation should fail" do
74
+ mock_data = mock
75
+
76
+ rotation_state = states('rotation').starts_as('unrotated')
77
+
78
+ @mock_filters.first.expects(:should_rotate?).
79
+ when(rotation_state.is('unrotated')).
80
+ then(rotation_state.is('rotated')).
81
+ returns(true)
82
+
83
+ @mock_filters.first.expects(:should_rotate?).
84
+ when(rotation_state.is('rotated')).
85
+ returns(true)
86
+
87
+
88
+ @mock_writer.expects(:finalize)
89
+
90
+ mock_second_table_object = mock
91
+ @mock_table_object_factory.expects(:new).returns(mock_second_table_object)
92
+
93
+ mock_table_object_writer_factory = mock
94
+ Schlepp::Sink::TableObject::Writer::Factory.expects(:new).with(@mock_factory, @mock_filters, mock_second_table_object).returns(mock_table_object_writer_factory)
95
+
96
+ mock_replacement_writer = mock
97
+ mock_table_object_writer_factory.expects(:new).returns(mock_replacement_writer)
98
+
99
+ assert_raises do
100
+ @carosel.write(mock_data)
101
+ end
102
+ end
103
+ end
104
+
@@ -0,0 +1,55 @@
1
+ require File.expand_path('../../../test_helper', __FILE__)
2
+
3
+ require 'schlepp/sink/table_object/factory'
4
+
5
+ class Schlepp::Sink::TableObject::FactoryTest < Test::Unit::TestCase
6
+ include TestHelper
7
+ setup do
8
+ @mock_factory = mock
9
+
10
+ url = URI("file:///tmp/example")
11
+
12
+ @mock_factory.expects(:url).returns(url)
13
+
14
+ mock_model = mock
15
+
16
+ @mock_factory.expects(:model).returns(mock_model)
17
+
18
+
19
+ @mock_filters = 5.times.map do |wf|
20
+ mock_filter = mock
21
+ mock_filter.expects(:rotate)
22
+
23
+ mock_filter
24
+ end
25
+
26
+ @mock_filters.each_with_index do |f, idx|
27
+ f.expects(:extension).returns(idx)
28
+ end
29
+
30
+ @mock_table_object = mock
31
+ expected_url = URI("file:///tmp/example.0.1.2.3.4")
32
+ Hydrogen::TableObject.expects(:new).with(mock_model, expected_url).returns(@mock_table_object)
33
+
34
+ @factory = Schlepp::Sink::TableObject::Factory.new(@mock_factory, @mock_filters)
35
+ end
36
+ test "#new" do
37
+ res = @factory.new
38
+
39
+ assert_equal res, @mock_table_object
40
+ end
41
+
42
+ test "#writer" do
43
+
44
+ mock_table_object_writer_factory = mock
45
+ Schlepp::Sink::TableObject::Writer::Factory.expects(:new).with(@mock_factory, @mock_filters, @mock_table_object).returns(mock_table_object_writer_factory)
46
+
47
+ mock_writer = mock
48
+ mock_table_object_writer_factory.expects(:new).returns(mock_writer)
49
+
50
+
51
+ res = @factory.writer
52
+
53
+ assert_equal res, mock_writer
54
+ end
55
+ end
@@ -5,8 +5,6 @@ require 'schlepp'
5
5
  class SchleppTest < Test::Unit::TestCase
6
6
  include TestHelper
7
7
  test '.schlepp' do
8
- table_object = Hydrogen::TableObject.new(@mock_model)
9
-
10
8
  mock_source = mock
11
9
 
12
10
  mock_source.expects(:each).multiple_yields("foo", "bar", "baz")
@@ -17,8 +15,11 @@ class SchleppTest < Test::Unit::TestCase
17
15
  mock_sink.expects(:write).with("bar")
18
16
  mock_sink.expects(:write).with("baz")
19
17
 
20
- mock_sink.expects(:finalize)
18
+ mock_parts = mock
19
+ mock_sink.expects(:finalize).returns(mock_parts)
20
+
21
+ parts = Schlepp.schlepp(mock_source, mock_sink)
21
22
 
22
- Schlepp.schlepp(mock_source, mock_sink)
23
+ assert_equal parts, mock_parts
23
24
  end
24
25
  end
@@ -1,10 +1,17 @@
1
- require 'coveralls'
2
- Coveralls.wear!
3
-
4
- if ENV["ENABLE_SIMPLE_COV"]
1
+ if ENV["COVERAGE"]
2
+ require 'coveralls'
3
+ require 'codeclimate-test-reporter'
5
4
  require 'simplecov'
6
- require File.expand_path('../../simplecov_helper', __FILE__)
7
- SimpleCov.start 'pocketchange'
5
+ SimpleCov.start do
6
+ add_group "Lib", "lib"
7
+ add_filter "/test/"
8
+ command_name "Unit Tests"
9
+ formatter SimpleCov::Formatter::MultiFormatter[
10
+ SimpleCov::Formatter::HTMLFormatter,
11
+ Coveralls::SimpleCov::Formatter,
12
+ CodeClimate::TestReporter::Formatter
13
+ ]
14
+ end
8
15
  end
9
16
 
10
17
  require 'test/unit'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schlepp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre.alpha.1
4
+ version: 0.0.1.pre.alpha.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ed Carrel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-21 00:00:00.000000000 Z
11
+ date: 2014-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -111,8 +111,7 @@ dependencies:
111
111
  description: An extensible chunking file transferer
112
112
  email:
113
113
  - edward@carrel.org
114
- executables:
115
- - schlepp.rb
114
+ executables: []
116
115
  extensions: []
117
116
  extra_rdoc_files: []
118
117
  files:
@@ -123,34 +122,34 @@ files:
123
122
  - LICENSE
124
123
  - README.md
125
124
  - Rakefile
126
- - bin/schlepp.rb
127
125
  - lib/schlepp.rb
128
126
  - lib/schlepp/env.rb
129
127
  - lib/schlepp/sink.rb
130
- - lib/schlepp/sink/chunker.rb
131
- - lib/schlepp/sink/data_object.rb
132
- - lib/schlepp/sink/data_stream.rb
133
- - lib/schlepp/sink/loader.rb
134
- - lib/schlepp/sink/sequencer.rb
135
- - lib/schlepp/sinks/fs.rb
136
- - lib/schlepp/sinks/fs/chunker.rb
137
- - lib/schlepp/sinks/fs/sequencer.rb
138
- - lib/schlepp/sinks/fs/table_object.rb
139
- - lib/schlepp/sinks/fs/table_object/collection.rb
140
- - lib/schlepp/sinks/fs/table_object/writer.rb
128
+ - lib/schlepp/sink/filter.rb
129
+ - lib/schlepp/sink/filter/chunker.rb
130
+ - lib/schlepp/sink/filter/compressor.rb
131
+ - lib/schlepp/sink/filter/compressor/stream.rb
132
+ - lib/schlepp/sink/filter/compressor/writer.rb
133
+ - lib/schlepp/sink/filter/formatter/csv.rb
134
+ - lib/schlepp/sink/filter/formatter/csv/writer.rb
135
+ - lib/schlepp/sink/table_object/carosel.rb
136
+ - lib/schlepp/sink/table_object/factory.rb
137
+ - lib/schlepp/sink/table_object/filter/observer.rb
138
+ - lib/schlepp/sink/table_object/filter/writer.rb
139
+ - lib/schlepp/sink/table_object/filters.rb
140
+ - lib/schlepp/sink/table_object/stream.rb
141
+ - lib/schlepp/sink/table_object/writer/factory.rb
141
142
  - lib/schlepp/source.rb
142
143
  - lib/schlepp/source/csv.rb
143
- - lib/schlepp/table_object/chunker.rb
144
144
  - lib/schlepp/version.rb
145
145
  - schlepp.gemspec
146
+ - test/integration/mock/sink.rb
147
+ - test/integration/mock/source.rb
146
148
  - test/integration/schlepp_test.rb
147
149
  - test/integration/test_helper.rb
148
- - test/unit/schlepp/sink/chunker_test.rb
149
- - test/unit/schlepp/sink/data_object_test.rb
150
- - test/unit/schlepp/sink/data_stream_test.rb
151
- - test/unit/schlepp/sink/loader_test.rb
152
- - test/unit/schlepp/sink/sequencer_test.rb
153
- - test/unit/schlepp/table_object/chunker_test.rb
150
+ - test/unit/schlepp/table_object/carosel_test.rb
151
+ - test/unit/schlepp/table_object/factory_test.rb
152
+ - test/unit/schlepp/table_object/writer/factory_test.rb
154
153
  - test/unit/schlepp_test.rb
155
154
  - test/unit/test_helper.rb
156
155
  homepage: https://github.com/azanar/schlepp
@@ -178,13 +177,12 @@ signing_key:
178
177
  specification_version: 4
179
178
  summary: An extensible chunking file transferer
180
179
  test_files:
180
+ - test/integration/mock/sink.rb
181
+ - test/integration/mock/source.rb
181
182
  - test/integration/schlepp_test.rb
182
183
  - test/integration/test_helper.rb
183
- - test/unit/schlepp/sink/chunker_test.rb
184
- - test/unit/schlepp/sink/data_object_test.rb
185
- - test/unit/schlepp/sink/data_stream_test.rb
186
- - test/unit/schlepp/sink/loader_test.rb
187
- - test/unit/schlepp/sink/sequencer_test.rb
188
- - test/unit/schlepp/table_object/chunker_test.rb
184
+ - test/unit/schlepp/table_object/carosel_test.rb
185
+ - test/unit/schlepp/table_object/factory_test.rb
186
+ - test/unit/schlepp/table_object/writer/factory_test.rb
189
187
  - test/unit/schlepp_test.rb
190
188
  - test/unit/test_helper.rb
data/bin/schlepp.rb DELETED
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $LOAD_PATH.push(File.dirname(__FILE__) + '/../lib')
3
-
4
- require 'hydrogen'
5
- require 'schlepp/sinks/fs'
6
-
7
- config = {
8
- :table_name => 'foo',
9
- :source => {:file => 'data.csv'},
10
- :columns => %w{foo bar baz}
11
- }
12
-
13
- AWS.config(
14
- access_key_id: 'ACCESS_KEY_ID',
15
- secret_access_key: 'SECRET_ACCESS_KEY',
16
- stub_requests: Schlepp.env.test?,
17
- )
18
-
19
- model = Hydrogen::Model.new(config)
20
-
21
- to = Hydrogen::TableObject.new(model)
22
-
23
- source = Schlepp::Source::CSV.new(File.new('data.csv','r'))
24
-
25
- l = Schlepp::Sink::Fs::Sequencer.new(to, :chunk_size => 40000)
26
-
27
- res = Schlepp.schlepp(source, l)
28
-
29
- puts res.inspect
@@ -1,30 +0,0 @@
1
- require 'schlepp/sink/loader'
2
- require 'schlepp/table_object/chunker'
3
-
4
- module Schlepp
5
- module Sink
6
- class Chunker
7
- def initialize(table_object, opts = {})
8
- @table_object = table_object
9
- end
10
-
11
- def sequence
12
- chunker.sequence
13
- end
14
-
15
- def parts
16
- chunker.parts
17
- end
18
-
19
- def next
20
- chunker.next
21
- end
22
-
23
- private
24
-
25
- def chunker
26
- @chunker ||= Schlepp::TableObject::Chunker.new(@table_object)
27
- end
28
- end
29
- end
30
- end
@@ -1,26 +0,0 @@
1
- require 'schlepp/sink/data_stream'
2
-
3
- module Schlepp
4
- module Sink
5
- class DataObject
6
- def initialize(table_object)
7
- @stream = DataStream.new
8
- @table_object = table_object
9
- end
10
-
11
- def write(data)
12
- @stream.write(data)
13
- end
14
-
15
- def length
16
- @stream.length
17
- end
18
-
19
- def finalize
20
- @stream.finalize
21
-
22
- @table_object.write(@stream.to_s)
23
- end
24
- end
25
- end
26
- end
@@ -1,39 +0,0 @@
1
- require 'zlib'
2
-
3
- module Schlepp
4
- module Sink
5
- class DataStream
6
- def initialize
7
- @buffer = StringIO.new("", "rb+")
8
- @compressor = Zlib::GzipWriter.new(@buffer)
9
- @dead = false
10
- end
11
-
12
- def write(data)
13
- if @dead
14
- raise "Stream has been dumped. No more writing permitted."
15
- end
16
- @compressor << data
17
- end
18
-
19
- def length
20
- if @dead
21
- raise "Stream has been dumped. No more writing permitted."
22
- end
23
- @compressor.pos
24
- end
25
-
26
- def finalize
27
- if !@dead
28
- @compressor.close
29
- @dead = true
30
- end
31
- end
32
-
33
- def to_s
34
- finalize
35
- @buffer.string
36
- end
37
- end
38
- end
39
- end
@@ -1,35 +0,0 @@
1
- require 'schlepp/sink/data_object'
2
-
3
- module Schlepp
4
- module Sink
5
- class Loader
6
- def initialize(writer, opts = {})
7
- @writer = writer
8
-
9
- @file = DataObject.new(writer)
10
- end
11
-
12
- def name
13
- @writer.name
14
- end
15
-
16
- def path
17
- @writer.path
18
- end
19
-
20
- def write(rows)
21
- Array(rows).each do |row|
22
- @file.write(row)
23
- end
24
- end
25
-
26
- def written
27
- @file.length
28
- end
29
-
30
- def finalize
31
- @file.finalize
32
- end
33
- end
34
- end
35
- end
@@ -1,42 +0,0 @@
1
- module Schlepp
2
- module Sink
3
- module Sequencer
4
- DEFAULT_CHUNK_SIZE = 50 * 1024 * 1024 # 50 MB
5
- def initialize(table_object, opts = {})
6
- @table_object = table_object
7
- @chunker = chunker.new(table_object)
8
- @chunk_size = opts[:chunk_size] || DEFAULT_CHUNK_SIZE
9
- end
10
-
11
- def write(rows)
12
- rows.each do |row|
13
- if loader.written + row.length > @chunk_size
14
- rotate
15
- end
16
- loader.write(row)
17
- end
18
- end
19
-
20
- def parts
21
- @chunker.parts
22
- end
23
-
24
- def finalize
25
- loader.finalize
26
- end
27
-
28
- private
29
-
30
- def loader
31
- @loader ||= rotate
32
- end
33
-
34
- def rotate
35
- if @loader
36
- @loader.finalize
37
- end
38
- @loader = @chunker.next
39
- end
40
- end
41
- end
42
- end
@@ -1,38 +0,0 @@
1
- require 'schlepp/sink/chunker'
2
-
3
- require 'schlepp/sinks/fs/table_object'
4
- require 'schlepp/sinks/fs/table_object/writer'
5
-
6
- module Schlepp
7
- module Sink
8
- module Fs
9
- class Chunker
10
- def initialize(table_object, opts = {})
11
- @table_object = table_object
12
- end
13
-
14
- def sequence
15
- chunker.sequence
16
- end
17
-
18
- def parts
19
- chunker.parts
20
- end
21
-
22
- def next
23
- part = chunker.next
24
-
25
- ts = Schlepp::Sink::Fs::TableObject.new(part)
26
-
27
- Schlepp::Sink::Loader.new(ts)
28
- end
29
-
30
- private
31
-
32
- def chunker
33
- @chunker ||= Schlepp::Sink::Chunker.new(@table_object)
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,21 +0,0 @@
1
- require 'schlepp/sink/sequencer'
2
- require 'schlepp/sinks/fs/chunker'
3
- require 'schlepp/sinks/fs/table_object/collection'
4
-
5
- module Schlepp
6
- module Sink
7
- module Fs
8
- class Sequencer
9
- include Schlepp::Sink::Sequencer
10
-
11
- def collection
12
- Schlepp::Sink::Fs::TableObject::Collection
13
- end
14
-
15
- def chunker
16
- Schlepp::Sink::Fs::Chunker
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,23 +0,0 @@
1
- require 'hydrogen/table_object/collection'
2
-
3
- module Schlepp
4
- module Sink
5
- module Fs
6
- class TableObject
7
- class Collection
8
- include Hydrogen::TableObject::Collection
9
-
10
- def url
11
- "file:///#{path}"
12
- end
13
-
14
- def urls
15
- parts.map do |p|
16
- TableObject.new(p).url
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,33 +0,0 @@
1
- module Schlepp
2
- module Sink
3
- module Fs
4
- class TableObject
5
- class Writer
6
- def initialize(table_object, opts = {})
7
- @table_object = table_object
8
- @written = 0
9
- end
10
-
11
- def file
12
- @file ||= File.new("/tmp/#{@table_object.path}", 'w')
13
- end
14
-
15
- def write(rows)
16
- Array(rows).each do |row|
17
- @written += row.length
18
- file.write(row)
19
- end
20
- end
21
-
22
- def written
23
- @written
24
- end
25
-
26
- def finalize
27
- @file.close
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,31 +0,0 @@
1
- module Schlepp
2
- module Sink
3
- module Fs
4
- class TableObject
5
- def initialize(table_object, opts = {})
6
- @table_object = table_object
7
- @written = 0
8
- end
9
-
10
- def write(rows)
11
- Array(rows).each do |row|
12
- @written += row.length
13
- file.write(row)
14
- end
15
- end
16
-
17
- def written
18
- @written
19
- end
20
-
21
- def finalize
22
- @file.close
23
- end
24
-
25
- def file
26
- @file ||= File.new("/tmp/#{@table_object.path}", 'w')
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,2 +0,0 @@
1
- require 'schlepp/sinks/fs/sequencer'
2
- require 'schlepp/sinks/fs/chunker'