earth 0.2.14 → 0.3.0

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.
@@ -1,7 +1,7 @@
1
1
  class AutomobileFuelType < ActiveRecord::Base
2
2
  set_primary_key :code
3
3
 
4
- has_many :automobiles, :foreign_key => 'fuel_type_id'
4
+ has_many :automobiles, :foreign_key => 'fuel_type_code'
5
5
 
6
6
  scope :ordered, :order => 'name'
7
7
 
@@ -11,11 +11,11 @@ AutomobileMake.class_eval do
11
11
  string 'fuel_efficiency_units'
12
12
  end
13
13
 
14
- process "Derive automobile makes from automobile variants" do
15
- AutomobileVariant.run_data_miner!
14
+ process "Derive automobile makes from automobile make model year variants" do
15
+ AutomobileMakeModelYearVariant.run_data_miner!
16
16
  connection.execute %{
17
17
  INSERT IGNORE INTO automobile_makes(name)
18
- SELECT automobile_variants.make_name FROM automobile_variants WHERE LENGTH(automobile_variants.make_name) > 0
18
+ SELECT automobile_make_model_year_variants.make_name FROM automobile_make_model_year_variants WHERE LENGTH(automobile_make_model_year_variants.make_name) > 0
19
19
  }
20
20
  end
21
21
 
@@ -1,10 +1,10 @@
1
1
  class AutomobileMake < ActiveRecord::Base
2
2
  set_primary_key :name
3
3
 
4
- has_many :make_years, :class_name => 'AutomobileMakeYear', :foreign_key => 'make_name'
5
- has_many :models, :class_name => 'AutomobileModel', :foreign_key => 'make_name'
6
- has_many :fleet_years, :class_name => 'AutomobileMakeFleetYear', :foreign_key => 'make_name'
7
- has_many :variants, :class_name => 'AutomobileVariant', :foreign_key => 'make_name'
4
+ has_many :make_years, :class_name => 'AutomobileMakeYear', :foreign_key => 'make_name'
5
+ has_many :models, :class_name => 'AutomobileMakeModel', :foreign_key => 'make_name'
6
+ has_many :fleet_years, :class_name => 'AutomobileMakeFleetYear', :foreign_key => 'make_name'
7
+ has_many :make_model_year_variants, :class_name => 'AutomobileMakeModelYearVariant', :foreign_key => 'make_name'
8
8
 
9
9
  scope :major, :conditions => { :major => true }, :order => :name
10
10
 
@@ -1,8 +1,7 @@
1
1
  class AutomobileMakeFleetYear < ActiveRecord::Base
2
2
  set_primary_key :name
3
3
 
4
- belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
5
- # WRONG belongs_to :model_year, :class_name => 'AutomobileModelYear', :foreign_key => 'automobile_model_year_name'
4
+ belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
6
5
  belongs_to :make_year, :class_name => 'AutomobileMakeYear', :foreign_key => 'make_year_name'
7
6
 
8
7
  data_miner do
@@ -0,0 +1,38 @@
1
+ AutomobileMakeModel.class_eval do
2
+ data_miner do
3
+ process "Start from scratch" do
4
+ connection.drop_table table_name
5
+ end
6
+
7
+ schema Earth.database_options do
8
+ string 'name' # make + model
9
+ string 'make_name'
10
+ float 'fuel_efficiency_city'
11
+ string 'fuel_efficiency_city_units'
12
+ float 'fuel_efficiency_highway'
13
+ string 'fuel_efficiency_highway_units'
14
+ end
15
+
16
+ process "Derive model names from automobile make model year variants" do
17
+ AutomobileMakeModelYearVariant.run_data_miner!
18
+ connection.execute %{
19
+ INSERT IGNORE INTO automobile_make_models(name, make_name)
20
+ SELECT automobile_make_model_year_variants.model_name, automobile_make_model_year_variants.make_name FROM automobile_make_model_year_variants WHERE LENGTH(automobile_make_model_year_variants.model_name) > 0 AND LENGTH(automobile_make_model_year_variants.make_name) > 0
21
+ }
22
+ end
23
+
24
+ # TODO not weighted until we get weightings on auto variants
25
+ process "Derive average fuel economy from automobile make model year variants" do
26
+ AutomobileMakeModelYearVariant.run_data_miner!
27
+ automobile_make_models = AutomobileMakeModel.arel_table
28
+ automobile_make_model_year_variants = AutomobileMakeModelYearVariant.arel_table
29
+ conditional_relation = automobile_make_models[:name].eq(automobile_make_model_year_variants[:model_name])
30
+ %w{ city highway }.each do |i|
31
+ relation = AutomobileMakeModelYearVariant.where(conditional_relation).where("`automobile_make_model_year_variants`.`fuel_efficiency_#{i}` IS NOT NULL").project("AVG(`automobile_make_model_year_variants`.`fuel_efficiency_#{i}`)")
32
+ update_all "fuel_efficiency_#{i} = (#{relation.to_sql})"
33
+ update_all "fuel_efficiency_#{i}_units = 'kilometres_per_litre'"
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,14 @@
1
+ class AutomobileMakeModel < ActiveRecord::Base
2
+ set_primary_key :name
3
+
4
+ belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
5
+ has_many :make_model_year_variants, :class_name => 'AutomobileMakeModelYearVariant', :foreign_key => 'make_model_name'
6
+
7
+ data_miner do
8
+ tap "Brighter Planet's auto model data", Earth.taps_server
9
+
10
+ process "bring in dependencies" do
11
+ run_data_miner_on_belongs_to_associations
12
+ end
13
+ end
14
+ end
@@ -1,4 +1,4 @@
1
- AutomobileModelYear.class_eval do
1
+ AutomobileMakeModelYear.class_eval do
2
2
  data_miner do
3
3
  process "Start from scratch" do
4
4
  connection.drop_table table_name
@@ -7,7 +7,7 @@ AutomobileModelYear.class_eval do
7
7
  schema Earth.database_options do
8
8
  string 'name'
9
9
  string 'make_name'
10
- string 'model_name'
10
+ string 'make_model_name'
11
11
  integer 'year'
12
12
  string 'make_year_name'
