data_miner 0.3.2 → 0.3.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/VERSION +1 -1
- data/data_miner.gemspec +2 -2
- data/lib/data_miner/configuration.rb +2 -1
- data/lib/data_miner/import.rb +4 -1
- data/lib/data_miner/process.rb +1 -1
- data/test/data_miner_test.rb +36 -3
- data/test/test_helper.rb +20 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.3
|
data/data_miner.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{data_miner}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.3"
|
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"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-03-04}
|
13
13
|
s.description = %q{Mine remote data into your ActiveRecord models. You can also perform associations and convert units.}
|
14
14
|
s.email = %q{seamus@abshere.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -40,7 +40,7 @@ module DataMiner
|
|
40
40
|
run = target.runs.create! :started_at => Time.now
|
41
41
|
finished = false
|
42
42
|
begin
|
43
|
-
runnables.each(
|
43
|
+
runnables.each { |runnable| runnable.run(run) }
|
44
44
|
finished = true
|
45
45
|
ensure
|
46
46
|
run.update_attributes! :ended_at => Time.now, :finished => finished
|
@@ -58,6 +58,7 @@ module DataMiner
|
|
58
58
|
def run(options = {})
|
59
59
|
classes.each do |klass|
|
60
60
|
if options[:class_names].blank? or options[:class_names].include?(klass.name)
|
61
|
+
klass.delete_all if options[:from_scratch]
|
61
62
|
klass.data_miner_config.run
|
62
63
|
end
|
63
64
|
end
|
data/lib/data_miner/import.rb
CHANGED
@@ -30,7 +30,7 @@ module DataMiner
|
|
30
30
|
configuration.attributes[attr_name].options_for_import[self] = attr_options
|
31
31
|
end
|
32
32
|
|
33
|
-
def run
|
33
|
+
def run(run)
|
34
34
|
table.each_row do |row|
|
35
35
|
if errata
|
36
36
|
next if errata.rejects?(row)
|
@@ -48,6 +48,9 @@ module DataMiner
|
|
48
48
|
|
49
49
|
Array.wrap(record_set).each do |record|
|
50
50
|
attributes.values.each { |attr| attr.set_record_from_row(self, record, row) }
|
51
|
+
record.data_miner_touch_count ||= 0
|
52
|
+
record.data_miner_touch_count += 1
|
53
|
+
record.data_miner_last_run = run
|
51
54
|
record.save!
|
52
55
|
end
|
53
56
|
end
|
data/lib/data_miner/process.rb
CHANGED
data/test/data_miner_test.rb
CHANGED
@@ -178,6 +178,7 @@ end
|
|
178
178
|
|
179
179
|
class AutomobileMakeYear < ActiveRecord::Base
|
180
180
|
set_primary_key :row_hash
|
181
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
181
182
|
|
182
183
|
belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'automobile_make_id'
|
183
184
|
belongs_to :model_year, :class_name => 'AutomobileModelYear', :foreign_key => 'automobile_model_year_id'
|
@@ -240,6 +241,7 @@ end
|
|
240
241
|
|
241
242
|
class AutomobileMakeFleetYear < ActiveRecord::Base
|
242
243
|
set_primary_key :row_hash
|
244
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
243
245
|
belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'automobile_make_id'
|
244
246
|
belongs_to :model_year, :class_name => 'AutomobileModelYear', :foreign_key => 'automobile_model_year_id'
|
245
247
|
belongs_to :make_year, :class_name => 'AutomobileMakeYear', :foreign_key => 'automobile_make_year_id'
|
@@ -260,6 +262,7 @@ end
|
|
260
262
|
|
261
263
|
class AutomobileModelYear < ActiveRecord::Base
|
262
264
|
set_primary_key :year
|
265
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
263
266
|
|
264
267
|
has_many :make_years, :class_name => 'AutomobileMakeYear'
|
265
268
|
has_many :variants, :class_name => 'AutomobileVariant'
|
@@ -275,6 +278,7 @@ end
|
|
275
278
|
|
276
279
|
class AutomobileFuelType < ActiveRecord::Base
|
277
280
|
set_primary_key :code
|
281
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
278
282
|
|
279
283
|
data_miner do
|
280
284
|
unique_index 'code'
|
@@ -315,6 +319,7 @@ end
|
|
315
319
|
|
316
320
|
class AutomobileModel < ActiveRecord::Base
|
317
321
|
set_primary_key :row_hash
|
322
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
318
323
|
|
319
324
|
has_many :variants, :class_name => 'AutomobileVariant'
|
320
325
|
belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'automobile_make_id'
|
@@ -326,6 +331,7 @@ end
|
|
326
331
|
|
327
332
|
class AutomobileMake < ActiveRecord::Base
|
328
333
|
set_primary_key :name
|
334
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
329
335
|
|
330
336
|
has_many :make_years, :class_name => 'AutomobileMakeYear'
|
331
337
|
has_many :models, :class_name => 'AutomobileModel'
|
@@ -346,6 +352,7 @@ end
|
|
346
352
|
|
347
353
|
class AutomobileVariant < ActiveRecord::Base
|
348
354
|
set_primary_key :row_hash
|
355
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
349
356
|
|
350
357
|
belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'automobile_make_id'
|
351
358
|
belongs_to :model, :class_name => 'AutomobileModel', :foreign_key => 'automobile_model_id'
|
@@ -534,6 +541,7 @@ end
|
|
534
541
|
|
535
542
|
class Country < ActiveRecord::Base
|
536
543
|
set_primary_key :iso_3166
|
544
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
537
545
|
|
538
546
|
data_miner do
|
539
547
|
unique_index 'iso_3166'
|
@@ -554,6 +562,7 @@ end
|
|
554
562
|
|
555
563
|
class Airport < ActiveRecord::Base
|
556
564
|
set_primary_key :iata_code
|
565
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
557
566
|
belongs_to :country
|
558
567
|
|
559
568
|
data_miner do
|
@@ -573,6 +582,7 @@ end
|
|
573
582
|
|
574
583
|
class CensusRegion < ActiveRecord::Base
|
575
584
|
set_primary_key :number
|
585
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
576
586
|
|
577
587
|
data_miner do
|
578
588
|
unique_index 'number'
|
@@ -609,6 +619,7 @@ class DataMinerTest < Test::Unit::TestCase
|
|
609
619
|
assert_raises DataMiner::MissingHashColumn do
|
610
620
|
class IncompleteCountry < ActiveRecord::Base
|
611
621
|
set_table_name 'countries'
|
622
|
+
belongs_to :data_miner_last_run, :class_name => 'DataMiner::Run'
|
612
623
|
|
613
624
|
data_miner do
|
614
625
|
# no unique index
|
@@ -630,7 +641,7 @@ class DataMinerTest < Test::Unit::TestCase
|
|
630
641
|
end
|
631
642
|
|
632
643
|
should "hash things if no unique index is listed" do
|
633
|
-
AutomobileVariant.data_miner_config.runnables[0].run
|
644
|
+
AutomobileVariant.data_miner_config.runnables[0].run(nil)
|
634
645
|
assert AutomobileVariant.first.row_hash.present?
|
635
646
|
end
|
636
647
|
|
@@ -655,7 +666,29 @@ class DataMinerTest < Test::Unit::TestCase
|
|
655
666
|
assert (target.runs.last.ended_at - approx_ended_at).abs < 5 # seconds
|
656
667
|
end
|
657
668
|
|
658
|
-
should "
|
659
|
-
|
669
|
+
should "request a re-import from scratch" do
|
670
|
+
c = Country.new
|
671
|
+
c.iso_3166 = 'JUNK'
|
672
|
+
c.save!
|
673
|
+
assert Country.exists?(:iso_3166 => 'JUNK')
|
674
|
+
DataMiner.run :class_names => %w{ Country }, :from_scratch => true
|
675
|
+
assert !Country.exists?(:iso_3166 => 'JUNK')
|
676
|
+
end
|
677
|
+
|
678
|
+
should "track how many times a row was touched" do
|
679
|
+
DataMiner.run :class_names => %w{ Country }, :from_scratch => true
|
680
|
+
assert_equal 1, Country.first.data_miner_touch_count
|
681
|
+
DataMiner.run :class_names => %w{ Country }
|
682
|
+
assert_equal 2, Country.first.data_miner_touch_count
|
683
|
+
end
|
684
|
+
|
685
|
+
should "keep track of what the last import run that touched a row was" do
|
686
|
+
DataMiner.run :class_names => %w{ Country }, :from_scratch => true
|
687
|
+
a = DataMiner::Run.last
|
688
|
+
assert_equal a, Country.first.data_miner_last_run
|
689
|
+
DataMiner.run :class_names => %w{ Country }
|
690
|
+
b = DataMiner::Run.last
|
691
|
+
assert a != b
|
692
|
+
assert_equal b, Country.first.data_miner_last_run
|
660
693
|
end
|
661
694
|
end
|
data/test/test_helper.rb
CHANGED
@@ -29,6 +29,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
29
29
|
t.float "longitude"
|
30
30
|
t.datetime "created_at"
|
31
31
|
t.datetime "updated_at"
|
32
|
+
t.integer 'data_miner_touch_count'
|
33
|
+
t.integer 'data_miner_last_run_id'
|
32
34
|
end
|
33
35
|
execute "ALTER TABLE airports ADD PRIMARY KEY (iata_code);"
|
34
36
|
|
@@ -37,6 +39,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
37
39
|
t.string "name"
|
38
40
|
t.datetime "created_at"
|
39
41
|
t.datetime "updated_at"
|
42
|
+
t.integer 'data_miner_touch_count'
|
43
|
+
t.integer 'data_miner_last_run_id'
|
40
44
|
end
|
41
45
|
execute "ALTER TABLE countries ADD PRIMARY KEY (iso_3166);"
|
42
46
|
|
@@ -45,6 +49,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
45
49
|
t.datetime "updated_at"
|
46
50
|
t.datetime "created_at"
|
47
51
|
t.integer "number"
|
52
|
+
t.integer 'data_miner_touch_count'
|
53
|
+
t.integer 'data_miner_last_run_id'
|
48
54
|
end
|
49
55
|
execute "ALTER TABLE census_regions ADD PRIMARY KEY (number);"
|
50
56
|
|
@@ -78,6 +84,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
78
84
|
t.string "carline_class_name"
|
79
85
|
t.string "speeds"
|
80
86
|
t.string "row_hash"
|
87
|
+
t.integer 'data_miner_touch_count'
|
88
|
+
t.integer 'data_miner_last_run_id'
|
81
89
|
end
|
82
90
|
execute "ALTER TABLE automobile_variants ADD PRIMARY KEY (row_hash);"
|
83
91
|
|
@@ -88,6 +96,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
88
96
|
t.float "emission_factor"
|
89
97
|
t.float "annual_distance"
|
90
98
|
t.string "code"
|
99
|
+
t.integer 'data_miner_touch_count'
|
100
|
+
t.integer 'data_miner_last_run_id'
|
91
101
|
end
|
92
102
|
execute "ALTER TABLE automobile_fuel_types ADD PRIMARY KEY (code);"
|
93
103
|
|
@@ -105,6 +115,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
105
115
|
t.datetime "updated_at"
|
106
116
|
|
107
117
|
t.string "row_hash"
|
118
|
+
t.integer 'data_miner_touch_count'
|
119
|
+
t.integer 'data_miner_last_run_id'
|
108
120
|
end
|
109
121
|
execute "ALTER TABLE automobile_make_fleet_years ADD PRIMARY KEY (row_hash);"
|
110
122
|
|
@@ -116,6 +128,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
116
128
|
t.float "fuel_efficiency"
|
117
129
|
t.integer "volume"
|
118
130
|
t.string "row_hash"
|
131
|
+
t.integer 'data_miner_touch_count'
|
132
|
+
t.integer 'data_miner_last_run_id'
|
119
133
|
end
|
120
134
|
execute "ALTER TABLE automobile_make_years ADD PRIMARY KEY (row_hash);"
|
121
135
|
|
@@ -125,6 +139,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
125
139
|
t.datetime "created_at"
|
126
140
|
t.float "fuel_efficiency"
|
127
141
|
t.boolean "major"
|
142
|
+
t.integer 'data_miner_touch_count'
|
143
|
+
t.integer 'data_miner_last_run_id'
|
128
144
|
end
|
129
145
|
execute "ALTER TABLE automobile_makes ADD PRIMARY KEY (name);"
|
130
146
|
|
@@ -133,6 +149,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
133
149
|
t.datetime "updated_at"
|
134
150
|
t.datetime "created_at"
|
135
151
|
t.float "fuel_efficiency"
|
152
|
+
t.integer 'data_miner_touch_count'
|
153
|
+
t.integer 'data_miner_last_run_id'
|
136
154
|
end
|
137
155
|
execute "ALTER TABLE automobile_model_years ADD PRIMARY KEY (year);"
|
138
156
|
|
@@ -142,6 +160,8 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
|
|
142
160
|
t.datetime "updated_at"
|
143
161
|
t.datetime "created_at"
|
144
162
|
t.string "row_hash"
|
163
|
+
t.integer 'data_miner_touch_count'
|
164
|
+
t.integer 'data_miner_last_run_id'
|
145
165
|
end
|
146
166
|
execute "ALTER TABLE automobile_models ADD PRIMARY KEY (row_hash);"
|
147
167
|
end
|
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: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seamus Abshere
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2010-
|
13
|
+
date: 2010-03-04 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|