chicago-etl 0.0.9
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.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +21 -0
- data/Rakefile +42 -0
- data/VERSION +1 -0
- data/chicago-etl.gemspec +117 -0
- data/lib/chicago/etl/batch.rb +110 -0
- data/lib/chicago/etl/buffering_insert_writer.rb +36 -0
- data/lib/chicago/etl/counter.rb +36 -0
- data/lib/chicago/etl/key_builder.rb +198 -0
- data/lib/chicago/etl/load_dataset_builder.rb +75 -0
- data/lib/chicago/etl/mysql_dumpfile.rb +32 -0
- data/lib/chicago/etl/mysql_load_file_value_transformer.rb +24 -0
- data/lib/chicago/etl/screens/column_screen.rb +59 -0
- data/lib/chicago/etl/screens/composite_screen.rb +17 -0
- data/lib/chicago/etl/screens/invalid_element.rb +27 -0
- data/lib/chicago/etl/screens/missing_value.rb +22 -0
- data/lib/chicago/etl/screens/out_of_bounds.rb +33 -0
- data/lib/chicago/etl/sequel/dependant_tables.rb +48 -0
- data/lib/chicago/etl/sequel/filter_to_etl_batch.rb +53 -0
- data/lib/chicago/etl/sequel/load_data_infile.rb +19 -0
- data/lib/chicago/etl/sink.rb +61 -0
- data/lib/chicago/etl/table_builder.rb +45 -0
- data/lib/chicago/etl/task_invocation.rb +32 -0
- data/lib/chicago/etl/tasks.rb +34 -0
- data/lib/chicago/etl/transformations/add_insert_timestamp.rb +16 -0
- data/lib/chicago/etl/transformations/uk_post_code.rb +40 -0
- data/lib/chicago/etl/transformations/uk_post_code_field.rb +59 -0
- data/lib/chicago/etl.rb +35 -0
- data/lib/chicago-etl.rb +0 -0
- data/spec/db_connections.yml.dist +4 -0
- data/spec/etl/batch_spec.rb +86 -0
- data/spec/etl/counter_spec.rb +44 -0
- data/spec/etl/etl_batch_id_dataset_filter.rb +29 -0
- data/spec/etl/key_builder_spec.rb +190 -0
- data/spec/etl/load_dataset_builder_spec.rb +86 -0
- data/spec/etl/mysql_dumpfile_spec.rb +42 -0
- data/spec/etl/mysql_load_file_value_transformer_spec.rb +27 -0
- data/spec/etl/screens/composite_screen_spec.rb +25 -0
- data/spec/etl/screens/invalid_element_spec.rb +27 -0
- data/spec/etl/screens/missing_value_spec.rb +58 -0
- data/spec/etl/screens/out_of_bounds_spec.rb +64 -0
- data/spec/etl/sequel/dependant_tables_spec.rb +41 -0
- data/spec/etl/sequel/filter_to_etl_batch_spec.rb +54 -0
- data/spec/etl/sequel/load_data_infile_spec.rb +37 -0
- data/spec/etl/sink_spec.rb +7 -0
- data/spec/etl/table_builder_spec.rb +22 -0
- data/spec/etl/task_spec.rb +87 -0
- data/spec/etl/transformations/add_insert_timestamp_spec.rb +9 -0
- data/spec/etl/transformations/uk_post_code_field_spec.rb +95 -0
- data/spec/etl/transformations/uk_post_code_spec.rb +102 -0
- data/spec/spec_helper.rb +20 -0
- metadata +245 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Chicago::ETL::TableBuilder do
|
4
|
+
before :each do
|
5
|
+
TEST_DB.drop_table(*(TEST_DB.tables))
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should create an etl_batches table" do
|
9
|
+
ETL::TableBuilder.build(TEST_DB)
|
10
|
+
TEST_DB.tables.should include(:etl_batches)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should create an etl_task_invocations table" do
|
14
|
+
ETL::TableBuilder.build(TEST_DB)
|
15
|
+
TEST_DB.tables.should include(:etl_task_invocations)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should do nothing and not raise an error if run more times than necessary" do
|
19
|
+
ETL::TableBuilder.build(TEST_DB)
|
20
|
+
lambda { ETL::TableBuilder.build(TEST_DB) }.should_not raise_error(Sequel::DatabaseError)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
describe Chicago::ETL::TaskInvocation do
|
5
|
+
before :all do
|
6
|
+
TEST_DB.drop_table(*(TEST_DB.tables))
|
7
|
+
ETL::TableBuilder.build(TEST_DB)
|
8
|
+
ETL::TaskInvocation.db = TEST_DB
|
9
|
+
end
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
TEST_DB[:etl_task_invocations].truncate
|
13
|
+
TEST_DB[:etl_batches].truncate
|
14
|
+
end
|
15
|
+
|
16
|
+
after :each do
|
17
|
+
tmpdir = File.expand_path(File.join(File.dirname(__FILE__), "..", "tmp"))
|
18
|
+
FileUtils.rm_r(tmpdir) if File.exists?(tmpdir)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be associated with an ETL Batch" do
|
22
|
+
batch = create_batch
|
23
|
+
batch.should_not be_nil
|
24
|
+
t = ETL::TaskInvocation.create(:batch => batch)
|
25
|
+
t.reload.batch.should == batch
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should be unqiue by name across an ETL Batch and stage" do
|
29
|
+
attrs = {:batch_id => 1, :stage => "Extract", :name => "foo"}
|
30
|
+
ETL::TaskInvocation.create(attrs)
|
31
|
+
lambda { ETL::TaskInvocation.create(attrs) }.should raise_error(Sequel::DatabaseError)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should be in the 'Created' state by default" do
|
35
|
+
ETL::TaskInvocation.create.state.should == "Created"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should perform an action in a block, and set it's state to Error if an exception is raised" do
|
39
|
+
task = ETL::TaskInvocation.create
|
40
|
+
lambda { task.perform { raise "Boom" } }.should raise_error(RuntimeError, "Boom")
|
41
|
+
task.state.should == "Error"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should perform an action in a block, and set it's state to Error if an timeout error is raised" do
|
45
|
+
task = ETL::TaskInvocation.create
|
46
|
+
lambda { task.perform { raise Timeout::Error.new("Timeout error") } }.should raise_error(Timeout::Error)
|
47
|
+
task.state.should == "Error"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should be in the 'Started' state while perform is called" do
|
51
|
+
task = ETL::TaskInvocation.create
|
52
|
+
task.perform { task.state.should == "Started" }
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should be in the 'Finished' state after #perform has finished" do
|
56
|
+
task = ETL::TaskInvocation.create
|
57
|
+
task.perform {}
|
58
|
+
task.state.should == "Finished"
|
59
|
+
task.finished_at.should be_kind_of(Time)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should raise a RuntimeError if perform is attempted after the task has finished" do
|
63
|
+
task = ETL::TaskInvocation.create
|
64
|
+
task.perform {}
|
65
|
+
lambda { task.perform {} }.should raise_error(RuntimeError)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should increment the number of attempts each time the task is performed" do
|
69
|
+
task = ETL::TaskInvocation.create
|
70
|
+
task.perform { raise "Boom" } rescue nil
|
71
|
+
task.attempts.should == 1
|
72
|
+
task.perform { raise "Boom" } rescue nil
|
73
|
+
task.attempts.should == 2
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should set the associated batch into an error state" do
|
77
|
+
batch = create_batch
|
78
|
+
task = ETL::TaskInvocation.create(:batch => batch)
|
79
|
+
task.perform { raise "Boom" } rescue nil
|
80
|
+
task.batch.should be_in_error
|
81
|
+
end
|
82
|
+
|
83
|
+
def create_batch
|
84
|
+
Chicago.project_root = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
85
|
+
ETL::Batch.create
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Chicago::ETL::Transformations::AddInsertTimestamp do
|
4
|
+
it "adds a timestamp in UTC in the _inserted_at field" do
|
5
|
+
time = subject.call({}).first[:_inserted_at]
|
6
|
+
time.should be_kind_of(Time)
|
7
|
+
time.zone.should == "UTC"
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Chicago::ETL::Transformations::UkPostCodeField do
|
5
|
+
it "reformats a 6 character postcode" do
|
6
|
+
data = described_class.new.normalize(" SW 30 TA")
|
7
|
+
data[:post_code].should == "SW3 0TA"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "reformats a 7 character postcode" do
|
11
|
+
data = described_class.new.normalize(" G L515 FD")
|
12
|
+
data[:post_code].should == "GL51 5FD"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "reformats a BFPO postcode" do
|
16
|
+
data = described_class.new.normalize("bfpo123")
|
17
|
+
data[:post_code].should == "BFPO 123"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns the outcode" do
|
21
|
+
data = described_class.new.normalize(" G L515 FD")
|
22
|
+
data[:outcode].should == "GL51"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns the incode" do
|
26
|
+
data = described_class.new.normalize(" G L515 FD")
|
27
|
+
data[:outcode].should == "GL51"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "fixes people using 0 instead of O for OX and OL post codes" do
|
31
|
+
data = described_class.new.normalize(" 0X1 4HG")
|
32
|
+
data[:post_code].should == "OX1 4HG"
|
33
|
+
|
34
|
+
data = described_class.new.normalize(" 0L1 4HG")
|
35
|
+
data[:post_code].should == "OL1 4HG"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "fixes people using 0 instead of O for OX post codes" do
|
39
|
+
data = described_class.new.normalize(" 0X1 4HG")
|
40
|
+
data[:post_code].should == "OX1 4HG"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "fixes people using 0 instead of O for OL post codes" do
|
44
|
+
data = described_class.new.normalize(" 0L1 0LG")
|
45
|
+
data[:post_code].should == "OL1 0LG"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "fixes people using 0 instead of O for PO post codes" do
|
49
|
+
data = described_class.new.normalize(" P01 4HG")
|
50
|
+
data[:post_code].should == "PO1 4HG"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "fixes people using 0 instead of O for SO post codes" do
|
54
|
+
data = described_class.new.normalize(" S01 4HG")
|
55
|
+
data[:post_code].should == "SO1 4HG"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "fixes people using 0 instead of O for CO post codes" do
|
59
|
+
data = described_class.new.normalize(" C01 4HG")
|
60
|
+
data[:post_code].should == "CO1 4HG"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "fixes people using 0 instead of O for YO post codes" do
|
64
|
+
data = described_class.new.normalize(" Y01 4HG")
|
65
|
+
data[:post_code].should == "YO1 4HG"
|
66
|
+
end
|
67
|
+
|
68
|
+
it "fixes shift key slips" do
|
69
|
+
data = described_class.new.normalize(")X!£ $HG")
|
70
|
+
data[:post_code].should == "OX13 4HG"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "uppercases post code letters" do
|
74
|
+
data = described_class.new.normalize("sw3 0ta")
|
75
|
+
data[:post_code].should == "SW3 0TA"
|
76
|
+
end
|
77
|
+
|
78
|
+
it "returns the postcode with an invalid flag if invalid" do
|
79
|
+
data = described_class.new.normalize("zzz zzz")
|
80
|
+
data.should == {:post_code => "zzz zzz", :invalid => true}
|
81
|
+
end
|
82
|
+
|
83
|
+
it "has no outcode if not valid" do
|
84
|
+
data = described_class.new.normalize("zzz zzz")
|
85
|
+
data[:outcode].should == nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it "has the outcode for partial postcodes" do
|
89
|
+
data = described_class.new.normalize("W1a")
|
90
|
+
data[:post_code].should == "W1A"
|
91
|
+
data[:outcode].should == "W1A"
|
92
|
+
data[:incode].should be_nil
|
93
|
+
data[:invalid].should_not be_true
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Chicago::ETL::Transformations::UkPostCode do
|
5
|
+
it "reformats a 6 character postcode" do
|
6
|
+
row, _ = described_class.new(:post_code).
|
7
|
+
call(:post_code => " SW 30 TA")
|
8
|
+
|
9
|
+
row[:post_code].should == "SW3 0TA"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "reformats a 7 character postcode" do
|
13
|
+
row, _ = described_class.new(:post_code).
|
14
|
+
call(:post_code => " G L515 FD")
|
15
|
+
|
16
|
+
row[:post_code].should == "GL51 5FD"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "doesn't reformat a BFPO post code" do
|
20
|
+
row, _ = described_class.new(:post_code).
|
21
|
+
call(:post_code => "BFPO 23")
|
22
|
+
|
23
|
+
row[:post_code].should == "BFPO 23"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "fixes people using 0 instead of O for OX and OL post codes" do
|
27
|
+
row, _ = described_class.new(:post_code).
|
28
|
+
call(:post_code => " 0X1 4HG")
|
29
|
+
|
30
|
+
row[:post_code].should == "OX1 4HG"
|
31
|
+
|
32
|
+
row, _ = described_class.new(:post_code).
|
33
|
+
call(:post_code => " 0L1 4HG")
|
34
|
+
|
35
|
+
row[:post_code].should == "OL1 4HG"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "fixes people using 0 instead of O for OX post codes" do
|
39
|
+
row, _ = described_class.new(:post_code).
|
40
|
+
call(:post_code => " 0X1 4HG")
|
41
|
+
|
42
|
+
row[:post_code].should == "OX1 4HG"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "fixes people using 0 instead of O for OL post codes" do
|
46
|
+
row, _ = described_class.new(:post_code).
|
47
|
+
call(:post_code => " 0L1 0LG")
|
48
|
+
|
49
|
+
row[:post_code].should == "OL1 0LG"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "fixes people using 0 instead of O for PO post codes" do
|
53
|
+
row, _ = described_class.new(:post_code).
|
54
|
+
call(:post_code => " P01 4HG")
|
55
|
+
|
56
|
+
row[:post_code].should == "PO1 4HG"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "fixes people using 0 instead of O for SO post codes" do
|
60
|
+
row, _ = described_class.new(:post_code).
|
61
|
+
call(:post_code => " S01 4HG")
|
62
|
+
|
63
|
+
row[:post_code].should == "SO1 4HG"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "fixes people using 0 instead of O for CO post codes" do
|
67
|
+
row, _ = described_class.new(:post_code).
|
68
|
+
call(:post_code => " C01 4HG")
|
69
|
+
|
70
|
+
row[:post_code].should == "CO1 4HG"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "fixes people using 0 instead of O for YO post codes" do
|
74
|
+
row, _ = described_class.new(:post_code).
|
75
|
+
call(:post_code => " Y01 4HG")
|
76
|
+
|
77
|
+
row[:post_code].should == "YO1 4HG"
|
78
|
+
end
|
79
|
+
|
80
|
+
it "fixes shift key slips" do
|
81
|
+
row, _ = described_class.new(:post_code).
|
82
|
+
call(:post_code => ")X!£ $HG")
|
83
|
+
|
84
|
+
row[:post_code].should == "OX13 4HG"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "uppercases post code letters" do
|
88
|
+
row, _ = described_class.new(:post_code).
|
89
|
+
call(:post_code => "sw3 0ta")
|
90
|
+
|
91
|
+
row[:post_code].should == "SW3 0TA"
|
92
|
+
end
|
93
|
+
|
94
|
+
it "can be configured to only run given a block with success" do
|
95
|
+
transform = described_class.new(:post_code) {|row| row[:country] == "GB" }
|
96
|
+
|
97
|
+
transform.call(:post_code => "sw1 7yh").first[:post_code].
|
98
|
+
should == "sw1 7yh"
|
99
|
+
transform.call(:country => "GB", :post_code => "sw1 7yh").
|
100
|
+
first[:post_code].should == "SW1 7YH"
|
101
|
+
end
|
102
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'chicago'
|
5
|
+
require 'chicago/etl'
|
6
|
+
require 'yaml'
|
7
|
+
require 'timecop'
|
8
|
+
|
9
|
+
include Chicago
|
10
|
+
|
11
|
+
unless defined? TEST_DB
|
12
|
+
TEST_DB = Sequel.connect(YAML.load(File.read(File.dirname(__FILE__) + "/db_connections.yml")))
|
13
|
+
end
|
14
|
+
|
15
|
+
# Requires supporting files with custom matchers and macros, etc,
|
16
|
+
# in ./support/ and its subdirectories.
|
17
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
18
|
+
|
19
|
+
RSpec.configure do |config|
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,245 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: chicago-etl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 13
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 9
|
10
|
+
version: 0.0.9
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Roland Swingler
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2013-02-19 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
22
|
+
none: false
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
hash: 3
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 4
|
30
|
+
version: "0.4"
|
31
|
+
requirement: *id001
|
32
|
+
type: :runtime
|
33
|
+
prerelease: false
|
34
|
+
name: chicagowarehouse
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
hash: 7
|
42
|
+
segments:
|
43
|
+
- 2
|
44
|
+
version: "2"
|
45
|
+
requirement: *id002
|
46
|
+
type: :development
|
47
|
+
prerelease: false
|
48
|
+
name: rspec
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
hash: 3
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
requirement: *id003
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
name: timecop
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
hash: 3
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
version: "0"
|
73
|
+
requirement: *id004
|
74
|
+
type: :development
|
75
|
+
prerelease: false
|
76
|
+
name: yard
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
84
|
+
segments:
|
85
|
+
- 0
|
86
|
+
version: "0"
|
87
|
+
requirement: *id005
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
name: flog
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
hash: 3
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
version: "0"
|
101
|
+
requirement: *id006
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
name: jeweler
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
requirement: *id007
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
name: rcov
|
119
|
+
- !ruby/object:Gem::Dependency
|
120
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
hash: 3
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
version: "0"
|
129
|
+
requirement: *id008
|
130
|
+
type: :development
|
131
|
+
prerelease: false
|
132
|
+
name: simplecov
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
hash: 3
|
140
|
+
segments:
|
141
|
+
- 0
|
142
|
+
version: "0"
|
143
|
+
requirement: *id009
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
name: ZenTest
|
147
|
+
description: ETL tools for Chicago
|
148
|
+
email: roland.swingler@gmail.com
|
149
|
+
executables: []
|
150
|
+
|
151
|
+
extensions: []
|
152
|
+
|
153
|
+
extra_rdoc_files:
|
154
|
+
- LICENSE.txt
|
155
|
+
- README.rdoc
|
156
|
+
files:
|
157
|
+
- .document
|
158
|
+
- .rspec
|
159
|
+
- Gemfile
|
160
|
+
- LICENSE.txt
|
161
|
+
- README.rdoc
|
162
|
+
- Rakefile
|
163
|
+
- VERSION
|
164
|
+
- chicago-etl.gemspec
|
165
|
+
- lib/chicago-etl.rb
|
166
|
+
- lib/chicago/etl.rb
|
167
|
+
- lib/chicago/etl/batch.rb
|
168
|
+
- lib/chicago/etl/buffering_insert_writer.rb
|
169
|
+
- lib/chicago/etl/counter.rb
|
170
|
+
- lib/chicago/etl/key_builder.rb
|
171
|
+
- lib/chicago/etl/load_dataset_builder.rb
|
172
|
+
- lib/chicago/etl/mysql_dumpfile.rb
|
173
|
+
- lib/chicago/etl/mysql_load_file_value_transformer.rb
|
174
|
+
- lib/chicago/etl/screens/column_screen.rb
|
175
|
+
- lib/chicago/etl/screens/composite_screen.rb
|
176
|
+
- lib/chicago/etl/screens/invalid_element.rb
|
177
|
+
- lib/chicago/etl/screens/missing_value.rb
|
178
|
+
- lib/chicago/etl/screens/out_of_bounds.rb
|
179
|
+
- lib/chicago/etl/sequel/dependant_tables.rb
|
180
|
+
- lib/chicago/etl/sequel/filter_to_etl_batch.rb
|
181
|
+
- lib/chicago/etl/sequel/load_data_infile.rb
|
182
|
+
- lib/chicago/etl/sink.rb
|
183
|
+
- lib/chicago/etl/table_builder.rb
|
184
|
+
- lib/chicago/etl/task_invocation.rb
|
185
|
+
- lib/chicago/etl/tasks.rb
|
186
|
+
- lib/chicago/etl/transformations/add_insert_timestamp.rb
|
187
|
+
- lib/chicago/etl/transformations/uk_post_code.rb
|
188
|
+
- lib/chicago/etl/transformations/uk_post_code_field.rb
|
189
|
+
- spec/db_connections.yml.dist
|
190
|
+
- spec/etl/batch_spec.rb
|
191
|
+
- spec/etl/counter_spec.rb
|
192
|
+
- spec/etl/etl_batch_id_dataset_filter.rb
|
193
|
+
- spec/etl/key_builder_spec.rb
|
194
|
+
- spec/etl/load_dataset_builder_spec.rb
|
195
|
+
- spec/etl/mysql_dumpfile_spec.rb
|
196
|
+
- spec/etl/mysql_load_file_value_transformer_spec.rb
|
197
|
+
- spec/etl/screens/composite_screen_spec.rb
|
198
|
+
- spec/etl/screens/invalid_element_spec.rb
|
199
|
+
- spec/etl/screens/missing_value_spec.rb
|
200
|
+
- spec/etl/screens/out_of_bounds_spec.rb
|
201
|
+
- spec/etl/sequel/dependant_tables_spec.rb
|
202
|
+
- spec/etl/sequel/filter_to_etl_batch_spec.rb
|
203
|
+
- spec/etl/sequel/load_data_infile_spec.rb
|
204
|
+
- spec/etl/sink_spec.rb
|
205
|
+
- spec/etl/table_builder_spec.rb
|
206
|
+
- spec/etl/task_spec.rb
|
207
|
+
- spec/etl/transformations/add_insert_timestamp_spec.rb
|
208
|
+
- spec/etl/transformations/uk_post_code_field_spec.rb
|
209
|
+
- spec/etl/transformations/uk_post_code_spec.rb
|
210
|
+
- spec/spec_helper.rb
|
211
|
+
homepage: http://github.com/notonthehighstreet/chicago-etl
|
212
|
+
licenses:
|
213
|
+
- MIT
|
214
|
+
post_install_message:
|
215
|
+
rdoc_options: []
|
216
|
+
|
217
|
+
require_paths:
|
218
|
+
- lib
|
219
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
220
|
+
none: false
|
221
|
+
requirements:
|
222
|
+
- - ">="
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
hash: 3
|
225
|
+
segments:
|
226
|
+
- 0
|
227
|
+
version: "0"
|
228
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
229
|
+
none: false
|
230
|
+
requirements:
|
231
|
+
- - ">="
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
hash: 3
|
234
|
+
segments:
|
235
|
+
- 0
|
236
|
+
version: "0"
|
237
|
+
requirements: []
|
238
|
+
|
239
|
+
rubyforge_project:
|
240
|
+
rubygems_version: 1.8.25
|
241
|
+
signing_key:
|
242
|
+
specification_version: 3
|
243
|
+
summary: Chicago ETL
|
244
|
+
test_files: []
|
245
|
+
|