data_miner 0.4.29 → 0.4.30

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.29
1
+ 0.4.30
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{data_miner}
8
- s.version = "0.4.29"
8
+ s.version = "0.4.30"
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-05-17}
12
+ s.date = %q{2010-05-18}
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 = [
@@ -224,7 +224,7 @@ module DataMiner
224
224
  options[:static]
225
225
  end
226
226
  def dictionary
227
- @_dictionary ||= Dictionary.new options[:dictionary]
227
+ @_dictionary ||= (options[:dictionary].is_a?(Dictionary) ? options[:dictionary] : Dictionary.new(options[:dictionary]))
228
228
  end
229
229
  def matcher
230
230
  @_matcher ||= (options[:matcher].is_a?(String) ? options[:matcher].constantize.new : options[:matcher])
@@ -49,6 +49,7 @@ module DataMiner
49
49
  def run(run)
50
50
  increment_counter = resource.column_names.include?('data_miner_touch_count')
51
51
  log_run = resource.column_names.include?('data_miner_last_run_id')
52
+ primary_key = resource.primary_key
52
53
  test_counter = 0
53
54
 
54
55
  table.each_row do |row|
@@ -67,7 +68,7 @@ OUT: #{attributes.inject(Hash.new) { |memo, v| attr_name, attr = v; memo[attr_na
67
68
  record.increment :data_miner_touch_count if increment_counter
68
69
  record.data_miner_last_run = run if log_run
69
70
  end
70
- record.save!
71
+ record.save! if record.send(primary_key).present?
71
72
  end
72
73
  DataMiner.log_info "performed #{inspect}"
73
74
  end
@@ -482,6 +482,19 @@ class CensusDivision < ActiveRecord::Base
482
482
  end
483
483
  end
484
484
 
485
+ class CensusDivisionDeux < ActiveRecord::Base
486
+ set_primary_key :number
487
+
488
+ data_miner do
489
+ import :url => 'http://www.census.gov/popest/geographic/codes02.csv', :skip => 9, :select => lambda { |row| row['Division'].to_s.strip != 'X' and row['FIPS CODE STATE'].to_s.strip == 'X'} do
490
+ key 'number', :field_name => 'Division'
491
+ store 'name', :field_name => 'Name'
492
+ store 'census_region_number', :field_name => 'Region'
493
+ store 'census_region_name', :field_name => 'Region', :dictionary => DataMiner::Dictionary.new(:input => 'number', :output => 'name', :url => 'http://data.brighterplanet.com/census_regions.csv')
494
+ end
495
+ end
496
+ end
497
+
485
498
  class CrosscallingCensusRegion < ActiveRecord::Base
486
499
  set_primary_key :number
487
500
 
@@ -1009,6 +1022,12 @@ class Aircraft < ActiveRecord::Base
1009
1022
  store 'manufacturer_name', :field_name => 'Manufacturer'
1010
1023
  store 'name', :field_name => 'Model'
1011
1024
  end
1025
+
1026
+ import 'Brighter Planet aircraft class codes',
1027
+ :url => 'http://static.brighterplanet.com/science/data/transport/air/bts_aircraft_type/bts_aircraft_types-brighter_planet_aircraft_classes.csv' do
1028
+ key 'bts_aircraft_type_code', :field_name => 'bts_aircraft_type'
1029
+ store 'brighter_planet_aircraft_class_code'
1030
+ end
1012
1031
  end
1013
1032
  end
1014
1033
  end
@@ -1110,6 +1129,16 @@ class DataMinerTest < Test::Unit::TestCase
1110
1129
  end
1111
1130
 
1112
1131
  if ENV['ALL'] == 'true' or ENV['FAST'] == 'true'
1132
+ should "allow specifying dictionaries explicitly" do
1133
+ CensusDivisionDeux.run_data_miner!
1134
+ assert_equal 'South Region', CensusDivisionDeux.find(5).census_region_name
1135
+ end
1136
+
1137
+ should "be able to key on things other than the primary key" do
1138
+ Aircraft.run_data_miner!
1139
+ assert_equal 'SP', Aircraft.find('DHC6').brighter_planet_aircraft_class_code
1140
+ end
1141
+
1113
1142
  should "be able to synthesize rows without using a full parser class" do
1114
1143
  AutomobileMakeFleetYear.run_data_miner!
1115
1144
  assert AutomobileMakeFleetYear.exists?(:name => 'Alfa Romeo IP 1978')
@@ -15,7 +15,7 @@ ActiveRecord::Base.establish_connection(
15
15
  )
16
16
 
17
17
  ActiveSupport::Inflector.inflections do |inflect|
18
- inflect.uncountable %w{ aircraft aircraft_deux }
18
+ inflect.uncountable %w{ aircraft aircraft_deux census_division_deux }
19
19
  end
20
20
 
21
21
  class Test::Unit::TestCase
@@ -138,6 +138,19 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
138
138
  end
139
139
  execute 'ALTER TABLE census_divisions ADD PRIMARY KEY (number);'
140
140
 
141
+ create_table 'census_division_deux', :force => true, :options => 'ENGINE=InnoDB default charset=utf8', :id => false do |t|
142
+ t.integer 'number'
143
+ t.string 'name'
144
+ t.datetime 'updated_at'
145
+ t.datetime 'created_at'
146
+ t.string 'census_region_name'
147
+ t.integer 'census_region_number'
148
+
149
+ t.integer 'data_miner_touch_count'
150
+ t.integer 'data_miner_last_run_id'
151
+ end
152
+ execute 'ALTER TABLE census_division_deux ADD PRIMARY KEY (number);'
153
+
141
154
  create_table 'crosscalling_census_divisions', :force => true, :options => 'ENGINE=InnoDB default charset=utf8', :id => false do |t|
142
155
  t.integer 'number'
143
156
  t.string 'name'
@@ -282,7 +295,7 @@ ActiveRecord::Schema.define(:version => 20090819143429) do
282
295
  t.string "bts_name"
283
296
  t.string "bts_aircraft_type_code"
284
297
 
285
- # t.string 'brighter_planet_aircraft_class_code'
298
+ t.string 'brighter_planet_aircraft_class_code'
286
299
  # t.float 'm3'
287
300
  # t.float 'm2'
288
301
  # t.float 'm1'
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 29
9
- version: 0.4.29
8
+ - 30
9
+ version: 0.4.30
10
10
  platform: ruby
11
11
  authors:
12
12
  - Seamus Abshere
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-05-17 00:00:00 -04:00
18
+ date: 2010-05-18 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency