metacrunch 2.2.3 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -1
  3. data/Gemfile +11 -13
  4. data/License.txt +1 -1
  5. data/Readme.md +139 -2
  6. data/bin/console +9 -6
  7. data/exe/metacrunch +1 -2
  8. data/lib/metacrunch/cli.rb +62 -14
  9. data/lib/metacrunch/db/reader.rb +27 -0
  10. data/lib/metacrunch/db/writer.rb +23 -0
  11. data/lib/metacrunch/db.rb +8 -0
  12. data/lib/metacrunch/fs/entry.rb +17 -0
  13. data/lib/metacrunch/{file_reader.rb → fs/reader.rb} +9 -10
  14. data/lib/metacrunch/fs.rb +6 -0
  15. data/lib/metacrunch/job/buffer.rb +26 -0
  16. data/lib/metacrunch/job/dsl/option_support.rb +102 -0
  17. data/lib/metacrunch/job/dsl.rb +42 -0
  18. data/lib/metacrunch/job.rb +149 -0
  19. data/lib/metacrunch/test_utils/dummy_callable.rb +14 -0
  20. data/lib/metacrunch/test_utils/dummy_destination.rb +21 -0
  21. data/lib/metacrunch/test_utils/dummy_source.rb +22 -0
  22. data/lib/metacrunch/test_utils.rb +7 -0
  23. data/lib/metacrunch/version.rb +1 -1
  24. data/lib/metacrunch.rb +14 -27
  25. data/metacrunch.gemspec +5 -10
  26. metadata +24 -144
  27. data/lib/metacrunch/cli/base.rb +0 -29
  28. data/lib/metacrunch/cli/command_definition.rb +0 -41
  29. data/lib/metacrunch/cli/command_registry.rb +0 -17
  30. data/lib/metacrunch/cli/main.rb +0 -16
  31. data/lib/metacrunch/command.rb +0 -27
  32. data/lib/metacrunch/file/reader/file_system_fetcher.rb +0 -21
  33. data/lib/metacrunch/file/reader/plain_file_reader.rb +0 -33
  34. data/lib/metacrunch/file/reader/scp_fetcher.rb +0 -56
  35. data/lib/metacrunch/file/reader/tar_file_reader.rb +0 -37
  36. data/lib/metacrunch/file/reader/zip_file_reader.rb +0 -30
  37. data/lib/metacrunch/file/reader.rb +0 -72
  38. data/lib/metacrunch/file/writer/plain_file_writer.rb +0 -19
  39. data/lib/metacrunch/file/writer/tar_file_writer.rb +0 -26
  40. data/lib/metacrunch/file/writer/zip_file_writer.rb +0 -29
  41. data/lib/metacrunch/file/writer.rb +0 -26
  42. data/lib/metacrunch/file.rb +0 -24
  43. data/lib/metacrunch/file_reader_entry.rb +0 -21
  44. data/lib/metacrunch/file_writer.rb +0 -40
  45. data/lib/metacrunch/hash.rb +0 -51
  46. data/lib/metacrunch/parallel.rb +0 -69
  47. data/lib/metacrunch/processor.rb +0 -10
  48. data/lib/metacrunch/snr/field.rb +0 -31
  49. data/lib/metacrunch/snr/section.rb +0 -74
  50. data/lib/metacrunch/snr.rb +0 -117
  51. data/lib/metacrunch/tar_writer.rb +0 -26
  52. data/lib/metacrunch/transformator/transformation/step.rb +0 -45
  53. data/lib/metacrunch/transformator/transformation.rb +0 -48
  54. data/lib/metacrunch/transformator.rb +0 -5
  55. data/lib/metacrunch/transformer/helper.rb +0 -29
  56. data/lib/metacrunch/transformer/step.rb +0 -37
  57. 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,14 @@
1
+ require_relative "../test_utils"
2
+
3
+ module Metacrunch
4
+ class TestUtils::DummyCallable
5
+
6
+ def call(*args)
7
+ @call_called = true
8
+ end
9
+
10
+ end
11
+
12
+ class TestUtils::DummyNonCallable
13
+ end
14
+ 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
@@ -0,0 +1,7 @@
1
+ module Metacrunch
2
+ module TestUtils
3
+ require_relative "test_utils/dummy_source"
4
+ require_relative "test_utils/dummy_destination"
5
+ require_relative "test_utils/dummy_callable"
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Metacrunch
2
- VERSION = "2.2.3"
2
+ VERSION = "3.0.0"
3
3
  end
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 "rubygems/package"
7
- require "thor"
8
- require "ox"
2
+ require "bundler"
9
3
 
10
- module Metacrunch
11
- require_relative "./metacrunch/version"
12
- require_relative "./metacrunch/cli"
13
- require_relative "./metacrunch/command"
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
- def self.load_plugins
27
- Gem.find_latest_files("metacrunch_plugin.rb").each do |path|
28
- load(path)
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.summary = %q{Data processing toolkit for Ruby}
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", ">= 4.2.0"
20
- spec.add_dependency "builder", "~> 3.2", ">= 3.2.2"
21
- spec.add_dependency "highline", "~> 1.7"
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: 2.2.3
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-01-11 00:00:00.000000000 Z
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: thor
30
+ name: commander
133
31
  requirement: !ruby/object:Gem::Requirement
134
32
  requirements:
135
33
  - - "~>"
136
34
  - !ruby/object:Gem::Version
137
- version: '0.19'
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: '0.19'
42
+ version: '4.4'
145
43
  - !ruby/object:Gem::Dependency
146
- name: ox
44
+ name: sequel
147
45
  requirement: !ruby/object:Gem::Requirement
148
46
  requirements:
149
47
  - - "~>"
150
48
  - !ruby/object:Gem::Version
151
- version: '2.1'
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: '2.1'
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/cli/base.rb
178
- - lib/metacrunch/cli/command_definition.rb
179
- - lib/metacrunch/cli/command_registry.rb
180
- - lib/metacrunch/cli/main.rb
181
- - lib/metacrunch/command.rb
182
- - lib/metacrunch/file.rb
183
- - lib/metacrunch/file/reader.rb
184
- - lib/metacrunch/file/reader/file_system_fetcher.rb
185
- - lib/metacrunch/file/reader/plain_file_reader.rb
186
- - lib/metacrunch/file/reader/scp_fetcher.rb
187
- - lib/metacrunch/file/reader/tar_file_reader.rb
188
- - lib/metacrunch/file/reader/zip_file_reader.rb
189
- - lib/metacrunch/file/writer.rb
190
- - lib/metacrunch/file/writer/plain_file_writer.rb
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: []
@@ -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
@@ -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
@@ -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