chicago-etl 0.2.2 → 0.2.3

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/Gemfile CHANGED
@@ -1,8 +1,7 @@
1
- source "http://rubygems.org"
1
+ source "http://rubygems.org"
2
2
 
3
- gem "chicagowarehouse", "~> 0.4"
3
+ gem "chicagowarehouse", "~> 0.4", ">= 0.4.6"
4
4
  gem "fastercsv", :platform => :ruby_18
5
- gem "sequel"
6
5
  gem "sequel_load_data_infile", ">= 0.0.2", :require => "sequel/load_data_infile"
7
6
  gem "sequel_fast_columns", :require => "sequel/fast_columns"
8
7
 
@@ -15,7 +14,7 @@ group :development do
15
14
  gem "flog"
16
15
  gem "simplecov", :platforms => :mri_19, :require => false
17
16
  gem "ZenTest"
18
- gem "mysql", "2.8.1"
17
+ gem "mysql2"
19
18
  gem "bundler", "~> 1"
20
19
  gem "jeweler"
21
20
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.3
data/chicago-etl.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "chicago-etl"
8
- s.version = "0.2.2"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Roland Swingler"]
12
- s.date = "2013-11-26"
12
+ s.date = "2014-01-06"
13
13
  s.description = "ETL tools for Chicago"
14
14
  s.email = "roland.swingler@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -113,9 +113,8 @@ Gem::Specification.new do |s|
113
113
  s.specification_version = 3
114
114
 
115
115
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
116
- s.add_runtime_dependency(%q<chicagowarehouse>, ["~> 0.4"])
116
+ s.add_runtime_dependency(%q<chicagowarehouse>, [">= 0.4.6", "~> 0.4"])
117
117
  s.add_runtime_dependency(%q<fastercsv>, [">= 0"])
118
- s.add_runtime_dependency(%q<sequel>, [">= 0"])
119
118
  s.add_runtime_dependency(%q<sequel_load_data_infile>, [">= 0.0.2"])
120
119
  s.add_runtime_dependency(%q<sequel_fast_columns>, [">= 0"])
121
120
  s.add_development_dependency(%q<rspec>, ["~> 2"])
@@ -124,13 +123,12 @@ Gem::Specification.new do |s|
124
123
  s.add_development_dependency(%q<flog>, [">= 0"])
125
124
  s.add_development_dependency(%q<simplecov>, [">= 0"])
126
125
  s.add_development_dependency(%q<ZenTest>, [">= 0"])
127
- s.add_development_dependency(%q<mysql>, ["= 2.8.1"])
126
+ s.add_development_dependency(%q<mysql2>, [">= 0"])
128
127
  s.add_development_dependency(%q<bundler>, ["~> 1"])
129
128
  s.add_development_dependency(%q<jeweler>, [">= 0"])
130
129
  else
131
- s.add_dependency(%q<chicagowarehouse>, ["~> 0.4"])
130
+ s.add_dependency(%q<chicagowarehouse>, [">= 0.4.6", "~> 0.4"])
132
131
  s.add_dependency(%q<fastercsv>, [">= 0"])
133
- s.add_dependency(%q<sequel>, [">= 0"])
134
132
  s.add_dependency(%q<sequel_load_data_infile>, [">= 0.0.2"])
135
133
  s.add_dependency(%q<sequel_fast_columns>, [">= 0"])
136
134
  s.add_dependency(%q<rspec>, ["~> 2"])
@@ -139,14 +137,13 @@ Gem::Specification.new do |s|
139
137
  s.add_dependency(%q<flog>, [">= 0"])
140
138
  s.add_dependency(%q<simplecov>, [">= 0"])
141
139
  s.add_dependency(%q<ZenTest>, [">= 0"])
142
- s.add_dependency(%q<mysql>, ["= 2.8.1"])
140
+ s.add_dependency(%q<mysql2>, [">= 0"])
143
141
  s.add_dependency(%q<bundler>, ["~> 1"])
