transformator 1.0.0.pre1 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28e94ca52f9dd55df7e51dfed2433523c44e98d0
4
- data.tar.gz: 904f122a44e0d63526d056cf027a4331348f32a3
3
+ metadata.gz: 4833b5ce9ba4c2b367a97b9bc745050098603911
4
+ data.tar.gz: 212cd88f4bfb6e2cc8b43ec8b81b20e46a6ee191
5
5
  SHA512:
6
- metadata.gz: b289c83d07d9c9a33c95e8612907479bed4b693a83b2873279411d4635d675dc64f2067acab65f7321474f4382ff43fc27ff3c63e45401ed271d9dffa35150f2
7
- data.tar.gz: c769832a6ee38567c1e4b1a0189947c1a9df0467b91850073b10a915883beb970fb2aab75b5a567ab333e5ead0e0e15737f66c7d85778b2afb01a4402dbc9ac2
6
+ metadata.gz: 65f9078502c79144bb44b3216a05b71a567e93297d8fe35091cdd1e53ab08dafff637777a7a6a1adb96d12e0ef51881ae8bb47ab53847f9b2a53c629967ccb08
7
+ data.tar.gz: 96090ba140428d845d58cd822a443f25cb5d6fcce4b80c1166da4ff0f3b17203719cf2e79482934e851ae9645926f04d7099f9d4c33cdbe4273983814fa1c773
data/Gemfile CHANGED
@@ -1,14 +1,19 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in xml_transformer.gemspec
3
+ # Specify your gem's dependencies in your gemspec
4
4
  gemspec
5
5
 
6
- gem "pry", "~> 0.9.12.6"
7
- gem "pry-syntax-hacks", "~> 0.0.6"
6
+ if !ENV["CI"]
7
+ group :development do
8
+ gem "hashdiff"
9
+ gem "pry", "~> 0.9.12.6"
10
+ gem "pry-byebug", "<= 1.3.2"
11
+ gem "pry-rescue", "~> 1.4.1"
12
+ gem "pry-stack_explorer", "~> 0.4.9.1"
13
+ gem "pry-syntax-hacks", "~> 0.0.6"
14
+ end
15
+ end
8
16
 
9
- if RUBY_ENGINE == "ruby"
10
- gem "pry-byebug", "<= 1.3.2"
11
- gem "pry-stack_explorer", "~> 0.4.9.1"
12
- else
13
- #gem "pry-nav", "~> 0.2.4"
17
+ group :test do
18
+ gem "codeclimate-test-reporter", require: nil
14
19
  end
