data_miner 2.3.0 → 2.3.1
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/CHANGELOG +7 -0
- data/Rakefile +1 -0
- data/data_miner.gemspec +3 -3
- data/lib/data_miner/run.rb +1 -1
- data/lib/data_miner/step/import.rb +16 -2
- data/lib/data_miner/version.rb +1 -1
- data/test/data_miner/step/test_import.rb +33 -0
- data/test/helper.rb +23 -44
- data/test/test_data_miner_run_column_statistic.rb +1 -1
- data/test/test_earth_import.rb +0 -1
- data/test/test_earth_tap.rb +0 -1
- metadata +10 -8
data/CHANGELOG
CHANGED
data/Rakefile
CHANGED
data/data_miner.gemspec
CHANGED
|
@@ -18,12 +18,12 @@ Gem::Specification.new do |s|
|
|
|
18
18
|
s.require_paths = ["lib"]
|
|
19
19
|
|
|
20
20
|
s.add_runtime_dependency 'aasm'
|
|
21
|
-
s.add_runtime_dependency 'active_record_inline_schema'
|
|
21
|
+
s.add_runtime_dependency 'active_record_inline_schema', '>=0.5.6'
|
|
22
22
|
s.add_runtime_dependency 'activerecord', '>=2.3.4'
|
|
23
23
|
s.add_runtime_dependency 'activesupport', '>=2.3.4'
|
|
24
24
|
s.add_runtime_dependency 'errata', '>=1.0.1'
|
|
25
|
-
s.add_runtime_dependency 'remote_table', '>=
|
|
26
|
-
s.add_runtime_dependency 'upsert'
|
|
25
|
+
s.add_runtime_dependency 'remote_table', '>=2.0.2'
|
|
26
|
+
s.add_runtime_dependency 'upsert', '>=0.3.1'
|
|
27
27
|
|
|
28
28
|
s.add_development_dependency 'dkastner-alchemist'
|
|
29
29
|
s.add_development_dependency 'conversions'
|
data/lib/data_miner/run.rb
CHANGED
|
@@ -66,7 +66,7 @@ class DataMiner
|
|
|
66
66
|
|
|
67
67
|
validates_presence_of :model_name
|
|
68
68
|
|
|
69
|
-
has_many :column_statistics, :class_name => 'DataMiner::Run::ColumnStatistic'
|
|
69
|
+
has_many :column_statistics, :class_name => 'DataMiner::Run::ColumnStatistic', :order => 'id ASC'
|
|
70
70
|
|
|
71
71
|
include ::AASM
|
|
72
72
|
aasm_initial_state INITIAL_STATE
|
|
@@ -113,9 +113,23 @@ class DataMiner
|
|
|
113
113
|
|
|
114
114
|
def table_has_autoincrementing_primary_key?
|
|
115
115
|
return @table_has_autoincrementing_primary_key_query.first if @table_has_autoincrementing_primary_key_query.is_a?(Array)
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
c = ActiveRecord::Base.connection_pool.checkout
|
|
117
|
+
answer = if (pk = model.primary_key) and model.columns_hash[pk].type == :integer
|
|
118
|
+
case c.adapter_name
|
|
119
|
+
when /mysql/i
|
|
120
|
+
extra = c.select_value %{SELECT EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = #{c.quote(c.current_database)} AND TABLE_NAME = #{c.quote(model.table_name)} AND COLUMN_NAME = #{c.quote(pk)}}
|
|
121
|
+
extra.to_s.include?('auto_increment')
|
|
122
|
+
when /postgres/i
|
|
123
|
+
column_default = c.select_value %{SELECT COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = #{c.quote(model.table_name)} AND COLUMN_NAME = #{c.quote(pk)}}
|
|
124
|
+
column_default.to_s.include?('nextval')
|
|
125
|
+
when /sqlite/i
|
|
126
|
+
# FIXME doesn't work
|
|
127
|
+
# row = c.select_rows("PRAGMA table_info(#{model.quoted_table_name})").detect { |r| r[1] == pk }
|
|
128
|
+
# row[2] == 'INTEGER' and row[3] == 1 and row[5] == 1
|
|
129
|
+
true
|
|
130
|
+
end
|
|
118
131
|
end
|
|
132
|
+
ActiveRecord::Base.connection_pool.checkin c
|
|
119
133
|
@table_has_autoincrementing_primary_key_query = [answer]
|
|
120
134
|
answer
|
|
121
135
|
end
|
data/lib/data_miner/version.rb
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
init_database
|
|
3
|
+
require 'earth'
|
|
4
|
+
|
|
5
|
+
Earth.init :residence, :electricity, :hospitality, :load_data_miner => true, :apply_schemas => true
|
|
6
|
+
|
|
7
|
+
class PetBlue < ActiveRecord::Base
|
|
8
|
+
data_miner do
|
|
9
|
+
import 'fake', :url => 'fake' do
|
|
10
|
+
key :id
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
PetBlue.auto_upgrade!
|
|
15
|
+
|
|
16
|
+
describe DataMiner::Step::Import do
|
|
17
|
+
describe '#table_has_autoincrementing_primary_key?' do
|
|
18
|
+
it "recognizes auto-increment primary keys" do
|
|
19
|
+
PetBlue.data_miner_script.steps.first.send(:table_has_autoincrementing_primary_key?).must_equal true
|
|
20
|
+
end
|
|
21
|
+
it "recognizes that not all integer primary keys are auto-increment" do
|
|
22
|
+
[
|
|
23
|
+
ElectricUtility,
|
|
24
|
+
ResidentialEnergyConsumptionSurveyResponse,
|
|
25
|
+
CommercialBuildingEnergyConsumptionSurveyResponse,
|
|
26
|
+
].each do |model|
|
|
27
|
+
model.data_miner_script.steps.select { |s| s.is_a?(DataMiner::Step::Import) }.each do |import_step|
|
|
28
|
+
import_step.send(:table_has_autoincrementing_primary_key?).must_equal false
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/test/helper.rb
CHANGED
|
@@ -19,55 +19,34 @@ ActiveRecord::Base.logger = Logger.new $stderr
|
|
|
19
19
|
ActiveRecord::Base.logger.level = Logger::INFO
|
|
20
20
|
# ActiveRecord::Base.logger.level = Logger::DEBUG
|
|
21
21
|
|
|
22
|
-
case ENV['DATABASE']
|
|
23
|
-
when /postgr/i
|
|
24
|
-
createdb_bin = ENV['TEST_CREATEDB_BIN'] || 'createdb'
|
|
25
|
-
dropdb_bin = ENV['TEST_DROPDB_BIN'] || 'dropdb'
|
|
26
|
-
username = ENV['TEST_POSTGRES_USERNAME'] || `whoami`.chomp
|
|
27
|
-
# password = ENV['TEST_POSTGRES_PASSWORD'] || 'password'
|
|
28
|
-
database = ENV['TEST_POSTGRES_DATABASE'] || 'data_miner_test'
|
|
29
|
-
system %{#{dropdb_bin} #{database}}
|
|
30
|
-
system %{#{createdb_bin} #{database}}
|
|
31
|
-
ActiveRecord::Base.establish_connection(
|
|
32
|
-
'adapter' => 'postgresql',
|
|
33
|
-
'encoding' => 'utf8',
|
|
34
|
-
'database' => database,
|
|
35
|
-
'username' => username
|
|
36
|
-
# 'password' => password
|
|
37
|
-
)
|
|
38
|
-
when /sqlite/i
|
|
39
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
|
40
|
-
else
|
|
41
|
-
bin = ENV['TEST_MYSQL_BIN'] || 'mysql'
|
|
42
|
-
username = ENV['TEST_MYSQL_USERNAME'] || 'root'
|
|
43
|
-
password = ENV['TEST_MYSQL_PASSWORD'] || 'password'
|
|
44
|
-
database = ENV['TEST_MYSQL_DATABASE'] || 'data_miner_test'
|
|
45
|
-
cmd = "#{bin} -u #{username} -p#{password}"
|
|
46
|
-
`#{cmd} -e 'show databases'`
|
|
47
|
-
unless $?.success?
|
|
48
|
-
$stderr.puts "Skipping mysql tests because `#{cmd}` doesn't work"
|
|
49
|
-
exit 0
|
|
50
|
-
end
|
|
51
|
-
system %{#{cmd} -e "drop database #{database}"}
|
|
52
|
-
system %{#{cmd} -e "create database #{database}"}
|
|
53
|
-
ActiveRecord::Base.establish_connection(
|
|
54
|
-
'adapter' => (RUBY_PLATFORM == 'java' ? 'mysql' : 'mysql2'),
|
|
55
|
-
'encoding' => 'utf8',
|
|
56
|
-
'database' => database,
|
|
57
|
-
'username' => username,
|
|
58
|
-
'password' => password
|
|
59
|
-
)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
22
|
ActiveRecord::Base.mass_assignment_sanitizer = :strict
|
|
63
23
|
|
|
64
24
|
require 'data_miner'
|
|
65
25
|
|
|
66
26
|
def init_database(unit_converter = :conversions)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
27
|
+
case ENV['DATABASE']
|
|
28
|
+
when /postgr/i
|
|
29
|
+
system %{dropdb test_data_miner}
|
|
30
|
+
system %{createdb test_data_miner}
|
|
31
|
+
ActiveRecord::Base.establish_connection(
|
|
32
|
+
'adapter' => 'postgresql',
|
|
33
|
+
'encoding' => 'utf8',
|
|
34
|
+
'database' => 'test_data_miner',
|
|
35
|
+
'username' => `whoami`.chomp
|
|
36
|
+
)
|
|
37
|
+
when /sqlite/i
|
|
38
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
|
39
|
+
else
|
|
40
|
+
system %{mysql -u root -ppassword -e "DROP DATABASE test_data_miner"}
|
|
41
|
+
system %{mysql -u root -ppassword -e "CREATE DATABASE test_data_miner CHARSET utf8"}
|
|
42
|
+
ActiveRecord::Base.establish_connection(
|
|
43
|
+
'adapter' => (RUBY_PLATFORM == 'java' ? 'mysql' : 'mysql2'),
|
|
44
|
+
'encoding' => 'utf8',
|
|
45
|
+
'database' => 'test_data_miner',
|
|
46
|
+
'username' => 'root',
|
|
47
|
+
'password' => 'password'
|
|
48
|
+
)
|
|
49
|
+
end
|
|
71
50
|
|
|
72
51
|
DataMiner::Run.auto_upgrade!
|
|
73
52
|
DataMiner::Run::ColumnStatistic.auto_upgrade!
|
|
@@ -27,7 +27,7 @@ describe DataMiner::Run::ColumnStatistic do
|
|
|
27
27
|
|
|
28
28
|
it "keeps max and min (as strings)" do
|
|
29
29
|
Pet.data_miner_runs.first.initial_column_statistics(:age).max.must_equal 'nil'
|
|
30
|
-
Pet.data_miner_runs.first.final_column_statistics(:age).max.
|
|
30
|
+
Pet.data_miner_runs.first.final_column_statistics(:age).max.must_include '17'
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
it "keeps average and sum" do
|
data/test/test_earth_import.rb
CHANGED
data/test/test_earth_tap.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: data_miner
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.3.
|
|
4
|
+
version: 2.3.1
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2012-06-
|
|
14
|
+
date: 2012-06-22 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: aasm
|
|
@@ -36,7 +36,7 @@ dependencies:
|
|
|
36
36
|
requirements:
|
|
37
37
|
- - ! '>='
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version:
|
|
39
|
+
version: 0.5.6
|
|
40
40
|
type: :runtime
|
|
41
41
|
prerelease: false
|
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -44,7 +44,7 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - ! '>='
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: 0.5.6
|
|
48
48
|
- !ruby/object:Gem::Dependency
|
|
49
49
|
name: activerecord
|
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,7 +100,7 @@ dependencies:
|
|
|
100
100
|
requirements:
|
|
101
101
|
- - ! '>='
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
103
|
+
version: 2.0.2
|
|
104
104
|
type: :runtime
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -108,7 +108,7 @@ dependencies:
|
|
|
108
108
|
requirements:
|
|
109
109
|
- - ! '>='
|
|
110
110
|
- !ruby/object:Gem::Version
|
|
111
|
-
version:
|
|
111
|
+
version: 2.0.2
|
|
112
112
|
- !ruby/object:Gem::Dependency
|
|
113
113
|
name: upsert
|
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -116,7 +116,7 @@ dependencies:
|
|
|
116
116
|
requirements:
|
|
117
117
|
- - ! '>='
|
|
118
118
|
- !ruby/object:Gem::Version
|
|
119
|
-
version:
|
|
119
|
+
version: 0.3.1
|
|
120
120
|
type: :runtime
|
|
121
121
|
prerelease: false
|
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -124,7 +124,7 @@ dependencies:
|
|
|
124
124
|
requirements:
|
|
125
125
|
- - ! '>='
|
|
126
126
|
- !ruby/object:Gem::Version
|
|
127
|
-
version:
|
|
127
|
+
version: 0.3.1
|
|
128
128
|
- !ruby/object:Gem::Dependency
|
|
129
129
|
name: dkastner-alchemist
|
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -349,6 +349,7 @@ files:
|
|
|
349
349
|
- lib/data_miner/unit_converter/alchemist.rb
|
|
350
350
|
- lib/data_miner/unit_converter/conversions.rb
|
|
351
351
|
- lib/data_miner/version.rb
|
|
352
|
+
- test/data_miner/step/test_import.rb
|
|
352
353
|
- test/data_miner/test_attribute.rb
|
|
353
354
|
- test/data_miner/unit_converter/test_alchemist.rb
|
|
354
355
|
- test/data_miner/unit_converter/test_conversions.rb
|
|
@@ -397,6 +398,7 @@ specification_version: 3
|
|
|
397
398
|
summary: Download, pull out of a ZIP/TAR/GZ/BZ2 archive, parse, correct, and import
|
|
398
399
|
XLS, ODS, XML, CSV, HTML, etc. into your ActiveRecord models.
|
|
399
400
|
test_files:
|
|
401
|
+
- test/data_miner/step/test_import.rb
|
|
400
402
|
- test/data_miner/test_attribute.rb
|
|
401
403
|
- test/data_miner/unit_converter/test_alchemist.rb
|
|
402
404
|
- test/data_miner/unit_converter/test_conversions.rb
|