144
142
  s.add_dependency(%q<jeweler>, [">= 0"])
145
143
  end
146
144
  else
147
- s.add_dependency(%q<chicagowarehouse>, ["~> 0.4"])
145
+ s.add_dependency(%q<chicagowarehouse>, [">= 0.4.6", "~> 0.4"])
148
146
  s.add_dependency(%q<fastercsv>, [">= 0"])
149
- s.add_dependency(%q<sequel>, [">= 0"])
150
147
  s.add_dependency(%q<sequel_load_data_infile>, [">= 0.0.2"])
151
148
  s.add_dependency(%q<sequel_fast_columns>, [">= 0"])
152
149
  s.add_dependency(%q<rspec>, ["~> 2"])
@@ -155,7 +152,7 @@ Gem::Specification.new do |s|
155
152
  s.add_dependency(%q<flog>, [">= 0"])
156
153
  s.add_dependency(%q<simplecov>, [">= 0"])
157
154
  s.add_dependency(%q<ZenTest>, [">= 0"])
158
- s.add_dependency(%q<mysql>, ["= 2.8.1"])
155
+ s.add_dependency(%q<mysql2>, [">= 0"])
159
156
  s.add_dependency(%q<bundler>, ["~> 1"])
160
157
  s.add_dependency(%q<jeweler>, [">= 0"])
161
158
  end
@@ -17,7 +17,7 @@ module Chicago
17
17
  protected
18
18
 
19
19
  def key_field(field, name)
20
- :if[{field => nil}, 1, field].as(name)
20
+ :if.sql_function({field => nil}, 1, field).as(name)
21
21
  end
22
22
 
23
23
  # Returns a column for use in a Sequel::Dataset#select method to
@@ -21,18 +21,13 @@ module Chicago
21
21
  @table = table
22
22
  @staging_db = staging_db
23
23
  end
24
-
24
+
25
+ # Creates the appropriate key builder for a schema table,
26
+ # depending on the table type and whether rows are identified
27
+ # by original keys or need to be hashed.
25
28
  def make
26
29
  if dimension?
27
- key_table = staging_db[table.key_table_name]
28
-
29
- if table.identifiable?
30
- IdentifiableDimensionKeyBuilder.new(key_table)
31
- elsif existing_hash_column?(table)
32
- ExistingHashColumnKeyBuilder.new(key_table)
33
- else
34
- HashingKeyBuilder.new(key_table, columns_to_hash)
35
- end
30
+ dimension_key_builder
36
31
  elsif fact?
37
32
  FactKeyBuilder.new(staging_db[table.table_name])
38
33
  end
@@ -40,6 +35,18 @@ module Chicago
40
35
 
41
36
  private
42
37
 
38
+ def dimension_key_builder
39
+ key_table = staging_db[table.key_table_name]
40
+
41
+ if table.identifiable?
42
+ IdentifiableDimensionKeyBuilder.new(key_table)
43
+ elsif existing_hash_column?(table)
44
+ ExistingHashColumnKeyBuilder.new(key_table)
45
+ else
46
+ HashingKeyBuilder.new(key_table, columns_to_hash)
47
+ end
48
+ end
49
+
43
50
  def existing_hash_column?(table)
44
51
  table.columns.any? {|c| c.binary? && c.name == :hash && c.unique? }
45
52
  end
@@ -2,12 +2,16 @@ module Chicago
2
2
  module ETL
3
3
  module SequelExtensions
4
4
  module FilterToEtlBatch
5
+ # Filters this Dataset to select records only applicable to
6
+ # the current batch, based on the batch id.
7
+ #
8
+ # Applies filters on all tables selected & joined if they have
9
+ # an etl_batch_id column.
5
10
  def filter_to_etl_batch(etl_batch)
6
- conditions = (opts[:from] + (opts[:join] || [])).
7
- select {|e| has_etl_batch_column?(e) }.
11
+ conditions = tables_with_etl_batch_column.
8
12
  map {|e| make_etl_batch_filter(e, etl_batch) }