data/bin/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "transformator"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ require "pry"
10
+ Pry.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/braindump.md ADDED
@@ -0,0 +1,32 @@
1
+ - Mehrstufiger Lademechanismus (konkret 2 stufig)
2
+ - implizierter cli Parameter --bundle-transformations
3
+ - um das original Gemfile nicht zu ändern, könnte man es nach Gemfile_transformations kopieren
4
+ - Gemfile_transformations(.lock) müssen in .gitignore
5
+ - in Gemfile_transformations werden nun die Transformations Gems/Pfade/gits angehängt
6
+ - darauf folgende wird gebundelt
7
+ - anschließend wird der aktuelle Prozess durch einen Aufruf folgender Form *ersetzt*
8
+ BUNDLE_GEMFILE=Gemfile.transformations bundle exec bin/transformator --no-bundle-transformations ... (oder so ähnlich)
9
+
10
+ - Möglichkeit mehrere Transformationen in Reihe zu schalten
11
+ - dazu müsste lediglich innerhalb des ForkingEnumProzessors mehrere Transformationsscritte nacheinander durchgeführt werden
12
+
13
+ - da jede Transformation auf die source/target URI zugreifen kann, könnten hierrüber auch Reader/writer realisiert werden
14
+ - die Frage ist, inwieweit man die einzelnen Reader/writer in einzelne Gems aufsplittet
15
+ - ein pragmatischer Kompromiss wäre, dass die Reader/Writer die oft benutzt werden (Elasticsearch, Postgres, Tar) Bestandteil
16
+ des Transformator Gems sind/bleiben
17
+ - man hat darüber hinaus aber die Möglichkeit, Reader/Writer über "Transformationen" hinzuzufügen
18
+
19
+ - cool wäre, wenn man Files (Tar oder plain Files) über ssh URIs spezifizieren könnte
20
+ - transformator -s ssh://msievers@node1/~/mab/archive1.tgz
21
+ - die frage ist, wie man dies intern realisiert
22
+ - die einfache möglichkeit wäre zunächst einmal, den TarReader aufzubohren, damit dieser diesen Fall kennt/untersützt
23
+ - das hätte jedoch den nachteil, dass jeder reader den ssh Kram erneut für sich (implementieren) bzw. behandeln müsste
24
+ - die zweite Möglichkeit wäre, einen SSH Reader zu haben, welcher vor den TarReader geschaltet wird
25
+ - dieser könnte bsp. das File nach /tmp Laden und anschließend den TarReader damit starten
26
+ - Schwierig hierbei wäre, die Kontinuität des TarReaders (Enumerators) sicherzustellen, wenn diesem ein anderer Reader vorgeschaltet wäre
27
+ - dies könnte wieder über Enumeratoren gelingen
28
+ - ssh_reader.each -> gibt dateinamen im lokalen fs zurück
29
+ - tar_reader call ss_reader.each, liest jeweils ein file und enumeriert über die darin befindlichen einträge
30
+ - sobald keine einträge mehr vorhanden sind, bekommt er den nächsten dateinamen vom ssh reader usw.
31
+
32
+ - neben den CLI Parametern sollte es möglich sein, ein YAML Config File anzugeben, welches vorallem bei koomplexeren Settings das Handling erleichtert
@@ -0,0 +1,45 @@
1
+ require_relative "../transformation"
2
+
3
+ class Transformator::Transformation::Step
4
+ attr_accessor :transformation
5
+
6
+ def initialize(transformation = nil, options = {})
7
+ if transformation.is_a?(Hash)
8
+ options = transformation
9
+ transformation = nil
10
+ end
11
+
12
+ if transformation
13
+ @transformation = transformation
14
+ else
15
+ @transformation = Struct.new(:source, :target).new.tap do |_struct|
16
+ _struct.source = options[:source]
17
+ _struct.target = options[:target]
18
+ end
19
+ end
20
+ end
21
+
22
+ def call
23
+ end
24
+
25
+ #
26
+ # Each step has transparent access to all methods of it's transformation
27
+ #
28
+ def method_missing(method_name, *args, &block)
29
+ if @transformation.respond_to?(method_name)
30
+ @transformation.send(method_name, *args, &block)
31
+ else
32
+ super
33
+ end
34
+ end
35
+
36
+ def respond_to_missing?(method_name, include_private = false)
37
+ @transformation.respond_to?(method_name) || super
38
+ end
39
+
40
+ # avoid method_missing penalty for the most used transformation methods
41
+ def source; @transformation.source; end
42
+ def source=(value); @transformation.source=(value); end
43
+ def target; @transformation.target; end
44
+ def target=(value); @transformation.target=(value); end
45
+ end
@@ -0,0 +1,48 @@
1
+ require_relative "../transformator"
2
+
3
+ class Transformator::Transformation
4
+ require_relative "./transformation/step"
5
+
6
+ attr_accessor :source
7
+ attr_accessor :target
8
+
9
+ class << self
10
+ def steps(value = nil)
11
+ unless value
12
+ @steps
13
+ else
14
+ @steps = value
15
+ end
16
+ end
17
+ alias_method :sequence, :steps
18
+ end
19
+
20
+ def self.call(*args)
21
+ new.call(*args)
22
+ end
23
+
24
+ # since a transformation can have many steps, writing a "require" for each is tedious
25
+ def self.require_directory(directory)
26
+ Dir.glob("#{File.expand_path(directory)}/*.rb").each do |_filename|
27
+ require _filename
28
+ end
29
+ end
30
+
31
+ def initialize
32
+ # steps are instanced once, which means that instance variables retain
33
+ @steps = self.class.steps.flatten.map do |_step|
34
+ _step.is_a?(Class) ? _step.new(self) : _step
35
+ end
36
+ end
37
+
38
+ def call(source, options = {})
39
+ @source = source
40
+ @target = options[:target]
41
+
42
+ @steps.each do |_step|
43
+ _step.is_a?(Proc) ? instance_exec(&_step) : _step.call
44
+ end
45
+
46
+ return @target
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module Transformator
2
- VERSION = "1.0.0.pre1"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/transformator.rb CHANGED
@@ -1,17 +1,7 @@
1
+ require "active_support"
2
+ require "active_support/core_ext"
1
3
  require "transformator/version"