13
13
  float 'fuel_efficiency'
@@ -18,11 +18,11 @@ AutomobileModelYear.class_eval do
18
18
  string 'fuel_efficiency_highway_units'
19
19
  end
20
20
 
21
- process "Derive model year names from automobile variants" do
22
- AutomobileVariant.run_data_miner!
21
+ process "Derive model year names from automobile make model year variants" do
22
+ AutomobileMakeModelYearVariant.run_data_miner!
23
23
  connection.execute %{
24
- INSERT IGNORE INTO automobile_model_years(name, make_name, model_name, year, make_year_name)
25
- SELECT automobile_variants.model_year_name, automobile_variants.make_name, automobile_variants.model_name, automobile_variants.year, automobile_variants.make_year_name FROM automobile_variants WHERE LENGTH(automobile_variants.make_name) > 0 AND LENGTH(automobile_variants.model_name) > 0
24
+ INSERT IGNORE INTO automobile_make_model_years(name, make_name, model_name, year, make_year_name)
25
+ SELECT automobile_make_model_year_variants.model_year_name, automobile_make_model_year_variants.make_name, automobile_make_model_year_variants.model_name, automobile_make_model_year_variants.year, automobile_make_model_year_variants.make_year_name FROM automobile_make_model_year_variants WHERE LENGTH(automobile_make_model_year_variants.make_name) > 0 AND LENGTH(automobile_make_model_year_variants.model_name) > 0
26
26
  }
27
27
  end
28
28
 
@@ -30,13 +30,13 @@ AutomobileModelYear.class_eval do
30
30
  # note that we used to derive averages from make years, but here we get it from variants
31
31
  # even without volume-weighting, the values are much better.
32
32
  # for example, 20km/l for a toyota prius 2006 vs. 13km/l if you use make years
33
- process "Calculate city and highway fuel efficiency from automobile variants" do
34
- AutomobileVariant.run_data_miner!
35
- automobile_model_years = AutomobileModelYear.arel_table
36
- automobile_variants = AutomobileVariant.arel_table
37
- conditional_relation = automobile_model_years[:name].eq(automobile_variants[:model_year_name])
33
+ process "Calculate city and highway fuel efficiency from automobile make model year variants" do
34
+ AutomobileMakeModelYearVariant.run_data_miner!
35
+ automobile_make_model_years = AutomobileMakeModelYear.arel_table
36
+ automobile_make_model_year_variants = AutomobileMakeModelYearVariant.arel_table
37
+ conditional_relation = automobile_make_model_years[:name].eq(automobile_make_model_year_variants[:model_year_name])
38
38
  %w{ city highway }.each do |i|
39
- relation = AutomobileVariant.where(conditional_relation).where("`automobile_variants`.`fuel_efficiency_#{i}` IS NOT NULL").project("AVG(`automobile_variants`.`fuel_efficiency_#{i}`)")
39
+ relation = AutomobileMakeModelYearVariant.where(conditional_relation).where("`automobile_make_model_year_variants`.`fuel_efficiency_#{i}` IS NOT NULL").project("AVG(`automobile_make_model_year_variants`.`fuel_efficiency_#{i}`)")
40
40
  update_all "fuel_efficiency_#{i} = (#{relation.to_sql})"
41
41
  update_all "fuel_efficiency_#{i}_units = 'kilometres_per_litre'"
42
42
  end
@@ -0,0 +1,15 @@
1
+ class AutomobileMakeModelYear < ActiveRecord::Base
2
+ set_primary_key :name
3
+
4
+ belongs_to :make_year, :class_name => 'AutomobileMakeYear', :foreign_key => 'make_year_name'
5
+ has_many :make_model_year_variants, :class_name => 'AutomobileMakeModelYearVariant', :foreign_key => 'make_model_year_name'
6
+ has_many :automobiles, :foreign_key => 'make_model_year_name'
7
+
8
+ data_miner do
9
+ tap "Brighter Planet's model year data", Earth.taps_server
10
+
11
+ process "pull dependencies" do
12
+ run_data_miner_on_belongs_to_associations
13
+ end
14
+ end
15
+ end
@@ -1,4 +1,4 @@
1
- AutomobileVariant.class_eval do
1
+ AutomobileMakeModelYearVariant.class_eval do
2
2
  class << self
3
3
  def transmission_is_blank?(row)
4
4
  row['transmission'].blank?
@@ -105,7 +105,7 @@ AutomobileVariant.class_eval do
105
105
  '(GM-PONT)' => nil,
106
106
  }
107
107
 
108
- class AutomobileVariant::ParserB
108
+ class AutomobileMakeModelYearVariant::ParserB
109
109
  attr_accessor :year
110
110
  def initialize(options = {})
111
111
  @year = options[:year]
@@ -189,7 +189,7 @@ AutomobileVariant.class_eval do
189
189
  end
190
190
  end
191
191
  end
192
- class AutomobileVariant::ParserC
192
+ class AutomobileMakeModelYearVariant::ParserC
193
193
  attr_accessor :year
194
194
  def initialize(options = {})
195
195
  @year = options[:year]
@@ -214,7 +214,7 @@ AutomobileVariant.class_eval do
214
214
  row
215
215
  end
216
216
  end
217
- class AutomobileVariant::ParserD
217
+ class AutomobileMakeModelYearVariant::ParserD
218
218
  attr_accessor :year
219
219
  def initialize(options = {})
220
220
  @year = options[:year]
@@ -238,7 +238,7 @@ AutomobileVariant.class_eval do
238
238
  row
239
239
  end
240
240
  end
