metacrunch 2.2.3 → 3.0.0
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/.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
|