2
4
 
3
5
  module Transformator
4
- require_relative "./transformator/cli"
5
- require_relative "./transformator/dispatcher"
6
- require_relative "./transformator/filesystem_pattern_evaluator"
7
- #require_relative "./transformator/gzip_reader"
8
- #require_relative "./transformator/gzip_writer"
9
- require_relative "./transformator/oga_xml_dumper"
10
- require_relative "./transformator/oga_xml_parser"
11
- #require_relative "./transformator/ox_xml_dumper"
12
- #require_relative "./transformator/ox_xml_parser"
13
- require_relative "./transformator/parallel_processor"
14
- require_relative "./transformator/null_processor"
15
- require_relative "./transformator/tar_reader"
16
- #require_relative "./transformator/tar_writer"
6
+ require_relative "./transformator/transformation"
17
7
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,14 @@
1
+ if ENV["CODECLIMATE_REPO_TOKEN"]
2
+ require "codeclimate-test-reporter"
3
+ CodeClimate::TestReporter.start
4
+ else
5
+ require "simplecov"
6
+ SimpleCov.start
7
+ end
8
+
1
9
  require "transformator"
10
+ require "yaml"
2
11
 
3
- # require pry if possible
4
12
  begin
5
13
  require "pry"
6
14
  rescue LoadError
@@ -17,3 +25,7 @@ RSpec.configure do |config|
17
25
  end
18
26
  # end --- rspec 3.1 generator
19
27
  end
28
+
29
+ def read_asset(path_to_file)
30
+ File.read(File.expand_path(File.join(File.dirname(__FILE__), "assets", path_to_file)))
31
+ end
@@ -0,0 +1,32 @@
1
+ require "transformator/transformation"
2
+ require "transformator/transformation/step"
3
+
4
+ describe Transformator::Transformation do
5
+ class SomeStep < Transformator::Transformation::Step
6
+ def call
7
+ self.target = { muff: 1 }
8
+ end
9
+ end
10
+
11
+ class SomeTransformation < Transformator::Transformation
12
+ sequence [
13
+ SomeStep
14
+ ]
15
+ end
16
+
17
+ it "foo" do
18
+ result = SomeTransformation.call({
19
+ my: {
20
+ awesome: {
21
+ source: {
22
+ title: "foo",
23
+ description: "bar"
24
+ }
25
+ }
26
+ }
27
+ })
28
+
29
+ binding.pry
30
+ result
31
+ end
32
+ end
@@ -16,10 +16,8 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ["lib"]
18
18
 
19
- spec.add_dependency "oga", ">= 0.2.0"
20
- #spec.add_dependency "ox"
21
- spec.add_dependency "rubysl", "~> 2.1.0" if RUBY_ENGINE == "rbx"
22
- spec.add_dependency "thread", "~> 0.1.5"
19
+ spec.add_dependency "activesupport"
20
+ spec.add_dependency "rubysl", ">= 2.1.0" if RUBY_ENGINE == "rbx"
23
21
 
24
22
  spec.add_development_dependency "benchmark-ips", ">= 2.0.0"