241
- class AutomobileVariant::ParserE
241
+ class AutomobileMakeModelYearVariant::ParserE
242
242
  OLD_FUEL_CODES = {
243
243
  'CNG' => 'C',
244
244
  'DU' => 'D',
@@ -277,9 +277,9 @@ AutomobileVariant.class_eval do
277
277
  string 'row_hash'
278
278
  string 'name' # short name!
279
279
  string 'make_name'
280
- string 'model_name' # make + model
280
+ string 'make_model_name' # make + model
281
281
  string 'make_year_name' # make + year
282
- string 'model_year_name' # make + model + year
282
+ string 'make_model_year_name' # make + model + year
283
283
  integer 'year'
284
284
  float 'fuel_efficiency_city'
285
285
  string 'fuel_efficiency_city_units'
@@ -304,9 +304,9 @@ AutomobileVariant.class_eval do
304
304
  string 'carline_class_name'
305
305
  string 'speeds'
306
306
  index 'make_name'
307
- index 'model_name'
307
+ index 'make_model_name'
308
308
  index 'make_year_name'
309
- index 'model_year_name'
309
+ index 'make_model_year_name'
310
310
  end
311
311
 
312
312
  # # 1985---1997
@@ -315,7 +315,7 @@ AutomobileVariant.class_eval do
315
315
  import("19#{ yy } Fuel Economy Guide",
316
316
  :url => "http://www.fueleconomy.gov/FEG/epadata/#{yy}mfgui.zip",
317
317
  :filename => filename,
318
- :transform => { :class => AutomobileVariant::ParserB, :year => "19#{yy}".to_i },
318
+ :transform => { :class => AutomobileMakeModelYearVariant::ParserB, :year => "19#{yy}".to_i },
319
319
  :errata => 'http://static.brighterplanet.com/science/data/transport/automobiles/fuel_economy_guide/errata.csv') do
320
320
  key 'row_hash'
321
321
  store 'name', :field_name => 'model'
@@ -353,7 +353,7 @@ AutomobileVariant.class_eval do
353
353
  2005 => { :url => 'http://www.fueleconomy.gov/FEG/epadata/05data.zip', :filename => 'guide2005-2004oct15.csv' }
354
354
  }.sort { |a, b| a.first <=> b.first }.each do |year, options|
355
355
  import "#{ year } Fuel Economy Guide",
356
- options.merge(:transform => { :class => AutomobileVariant::ParserC, :year => year },
356
+ options.merge(:transform => { :class => AutomobileMakeModelYearVariant::ParserC, :year => year },
357
357
  :errata => 'http://static.brighterplanet.com/science/data/transport/automobiles/fuel_economy_guide/errata.csv') do
358
358
  key 'row_hash'
359
359
  store 'name', :field_name => 'model'
@@ -385,7 +385,7 @@ AutomobileVariant.class_eval do
385
385
  2009 => { :url => 'http://www.fueleconomy.gov/FEG/epadata/09data.zip', :filename => '2009_FE_guide for DOE_ALL-rel dates-no-sales-8-28-08download.csv' },
386
386
  }.sort { |a, b| a.first <=> b.first }.each do |year, options|
387
387
  import "#{ year } Fuel Economy Guide",