9
13
 
10
- ds = conditions.any? ? filter(conditions.inject {|a,b| a | b}) : dup
14
+ ds = apply_etl_batch_filters(conditions)
11
15
 
12
16
  if ds.opts[:compounds]
13
17
  ds.opts[:compounds].each do |compound|
@@ -20,6 +24,14 @@ module Chicago
20
24
 
21
25
  private
22
26
 
27
+ def tables_with_etl_batch_column
28
+ (opts[:from] + (opts[:join] || [])).select {|e| has_etl_batch_column?(e) }
29
+ end
30
+
31
+ def apply_etl_batch_filters(conditions)
32
+ conditions.any? ? filter(conditions.inject {|a,b| a | b}) : dup
33
+ end
34
+
23
35
  def make_etl_batch_filter(expression, etl_batch)
24
36
  table = case expression
25
37
  when Sequel::SQL::AliasedExpression
@@ -1,4 +1,4 @@
1
- adapter: mysql
1
+ adapter: mysql2
2
2
  username: root
3
3
  socket: /tmp/mysql.sock
4
4
  database: chicago_test_db
@@ -82,6 +82,6 @@ describe Chicago::ETL::Batch do
82
82
 
83
83
  it "should not complain when given a symbol as the stage name" do
84
84
  batch = ETL::Batch.instance.start
85
- lambda { batch.perform_task(:transform, "Test") {} }.should_not raise_error(Sequel::DatabaseError)
85
+ lambda { batch.perform_task(:transform, "Test") {} }.should_not raise_error
86
86
  end
87
87
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Chicago::ETL::DatasetSource do
4
- let(:dataset) { stub(:dataset) }
4
+ let(:dataset) { double(:dataset) }
5
5
 
6
6
  it "should delegtate each to the dataset" do
7
7
  dataset.should_receive(:each)
@@ -7,11 +7,11 @@ describe "Chicago::ETL Execution method" do
7
7
  end
8
8
  end
9
9
 
10
- let(:logger) { mock(:logger).as_null_object }
10
+ let(:logger) { double(:logger).as_null_object }
11
11
  let(:batch) { StubBatch.new }
12
12
 
13
13
  it "only logs skipping the stage if the stage is not executable" do
14
- stage = stub(:stage, :executable? => false, :name => "test")
14
+ stage = double(:stage, :executable? => false, :name => "test")
15
15
  stage.should_not_receive(:execute)
16
16
  logger.should_receive(:info).with("Skipping stage test")
17
17
 
@@ -19,7 +19,7 @@ describe "Chicago::ETL Execution method" do
19
19
  end
20
20
 
21
21
  it "executes the stage" do
22
- stage = stub(:stage, :executable? => true, :name => "test")
22
+ stage = double(:stage, :executable? => true, :name => "test")
23
23
  stage.should_receive(:execute).with(batch, false)
24
24
 
25
25
  Chicago::ETL.execute(stage, batch, false, logger)
@@ -37,11 +37,11 @@ describe Chicago::ETL::KeyBuilder do
37
37
  end
38
38
 
39
39
  before :each do
40
- @db = stub(:staging_database).as_null_object
41
- @db.stub(:[]).and_return(stub(:max => nil, :select_hash => {}))
42
- @sink = stub(:sink).as_null_object
40
+ @db = double(:staging_database).as_null_object
41
+ @db.stub(:[]).and_return(double(:max => nil, :select_hash => {}))
42
+ @sink = double(:sink).as_null_object
43
43
  Chicago::ETL::SchemaTableSinkFactory.stub(:new).
44
- and_return(stub(:factory, :key_sink => @sink))
44
+ and_return(double(:factory, :key_sink => @sink))
45
45
  end
46
46
 
47
47
  describe "for identifiable dimensions" do
@@ -62,13 +62,13 @@ describe Chicago::ETL::KeyBuilder do
62
62
  end
63
63
 
64
64
  it "takes into account the current maximum key in the database" do
