rodimus 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7fc221f69a67693a1f94810a09b297e345a9248c
4
- data.tar.gz: b2fc619efd740b162e0968d92c30ce4f8eb9562d
3
+ metadata.gz: 090665c626ab20b21e745069db326cb87716c352
4
+ data.tar.gz: 9b36aa2309d9f4d3eba3422e5240165e1bd325af
5
5
  SHA512:
6
- metadata.gz: 9ce961dff9778ea69aaf5593084840f7239228bb9e720a31325e961db15ee8fde1aa1d57ab5b7e53bfc390fdeb2cfc1bd019f9d68930855306ccc1d11b37dc06
7
- data.tar.gz: 2b4e42e96f08dbd9c42b8a486cbcebd2a20ed7fe9c61cc3beeb16d8fcb772caeacf621e605f0ff8f6d426099b05205e1d06d371816ef61dd68d4d746b22e0633
6
+ metadata.gz: 150a93c771af7841c7e259054adc2cdfee0be8a665078cd363f43c82648a6b0278a3f0a91bb88dbb974ab72fd12576de6cc9e33bae710fa764808836d118ef5b
7
+ data.tar.gz: b0e276b1e7bc47201736a428fd39360026b37a4f801a5cf8340e9fc8bcf3fc31fa5f734f5eb1306fc4c1417f1d38fcf0ebd6709c151009fe45cacaf02c622755
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - ruby-head
4
+ - 2.0.0
5
+ - 1.9.3
6
+ - jruby-head
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Rodimus
2
+ [![Gem Version](https://badge.fury.io/rb/rodimus.svg)](http://badge.fury.io/rb/rodimus) [![Build Status](https://travis-ci.org/nevern02/rodimus.svg?branch=master)](https://travis-ci.org/nevern02/rodimus)
2
3
 
3
4
  ETL stands for Extract-Transform-Load. Sometimes, you have data in Source A
4
5
  that needs to be moved to Destination B. Along the way, it needs to be
data/lib/rodimus.rb CHANGED
@@ -1,6 +1,19 @@
1
- require 'rodimus/version'
1
+ require 'rodimus/configuration'
2
2
  require 'rodimus/step'
3
3
  require 'rodimus/transformation'
4
+ require 'rodimus/version'
4
5
 
5
6
  module Rodimus
7
+ class << self
8
+ attr_accessor :configuration
9
+ end
10
+ self.configuration = Configuration.new
11
+
12
+ def self.configure
13
+ yield configuration
14
+ end
15
+
16
+ def self.logger
17
+ configuration.logger
18
+ end
6
19
  end
@@ -0,0 +1,13 @@
1
+ require 'logger'
2
+
3
+ module Rodimus
4
+
5
+ class Configuration
6
+ attr_accessor :logger
7
+
8
+ def initialize
9
+ @logger = Logger.new(STDOUT)
10
+ end
11
+ end
12
+
13
+ end
data/lib/rodimus/step.rb CHANGED
@@ -4,11 +4,17 @@ module Rodimus
4
4
  attr_accessor :incoming, :outgoing
5
5
 
6
6
  def run
7
+ Rodimus.logger.info "Running #{self}"
7
8
  incoming.each do |row|
8
9
  transformed_row = process_row(row)
9
10
  handle_output(transformed_row)
10
11
  end
11
12
  finalize
13
+ Rodimus.logger.info "Finished #{self}"
14
+ end
15
+
16
+ def to_s
17
+ "#{self.class} connected to input: #{incoming} and output: #{outgoing}"
12
18
  end
13
19
 
14
20
  private
@@ -21,9 +21,14 @@ module Rodimus
21
21
  Process.waitall
22
22
  end
23
23
 
24
+ def to_s
25
+ "#{self.class} with #{steps.length} steps"
26
+ end
27
+
24
28
  private
25
29
 
26
30
  def prepare
31
+ Rodimus.logger.info "Preparing #{self}..."
27
32
  # [1, 2, 3, 4] => [1, 2], [2, 3], [3, 4]
28
33
  steps.inject do |first, second|
29
34
  read, write = IO.pipe
@@ -1,3 +1,3 @@
1
1
  module Rodimus
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/rodimus.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Brandon Rice"]
10
10
  spec.email = ["brice84@gmail.com"]
11
11
  spec.summary = "An ETL (Extract-Transform-Load) library that uses a forking process model for concurrency."
12
- spec.description = "ETL is hard. There are lots of solutions, but few are open-source and none (that I know of) are Ruby."
12
+ spec.description = "An ETL (Extract-Transform-Load) library that uses a forking process model for concurrency."
13
13
  spec.homepage = "https://github.com/nevern02/rodimus"
14
14
  spec.license = "MIT"
15
15
 
data/test/step_test.rb CHANGED
@@ -2,24 +2,28 @@ require 'minitest/autorun'
2
2
  require 'rodimus'
3
3
 
4
4
  module Rodimus
5
+ Rodimus.configure do |config|
6
+ config.logger = Logger.new(nil)
7
+ end
5
8
 
6
9
  class TestStep < MiniTest::Unit::TestCase
10
+ def setup
11
+ @test_string = "row 1\nrow 2"
12
+ @incoming = StringIO.new(@test_string)
13
+ @outgoing = StringIO.new
14
+ end
15
+
7
16
  def test_streaming_rows
8
- test_string = "row 1\nrow 2"
9
17
  step = Object.new
10
18
  step.extend(Rodimus::Step)
11
- step.define_singleton_method(:transform) { |i| i }
12
- incoming = StringIO.new(test_string)
13
- outgoing = StringIO.new
14
- step.incoming = incoming
15
- step.outgoing = outgoing
19
+ step.incoming = @incoming
20
+ step.outgoing = @outgoing
16
21
  step.run
17
- outgoing.rewind
18
- assert_equal test_string, outgoing.read.chomp
22
+ @outgoing.rewind
23
+ assert_equal @test_string, @outgoing.read.chomp
19
24
  end
20
25
 
21
- def test_transformation_called
22
- test_string = "row 1\nrow 2"
26
+ def test_process_row
23
27
  step = Class.new do
24
28
  include Rodimus::Step
25
29
 
@@ -27,13 +31,11 @@ module Rodimus
27
31
  row.upcase
28
32
  end
29
33
  end.new
30
- incoming = StringIO.new(test_string)
31
- outgoing = StringIO.new
32
- step.incoming = incoming
33
- step.outgoing = outgoing
34
+ step.incoming = @incoming
35
+ step.outgoing = @outgoing
34
36
  step.run
35
- outgoing.rewind
36
- assert_equal test_string.upcase, outgoing.read.chomp
37
+ @outgoing.rewind
38
+ assert_equal @test_string.upcase, @outgoing.read.chomp
37
39
  end
38
40
  end
39
41
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rodimus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Rice
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-16 00:00:00.000000000 Z
11
+ date: 2014-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,8 +52,8 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: ETL is hard. There are lots of solutions, but few are open-source and
56
- none (that I know of) are Ruby.
55
+ description: An ETL (Extract-Transform-Load) library that uses a forking process model
56
+ for concurrency.
57
57
  email:
58
58
  - brice84@gmail.com
59
59
  executables: []
@@ -63,12 +63,14 @@ files:
63
63
  - ".gitignore"
64
64
  - ".ruby-gemset"
65
65
  - ".ruby-version"
66
+ - ".travis.yml"
66
67
  - Gemfile
67
68
  - LICENSE.txt
68
69
  - README.md
69
70
  - Rakefile
70
71
  - examples/mongo_input.rb
71
72
  - lib/rodimus.rb
73
+ - lib/rodimus/configuration.rb
72
74
  - lib/rodimus/step.rb
73
75
  - lib/rodimus/transformation.rb
74
76
  - lib/rodimus/version.rb