metacrunch 2.2.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -1
- data/Gemfile +11 -13
- data/License.txt +1 -1
- data/Readme.md +139 -2
- data/bin/console +9 -6
- data/exe/metacrunch +1 -2
- data/lib/metacrunch/cli.rb +62 -14
- data/lib/metacrunch/db/reader.rb +27 -0
- data/lib/metacrunch/db/writer.rb +23 -0
- data/lib/metacrunch/db.rb +8 -0
- data/lib/metacrunch/fs/entry.rb +17 -0
- data/lib/metacrunch/{file_reader.rb → fs/reader.rb} +9 -10
- data/lib/metacrunch/fs.rb +6 -0
- data/lib/metacrunch/job/buffer.rb +26 -0
- data/lib/metacrunch/job/dsl/option_support.rb +102 -0
- data/lib/metacrunch/job/dsl.rb +42 -0
- data/lib/metacrunch/job.rb +149 -0
- data/lib/metacrunch/test_utils/dummy_callable.rb +14 -0
- data/lib/metacrunch/test_utils/dummy_destination.rb +21 -0
- data/lib/metacrunch/test_utils/dummy_source.rb +22 -0
- data/lib/metacrunch/test_utils.rb +7 -0
- data/lib/metacrunch/version.rb +1 -1
- data/lib/metacrunch.rb +14 -27
- data/metacrunch.gemspec +5 -10
- metadata +24 -144
- data/lib/metacrunch/cli/base.rb +0 -29
- data/lib/metacrunch/cli/command_definition.rb +0 -41
- data/lib/metacrunch/cli/command_registry.rb +0 -17
- data/lib/metacrunch/cli/main.rb +0 -16
- data/lib/metacrunch/command.rb +0 -27
- data/lib/metacrunch/file/reader/file_system_fetcher.rb +0 -21
- data/lib/metacrunch/file/reader/plain_file_reader.rb +0 -33
- data/lib/metacrunch/file/reader/scp_fetcher.rb +0 -56
- data/lib/metacrunch/file/reader/tar_file_reader.rb +0 -37
- data/lib/metacrunch/file/reader/zip_file_reader.rb +0 -30
- data/lib/metacrunch/file/reader.rb +0 -72
- data/lib/metacrunch/file/writer/plain_file_writer.rb +0 -19
- data/lib/metacrunch/file/writer/tar_file_writer.rb +0 -26
- data/lib/metacrunch/file/writer/zip_file_writer.rb +0 -29
- data/lib/metacrunch/file/writer.rb +0 -26
- data/lib/metacrunch/file.rb +0 -24
- data/lib/metacrunch/file_reader_entry.rb +0 -21
- data/lib/metacrunch/file_writer.rb +0 -40
- data/lib/metacrunch/hash.rb +0 -51
- data/lib/metacrunch/parallel.rb +0 -69
- data/lib/metacrunch/processor.rb +0 -10
- data/lib/metacrunch/snr/field.rb +0 -31
- data/lib/metacrunch/snr/section.rb +0 -74
- data/lib/metacrunch/snr.rb +0 -117
- data/lib/metacrunch/tar_writer.rb +0 -26
- data/lib/metacrunch/transformator/transformation/step.rb +0 -45
- data/lib/metacrunch/transformator/transformation.rb +0 -48
- data/lib/metacrunch/transformator.rb +0 -5
- data/lib/metacrunch/transformer/helper.rb +0 -29
- data/lib/metacrunch/transformer/step.rb +0 -37
- data/lib/metacrunch/transformer.rb +0 -38
@@ -0,0 +1,149 @@
|
|
1
|
+
module Metacrunch
|
2
|
+
class Job
|
3
|
+
require_relative "job/dsl"
|
4
|
+
require_relative "job/buffer"
|
5
|
+
|
6
|
+
attr_reader :builder, :args
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def define(file_content = nil, filename: nil, args: nil, &block)
|
10
|
+
self.new(file_content, filename: filename, args: args, &block)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(file_content = nil, filename: nil, args: nil, &block)
|
15
|
+
@builder = Dsl.new(self)
|
16
|
+
@args = args
|
17
|
+
|
18
|
+
if file_content
|
19
|
+
@builder.instance_eval(file_content, filename || "")
|
20
|
+
elsif block_given?
|
21
|
+
@builder.instance_eval(&block)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def sources
|
26
|
+
@sources ||= []
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_source(source)
|
30
|
+
ensure_source!(source)
|
31
|
+
sources << source
|
32
|
+
end
|
33
|
+
|
34
|
+
def destinations
|
35
|
+
@destinations ||= []
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_destination(destination)
|
39
|
+
ensure_destination!(destination)
|
40
|
+
destinations << destination
|
41
|
+
end
|
42
|
+
|
43
|
+
def pre_processes
|
44
|
+
@pre_processes ||= []
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_pre_process(callable = nil, &block)
|
48
|
+
add_callable_or_block(pre_processes, callable, &block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def post_processes
|
52
|
+
@post_processes ||= []
|
53
|
+
end
|
54
|
+
|
55
|
+
def add_post_process(callable = nil, &block)
|
56
|
+
add_callable_or_block(post_processes, callable, &block)
|
57
|
+
end
|
58
|
+
|
59
|
+
def transformations
|
60
|
+
@transformations ||= []
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_transformation(callable = nil, &block)
|
64
|
+
add_callable_or_block(transformations, callable, &block)
|
65
|
+
end
|
66
|
+
|
67
|
+
def add_transformation_buffer(size)
|
68
|
+
transformations << Metacrunch::Job::Buffer.new(size)
|
69
|
+
end
|
70
|
+
|
71
|
+
def run
|
72
|
+
run_pre_processes
|
73
|
+
run_transformations
|
74
|
+
run_post_processes
|
75
|
+
self
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def add_callable_or_block(array, callable, &block)
|
81
|
+
if block_given?
|
82
|
+
array << block
|
83
|
+
elsif callable
|
84
|
+
ensure_callable!(callable)
|
85
|
+
array << callable
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def ensure_callable!(object)
|
90
|
+
raise ArgumentError, "#{object} does't respond to #call." unless object.respond_to?(:call)
|
91
|
+
end
|
92
|
+
|
93
|
+
def ensure_source!(object)
|
94
|
+
raise ArgumentError, "#{object} does't respond to #each." unless object.respond_to?(:each)
|
95
|
+
end
|
96
|
+
|
97
|
+
def ensure_destination!(object)
|
98
|
+
raise ArgumentError, "#{object} does't respond to #write." unless object.respond_to?(:write)
|
99
|
+
raise ArgumentError, "#{object} does't respond to #close." unless object.respond_to?(:close)
|
100
|
+
end
|
101
|
+
|
102
|
+
def run_pre_processes
|
103
|
+
pre_processes.each(&:call)
|
104
|
+
end
|
105
|
+
|
106
|
+
def run_post_processes
|
107
|
+
post_processes.each(&:call)
|
108
|
+
end
|
109
|
+
|
110
|
+
def run_transformations
|
111
|
+
sources.each do |source|
|
112
|
+
# sources are expected to respond to `each`
|
113
|
+
source.each do |row|
|
114
|
+
_run_transformations(row)
|
115
|
+
end
|
116
|
+
|
117
|
+
# Run all transformations a last time to flush possible buffers
|
118
|
+
_run_transformations(nil, flush_buffers: true)
|
119
|
+
end
|
120
|
+
|
121
|
+
# destination implementations are expected to respond to `close`
|
122
|
+
destinations.each(&:close)
|
123
|
+
end
|
124
|
+
|
125
|
+
def _run_transformations(row, flush_buffers: false)
|
126
|
+
transformations.each do |transformation|
|
127
|
+
row = if transformation.is_a?(Buffer)
|
128
|
+
if flush_buffers
|
129
|
+
transformation.flush
|
130
|
+
else
|
131
|
+
transformation.buffer(row)
|
132
|
+
end
|
133
|
+
else
|
134
|
+
transformation.call(row) if row
|
135
|
+
end
|
136
|
+
|
137
|
+
break unless row
|
138
|
+
end
|
139
|
+
|
140
|
+
if row
|
141
|
+
destinations.each do |destination|
|
142
|
+
# destinations are expected to respond to `write(row)`
|
143
|
+
destination.write(row)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative "../test_utils"
|
2
|
+
|
3
|
+
module Metacrunch
|
4
|
+
class TestUtils::DummyDestination
|
5
|
+
|
6
|
+
attr_reader :data
|
7
|
+
|
8
|
+
def write(row)
|
9
|
+
@write_called = true
|
10
|
+
(@data ||= []) << row
|
11
|
+
end
|
12
|
+
|
13
|
+
def close
|
14
|
+
@close_called = true
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class TestUtils::InvalidDummyDestination
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative "../test_utils"
|
2
|
+
|
3
|
+
module Metacrunch
|
4
|
+
class TestUtils::DummySource
|
5
|
+
|
6
|
+
def initialize(count_until: 10)
|
7
|
+
@count_until = count_until
|
8
|
+
end
|
9
|
+
|
10
|
+
def each
|
11
|
+
@each_called = true
|
12
|
+
|
13
|
+
(1..@count_until).each do |number|
|
14
|
+
yield({number: number})
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
class TestUtils::InvalidDummySource
|
21
|
+
end
|
22
|
+
end
|
data/lib/metacrunch/version.rb
CHANGED
data/lib/metacrunch.rb
CHANGED
@@ -1,32 +1,19 @@
|
|
1
|
-
require "active_support"
|
2
|
-
require "active_support/core_ext"
|
3
|
-
require "active_support/builder"
|
4
|
-
require "parallel"
|
5
1
|
require "rubygems"
|
6
|
-
require "
|
7
|
-
require "thor"
|
8
|
-
require "ox"
|
2
|
+
require "bundler"
|
9
3
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
require_relative "./metacrunch/file"
|
15
|
-
require_relative "./metacrunch/file_reader"
|
16
|
-
require_relative "./metacrunch/file_reader_entry"
|
17
|
-
require_relative "./metacrunch/file_writer"
|
18
|
-
require_relative "./metacrunch/hash"
|
19
|
-
require_relative "./metacrunch/parallel"
|
20
|
-
require_relative "./metacrunch/processor"
|
21
|
-
require_relative "./metacrunch/snr"
|
22
|
-
require_relative "./metacrunch/tar_writer"
|
23
|
-
require_relative "./metacrunch/transformator"
|
24
|
-
require_relative "./metacrunch/transformer"
|
4
|
+
require "active_support"
|
5
|
+
require "active_support/core_ext"
|
6
|
+
require "commander"
|
7
|
+
require "sequel"
|
25
8
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
9
|
+
begin
|
10
|
+
require "pry"
|
11
|
+
rescue LoadError ; end
|
31
12
|
|
13
|
+
module Metacrunch
|
14
|
+
require_relative "metacrunch/version"
|
15
|
+
require_relative "metacrunch/cli"
|
16
|
+
require_relative "metacrunch/job"
|
17
|
+
require_relative "metacrunch/fs"
|
18
|
+
require_relative "metacrunch/db"
|
32
19
|
end
|
data/metacrunch.gemspec
CHANGED
@@ -7,7 +7,8 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "metacrunch"
|
8
8
|
spec.version = Metacrunch::VERSION
|
9
9
|
spec.authors = ["René Sprotte", "Michael Sievers", "Marcel Otto"]
|
10
|
-
spec.
|
10
|
+
spec.email = "r.sprotte@ub.uni-paderborn.de"
|
11
|
+
spec.summary = %q{Data processing and ETL toolkit for Ruby}
|
11
12
|
spec.homepage = "http://github.com/ubpb/metacrunch"
|
12
13
|
spec.license = "MIT"
|
13
14
|
|
@@ -16,13 +17,7 @@ Gem::Specification.new do |spec|
|
|
16
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
17
18
|
spec.require_paths = ["lib"]
|
18
19
|
|
19
|
-
spec.add_dependency "activesupport", "~> 4.2"
|
20
|
-
spec.add_dependency "
|
21
|
-
spec.add_dependency "
|
22
|
-
spec.add_dependency "net-scp", "~> 1.2"
|
23
|
-
spec.add_dependency "net-ssh", "~> 2.9"
|
24
|
-
spec.add_dependency "parallel", "~> 1.6", ">= 1.6.0"
|
25
|
-
spec.add_dependency "rubyzip", ">= 1.0.0"
|
26
|
-
spec.add_dependency "thor", "~> 0.19"
|
27
|
-
spec.add_dependency "ox", "~> 2.1"
|
20
|
+
spec.add_dependency "activesupport", "~> 4.2"
|
21
|
+
spec.add_dependency "commander", "~> 4.4"
|
22
|
+
spec.add_dependency "sequel", "~> 4.33"
|
28
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metacrunch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- René Sprotte
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-05-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -19,9 +19,6 @@ dependencies:
|
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '4.2'
|
22
|
-
- - ">="
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version: 4.2.0
|
25
22
|
type: :runtime
|
26
23
|
prerelease: false
|
27
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,135 +26,36 @@ dependencies:
|
|
29
26
|
- - "~>"
|
30
27
|
- !ruby/object:Gem::Version
|
31
28
|
version: '4.2'
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 4.2.0
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: builder
|
37
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - "~>"
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '3.2'
|
42
|
-
- - ">="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 3.2.2
|
45
|
-
type: :runtime
|
46
|
-
prerelease: false
|
47
|
-
version_requirements: !ruby/object:Gem::Requirement
|
48
|
-
requirements:
|
49
|
-
- - "~>"
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: '3.2'
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 3.2.2
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: highline
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '1.7'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '1.7'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: net-scp
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.2'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.2'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: net-ssh
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '2.9'
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '2.9'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: parallel
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '1.6'
|
104
|
-
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
version: 1.6.0
|
107
|
-
type: :runtime
|
108
|
-
prerelease: false
|
109
|
-
version_requirements: !ruby/object:Gem::Requirement
|
110
|
-
requirements:
|
111
|
-
- - "~>"
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: '1.6'
|
114
|
-
- - ">="
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: 1.6.0
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: rubyzip
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
120
|
-
requirements:
|
121
|
-
- - ">="
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: 1.0.0
|
124
|
-
type: :runtime
|
125
|
-
prerelease: false
|
126
|
-
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
requirements:
|
128
|
-
- - ">="
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: 1.0.0
|
131
29
|
- !ruby/object:Gem::Dependency
|
132
|
-
name:
|
30
|
+
name: commander
|
133
31
|
requirement: !ruby/object:Gem::Requirement
|
134
32
|
requirements:
|
135
33
|
- - "~>"
|
136
34
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
35
|
+
version: '4.4'
|
138
36
|
type: :runtime
|
139
37
|
prerelease: false
|
140
38
|
version_requirements: !ruby/object:Gem::Requirement
|
141
39
|
requirements:
|
142
40
|
- - "~>"
|
143
41
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
42
|
+
version: '4.4'
|
145
43
|
- !ruby/object:Gem::Dependency
|
146
|
-
name:
|
44
|
+
name: sequel
|
147
45
|
requirement: !ruby/object:Gem::Requirement
|
148
46
|
requirements:
|
149
47
|
- - "~>"
|
150
48
|
- !ruby/object:Gem::Version
|
151
|
-
version: '
|
49
|
+
version: '4.33'
|
152
50
|
type: :runtime
|
153
51
|
prerelease: false
|
154
52
|
version_requirements: !ruby/object:Gem::Requirement
|
155
53
|
requirements:
|
156
54
|
- - "~>"
|
157
55
|
- !ruby/object:Gem::Version
|
158
|
-
version: '
|
56
|
+
version: '4.33'
|
159
57
|
description:
|
160
|
-
email:
|
58
|
+
email: r.sprotte@ub.uni-paderborn.de
|
161
59
|
executables:
|
162
60
|
- metacrunch
|
163
61
|
extensions: []
|
@@ -174,38 +72,20 @@ files:
|
|
174
72
|
- exe/metacrunch
|
175
73
|
- lib/metacrunch.rb
|
176
74
|
- lib/metacrunch/cli.rb
|
177
|
-
- lib/metacrunch/
|
178
|
-
- lib/metacrunch/
|
179
|
-
- lib/metacrunch/
|
180
|
-
- lib/metacrunch/
|
181
|
-
- lib/metacrunch/
|
182
|
-
- lib/metacrunch/
|
183
|
-
- lib/metacrunch/
|
184
|
-
- lib/metacrunch/
|
185
|
-
- lib/metacrunch/
|
186
|
-
- lib/metacrunch/
|
187
|
-
- lib/metacrunch/
|
188
|
-
- lib/metacrunch/
|
189
|
-
- lib/metacrunch/
|
190
|
-
- lib/metacrunch/
|
191
|
-
- lib/metacrunch/file/writer/tar_file_writer.rb
|
192
|
-
- lib/metacrunch/file/writer/zip_file_writer.rb
|
193
|
-
- lib/metacrunch/file_reader.rb
|
194
|
-
- lib/metacrunch/file_reader_entry.rb
|
195
|
-
- lib/metacrunch/file_writer.rb
|
196
|
-
- lib/metacrunch/hash.rb
|
197
|
-
- lib/metacrunch/parallel.rb
|
198
|
-
- lib/metacrunch/processor.rb
|
199
|
-
- lib/metacrunch/snr.rb
|
200
|
-
- lib/metacrunch/snr/field.rb
|
201
|
-
- lib/metacrunch/snr/section.rb
|
202
|
-
- lib/metacrunch/tar_writer.rb
|
203
|
-
- lib/metacrunch/transformator.rb
|
204
|
-
- lib/metacrunch/transformator/transformation.rb
|
205
|
-
- lib/metacrunch/transformator/transformation/step.rb
|
206
|
-
- lib/metacrunch/transformer.rb
|
207
|
-
- lib/metacrunch/transformer/helper.rb
|
208
|
-
- lib/metacrunch/transformer/step.rb
|
75
|
+
- lib/metacrunch/db.rb
|
76
|
+
- lib/metacrunch/db/reader.rb
|
77
|
+
- lib/metacrunch/db/writer.rb
|
78
|
+
- lib/metacrunch/fs.rb
|
79
|
+
- lib/metacrunch/fs/entry.rb
|
80
|
+
- lib/metacrunch/fs/reader.rb
|
81
|
+
- lib/metacrunch/job.rb
|
82
|
+
- lib/metacrunch/job/buffer.rb
|
83
|
+
- lib/metacrunch/job/dsl.rb
|
84
|
+
- lib/metacrunch/job/dsl/option_support.rb
|
85
|
+
- lib/metacrunch/test_utils.rb
|
86
|
+
- lib/metacrunch/test_utils/dummy_callable.rb
|
87
|
+
- lib/metacrunch/test_utils/dummy_destination.rb
|
88
|
+
- lib/metacrunch/test_utils/dummy_source.rb
|
209
89
|
- lib/metacrunch/version.rb
|
210
90
|
- metacrunch.gemspec
|
211
91
|
homepage: http://github.com/ubpb/metacrunch
|
@@ -231,5 +111,5 @@ rubyforge_project:
|
|
231
111
|
rubygems_version: 2.5.1
|
232
112
|
signing_key:
|
233
113
|
specification_version: 4
|
234
|
-
summary: Data processing toolkit for Ruby
|
114
|
+
summary: Data processing and ETL toolkit for Ruby
|
235
115
|
test_files: []
|
data/lib/metacrunch/cli/base.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
module Metacrunch
|
2
|
-
class Cli
|
3
|
-
class Base < Thor
|
4
|
-
no_commands do
|
5
|
-
def self.register_thor_command(command_definition)
|
6
|
-
desc(command_definition.usage, command_definition.desc)
|
7
|
-
|
8
|
-
command_definition.options.each do |key, value|
|
9
|
-
option(key, value)
|
10
|
-
end
|
11
|
-
|
12
|
-
define_method(command_definition.name) do |*params|
|
13
|
-
run_command(command_definition.command_class, params)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def run_command(command, params = [])
|
18
|
-
klass = command.class == Class ? command : command.to_s.constantize
|
19
|
-
raise ArgumentError, "command must be a Metacrunch::Command class" unless klass < Metacrunch::Command
|
20
|
-
|
21
|
-
command = klass.new(shell, options, params)
|
22
|
-
command.pre_perform
|
23
|
-
command.perform
|
24
|
-
command.post_perform
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module Metacrunch
|
2
|
-
class Cli
|
3
|
-
class CommandDefinition
|
4
|
-
def initialize(command_class, description)
|
5
|
-
@klass = command_class
|
6
|
-
@name = nil
|
7
|
-
@description = description
|
8
|
-
@usage = nil
|
9
|
-
@options = {}
|
10
|
-
end
|
11
|
-
|
12
|
-
def command_class(value = nil)
|
13
|
-
@klass if value
|
14
|
-
@klass
|
15
|
-
end
|
16
|
-
|
17
|
-
def name(value = nil)
|
18
|
-
@name = value if value.present?
|
19
|
-
@name || @klass.to_s.demodulize.underscore.gsub!(/_command\Z/, "")
|
20
|
-
end
|
21
|
-
|
22
|
-
def usage(value = nil)
|
23
|
-
@usage = value if value.present?
|
24
|
-
@usage || name
|
25
|
-
end
|
26
|
-
|
27
|
-
def desc(value = nil)
|
28
|
-
@description = value if value.present?
|
29
|
-
@description
|
30
|
-
end
|
31
|
-
|
32
|
-
def option(name, options = {})
|
33
|
-
@options[name] = options
|
34
|
-
end
|
35
|
-
|
36
|
-
def options
|
37
|
-
@options
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Metacrunch
|
2
|
-
class Cli
|
3
|
-
class CommandRegistry
|
4
|
-
attr_reader :commands
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
@commands = []
|
8
|
-
end
|
9
|
-
|
10
|
-
def register(klass, description = nil, &block)
|
11
|
-
command = CommandDefinition.new(klass, description)
|
12
|
-
yield(command) if block_given?
|
13
|
-
@commands << command
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/lib/metacrunch/cli/main.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
module Metacrunch
|
2
|
-
class Cli
|
3
|
-
class Main < Thor
|
4
|
-
desc "console", "Start a console. It uses Pry if installed, IRB otherwise."
|
5
|
-
def console
|
6
|
-
begin
|
7
|
-
require "pry"
|
8
|
-
Pry.start
|
9
|
-
rescue LoadError
|
10
|
-
require "irb"
|
11
|
-
IRB.start
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/metacrunch/command.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
module Metacrunch
|
2
|
-
class Command
|
3
|
-
|
4
|
-
attr_reader :shell
|
5
|
-
attr_reader :options
|
6
|
-
attr_reader :params
|
7
|
-
|
8
|
-
def initialize(shell, options = {}, params = [])
|
9
|
-
@shell = shell
|
10
|
-
@options = options
|
11
|
-
@params = params
|
12
|
-
end
|
13
|
-
|
14
|
-
def pre_perform
|
15
|
-
# can be implemented in sub-class
|
16
|
-
end
|
17
|
-
|
18
|
-
def perform
|
19
|
-
raise NotImplementedError, "You must implement .perform() in your command sub-class"
|
20
|
-
end
|
21
|
-
|
22
|
-
def post_perform
|
23
|
-
# can be implemented in sub-class
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require_relative "../reader"
|
2
|
-
|
3
|
-
# This fetcher does not do anything besides returning the filename withouzt the
|
4
|
-
# file:// protocol prefix. It only exists to keep the implementation consistent.
|
5
|
-
class Metacrunch::File::Reader::FileSystemFetcher
|
6
|
-
include Enumerable
|
7
|
-
|
8
|
-
RECOGNIZED_PROTOCOL_REGEX = /\Afile:\/\//
|
9
|
-
|
10
|
-
def self.accepts?(url)
|
11
|
-
!!url[RECOGNIZED_PROTOCOL_REGEX]
|
12
|
-
end
|
13
|
-
|
14
|
-
def initialize(url, options = {})
|
15
|
-
@url = url
|
16
|
-
end
|
17
|
-
|
18
|
-
def each
|
19
|
-
yield @url.sub(RECOGNIZED_PROTOCOL_REGEX, "")
|
20
|
-
end
|
21
|
-
end
|