65
- @db.stub(:[]).with(:keys_dimension_user).and_return(stub(:max => 2, :select_hash => {}))
65
+ @db.stub(:[]).with(:keys_dimension_user).and_return(double(:max => 2, :select_hash => {}))
66
66
  builder = described_class.for_table(@dimension, @db)
67
67
  builder.key(:original_id => 1).first.should == 3
68
68
  end
69
69
 
70
70
  it "returns previously created keys" do
71
- dataset = stub(:dataset, :max => 1, :select_hash => {40 => 1})
71
+ dataset = double(:dataset, :max => 1, :select_hash => {40 => 1})
72
72
  @db.stub(:[]).with(:keys_dimension_user).and_return(dataset)
73
73
 
74
74
  builder = described_class.for_table(@dimension, @db)
@@ -133,7 +133,7 @@ describe Chicago::ETL::KeyBuilder do
133
133
  end
134
134
 
135
135
  it "selects the Hex version of the binary column for the cache" do
136
- dataset = stub(:dataset, :max => 1).as_null_object
136
+ dataset = double(:dataset, :max => 1).as_null_object
137
137
  @db.stub(:[]).with(:keys_dimension_address).and_return(dataset)
138
138
  @builder = described_class.for_table(@schema.dimension(:address), @db)
139
139
 
@@ -161,7 +161,7 @@ describe Chicago::ETL::KeyBuilder do
161
161
  end
162
162
 
163
163
  it "increments from the last id stored id in the fact table" do
164
- @db.stub(:[]).with(:facts_addresses).and_return(stub(:max => 100, :select_hash => {}))
164
+ @db.stub(:[]).with(:facts_addresses).and_return(double(:max => 100, :select_hash => {}))
165
165
  @builder = described_class.for_table(@schema.fact(:addresses), @db)
166
166
  @builder.key({}).first.should == 101
167
167
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Chicago::ETL::LoadDatasetBuilder do
4
- let(:db) { stub(:database).as_null_object }
4
+ let(:db) { double(:database).as_null_object }
5
5
 
6
6
  before :each do
7
7
  db.stub(:[]).with(:original_users).
@@ -2,9 +2,9 @@ require 'spec_helper'
2
2
  require 'sequel'
3
3
 
4
4
  describe Chicago::ETL::MysqlFileSink do
5
- let(:dataset) { mock(:dataset).as_null_object }
6
- let(:db) { mock(:db, :[] => dataset, :schema => []) }
7
- let(:csv) { mock(:csv) }
5
+ let(:dataset) { double(:dataset).as_null_object }
6
+ let(:db) { double(:db, :[] => dataset, :schema => []) }
7
+ let(:csv) { double(:csv) }
8
8
 
9
9
  let(:sink) {
10
10
  described_class.new(db, :table, [:foo], :filepath => "test_file")
@@ -64,7 +64,7 @@ describe "Mysql -> Mysql through transformation chain" do
64
64
  :other => sink_2
65
65
  })
66
66
 
67
- stage.execute(stub(:etl_batch), true)
67
+ stage.execute(double(:etl_batch), true)
68
68
 
69
69
  expected = [{:id => 1, :foo => nil, :bin => "1F"},
70
70
  {:id => 2, :foo => "Hello", :bin => "1F"}]
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Chicago::ETL::SchemaSinksAndTransformationsBuilder do
4
- let(:dimension) { stub(:dimension).as_null_object }
5
- let(:db) { stub(:db).as_null_object }
6
- let(:sink_factory) { stub(:sink_factory).as_null_object }
4
+ let(:dimension) { double(:dimension).as_null_object }
5
+ let(:db) { double(:db).as_null_object }
6
+ let(:sink_factory) { double(:sink_factory).as_null_object }
7
7
 