25
23
  spec.add_development_dependency "bundler", "~> 1.7"
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transformator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Sievers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2015-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: oga
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.0
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.0
27
- - !ruby/object:Gem::Dependency
28
- name: thread
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.1.5
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.1.5
26
+ version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: benchmark-ips
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -117,7 +103,8 @@ dependencies:
117
103
  description:
118
104
  email:
119
105
  executables:
120
- - transformator
106
+ - console
107
+ - setup
121
108
  extensions: []
122
109
  extra_rdoc_files: []
123
110
  files:
@@ -127,28 +114,16 @@ files:
127
114
  - LICENSE.txt
128
115
  - README.md
129
116
  - Rakefile
130
- - bin/transformator
117
+ - bin/console
118
+ - bin/setup
119
+ - braindump.md
131
120
  - lib/transformator.rb
132
- - lib/transformator/cli.rb
133
- - lib/transformator/dispatcher.rb
134
- - lib/transformator/filesystem_pattern_evaluator.rb
135
- - lib/transformator/gzip_reader.rb
136
- - lib/transformator/gzip_writer.rb
137
- - lib/transformator/null_processor.rb
138
- - lib/transformator/oga_xml_dumper.rb
139
- - lib/transformator/oga_xml_parser.rb
140
- - lib/transformator/ox_xml_dumper.rb
141
- - lib/transformator/ox_xml_parser.rb
142
- - lib/transformator/parallel_processor.rb
143
- - lib/transformator/processor.rb
144
- - lib/transformator/tar_reader.rb
145
- - lib/transformator/tar_reader/patched_rubygems_tar_reader.rb
146
- - lib/transformator/tar_writer.rb
121
+ - lib/transformator/transformation.rb
122
+ - lib/transformator/transformation/step.rb
147
123
  - lib/transformator/version.rb
148
124
  - spec/spec_helper.rb
149
- - spec/transformator_spec.rb
125
+ - spec/transformator/transformation_spec.rb
150
126
  - transformator.gemspec
151
- - ubpb.yml.erb
152
127
  homepage: https://github.com/ubpb/transformator
153
128
  licenses:
154
129
  - MIT
@@ -164,15 +139,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
139
  version: '0'
165
140
  required_rubygems_version: !ruby/object:Gem::Requirement
166
141
  requirements:
167
- - - ">"
142
+ - - ">="
168
143
  - !ruby/object:Gem::Version
169
- version: 1.3.1
144
+ version: '0'
170
145
  requirements: []
171
146
  rubyforge_project:
172
- rubygems_version: 2.4.6
147
+ rubygems_version: 2.4.8
173
148
  signing_key:
174
149
  specification_version: 4
175
150
  summary: A data transformation framework
176
151
  test_files:
177
152
  - spec/spec_helper.rb