388
- options.merge(:transform => { :class => AutomobileVariant::ParserD, :year => year },
388
+ options.merge(:transform => { :class => AutomobileMakeModelYearVariant::ParserD, :year => year },
389
389
  :errata => 'http://static.brighterplanet.com/science/data/transport/automobiles/fuel_economy_guide/errata.csv') do
390
390
  key 'row_hash'
391
391
  store 'name', :field_name => 'model'
@@ -450,7 +450,7 @@ AutomobileVariant.class_eval do
450
450
  update_all 'fuel_efficiency_highway = 1 / ((0.001376 / 0.425143707) + (1.3466 / raw_fuel_efficiency_highway))'
451
451
  end
452
452
 
453
- %w{ AutomobileMake AutomobileModelYear AutomobileModel }.each do |synthetic_resource|
453
+ %w{ AutomobileMake AutomobileMakeModelYear AutomobileMakeModel }.each do |synthetic_resource|
454
454
  process "Synthesize #{synthetic_resource}" do
455
455
  synthetic_resource.constantize.run_data_miner!
456
456
  end
@@ -0,0 +1,17 @@
1
+ class AutomobileMakeModelYearVariant < ActiveRecord::Base
2
+ set_primary_key :row_hash
3
+
4
+ belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
5
+ belongs_to :make_model, :class_name => 'AutomobileMakeModel', :foreign_key => 'make_model_name'
6
+ belongs_to :make_model_year, :class_name => 'AutomobileMakeModelYear', :foreign_key => 'make_model_year_name'
7
+ belongs_to :fuel_type, :class_name => 'AutomobileFuelType', :foreign_key => 'fuel_type_code'
8
+ has_many :automobiles, :foreign_key => 'make_model_year_variant_row_hash'
9
+
10
+ data_miner do
11
+ tap "Brighter Planet's sanitized automobile make model year variant data", Earth.taps_server
12
+
13
+ process "pull dependencies" do
14
+ run_data_miner_on_belongs_to_associations
15
+ end
16
+ end
17
+ end
@@ -1,7 +1,7 @@
1
1
  class AutomobileMakeYear < ActiveRecord::Base
2
2
  set_primary_key :name
3
3
 
4
- belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
4
+ belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
5
5
  has_many :fleet_years, :class_name => 'AutomobileMakeFleetYear', :foreign_key => 'make_year_name'
6
6
 
7
7
  data_miner do
@@ -1,7 +1,7 @@
1
1
  class AutomobileSizeClass < ActiveRecord::Base
2
2
  set_primary_key :name
3
3
 
4
- has_many :automobiles, :foreign_key => 'size_class_id'
4
+ has_many :automobiles, :foreign_key => 'size_class_name'
5
5
 
6
6
  falls_back_on :hybrid_fuel_efficiency_city_multiplier => 1.651, # https://brighterplanet.sifterapp.com/issue/667
7
7
  :hybrid_fuel_efficiency_highway_multiplier => 1.213,
@@ -2,7 +2,7 @@ require 'earth/automobile/automobile_fuel_type/data_miner'
2
2
  require 'earth/automobile/automobile_make/data_miner'
3
3
  require 'earth/automobile/automobile_make_fleet_year/data_miner'
4
4
  require 'earth/automobile/automobile_make_year/data_miner'
5
- require 'earth/automobile/automobile_model/data_miner'
6
- require 'earth/automobile/automobile_model_year/data_miner'
5
+ require 'earth/automobile/automobile_make_model/data_miner'
6
+ require 'earth/automobile/automobile_make_model_year/data_miner'
7
7
  require 'earth/automobile/automobile_size_class/data_miner'
8
- require 'earth/automobile/automobile_variant/data_miner'
8
+ require 'earth/automobile/automobile_make_model_year_variant/data_miner'
@@ -2,7 +2,7 @@ require 'earth/automobile/automobile_fuel_type'
2
2
  require 'earth/automobile/automobile_make'
3
3
  require 'earth/automobile/automobile_make_fleet_year'
4
4
  require 'earth/automobile/automobile_make_year'
5
- require 'earth/automobile/automobile_model'
6
- require 'earth/automobile/automobile_model_year'
5
+ require 'earth/automobile/automobile_make_model'
6
+ require 'earth/automobile/automobile_make_model_year'
7
7
  require 'earth/automobile/automobile_size_class'
8
- require 'earth/automobile/automobile_variant'
8
+ require 'earth/automobile/automobile_make_model_year_variant'
@@ -7,35 +7,23 @@ BusClass.class_eval do
7
7
  float 'passengers'
8
8
  float 'speed'
9
9
  string 'speed_units'
10
- float 'duration'
11
- string 'duration_units'
12
10
  float 'diesel_intensity'
13
11
  string 'diesel_intensity_units'
14
- float 'gasoline_intensity'
15
- string 'gasoline_intensity_units'
16
12
  float 'alternative_fuels_intensity'
17
13
  string 'alternative_fuels_intensity_units'
18
- float 'fugitive_air_conditioning_emission'
19
- string 'fugitive_air_conditioning_emission_units'
20
- end
21
-
22
- process "Define some necessary conversions" do
23
- Conversions.register :gallons_per_mile, :litres_per_kilometre, 2.35214583
24
- Conversions.register :pounds_per_mile, :kilograms_per_kilometre, 0.281849232
14
+ float 'air_conditioning_emission_factor'
15
+ string 'air_conditioning_emission_factor_units'
25
16
  end
26
17
 
27
18
  import "a list of bus classes and pre-calculated trip and fuel use characteristics",
28
- :url => 'http://static.brighterplanet.com/science/data/transport/bus/bus_classes.csv' do
19
+ :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdGRsSnJoS1hraGJvR012cDROWXFPbVE&hl=en&single=true&gid=0&output=csv' do
29
20
  key 'name'
30
- store 'distance', :from_units => :miles, :to_units => :kilometres
21
+ store 'distance', :units_field_name => 'distance_units'
31
22
  store 'passengers'
32
- store 'speed', :from_units => :miles, :to_units => :kilometres
33
- store 'duration', :units => :minutes
34
- store 'diesel_intensity', :field_name => 'diesel_per_vehicle_mile', :from_units => :gallons_per_mile, :to_units => :litres_per_kilometre
35
- store 'gasoline_intensity', :field_name => 'gasoline_per_vehicle_mile', :from_units => :gallons_per_mile, :to_units => :litres_per_kilometre
36
- store 'alternative_fuels_intensity', :field_name => 'alternative_fuels_per_vehicle_mile', :from_units => :gallons_per_mile, :to_units => :litres_per_kilometre
37
- store 'fugitive_air_conditioning_emission', :field_name => 'fugitive_air_conditioning_emission_per_vehicle_mile', :from_units => :pounds_per_mile, :to_units => :kilograms_per_kilometre
23
+ store 'speed', :units_field_name => 'speed_units'
24
+ store 'diesel_intensity', :units_field_name => 'diesel_intensity_units'
25
+ store 'alternative_fuels_intensity', :units_field_name => 'alternative_fuels_intensity_units'
26
+ store 'air_conditioning_emission_factor', :units_field_name => 'air_conditioning_emission_factor_units'
38
27
  end
39
28
  end
40
29
  end
41
-
@@ -7,11 +7,9 @@ class BusClass < ActiveRecord::Base
7
7
  falls_back_on :distance => 5.45.miles.to(:kilometres),
8
8
  :passengers => 8.25,
9
9
  :speed => 19.67.miles.to(:kilometres),
10
- :duration => 0.277,
11
10
  :diesel_intensity => 0.143.gallons_per_mile.to(:litres_per_kilometre),
12
- :gasoline_intensity => 0.000123.gallons_per_mile.to(:litres_per_kilometre),
13
11
  :alternative_fuels_intensity => 0.0517.gallons_per_mile.to(:litres_per_kilometre),
14
- :fugitive_air_conditioning_emission => 0.0203.pounds_per_mile.to(:kilograms_per_kilometre)
12
+ :air_conditioning_emission_factor => 0.0203.pounds_per_mile.to(:kilograms_per_kilometre)
15
13
 
16
14
  data_miner do
17
15
  tap "Brighter Planet's sanitized bus class data", Earth.taps_server
@@ -2,18 +2,16 @@ RailClass.class_eval do
2
2
  data_miner do
3
3
  schema Earth.database_options do
4
4
  string 'name'
5
+ string 'description'
6
+ float 'passengers'
5
7
  float 'distance'
6
8
  string 'distance_units'
7
- float 'passengers'
8
9
  float 'speed'
9
10
  string 'speed_units'
10
- float 'duration'
11
- string 'duration_units'
12
11
  float 'electricity_intensity'
13
12
  string 'electricity_intensity_units'
14
13
  float 'diesel_intensity'
15
14
  string 'diesel_intensity_units'
16
- string 'description'
17
15
  end
18
16
 
19
17
  process "Define some unit conversions" do
@@ -24,13 +22,11 @@ RailClass.class_eval do
24
22
  :url => 'http://static.brighterplanet.com/science/data/transport/rail/rail_classes.csv' do
25
23
  key 'name'
26
24
  store 'description'
27
- store 'distance', :from_units => :miles, :to_units => :kilometres
28
- store 'speed', :from_units => :miles, :to_units => :kilometres
29
- store 'duration'
30
25
  store 'passengers'
31
- store 'electricity_intensity', :field_name => 'electricity_per_vehicle_mile', :from_units => :miles, :to_units => :kilometres
32
- store 'diesel_intensity', :field_name => 'diesel_per_vehicle_mile', :from_units => :gallons_per_mile, :to_units => :litres_per_kilometre
26
+ store 'distance', :units_field_name => 'distance_units'
27
+ store 'speed', :units_field_name => 'speed_units'
28
+ store 'electricity_intensity', :units_field_name => 'electricity_intensity_units'
29
+ store 'diesel_intensity', :units_field_name => 'diesel_intensity_units'
33
30
  end
34
31
  end
35
32
  end
36
-
@@ -2,15 +2,8 @@ class RailClass < ActiveRecord::Base
2
2
  set_primary_key :name
3
3
 
4
4
  has_many :rail_trips
5
-
5
+
6
6
  data_miner do
7
7
  tap "Brighter Planet's rail class data", Earth.taps_server
8
8
  end
9
-
10
- # speed is missing
11
- # https://brighterplanet.sifterapp.com/projects/30/issues/455
12
- falls_back_on :passengers => 25.06,
13
- :distance => 8.57.miles.to(:kilometres),
14
- :diesel_intensity => 0.05.gallons_per_mile.to(:litres_per_kilometre),
15
- :electricity_intensity => 8.89.miles.to(:kilometres)
16
9
  end
@@ -3,7 +3,7 @@ require 'earth/air/aircraft'
3
3
  require 'earth/air/aircraft/data_miner'
4
4
 
5
5
  describe Aircraft do
6
- describe 'import' do
6
+ describe 'import', :slow => true do
7
7
  it 'should treat empty cells as null' do
8
8
  Aircraft.execute_schema
9
9
  Aircraft.run_data_miner!
data/spec/spec_helper.rb CHANGED
@@ -9,3 +9,7 @@ ActiveRecord::Base.establish_connection :adapter => 'sqlite3',
9
9
 
10
10
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
11
11
  require 'earth' # we do require Earth to live
12
+
13
+ RSpec.configure do |c|
14
+ c.filter_run_excluding :slow => true
15
+ end
File without changes
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: earth
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 2
9
- - 14
10
- version: 0.2.14
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Seamus Abshere
@@ -17,18 +16,29 @@ autorequire:
17
16
  bindir: bin
18
17
  cert_chain: []
19
18
 
20
- date: 2010-11-18 00:00:00 -05:00
19
+ date: 2010-11-19 00:00:00 -05:00
21
20
  default_executable:
22
21
  dependencies:
23
22
  - !ruby/object:Gem::Dependency
24
- name: activerecord
25
- prerelease: false
23
+ name: earth
26
24
  requirement: &id001 !ruby/object:Gem::Requirement
27
25
  none: false
28
26
  requirements:
29
27
  - - ">="
30
28
  - !ruby/object:Gem::Version
31
- hash: 299253624
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ prerelease: false
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: activerecord
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
32
42
  segments:
33
43
  - 3
34
44
  - 0
@@ -36,128 +46,120 @@ dependencies:
36
46
  - beta4
37
47
  version: 3.0.0.beta4
38
48
  type: :runtime
39
- version_requirements: *id001
49
+ prerelease: false
50
+ version_requirements: *id002
40
51
  - !ruby/object:Gem::Dependency
41
52
  name: data_miner
42
- prerelease: false
43
- requirement: &id002 !ruby/object:Gem::Requirement
53
+ requirement: &id003 !ruby/object:Gem::Requirement
44
54
  none: false
45
55
  requirements:
46
56
  - - ~>
47
57
  - !ruby/object:Gem::Version
48
- hash: 7
49
58
  segments:
50
59
  - 0
51
60
  - 5
52
61
  - 6
53
62
  version: 0.5.6
54
63
  type: :runtime
55
- version_requirements: *id002
64
+ prerelease: false
65
+ version_requirements: *id003
56
66
  - !ruby/object:Gem::Dependency
57
67
  name: falls_back_on
58
- prerelease: false
59
- requirement: &id003 !ruby/object:Gem::Requirement
68
+ requirement: &id004 !ruby/object:Gem::Requirement
60
69
  none: false
61
70
  requirements:
62
71
  - - ">="
63
72
  - !ruby/object:Gem::Version
64
- hash: 25
65
73
  segments:
66
74
  - 0
67
75
  - 0
68
76
  - 3
69
77
  version: 0.0.3
70
78
  type: :runtime
71
- version_requirements: *id003
79
+ prerelease: false
80
+ version_requirements: *id004
72
81
  - !ruby/object:Gem::Dependency
73
82
  name: geokit
74
- prerelease: false
75
- requirement: &id004 !ruby/object:Gem::Requirement
83
+ requirement: &id005 !ruby/object:Gem::Requirement
76
84
  none: false
77
85
  requirements:
78
86
  - - ">="
79
87
  - !ruby/object:Gem::Version
80
- hash: 3
81
88
  segments:
82
89
  - 1
83
90
  - 5
84
91
  - 0
85
92
  version: 1.5.0
86
93
  type: :runtime
87
- version_requirements: *id004
94
+ prerelease: false
95
+ version_requirements: *id005
88
96
  - !ruby/object:Gem::Dependency
89
97
  name: cohort_scope
90
- prerelease: false
91
- requirement: &id005 !ruby/object:Gem::Requirement
98
+ requirement: &id006 !ruby/object:Gem::Requirement
92
99
  none: false
93
100
  requirements:
94
101
  - - ">="
95
102
  - !ruby/object:Gem::Version
96
- hash: 17
97
103
  segments:
98
104
  - 0
99
105
  - 0
100
106
  - 7
101
107
  version: 0.0.7
102
108
  type: :runtime
103
- version_requirements: *id005
109
+ prerelease: false
110
+ version_requirements: *id006
104
111
  - !ruby/object:Gem::Dependency
105
112
  name: conversions
106
- prerelease: false
107
- requirement: &id006 !ruby/object:Gem::Requirement
113
+ requirement: &id007 !ruby/object:Gem::Requirement
108
114
  none: false
109
115
  requirements:
110
116
  - - ">="
111
117
  - !ruby/object:Gem::Version
112
- hash: 13
113
118
  segments:
114
119
  - 1
115
120
  - 4
116
121
  - 5
117
122
  version: 1.4.5
118
123
  type: :runtime
119
- version_requirements: *id006
124
+ prerelease: false
125
+ version_requirements: *id007
120
126
  - !ruby/object:Gem::Dependency
121
127
  name: weighted_average
122
- prerelease: false
123
- requirement: &id007 !ruby/object:Gem::Requirement
128
+ requirement: &id008 !ruby/object:Gem::Requirement
124
129
  none: false
125
130
  requirements:
126
131
  - - ">="
127
132
  - !ruby/object:Gem::Version
128
- hash: 23
129
133
  segments:
130
134
  - 0
131
135
  - 0
132
136
  - 4
133
137
  version: 0.0.4
134
138
  type: :runtime
135
- version_requirements: *id007
139
+ prerelease: false
140
+ version_requirements: *id008
136
141
  - !ruby/object:Gem::Dependency
137
142
  name: loose_tight_dictionary
138
- prerelease: false
139
- requirement: &id008 !ruby/object:Gem::Requirement
143
+ requirement: &id009 !ruby/object:Gem::Requirement
140
144
  none: false
141
145
  requirements:
142
146
  - - ">="
143
147
  - !ruby/object:Gem::Version
144
- hash: 15
145
148
  segments:
146
149
  - 0
147
150
  - 0
148
151
  - 8
149
152
  version: 0.0.8
150
153
  type: :runtime
151
- version_requirements: *id008
154
+ prerelease: false
155
+ version_requirements: *id009
152
156
  - !ruby/object:Gem::Dependency
153
157
  name: rspec
154
- prerelease: false
155
- requirement: &id009 !ruby/object:Gem::Requirement
158
+ requirement: &id010 !ruby/object:Gem::Requirement
156
159
  none: false
157
160
  requirements:
158
161
  - - ">="
159
162
  - !ruby/object:Gem::Version
160
- hash: 62196417
161
163
  segments:
162
164
  - 2
163
165
  - 0
@@ -166,79 +168,280 @@ dependencies:
166
168
  - 17
167
169
  version: 2.0.0.beta.17
168
170
  type: :development
169
- version_requirements: *id009
171
+ prerelease: false
172
+ version_requirements: *id010
170
173
  - !ruby/object:Gem::Dependency
171
174
  name: rake
172
- prerelease: false
173
- requirement: &id010 !ruby/object:Gem::Requirement
175
+ requirement: &id011 !ruby/object:Gem::Requirement
174
176
  none: false
175
177
  requirements:
176
178
  - - ">="
177
179
  - !ruby/object:Gem::Version
178
- hash: 3
179
180
  segments:
180
181
  - 0
181
182
  version: "0"
182
183
  type: :development
183
- version_requirements: *id010
184
+ prerelease: false
185
+ version_requirements: *id011
184
186
  - !ruby/object:Gem::Dependency
185
187
  name: jeweler
186
- prerelease: false
187
- requirement: &id011 !ruby/object:Gem::Requirement
188
+ requirement: &id012 !ruby/object:Gem::Requirement
188
189
  none: false
189
190
  requirements:
190
191
  - - ">="
191
192
  - !ruby/object:Gem::Version
192
- hash: 3
193
193
  segments:
194
194
  - 0
195
195
  version: "0"
196
196
  type: :development
197
- version_requirements: *id011
197
+ prerelease: false
198
+ version_requirements: *id012
198
199
  - !ruby/object:Gem::Dependency
199
200
  name: rcov
200
- prerelease: false
201
- requirement: &id012 !ruby/object:Gem::Requirement
201
+ requirement: &id013 !ruby/object:Gem::Requirement
202
202
  none: false
203
203
  requirements:
204
204
  - - ">="
205
205
  - !ruby/object:Gem::Version
206
- hash: 3
207
206
  segments:
208
207
  - 0
209
208
  version: "0"
210
209
  type: :development
211
- version_requirements: *id012
210
+ prerelease: false
211
+ version_requirements: *id013
212
212
  - !ruby/object:Gem::Dependency
213
213
  name: rdoc
214
- prerelease: false
215
- requirement: &id013 !ruby/object:Gem::Requirement
214
+ requirement: &id014 !ruby/object:Gem::Requirement
216
215
  none: false
217
216
  requirements:
218
217
  - - ">="
219
218
  - !ruby/object:Gem::Version
220
- hash: 3
221
219
  segments:
222
220
  - 0
223
221
  version: "0"
224
222
  type: :development
225
- version_requirements: *id013
223
+ prerelease: false
224
+ version_requirements: *id014
226
225
  - !ruby/object:Gem::Dependency
227
226
  name: sqlite3-ruby
227
+ requirement: &id015 !ruby/object:Gem::Requirement
228
+ none: false
229
+ requirements:
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ segments:
233
+ - 1
234
+ - 3
235
+ - 0
236
+ version: 1.3.0
237
+ type: :development
228
238
  prerelease: false
229
- requirement: &id014 !ruby/object:Gem::Requirement
239
+ version_requirements: *id015
240
+ - !ruby/object:Gem::Dependency
241
+ name: activerecord
242
+ requirement: &id016 !ruby/object:Gem::Requirement
243
+ none: false
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ segments:
248
+ - 3
249
+ - 0
250
+ - 0
251
+ - beta4
252
+ version: 3.0.0.beta4
253
+ type: :runtime
254
+ prerelease: false
255
+ version_requirements: *id016
256
+ - !ruby/object:Gem::Dependency
257
+ name: data_miner
258
+ requirement: &id017 !ruby/object:Gem::Requirement
259
+ none: false
260
+ requirements:
261
+ - - ~>
262
+ - !ruby/object:Gem::Version
263
+ segments:
264
+ - 0
265
+ - 5
266
+ - 6
267
+ version: 0.5.6
268
+ type: :runtime
269
+ prerelease: false
270
+ version_requirements: *id017
271
+ - !ruby/object:Gem::Dependency
272
+ name: falls_back_on
273
+ requirement: &id018 !ruby/object:Gem::Requirement
274
+ none: false
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ segments:
279
+ - 0
280
+ - 0
281
+ - 3
282
+ version: 0.0.3
283
+ type: :runtime
284
+ prerelease: false
285
+ version_requirements: *id018
286
+ - !ruby/object:Gem::Dependency
287
+ name: geokit
288
+ requirement: &id019 !ruby/object:Gem::Requirement
289
+ none: false
290
+ requirements:
291
+ - - ">="
292
+ - !ruby/object:Gem::Version
293
+ segments:
294
+ - 1
295
+ - 5
296
+ - 0
297
+ version: 1.5.0
298
+ type: :runtime
299
+ prerelease: false
300
+ version_requirements: *id019
301
+ - !ruby/object:Gem::Dependency
302
+ name: cohort_scope
303
+ requirement: &id020 !ruby/object:Gem::Requirement
304
+ none: false
305
+ requirements:
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ segments:
309
+ - 0
310
+ - 0
311
+ - 7
312
+ version: 0.0.7
313
+ type: :runtime
314
+ prerelease: false
315
+ version_requirements: *id020
316
+ - !ruby/object:Gem::Dependency
317
+ name: conversions
318
+ requirement: &id021 !ruby/object:Gem::Requirement
319
+ none: false
320
+ requirements:
321
+ - - ">="
322
+ - !ruby/object:Gem::Version
323
+ segments:
324
+ - 1
325
+ - 4
326
+ - 5
327
+ version: 1.4.5
328
+ type: :runtime
329
+ prerelease: false
330
+ version_requirements: *id021
331
+ - !ruby/object:Gem::Dependency
332
+ name: weighted_average
333
+ requirement: &id022 !ruby/object:Gem::Requirement
334
+ none: false
335
+ requirements:
336
+ - - ">="
337
+ - !ruby/object:Gem::Version
338
+ segments:
339
+ - 0
340
+ - 0
341
+ - 4
342
+ version: 0.0.4
343
+ type: :runtime
344
+ prerelease: false
345
+ version_requirements: *id022
346
+ - !ruby/object:Gem::Dependency
347
+ name: loose_tight_dictionary
348
+ requirement: &id023 !ruby/object:Gem::Requirement
349
+ none: false
350
+ requirements:
351
+ - - ">="
352
+ - !ruby/object:Gem::Version
353
+ segments:
354
+ - 0
355
+ - 0
356
+ - 8
357
+ version: 0.0.8
358
+ type: :runtime
359
+ prerelease: false
360
+ version_requirements: *id023
361
+ - !ruby/object:Gem::Dependency
362
+ name: rspec
363
+ requirement: &id024 !ruby/object:Gem::Requirement
364
+ none: false
365
+ requirements:
366
+ - - ">="
367
+ - !ruby/object:Gem::Version
368
+ segments:
369
+ - 2
370
+ - 0
371
+ - 0
372
+ - beta
373
+ - 17
374
+ version: 2.0.0.beta.17
375
+ type: :development
376
+ prerelease: false
377
+ version_requirements: *id024
378
+ - !ruby/object:Gem::Dependency
379
+ name: rake
380
+ requirement: &id025 !ruby/object:Gem::Requirement
381
+ none: false
382
+ requirements:
383
+ - - ">="
384
+ - !ruby/object:Gem::Version
385
+ segments:
386
+ - 0
387
+ version: "0"
388
+ type: :development
389
+ prerelease: false
390
+ version_requirements: *id025
391
+ - !ruby/object:Gem::Dependency
392
+ name: jeweler
393
+ requirement: &id026 !ruby/object:Gem::Requirement
394
+ none: false
395
+ requirements:
396
+ - - ">="
397
+ - !ruby/object:Gem::Version
398
+ segments:
399
+ - 0
400
+ version: "0"
401
+ type: :development
402
+ prerelease: false
403
+ version_requirements: *id026
404
+ - !ruby/object:Gem::Dependency
405
+ name: rcov
406
+ requirement: &id027 !ruby/object:Gem::Requirement
407
+ none: false
408
+ requirements:
409
+ - - ">="
410
+ - !ruby/object:Gem::Version
411
+ segments:
412
+ - 0
413
+ version: "0"
414
+ type: :development
415
+ prerelease: false
416
+ version_requirements: *id027
417
+ - !ruby/object:Gem::Dependency
418
+ name: rdoc
419
+ requirement: &id028 !ruby/object:Gem::Requirement
420
+ none: false
421
+ requirements:
422
+ - - ">="
423
+ - !ruby/object:Gem::Version
424
+ segments:
425
+ - 0
426
+ version: "0"
427
+ type: :development
428
+ prerelease: false
429
+ version_requirements: *id028
430
+ - !ruby/object:Gem::Dependency
431
+ name: sqlite3-ruby
432
+ requirement: &id029 !ruby/object:Gem::Requirement
230
433
  none: false
231
434
  requirements:
232
435
  - - ">="
233
436
  - !ruby/object:Gem::Version
234
- hash: 27
235
437
  segments:
236
438
  - 1
237
439
  - 3
238
440
  - 0
239
441
  version: 1.3.0
240
442
  type: :development
241
- version_requirements: *id014
443
+ prerelease: false
444
+ version_requirements: *id029
242
445
  description: An earth-simulation environment with ActiveRecord models and data
243
446
  email: andy@rossmeissl.net
244
447
  executables: []
@@ -281,16 +484,16 @@ files:
281
484
  - lib/earth/automobile/automobile_make/data_miner.rb
282
485
  - lib/earth/automobile/automobile_make_fleet_year.rb
283
486
  - lib/earth/automobile/automobile_make_fleet_year/data_miner.rb
487
+ - lib/earth/automobile/automobile_make_model.rb
488
+ - lib/earth/automobile/automobile_make_model/data_miner.rb
489
+ - lib/earth/automobile/automobile_make_model_year.rb
490
+ - lib/earth/automobile/automobile_make_model_year/data_miner.rb
491
+ - lib/earth/automobile/automobile_make_model_year_variant.rb
492
+ - lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb
284
493
  - lib/earth/automobile/automobile_make_year.rb
285
494
  - lib/earth/automobile/automobile_make_year/data_miner.rb
286
- - lib/earth/automobile/automobile_model.rb
287
- - lib/earth/automobile/automobile_model/data_miner.rb
288
- - lib/earth/automobile/automobile_model_year.rb
289
- - lib/earth/automobile/automobile_model_year/data_miner.rb
290
495
  - lib/earth/automobile/automobile_size_class.rb
291
496
  - lib/earth/automobile/automobile_size_class/data_miner.rb
292
- - lib/earth/automobile/automobile_variant.rb
293
- - lib/earth/automobile/automobile_variant/data_miner.rb
294
497
  - lib/earth/automobile/data_miner.rb
295
498
  - lib/earth/base.rb
296
499
  - lib/earth/bus.rb
@@ -423,18 +626,18 @@ files:
423
626
  - vendor/geokit-rails/test/schema.rb
424
627
  - vendor/geokit-rails/test/tasks.rake
425
628
  - vendor/geokit-rails/test/test_helper.rb
629
+ - Gemfile
630
+ - Gemfile.lock
426
631
  - spec/earth/air/aircraft_spec.rb
427
632
  - spec/earth_spec.rb
428
633
  - spec/spec_helper.rb
429
- - Gemfile
430
- - Gemfile.lock
431
634
  has_rdoc: true
432
635
  homepage: http://github.com/brighterplanet/earth
433
636
  licenses: []
434
637
 
435
638
  post_install_message:
436
- rdoc_options:
437
- - --charset=UTF-8
639
+ rdoc_options: []
640
+
438
641
  require_paths:
439
642
  - lib
440
643
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -442,7 +645,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
442
645
  requirements:
443
646
  - - ">="
444
647
  - !ruby/object:Gem::Version
445
- hash: 3
446
648
  segments:
447
649
  - 0
448
650
  version: "0"
@@ -451,7 +653,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
451
653
  requirements:
452
654
  - - ">="
453
655
  - !ruby/object:Gem::Version
454
- hash: 3
455
656
  segments:
456
657
  - 0
457
658
  version: "0"
@@ -463,8 +664,8 @@ signing_key:
463
664
  specification_version: 3
464
665
  summary: Land, sky, and sea
465
666
  test_files:
667
+ - Gemfile
668
+ - Gemfile.lock
466
669
  - spec/earth/air/aircraft_spec.rb
467
670
  - spec/earth_spec.rb
468
671
  - spec/spec_helper.rb
469
- - Gemfile
470
- - Gemfile.lock
@@ -1,38 +0,0 @@
1
- AutomobileModel.class_eval do
2
- data_miner do
3
- process "Start from scratch" do
4
- connection.drop_table table_name
5
- end
6
-
7
- schema Earth.database_options do
8
- string 'name' # make + model
9
- string 'make_name'
10
- float 'fuel_efficiency_city'
11
- string 'fuel_efficiency_city_units'
12
- float 'fuel_efficiency_highway'
13
- string 'fuel_efficiency_highway_units'
14
- end
15
-
16
- process "Derive model names from automobile variants" do
17
- AutomobileVariant.run_data_miner!
18
- connection.execute %{
19
- INSERT IGNORE INTO automobile_models(name, make_name)
20
- SELECT automobile_variants.model_name, automobile_variants.make_name FROM automobile_variants WHERE LENGTH(automobile_variants.model_name) > 0 AND LENGTH(automobile_variants.make_name) > 0
21
- }
22
- end
23
-
24
- # TODO not weighted until we get weightings on auto variants
25
- process "Derive average fuel economy from automobile variants" do
26
- AutomobileVariant.run_data_miner!
27
- automobile_models = AutomobileModel.arel_table
28
- automobile_variants = AutomobileVariant.arel_table
29
- conditional_relation = automobile_models[:name].eq(automobile_variants[:model_name])
30
- %w{ city highway }.each do |i|
31
- relation = AutomobileVariant.where(conditional_relation).where("`automobile_variants`.`fuel_efficiency_#{i}` IS NOT NULL").project("AVG(`automobile_variants`.`fuel_efficiency_#{i}`)")
32
- update_all "fuel_efficiency_#{i} = (#{relation.to_sql})"
33
- update_all "fuel_efficiency_#{i}_units = 'kilometres_per_litre'"
34
- end
35
- end
36
- end
37
- end
38
-
@@ -1,14 +0,0 @@
1
- class AutomobileModel < ActiveRecord::Base
2
- set_primary_key :name
3
-
4
- has_many :variants, :class_name => 'AutomobileVariant', :foreign_key => 'model_name'
5
- belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
6
-
7
- data_miner do
8
- tap "Brighter Planet's auto model data", Earth.taps_server
9
-
10
- process "bring in dependencies" do
11
- run_data_miner_on_belongs_to_associations
12
- end
13
- end
14
- end
@@ -1,15 +0,0 @@
1
- class AutomobileModelYear < ActiveRecord::Base
2
- set_primary_key :name
3
-
4
- belongs_to :make_year, :class_name => 'AutomobileMakeYear', :foreign_key => 'make_year_name'
5
- has_many :variants, :class_name => 'AutomobileVariant', :foreign_key => 'model_year_name'
6
- has_many :automobiles, :foreign_key => 'model_year_id'
7
-
8
- data_miner do
9
- tap "Brighter Planet's model year data", Earth.taps_server
10
-
11
- process "pull dependencies" do
12
- run_data_miner_on_belongs_to_associations
13
- end
14
- end
15
- end
@@ -1,17 +0,0 @@
1
- class AutomobileVariant < ActiveRecord::Base
2
- set_primary_key :row_hash
3
-
4
- has_many :automobiles, :foreign_key => 'variant_id'
5
- belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
6
- belongs_to :model, :class_name => 'AutomobileModel', :foreign_key => 'model_name'
7
- belongs_to :model_year, :class_name => 'AutomobileModelYear', :foreign_key => 'model_year_name'
8
- belongs_to :fuel_type, :class_name => 'AutomobileFuelType', :foreign_key => 'fuel_type_code'
9
-
10
- data_miner do
11
- tap "Brighter Planet's sanitized automobile variant data", Earth.taps_server
12
-
13
- process "pull dependencies" do
14
- run_data_miner_on_belongs_to_associations
15
- end
16
- end
17
- end