8
8
  before(:each) {
9
9
  Chicago::ETL::SchemaTableSinkFactory.stub(:new).and_return(sink_factory)
@@ -12,7 +12,7 @@ describe Chicago::ETL::SchemaSinksAndTransformationsBuilder do
12
12
  it "should exclude columns from the sink" do
13
13
  sink_factory.should_receive(:sink).
14
14
  with(:ignore => false, :exclude => [:foo]).
15
- and_return(stub(:sink).as_null_object)
15
+ and_return(double(:sink).as_null_object)
16
16
 
17
17
  described_class.new(db, dimension).build do
18
18
  load_separately :foo
@@ -22,7 +22,7 @@ describe Chicago::ETL::SchemaSinksAndTransformationsBuilder do
22
22
  it "can specify rows are not going to be replaced" do
23
23
  sink_factory.should_receive(:sink).
24
24
  with(:ignore => true, :exclude => []).
25
- and_return(stub(:sink).as_null_object)
25
+ and_return(double(:sink).as_null_object)
26
26
 
27
27
  described_class.new(db, dimension).build do
28
28
  ignore_present_rows
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Chicago::ETL::SchemaTableSinkFactory do
4
- let(:db) { stub(:db) }
4
+ let(:db) { double(:db) }
5
5
 
6
6
  let(:dimension) {
7
- Chicago::Schema::Builders::DimensionBuilder.new(stub(:schema)).build(:foo) do
7
+ Chicago::Schema::Builders::DimensionBuilder.new(double(:schema)).build(:foo) do
8
8
  columns do
9
9
  string :bar
10
10
  integer :baz
@@ -43,7 +43,7 @@ describe Chicago::ETL::SchemaTableSinkFactory do
43
43
  end
44
44
 
45
45
  it "builds the key table sink" do
46
- sink = stub(:sink).as_null_object
46
+ sink = double(:sink).as_null_object
47
47
  sink_class.should_receive(:new).
48
48
  with(db, :keys_dimension_foo, [:original_id, :dimension_id], {}).
49
49
  and_return(sink)
@@ -52,7 +52,7 @@ describe Chicago::ETL::SchemaTableSinkFactory do
52
52
  end
53
53
 
54
54
  it "builds other explicit key table sinks" do
55
- sink = stub(:sink).as_null_object
55
+ sink = double(:sink).as_null_object
56
56
  sink_class.should_receive(:new).
57
57
  with(db, :keys_foo, [:original_id, :dimension_id], {}).
58
58
  and_return(sink)
@@ -62,7 +62,7 @@ describe Chicago::ETL::SchemaTableSinkFactory do
62
62
 
63
63
  it "builds an error sink" do
64
64
  sink_class.should_receive(:new).
65
- with(db, :etl_error_log, [:column, :row_id, :error, :severity, :error_detail], {}).and_return(stub.as_null_object)
65
+ with(db, :etl_error_log, [:column, :row_id, :error, :severity, :error_detail], {}).and_return(double.as_null_object)
66
66
 
67
67
  described_class.new(db, dimension).error_sink
68
68
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Chicago::ETL::SequelExtensions::FilterToEtlBatch do
4
- let(:batch) { stub(:batch, :id => 42) }
4
+ let(:batch) { double(:batch, :id => 42) }
5
5
 
6
6
  it "should do nothing to a table without an etl_batch_id column" do
7
7
  TEST_DB.should_receive(:schema).with(:foo).and_return([])
@@ -5,29 +5,29 @@ describe Chicago::ETL::Stage do
5
5
  expect {
6
6
  described_class.new(:test,
7
7
  :source => nil,
8
- :sinks => {:default => stub(:sink)})
8
+ :sinks => {:default => double(:sink)})
9
9
  }.to raise_error(ArgumentError)
10
10
  end
11
11
 
12
12
  it "requires sinks" do
13
13
  expect {
14
14
  described_class.new(:test,
15
- :source => stub(:source),
15
+ :source => double(:source),
16
16
  :sinks => nil)
17
17
  }.to raise_error(ArgumentError)
18
18
  end
19
19
 
20
20
  it "does not filter the dataset if re-extracting" do
21
21
  stage = described_class.new(:test,
22
- :source => stub(:source),
23
- :sinks => {:default => stub(:sink)},
22
+ :source => double(:source),
23
+ :sinks => {:default => double(:sink)},
24
24
  :filter_strategy => lambda { fail })
25
25
 
26
- stage.filtered_source(stub(:etl_batch), true)
26
+ stage.filtered_source(double(:etl_batch), true)
27
27
  end
28
28
 
29
29
  it "opens sinks before writing and closes them afterwards" do
30
- sink = mock(:sink)
30
+ sink = double(:sink)
31
31
  sink.should_receive(:open)
32
32
  sink.should_receive(:close)
33
33
 
@@ -35,6 +35,6 @@ describe Chicago::ETL::Stage do
35
35
  :source => [],
36
36
  :sinks => {:default => sink})
