data_miner 0.4.10 → 0.4.11
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/data_miner.gemspec +1 -1
- data/lib/data_miner.rb +5 -1
- data/lib/data_miner/attribute.rb +1 -1
- data/lib/data_miner/configuration.rb +14 -1
- data/lib/data_miner/import.rb +7 -4
- data/lib/data_miner/process.rb +1 -1
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.11
|
data/data_miner.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{data_miner}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.11"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Seamus Abshere", "Andy Rossmeissl"]
|
data/lib/data_miner.rb
CHANGED
@@ -46,6 +46,10 @@ module DataMiner
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
def self.log_info(message)
|
50
|
+
logger.info "[data_miner gem] #{message}"
|
51
|
+
end
|
52
|
+
|
49
53
|
def self.run(options = {})
|
50
54
|
DataMiner::Configuration.run options
|
51
55
|
end
|
@@ -59,7 +63,7 @@ ActiveRecord::Base.class_eval do
|
|
59
63
|
def self.x_data_miner(&block)
|
60
64
|
DataMiner.start_logging
|
61
65
|
|
62
|
-
DataMiner.
|
66
|
+
DataMiner.log_info "Skipping data_miner block in #{self.name} because called as x_data_miner"
|
63
67
|
end
|
64
68
|
|
65
69
|
def self.data_miner(&block)
|
data/lib/data_miner/attribute.rb
CHANGED
@@ -69,7 +69,7 @@ module DataMiner
|
|
69
69
|
|
70
70
|
what_it_is = record.send name
|
71
71
|
if what_it_is.nil? and !what_it_should_be.nil?
|
72
|
-
DataMiner.
|
72
|
+
DataMiner.log_info "ActiveRecord didn't like trying to set #{resource}.#{name} = #{what_it_should_be} (it came out as nil)"
|
73
73
|
nil
|
74
74
|
elsif what_it_is == what_it_was
|
75
75
|
false
|
@@ -38,7 +38,7 @@ module DataMiner
|
|
38
38
|
if DataMiner::Run.table_exists?
|
39
39
|
run = DataMiner::Run.create! :started_at => Time.now, :resource_name => resource.name if DataMiner::Run.table_exists?
|
40
40
|
else
|
41
|
-
DataMiner.
|
41
|
+
DataMiner.log_info "Not logging individual runs. Please run DataMiner::Run.create_tables if you want to enable this."
|
42
42
|
end
|
43
43
|
resource.delete_all if options[:from_scratch]
|
44
44
|
begin
|
@@ -95,6 +95,16 @@ You need to supply one of #{COMPLETE_UNIT_DEFINITIONS.map(&:inspect).to_sentence
|
|
95
95
|
|
96
96
|
def suggest_missing_column_migrations
|
97
97
|
missing_columns = Array.new
|
98
|
+
non_essential_missing_columns = Array.new
|
99
|
+
unless resource.column_names.include?('data_miner_touch_count')
|
100
|
+
non_essential_missing_columns << 'data_miner_touch_count'
|
101
|
+
DataMiner.log_info "Not counting how many times a row has been touched by data_miner."
|
102
|
+
end
|
103
|
+
unless resource.column_names.include?('data_miner_last_run_id')
|
104
|
+
non_essential_missing_columns << 'data_miner_last_run_id'
|
105
|
+
DataMiner.log_info "Not recording which run touched a row."
|
106
|
+
end
|
107
|
+
|
98
108
|
import_runnables.each do |runnable|
|
99
109
|
runnable.attributes.each do |_, attribute|
|
100
110
|
DataMiner.log_or_raise "You can't have an attribute column that ends in _units (reserved): #{resource.table_name}.#{attribute.name}" if attribute.name.ends_with? '_units'
|
@@ -123,16 +133,19 @@ and **replace** the resulting file with this:
|
|
123
133
|
class AddMissingColumnsTo#{resource.name} < ActiveRecord::Migration
|
124
134
|
def self.up
|
125
135
|
#{missing_columns.map { |column_name| " add_column :#{resource.table_name}, :#{column_name}, :#{column_name.ends_with?('_units') ? 'string' : 'FIXME_WHAT_COLUMN_TYPE_AM_I' }" }.join("\n") }
|
136
|
+
#{non_essential_missing_columns.map { |column_name| " add_column :#{resource.table_name}, :#{column_name}, :integer #optional" }.join("\n") }
|
126
137
|
end
|
127
138
|
|
128
139
|
def self.down
|
129
140
|
#{missing_columns.map { |column_name| " remove_column :#{resource.table_name}, :#{column_name}" }.join("\n") }
|
141
|
+
#{non_essential_missing_columns.map { |column_name| " remove_column :#{resource.table_name}, :#{column_name} #optional" }.join("\n") }
|
130
142
|
end
|
131
143
|
end
|
132
144
|
|
133
145
|
On the other hand, if you're working directly with create_table, this might be helpful:
|
134
146
|
|
135
147
|
#{missing_columns.map { |column_name| "t.#{column_name.ends_with?('_units') ? 'string' : 'FIXME_WHAT_COLUMN_TYPE_AM_I' } '#{column_name}'" }.join("\n") }
|
148
|
+
#{non_essential_missing_columns.map { |column_name| "t.integer '#{column_name}' #optional" }.join("\n") }
|
136
149
|
|
137
150
|
================================
|
138
151
|
}
|
data/lib/data_miner/import.rb
CHANGED
@@ -40,6 +40,10 @@ module DataMiner
|
|
40
40
|
|
41
41
|
def run(run)
|
42
42
|
begin; ActiveRecord::Base.connection.execute("SET NAMES 'utf8'"); rescue; end
|
43
|
+
|
44
|
+
increment_counter = resource.column_names.include?('data_miner_touch_count')
|
45
|
+
log_run = resource.column_names.include?('data_miner_last_run_id')
|
46
|
+
|
43
47
|
table.each_row do |row|
|
44
48
|
if errata
|
45
49
|
next if errata.rejects?(row)
|
@@ -48,14 +52,13 @@ module DataMiner
|
|
48
52
|
|
49
53
|
record = resource.send "find_or_initialize_by_#{@key}", attributes[@key].value_from_row(row)
|
50
54
|
changes = attributes.map { |_, attr| attr.set_record_from_row record, row }
|
51
|
-
record.data_miner_touch_count ||= 0
|
52
55
|
if changes.any?
|
53
|
-
record.data_miner_touch_count
|
54
|
-
record.data_miner_last_run = run
|
56
|
+
record.increment :data_miner_touch_count if increment_counter
|
57
|
+
record.data_miner_last_run = run if log_run
|
55
58
|
end
|
56
59
|
record.save!
|
57
60
|
end
|
58
|
-
DataMiner.
|
61
|
+
DataMiner.log_info "performed #{inspect}"
|
59
62
|
end
|
60
63
|
end
|
61
64
|
end
|
data/lib/data_miner/process.rb
CHANGED