178
- - spec/transformator_spec.rb
153
+ - spec/transformator/transformation_spec.rb
data/bin/transformator DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require "pry"
3
- require "transformator/cli"
4
- Transformator::Cli.new(ARGV)
@@ -1,42 +0,0 @@
1
- require "erb"
2
- require "optparse"
3
- require "transformator"
4
- require "yaml"
5
-
6
- require "pry" # TODO: remove
7
-
8
- class Transformator::Cli
9
- def initialize(argv = [])
10
- if argv.empty?
11
- puts options_parser.help
12
- else
13
- @options = parse_argv(argv) || {}
14
- end
15
-
16
- Transformator::Dispatcher.new(
17
- YAML.load(
18
- ERB.new(
19
- File.read(
20
- File.expand_path(@options[:config_file_name])
21
- )
22
- ).result
23
- )
24
- ).call
25
- end
26
-
27
- def parse_argv(argv)
28
- presence({}.tap do |result|
29
- OptionParser.new do |opts|
30
- opts.banner = "Usage: transformator [options]"
31
-
32
- opts.on( "-c", "--config-file FILE", "Configuration file in yaml format" ) do |config_file_name|
33
- result[:config_file_name] = config_file_name
34
- end
35
- end.parse(argv)
36
- end)
37
- end
38
-
39
- def presence(object)
40
- (object.empty? rescue false) ? nil : object
41
- end
42
- end
@@ -1,43 +0,0 @@
1
- require "transformator"
2
-
3
- class Transformator::Dispatcher
4
- class State
5
- attr_accessor :finished
6
- attr_accessor :result
7
-
8
- def initialize(initial_result)
9
- @initial_result = initial_result
10
- reset_result!
11
- end
12
-
13
- def finished?
14
- @finished == true
15
- end
16
-
17
- def reset_result!
18
- @result = @initial_result.dup
19
- end
20
- end
21
-
22
- def initialize(processors = [])
23
- @processors = processors.map do |processor|
24
- if processor["options"]
25
- processor["class"].new(processor["options"])
26
- else
27
- processor["class"].new
28
- end
29
- end
30
-
31
- @state = State.new([])
32
- end
33
-
34
- def call
35
- until @state.finished?
36
- @processors.each do |processor|
37
- processor.call!(@state)
38
- end
39
-
40
- @state.reset_result!
41
- end
42
- end
43
- end
@@ -1,14 +0,0 @@
1
- require "transformator/processor"
2
-
3
- class Transformator::FilesystemPatternEvaluator < Transformator::Processor
4
- def initialize(options = {})
5
- @patterns = options["patterns"]
6
- end
7
-
8
- def call!(state)
9
- state.result = @patterns.map do |pattern|
10
- Dir.glob(File.expand_path(pattern))
11
- end.flatten
12
- binding.pry
13
- end
14
- end
File without changes
File without changes
@@ -1,9 +0,0 @@
1
- require "transformator/processor"
2
-
3
- class Transformator::NullProcessor < Transformator::Processor
4
- def call!(state)
5
- puts "null"
6
- #binding.pry
7
- #state.finished = true
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- require "oga"
2
- require "transformator/processor"
3
-
4
- class Transformator::OgaXmlDumper < Transformator::Processor
5
- def call!(state)
6
- state.result.map! do |oga_xml_document|
7
- oga_xml_document.to_xml
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require "oga"
2
- require "transformator/processor"
3
-
4
- class Transformator::OgaXmlParser < Transformator::Processor
5
- def call!(state)
6
- state.result.map! do |xml|
7
- Oga.parse_xml(xml)
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require "ox"
2
- require "transformator/processor"
3
-
4
- class Transformator::OxXmlDumper < Transformator::Processor
5
- def call!(state)
6
- state.result.map! do |ox_xml_document|
7
- Ox.dump(ox_xml_document)
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require "ox"
2
- require "transformator/processor"
3
-
4
- class Transformator::OxXmlParser < Transformator::Processor
5
- def call!(state)
6
- state.result.map! do |xml|
7
- Ox.parse(xml)
8
- end
9
- end
10
- end
@@ -1,39 +0,0 @@
1
- require "transformator/processor"
2
- require "thread/pool"
3
-
4
- class Transformator::ParallelProcessor < Transformator::Processor
5
- def initialize(options = {})
6
- @processors = options["processors"].map do |processor|
7
- if processor["options"]
8
- processor["class"].new(processor["options"])
9
- else
10
- processor["class"].new
11
- end
12
- end
13
-
14
- @number_of_workers = options["workers"]
15
- @thread_pool = Thread.pool(@number_of_workers)
16
- end
17
-
18
- def call!(state)
19
- if state.result.length > 0
20
- chunk_size_per_worker = state.result.length.fdiv(@number_of_workers).ceil
21
- results_enumerator = state.result.each_slice(chunk_size_per_worker)
22
-
23
- chunks = Array.new(@number_of_workers).map do |_|
24
- results_enumerator.next
25
- end
26
-
27
- @number_of_workers.times do |index|
28
- @thread_pool.process do
29
- @processors.each do |processor|
30
- processor.call!(Struct.new(:result).new(chunks[index]))
31
- end
32
- end
33
- end
34
-
35
- @thread_pool.wait_done
36
- state.result = chunks.inject(&:concat)
37
- end
38
- end
39
- end
@@ -1,4 +0,0 @@
1
- require "transformator"
2
-
3
- class Transformator::Processor
4
- end
@@ -1,41 +0,0 @@
1
- #--
2
- # Copyright (C) 2004 Mauricio Julio Fernández Pradier
3
- # See LICENSE.txt for additional licensing information.
4
- #++
5
- require "rubygems/package"
6
-
7
- class Transformator::TarReader::PatchedRubygemsTarReader < Gem::Package::TarReader
8
- def each
9
- return enum_for __method__ unless block_given?
10
-
11
- until @io.eof? do
12
- header = Gem::Package::TarHeader.from @io
13
- return if header.empty?
14
-
15
- entry = Gem::Package::TarReader::Entry.new header, @io
16
- size = entry.header.size
17
-
18
- yield entry.read
19
-
20
- skip = (512 - (size % 512)) % 512
21
- pending = size - entry.bytes_read
22
-
23
- begin
24
- # avoid reading...
25
- @io.seek pending, IO::SEEK_CUR
26
- pending = 0
27
- rescue Errno::EINVAL, NameError
28
- while pending > 0 do
29
- bytes_read = @io.read([pending, 4096].min).size
30
- raise UnexpectedEOF if @io.eof?
31
- pending -= bytes_read
32
- end
33
- end
34
-
35
- @io.read skip # discard trailing zeros
36
-
37
- # make sure nobody can use #read, #getc or #rewind anymore
38
- entry.close
39
- end
40
- end
41
- end
@@ -1,51 +0,0 @@
1
- require "transformator/processor"
2
-
3
- class Transformator::TarReader < Transformator::Processor
4
- require_relative "./tar_reader/patched_rubygems_tar_reader"
5
-
6
- attr_accessor :files
7
-
8
- def initialize(options = {})
9
- @bulk_size = options["bulk_size"]
10
- @current_archive_enumerator = nil
11
-
12
- if options["files"]
13
- @files = ensure_array(options["files"]).map do |filename|
14
- Dir.glob(File.expand_path(filename))
15
- end.flatten
16
- end
17
- end
18
-
19
- def call!(state)
20
- @files = state.result.slice!(0..-1) unless @files
21
-
22
- if @current_archive_enumerator.nil?
23
- if !@files.empty?
24
- @current_archive_enumerator = PatchedRubygemsTarReader.new(
25
- Zlib::GzipReader.open(
26
- File.expand_path(@files.pop)
27
- )
28
- ).each
29
- else
30
- state.finished = true
31
- end
32
- end
33
-
34
- @bulk_size.times do
35
- begin
36
- if @current_archive_enumerator
37
- state.result.push @current_archive_enumerator.next
38
- end
39
- rescue StopIteration
40
- @current_archive_enumerator = nil
41
- end
42
- end
43
- end
44
-
45
- #
46
- private
47
- #
48
- def ensure_array(object)
49
- object.is_a?(Array) ? object : [object]
50
- end
51
- end
File without changes
@@ -1,2 +0,0 @@
1
- describe Transformator do
2
- end
data/ubpb.yml.erb DELETED
@@ -1,25 +0,0 @@
1
- ---
2
- #- class: !ruby/class "Transformator::FilesystemPatternEvaluator"
3
- # options:
4
- # patterns:
5
- # - ~/github/mab*.tar.gz
6
-
7
- - class: !ruby/class "Transformator::TarReader"
8
- options:
9
- bulk_size: 320
10
- files:
11
- - ~/github/mab*.tar.gz
12
-
13
- - class: !ruby/class "Transformator::ParallelProcessor"
14
- options:
15
- workers: 2
16
- processors:
17
- - class: !ruby/class "Transformator::OgaXmlParser"
18
- - class: !ruby/class "Transformator::OgaXmlDumper"
19
-
20
- - class: !ruby/class "Transformator::NullProcessor"
21
- #- class: !ruby/class "Transformator::TarWriter"
22
- # options:
23
- # archive_size: 5000
24
- # gzip_archive: true
25
- # filename: /tmp/out.tar.gz