37
37
 
38
- stage.execute(stub(:etl_batch), true)
38
+ stage.execute(double(:etl_batch), true)
39
39
  end
40
40
  end
@@ -17,6 +17,6 @@ describe Chicago::ETL::TableBuilder do
17
17
 
18
18
  it "should do nothing and not raise an error if run more times than necessary" do
19
19
  ETL::TableBuilder.build(TEST_DB)
20
- lambda { ETL::TableBuilder.build(TEST_DB) }.should_not raise_error(Sequel::DatabaseError)
20
+ lambda { ETL::TableBuilder.build(TEST_DB) }.should_not raise_error
21
21
  end
22
22
  end
@@ -86,6 +86,6 @@ describe Chicago::ETL::Transformation do
86
86
  it "can enforce options" do
87
87
  klass = Class.new(described_class) { requires_options :foo }
88
88
  expect { klass.new }.to raise_error(ArgumentError)
89
- expect { klass.new(:foo => :bar) }.to_not raise_error(ArgumentError)
89
+ expect { klass.new(:foo => :bar) }.to_not raise_error
90
90
  end
91
91
  end
@@ -35,7 +35,7 @@ describe Chicago::ETL::Transformations::WrittenRowFilter do
35
35
  end
36
36
 
37
37
  describe Chicago::ETL::Transformations::AddKey do
38
- let(:key_builder) { stub(:key_builder, :key => 42) }
38
+ let(:key_builder) { double(:key_builder, :key => 42) }
39
39
  let(:transform) { described_class.new(:key_builder => key_builder) }
40
40
 
41
41
  it "requires a key builder" do
metadata CHANGED
@@ -1,248 +1,225 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: chicago-etl
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.2
3
+ version: !ruby/object:Gem::Version
4
+ hash: 17
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 3
10
+ version: 0.2.3
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Roland Swingler
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2013-11-26 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: chicagowarehouse
16
- requirement: !ruby/object:Gem::Requirement
17
+
18
+ date: 2014-01-06 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
17
22
  none: false
18
- requirements:
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 0
29
+ - 4
30
+ - 6
31
+ version: 0.4.6
19
32
  - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '0.4'
33
+ - !ruby/object:Gem::Version
34
+ hash: 3
35
+ segments:
36
+ - 0
37
+ - 4
38
+ version: "0.4"
39
+ requirement: *id001
22
40
  type: :runtime
23
41
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '0.4'
30
- - !ruby/object:Gem::Dependency
31
- name: fastercsv
32
- requirement: !ruby/object:Gem::Requirement
42
+ name: chicagowarehouse
43
+ - !ruby/object:Gem::Dependency
44
+ version_requirements: &id002 !ruby/object:Gem::Requirement
33
45
  none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ hash: 3
50
+ segments:
51
+ - 0
52
+ version: "0"
53
+ requirement: *id002
38
54
  type: :runtime
39
55
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: sequel
48
- requirement: !ruby/object:Gem::Requirement
56
+ name: fastercsv
57
+ - !ruby/object:Gem::Dependency
58
+ version_requirements: &id003 !ruby/object:Gem::Requirement
49
59
  none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ hash: 27
64
+ segments:
65
+ - 0
66
+ - 0
67
+ - 2
68
+ version: 0.0.2
69
+ requirement: *id003
54
70
  type: :runtime
55
71
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
72
  name: sequel_load_data_infile
64
- requirement: !ruby/object:Gem::Requirement
73
+ - !ruby/object:Gem::Dependency
74
+ version_requirements: &id004 !ruby/object:Gem::Requirement
65
75
  none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: 0.0.2
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ hash: 3
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ requirement: *id004
70
84
  type: :runtime
71
85
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: 0.0.2
78
- - !ruby/object:Gem::Dependency
79
86
  name: sequel_fast_columns
80
- requirement: !ruby/object:Gem::Requirement
87
+ - !ruby/object:Gem::Dependency
88
+ version_requirements: &id005 !ruby/object:Gem::Requirement
81
89
  none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :runtime
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ hash: 7
94
+ segments:
95
+ - 2
96
+ version: "2"
97
+ requirement: *id005
98
+ type: :development
87
99
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
100
  name: rspec
96
- requirement: !ruby/object:Gem::Requirement
101
+ - !ruby/object:Gem::Dependency
102
+ version_requirements: &id006 !ruby/object:Gem::Requirement
97
103
  none: false
98
- requirements:
99
- - - ~>
100
- - !ruby/object:Gem::Version
101
- version: '2'
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ hash: 3
108
+ segments:
109
+ - 0
110
+ version: "0"
111
+ requirement: *id006
102
112
  type: :development
103
113
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ~>
108
- - !ruby/object:Gem::Version
109
- version: '2'
110
- - !ruby/object:Gem::Dependency
111
114
  name: timecop
112
- requirement: !ruby/object:Gem::Requirement
115
+ - !ruby/object:Gem::Dependency
116
+ version_requirements: &id007 !ruby/object:Gem::Requirement
113
117
  none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ hash: 3
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ requirement: *id007
118
126
  type: :development
119
127
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
128
  name: yard
128
- requirement: !ruby/object:Gem::Requirement
129
+ - !ruby/object:Gem::Dependency
130
+ version_requirements: &id008 !ruby/object:Gem::Requirement
129
131
  none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ hash: 3
136
+ segments:
137
+ - 0
138
+ version: "0"
139
+ requirement: *id008
134
140
  type: :development
135
141
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- - !ruby/object:Gem::Dependency
143
142
  name: flog
144
- requirement: !ruby/object:Gem::Requirement
143
+ - !ruby/object:Gem::Dependency
144
+ version_requirements: &id009 !ruby/object:Gem::Requirement
145
145
  none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ hash: 3
150
+ segments:
151
+ - 0
152
+ version: "0"
153
+ requirement: *id009
150
154
  type: :development
151
155
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- - !ruby/object:Gem::Dependency
159
156
  name: simplecov
160
- requirement: !ruby/object:Gem::Requirement
157
+ - !ruby/object:Gem::Dependency
158
+ version_requirements: &id010 !ruby/object:Gem::Requirement
161
159
  none: false
162
- requirements:
163
- - - ! '>='
164
- - !ruby/object:Gem::Version
165
- version: '0'
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ hash: 3
164
+ segments:
165
+ - 0
166
+ version: "0"
167
+ requirement: *id010
166
168
  type: :development
167
169
  prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- - !ruby/object:Gem::Dependency
175
170
  name: ZenTest
176
- requirement: !ruby/object:Gem::Requirement
171
+ - !ruby/object:Gem::Dependency
172
+ version_requirements: &id011 !ruby/object:Gem::Requirement
177
173
  none: false
178
- requirements:
179
- - - ! '>='
180
- - !ruby/object:Gem::Version
181
- version: '0'
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ hash: 3
178
+ segments:
179
+ - 0
180
+ version: "0"
181
+ requirement: *id011
182
182
  type: :development
183
183
  prerelease: false
184
- version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
187
- - - ! '>='
188
- - !ruby/object:Gem::Version
189
- version: '0'
190
- - !ruby/object:Gem::Dependency
191
- name: mysql
192
- requirement: !ruby/object:Gem::Requirement
184
+ name: mysql2
185
+ - !ruby/object:Gem::Dependency
186
+ version_requirements: &id012 !ruby/object:Gem::Requirement
193
187
  none: false
194
- requirements:
195
- - - '='
196
- - !ruby/object:Gem::Version
197
- version: 2.8.1
188
+ requirements:
189
+ - - ~>
190
+ - !ruby/object:Gem::Version
191
+ hash: 1
192
+ segments:
193
+ - 1
194
+ version: "1"
195
+ requirement: *id012
198
196
  type: :development
199
197
  prerelease: false
200
- version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
- requirements:
203
- - - '='
204
- - !ruby/object:Gem::Version
205
- version: 2.8.1
206
- - !ruby/object:Gem::Dependency
207
198
  name: bundler
208
- requirement: !ruby/object:Gem::Requirement
199
+ - !ruby/object:Gem::Dependency
200
+ version_requirements: &id013 !ruby/object:Gem::Requirement
209
201
  none: false
210
- requirements:
211
- - - ~>
212
- - !ruby/object:Gem::Version
213
- version: '1'
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ hash: 3
206
+ segments:
207
+ - 0
208
+ version: "0"
209
+ requirement: *id013
214
210
  type: :development
215
211
  prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
- requirements:
219
- - - ~>
220
- - !ruby/object:Gem::Version
221
- version: '1'
222
- - !ruby/object:Gem::Dependency
223
212
  name: jeweler
224
- requirement: !ruby/object:Gem::Requirement
225
- none: false
226
- requirements:
227
- - - ! '>='
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :development
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
- requirements:
235
- - - ! '>='
236
- - !ruby/object:Gem::Version
237
- version: '0'
238
213
  description: ETL tools for Chicago
239
214
  email: roland.swingler@gmail.com
240
215
  executables: []
216
+
241
217
  extensions: []
242
- extra_rdoc_files:
218
+
219
+ extra_rdoc_files:
243
220
  - LICENSE.txt
244
221
  - README.rdoc
245
- files:
222
+ files:
246
223
  - .document
247
224
  - .rspec
248
225
  - Gemfile
@@ -329,31 +306,37 @@ files:
329
306
  - spec/etl/transformations_spec.rb
330
307
  - spec/spec_helper.rb
331
308
  homepage: http://github.com/notonthehighstreet/chicago-etl
332
- licenses:
309
+ licenses:
333
310
  - MIT
334
311
  post_install_message:
335
312
  rdoc_options: []
336
- require_paths:
313
+
314
+ require_paths:
337
315
  - lib
338
- required_ruby_version: !ruby/object:Gem::Requirement
316
+ required_ruby_version: !ruby/object:Gem::Requirement
339
317
  none: false
340
- requirements:
341
- - - ! '>='
342
- - !ruby/object:Gem::Version
343
- version: '0'
344
- segments:
318
+ requirements:
319
+ - - ">="
320
+ - !ruby/object:Gem::Version
321
+ hash: 3
322
+ segments:
345
323
  - 0
346
- hash: -2294158408277347233
347
- required_rubygems_version: !ruby/object:Gem::Requirement
324
+ version: "0"
325
+ required_rubygems_version: !ruby/object:Gem::Requirement
348
326
  none: false
349
- requirements:
350
- - - ! '>='
351
- - !ruby/object:Gem::Version
352
- version: '0'
327
+ requirements:
328
+ - - ">="
329
+ - !ruby/object:Gem::Version
330
+ hash: 3
331
+ segments:
332
+ - 0
333
+ version: "0"
353
334
  requirements: []
335
+
354
336
  rubyforge_project:
355
337
  rubygems_version: 1.8.25
356
338
  signing_key:
357
339
  specification_version: 3
358
340
  summary: Chicago ETL
359
341
  test_files: []
342
+