earth 0.5.0 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. data/Gemfile +4 -5
  2. data/README.markdown +0 -8
  3. data/Rakefile +14 -10
  4. data/bin/earth_tester.rb +12 -12
  5. data/earth.gemspec +2 -1
  6. data/features/automobile_make_fleet_year.feature +9 -19
  7. data/features/automobile_make_model_year.feature +4 -4
  8. data/features/support/env.rb +11 -7
  9. data/features/support/imports/automobile_make_fleet_year_bad.csv +1 -1
  10. data/features/support/imports/automobile_make_fleet_year_good.csv +1 -1
  11. data/features/support/imports/automobile_make_model_year_bad.csv +1 -1
  12. data/features/support/imports/automobile_make_model_year_good.csv +1 -1
  13. data/lib/earth/air/aircraft/data_miner.rb +63 -15
  14. data/lib/earth/air/aircraft.rb +0 -11
  15. data/lib/earth/air/aircraft_class/data_miner.rb +0 -13
  16. data/lib/earth/air/aircraft_class.rb +12 -3
  17. data/lib/earth/air/aircraft_fuel_use_equation/data_miner.rb +0 -13
  18. data/lib/earth/air/aircraft_fuel_use_equation.rb +12 -3
  19. data/lib/earth/air/airline/data_miner.rb +0 -7
  20. data/lib/earth/air/airline.rb +6 -3
  21. data/lib/earth/air/airport/data_miner.rb +5 -14
  22. data/lib/earth/air/airport.rb +9 -7
  23. data/lib/earth/air/bts_aircraft/data_miner.rb +0 -5
  24. data/lib/earth/air/bts_aircraft.rb +3 -3
  25. data/lib/earth/air/data_miner.rb +2 -3
  26. data/lib/earth/air/flight_distance_class/data_miner.rb +0 -6
  27. data/lib/earth/air/flight_distance_class.rb +4 -3
  28. data/lib/earth/air/flight_seat_class/data_miner.rb +0 -7
  29. data/lib/earth/air/flight_seat_class.rb +6 -3
  30. data/lib/earth/air/flight_segment/data_miner.rb +30 -112
  31. data/lib/earth/air/flight_segment.rb +47 -13
  32. data/lib/earth/air.rb +2 -1
  33. data/lib/earth/automobile/automobile_fuel/data_miner.rb +1 -25
  34. data/lib/earth/automobile/automobile_fuel.rb +24 -8
  35. data/lib/earth/automobile/automobile_make/data_miner.rb +3 -16
  36. data/lib/earth/automobile/automobile_make.rb +5 -3
  37. data/lib/earth/automobile/automobile_make_fleet_year/data_miner.rb +16 -30
  38. data/lib/earth/automobile/automobile_make_fleet_year.rb +10 -7
  39. data/lib/earth/automobile/automobile_make_model/data_miner.rb +1 -11
  40. data/lib/earth/automobile/automobile_make_model.rb +9 -7
  41. data/lib/earth/automobile/automobile_make_model_year/data_miner.rb +4 -17
  42. data/lib/earth/automobile/automobile_make_model_year.rb +11 -6
  43. data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +37 -65
  44. data/lib/earth/automobile/automobile_make_model_year_variant.rb +36 -6
  45. data/lib/earth/automobile/automobile_make_year/data_miner.rb +3 -15
  46. data/lib/earth/automobile/automobile_make_year.rb +8 -7
  47. data/lib/earth/automobile/automobile_size_class/data_miner.rb +0 -15
  48. data/lib/earth/automobile/automobile_size_class.rb +13 -2
  49. data/lib/earth/automobile/automobile_size_class_year/data_miner.rb +0 -11
  50. data/lib/earth/automobile/automobile_size_class_year.rb +10 -3
  51. data/lib/earth/automobile/automobile_type_fuel_age/data_miner.rb +0 -12
  52. data/lib/earth/automobile/automobile_type_fuel_age.rb +10 -2
  53. data/lib/earth/automobile/automobile_type_fuel_control/data_miner.rb +0 -11
  54. data/lib/earth/automobile/automobile_type_fuel_control.rb +9 -3
  55. data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +1 -17
  56. data/lib/earth/automobile/automobile_type_fuel_year.rb +14 -6
  57. data/lib/earth/automobile/automobile_type_fuel_year_age/data_miner.rb +0 -13
  58. data/lib/earth/automobile/automobile_type_fuel_year_age.rb +12 -7
  59. data/lib/earth/automobile/automobile_type_fuel_year_control/data_miner.rb +0 -11
  60. data/lib/earth/automobile/automobile_type_fuel_year_control.rb +9 -6
  61. data/lib/earth/automobile/automobile_type_year/data_miner.rb +0 -10
  62. data/lib/earth/automobile/automobile_type_year.rb +9 -3
  63. data/lib/earth/bus/bus_class/data_miner.rb +0 -29
  64. data/lib/earth/bus/bus_class.rb +27 -2
  65. data/lib/earth/bus/bus_fuel/data_miner.rb +1 -16
  66. data/lib/earth/bus/bus_fuel.rb +15 -8
  67. data/lib/earth/bus/bus_fuel_control/data_miner.rb +0 -10
  68. data/lib/earth/bus/bus_fuel_control.rb +8 -3
  69. data/lib/earth/bus/bus_fuel_year_control/data_miner.rb +1 -10
  70. data/lib/earth/bus/bus_fuel_year_control.rb +8 -7
  71. data/lib/earth/bus/data_miner.rb +2 -0
  72. data/lib/earth/bus.rb +2 -0
  73. data/lib/earth/computation/computation_carrier/data_miner.rb +0 -5
  74. data/lib/earth/computation/computation_carrier.rb +3 -2
  75. data/lib/earth/computation/computation_carrier_instance_class/data_miner.rb +0 -8
  76. data/lib/earth/computation/computation_carrier_instance_class.rb +6 -6
  77. data/lib/earth/computation/computation_carrier_region/data_miner.rb +0 -7
  78. data/lib/earth/computation/computation_carrier_region.rb +6 -7
  79. data/lib/earth/computation/data_miner.rb +2 -0
  80. data/lib/earth/computation.rb +2 -0
  81. data/lib/earth/diet/diet_class/data_miner.rb +0 -16
  82. data/lib/earth/diet/diet_class.rb +16 -4
  83. data/lib/earth/diet/food_group/data_miner.rb +0 -9
  84. data/lib/earth/diet/food_group.rb +7 -2
  85. data/lib/earth/fuel/fuel/data_miner.rb +0 -16
  86. data/lib/earth/fuel/fuel.rb +14 -2
  87. data/lib/earth/fuel/fuel_price/data_miner.rb +0 -6
  88. data/lib/earth/fuel/fuel_price.rb +4 -6
  89. data/lib/earth/fuel/fuel_type/data_miner.rb +0 -14
  90. data/lib/earth/fuel/fuel_type.rb +14 -4
  91. data/lib/earth/fuel/fuel_year/data_miner.rb +0 -16
  92. data/lib/earth/fuel/fuel_year.rb +14 -2
  93. data/lib/earth/fuel/greenhouse_gas/data_miner.rb +0 -9
  94. data/lib/earth/fuel/greenhouse_gas.rb +10 -5
  95. data/lib/earth/hospitality/lodging_class/data_miner.rb +0 -12
  96. data/lib/earth/hospitality/lodging_class.rb +10 -2
  97. data/lib/earth/industry/data_miner.rb +0 -0
  98. data/lib/earth/industry/industry.rb +3 -10
  99. data/lib/earth/industry/industry_product.rb +6 -13
  100. data/lib/earth/industry/industry_product_line.rb +5 -12
  101. data/lib/earth/industry/industry_sector.rb +5 -12
  102. data/lib/earth/industry/merchant.rb +4 -11
  103. data/lib/earth/industry/merchant_category.rb +3 -10
  104. data/lib/earth/industry/merchant_category_industry.rb +5 -12
  105. data/lib/earth/industry/product_line.rb +5 -12
  106. data/lib/earth/industry/product_line_industry_product.rb +5 -12
  107. data/lib/earth/industry/sector.rb +5 -12
  108. data/lib/earth/locality/census_division/data_miner.rb +0 -23
  109. data/lib/earth/locality/census_division.rb +21 -6
  110. data/lib/earth/locality/census_region/data_miner.rb +0 -5
  111. data/lib/earth/locality/census_region.rb +3 -2
  112. data/lib/earth/locality/climate_division/data_miner.rb +0 -7
  113. data/lib/earth/locality/climate_division.rb +5 -7
  114. data/lib/earth/locality/country/data_miner.rb +16 -29
  115. data/lib/earth/locality/country.rb +15 -4
  116. data/lib/earth/locality/data_miner.rb +3 -0
  117. data/lib/earth/locality/egrid_region/data_miner.rb +0 -5
  118. data/lib/earth/locality/egrid_region.rb +5 -8
  119. data/lib/earth/locality/egrid_subregion/data_miner.rb +1 -20
  120. data/lib/earth/locality/egrid_subregion.rb +17 -6
  121. data/lib/earth/locality/petroleum_administration_for_defense_district/data_miner.rb +4 -13
  122. data/lib/earth/locality/petroleum_administration_for_defense_district.rb +8 -4
  123. data/lib/earth/locality/state/data_miner.rb +0 -8
  124. data/lib/earth/locality/state.rb +6 -7
  125. data/lib/earth/locality/urbanity/data_miner.rb +0 -4
  126. data/lib/earth/locality/urbanity.rb +2 -2
  127. data/lib/earth/locality/zip_code/data_miner.rb +0 -10
  128. data/lib/earth/locality/zip_code.rb +8 -6
  129. data/lib/earth/locality.rb +3 -0
  130. data/lib/earth/pet/breed/data_miner.rb +0 -7
  131. data/lib/earth/pet/breed.rb +5 -6
  132. data/lib/earth/pet/breed_gender/data_miner.rb +0 -8
  133. data/lib/earth/pet/breed_gender.rb +6 -6
  134. data/lib/earth/pet/gender/data_miner.rb +0 -3
  135. data/lib/earth/pet/gender.rb +2 -2
  136. data/lib/earth/pet/species/data_miner.rb +0 -17
  137. data/lib/earth/pet/species.rb +17 -4
  138. data/lib/earth/rail/rail_class/data_miner.rb +0 -14
  139. data/lib/earth/rail/rail_class.rb +12 -3
  140. data/lib/earth/residence/air_conditioner_use/data_miner.rb +0 -6
  141. data/lib/earth/residence/air_conditioner_use.rb +5 -3
  142. data/lib/earth/residence/clothes_machine_use/data_miner.rb +0 -6
  143. data/lib/earth/residence/clothes_machine_use.rb +4 -2
  144. data/lib/earth/residence/data_miner.rb +2 -0
  145. data/lib/earth/residence/dishwasher_use/data_miner.rb +0 -6
  146. data/lib/earth/residence/dishwasher_use.rb +5 -3
  147. data/lib/earth/residence/residence_appliance/data_miner.rb +0 -6
  148. data/lib/earth/residence/residence_appliance.rb +4 -2
  149. data/lib/earth/residence/residence_class/data_miner.rb +0 -4
  150. data/lib/earth/residence/residence_class.rb +2 -2
  151. data/lib/earth/residence/residence_fuel_price/data_miner.rb +0 -14
  152. data/lib/earth/residence/residence_fuel_price.rb +12 -7
  153. data/lib/earth/residence/residence_fuel_type/data_miner.rb +0 -8
  154. data/lib/earth/residence/residence_fuel_type.rb +6 -2
  155. data/lib/earth/residence/residential_energy_consumption_survey_response/data_miner.rb +0 -94
  156. data/lib/earth/residence/residential_energy_consumption_survey_response.rb +92 -6
  157. data/lib/earth/residence.rb +2 -0
  158. data/lib/earth/shipping/carrier/data_miner.rb +0 -10
  159. data/lib/earth/shipping/carrier.rb +8 -2
  160. data/lib/earth/shipping/carrier_mode/data_miner.rb +0 -10
  161. data/lib/earth/shipping/carrier_mode.rb +9 -3
  162. data/lib/earth/shipping/shipment_mode/data_miner.rb +0 -7
  163. data/lib/earth/shipping/shipment_mode.rb +5 -2
  164. data/lib/earth/version.rb +1 -1
  165. data/lib/earth.rb +92 -84
  166. data/spec/earth/air/aircraft_spec.rb +1 -1
  167. data/spec/earth_spec.rb +15 -15
  168. data/spec/spec_helper.rb +12 -9
  169. metadata +175 -171
  170. data/lib/earth/active_record_ext.rb +0 -9
  171. data/lib/earth/air/aircraft_manufacturer/data_miner.rb +0 -21
  172. data/lib/earth/air/aircraft_manufacturer.rb +0 -7
  173. data/lib/earth/base.rb +0 -7
@@ -1,53 +1,54 @@
1
1
  AutomobileMakeModelYearVariant.class_eval do
2
- class << self
2
+ # For errata
3
+ class AutomobileMakeModelYearVariant::Guru
3
4
  def transmission_is_blank?(row)
4
5
  row['transmission'].blank?
5
6
  end
6
-
7
+
7
8
  def is_a_2007_gmc_or_chevrolet?(row)
8
9
  row['year'] == 2007 and %w(GMC CHEVROLET).include? row['MFR'].upcase
9
10
  end
10
-
11
+
11
12
  def is_a_porsche?(row)
12
13
  row['make'].to_s.upcase == 'PORSCHE'
13
14
  end
14
-
15
+
15
16
  def is_not_a_porsche?(row)
16
17
  !is_a_porsche? row
17
18
  end
18
-
19
+
19
20
  def is_a_mercedes_benz?(row)
20
21
  row['make'].to_s =~ /MERCEDES/i
21
22
  end
22
-
23
+
23
24
  def is_a_lexus?(row)
24
25
  row['make'].to_s.upcase == 'LEXUS'
25
26
  end
26
-
27
+
27
28
  def is_a_bmw?(row)
28
29
  row['make'].to_s.upcase == 'BMW'
29
30
  end
30
-
31
+
31
32
  def is_a_ford?(row)
32
33
  row['make'].to_s.upcase == 'FORD'
33
34
  end
34
-
35
+
35
36
  def is_a_rolls_royce_and_model_contains_bentley?(row)
36
37
  is_a_rolls_royce?(row) and model_contains_bentley?(row)
37
38
  end
38
-
39
+
39
40
  def is_a_bentley?(row)
40
41
  row['make'].to_s.upcase == 'BENTLEY'
41
42
  end
42
-
43
+
43
44
  def is_a_rolls_royce?(row)
44
45
  row['make'].to_s =~ /ROLLS/i
45
46
  end
46
-
47
+
47
48
  def is_a_turbo_brooklands?(row)
48
49
  row['model'] =~ /TURBO R\/RL BKLDS/i
49
50
  end
50
-
51
+
51
52
  def model_contains_maybach?(row)
52
53
  row['model'] =~ /MAYBACH/i
53
54
  end
@@ -56,6 +57,10 @@ AutomobileMakeModelYearVariant.class_eval do
56
57
  row['model'] =~ /BENTLEY/i
57
58
  end
58
59
 
60
+ def name_contains_smart?(row)
61
+ row['model'] =~ / smart /i
62
+ end
63
+
59
64
  def source_code
60
65
  IO.read __FILE__
61
66
  end
@@ -260,44 +265,6 @@ AutomobileMakeModelYearVariant.class_eval do
260
265
  end
261
266
 
262
267
  data_miner do
263
- schema Earth.database_options do
264
- string 'row_hash'
265
- string 'name' # short name!
266
- string 'make_name'
267
- string 'make_model_name' # make + model
268
- string 'make_year_name' # make + year
269
- string 'make_model_year_name' # make + model + year
270
- integer 'year'
271
- float 'fuel_efficiency'
272
- string 'fuel_efficiency_units'
273
- float 'fuel_efficiency_city'
274
- string 'fuel_efficiency_city_units'
275
- float 'fuel_efficiency_highway'
276
- string 'fuel_efficiency_highway_units'
277
- string 'fuel_code'
278
- string 'transmission'
279
- string 'drive'
280
- boolean 'turbo'
281
- boolean 'supercharger'
282
- integer 'cylinders'
283
- float 'displacement'
284
- float 'raw_fuel_efficiency_city'
285
- string 'raw_fuel_efficiency_city_units'
286
- float 'raw_fuel_efficiency_highway'
287
- string 'raw_fuel_efficiency_highway_units'
288
- integer 'carline_mfr_code'
289
- integer 'vi_mfr_code'
290
- integer 'carline_code'
291
- integer 'carline_class_code'
292
- boolean 'injection'
293
- string 'carline_class_name'
294
- string 'speeds'
295
- index 'make_name'
296
- index 'make_model_name'
297
- index 'make_year_name'
298
- index 'make_model_year_name'
299
- end
300
-
301
268
  # 1985---1997
302
269
  # FIXME TODO one Jaguar in the 1990 FEG has no model name
303
270
  # FIXME TODO 14 records in the 1995 FEG are missing fuel efficiencies
@@ -312,7 +279,7 @@ AutomobileMakeModelYearVariant.class_eval do
312
279
  :select => lambda { |row| row['model'].present? and (row['suppress_code'].blank? or row['suppress_code'].to_f == 0) and row['state_code'] == 'F' },
313
280
  :filename => filename,
314
281
  :transform => { :class => AutomobileMakeModelYearVariant::ParserB, :year => "19#{yy}".to_i },
315
- :errata => { 'url' => 'http://static.brighterplanet.com/science/data/transport/automobiles/fuel_economy_guide/errata.csv' }) do
282
+ :errata => { :url => 'https://spreadsheets.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdEFqVXRvQjRGNUpxNHFCOXhqSjRmdlE&output=csv', :responder => AutomobileMakeModelYearVariant::Guru.new }) do
316
283
  key 'row_hash'
317
284
  store 'name', :field_name => 'model'
318
285
  store 'make_name', :field_name => 'make'
@@ -350,7 +317,7 @@ AutomobileMakeModelYearVariant.class_eval do
350
317
  }.sort { |a, b| a.first <=> b.first }.each do |year, options|
351
318
  import "#{ year } Fuel Economy Guide",
352
319
  options.merge(:transform => { :class => AutomobileMakeModelYearVariant::ParserC, :year => year },
353
- :errata => { 'url' => 'http://static.brighterplanet.com/science/data/transport/automobiles/fuel_economy_guide/errata.csv' },
320
+ :errata => { :url => 'https://spreadsheets.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdEFqVXRvQjRGNUpxNHFCOXhqSjRmdlE&output=csv', :responder => AutomobileMakeModelYearVariant::Guru.new },
354
321
  :select => lambda { |row| row['model'].present? }) do
355
322
  key 'row_hash'
356
323
  store 'name', :field_name => 'model'
@@ -384,7 +351,7 @@ AutomobileMakeModelYearVariant.class_eval do
384
351
  }.sort { |a, b| a.first <=> b.first }.each do |year, options|
385
352
  import "#{ year } Fuel Economy Guide",
386
353
  options.merge(:transform => { :class => AutomobileMakeModelYearVariant::ParserD, :year => year },
387
- :errata => { 'url' => 'http://static.brighterplanet.com/science/data/transport/automobiles/fuel_economy_guide/errata.csv' },
354
+ :errata => { :url => 'https://spreadsheets.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdEFqVXRvQjRGNUpxNHFCOXhqSjRmdlE&output=csv', :responder => AutomobileMakeModelYearVariant::Guru.new },
388
355
  :select => lambda { |row| row['model'].present? }) do
389
356
  key 'row_hash'
390
357
  store 'name', :field_name => 'model'
@@ -411,11 +378,11 @@ AutomobileMakeModelYearVariant.class_eval do
411
378
  # 2010--?
412
379
  {
413
380
  2010 => { :url => 'http://www.fueleconomy.gov/FEG/epadata/10data.zip', :filename => '2010FE Guide for DOE-all rel dates-no-sales 4-9-10public.xls' },
414
- 2011 => { :url => 'http://www.fueleconomy.gov/FEG/epadata/11data.zip', :filename => '2011FEGuide-for DOE rel-dates before 1-23-2011-no-sales-01-10-2011public.xlsx' }
381
+ 2011 => { :url => 'http://www.fueleconomy.gov/FEG/epadata/11data.zip', :filename => '2011FEGuide-for DOE rel-dates before 1-23-2011-no-sales-01-10-2011_All_public.xlsx' }
415
382
  }.sort { |a, b| a.first <=> b.first }.each do |year, options|
416
383
  import "#{ year } Fuel Economy Guide",
417
384
  options.merge(:transform => { :class => AutomobileMakeModelYearVariant::ParserE, :year => year },
418
- :errata => { 'url' => 'http://static.brighterplanet.com/science/data/transport/automobiles/fuel_economy_guide/errata.csv' },
385
+ :errata => { :url => 'https://spreadsheets.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdEFqVXRvQjRGNUpxNHFCOXhqSjRmdlE&output=csv', :responder => AutomobileMakeModelYearVariant::Guru.new },
419
386
  :select => lambda { |row| row['model'].present? }) do
420
387
  key 'row_hash'
421
388
  store 'name', :field_name => 'model'
@@ -452,12 +419,15 @@ AutomobileMakeModelYearVariant.class_eval do
452
419
  end
453
420
 
454
421
  # Note: need to divide by 0.425143707 b/c equation is designed for miles / gallon not km / l
422
+ # Note: EPA seems to adjust differently for plug-in hybrid electric vehicles (e.g. Leaf and Volt)
455
423
  process "Calculate adjusted fuel efficiency using the latest EPA equations from EPA Fuel Economy Trends report Appendix A including conversion from miles per gallon to kilometres per litre" do
456
424
  update_all 'fuel_efficiency_city = 1 / ((0.003259 / 0.425143707) + (1.1805 / raw_fuel_efficiency_city))'
457
425
  update_all 'fuel_efficiency_highway = 1 / ((0.001376 / 0.425143707) + (1.3466 / raw_fuel_efficiency_highway))'
458
426
  end
459
427
 
460
428
  # This will be useful later for calculating MakeModel and Make fuel efficiency based on Variant
429
+ # NOTE: we use a 43/57 city/highway weighting per the latest EPA analysis of real-world driving behavior
430
+ # This results in a deviation from EPA fuel economy label values which use a historical 55/45 weighting
461
431
  process "Calculate combined adjusted fuel efficiency using the latest EPA equation" do
462
432
  update_all "fuel_efficiency = 1 / ((0.43 / fuel_efficiency_city) + (0.57 / fuel_efficiency_highway))"
463
433
  update_all "fuel_efficiency_units = 'kilometres_per_litre'"
@@ -471,7 +441,7 @@ AutomobileMakeModelYearVariant.class_eval do
471
441
  end
472
442
 
473
443
  verify "Year should be from 1985 to 2011" do
474
- AutomobileMakeModelYearVariant.find_by_sql("SELECT DISTINCT year FROM automobile_make_model_year_variants").map(&:year).each do |year|
444
+ connection.select_values("SELECT DISTINCT year FROM automobile_make_model_year_variants").each do |year|
475
445
  unless year > 1984 and year < 2012
476
446
  raise "Invalid year in automobile_make_model_year_variants: #{year} is not from 1985 to 2011"
477
447
  end
@@ -483,8 +453,8 @@ AutomobileMakeModelYearVariant.class_eval do
483
453
  end
484
454
 
485
455
  verify "Fuel code should appear in AutomobileFuel" do
486
- valid_codes = AutomobileFuel.find_by_sql("SELECT DISTINCT code FROM automobile_fuels").map(&:code)
487
- AutomobileMakeModelYearVariant.find_by_sql("SELECT DISTINCT fuel_code FROM automobile_make_model_year_variants").map(&:fuel_code).each do |fuel_code|
456
+ valid_codes = connection.select_values("SELECT DISTINCT code FROM automobile_fuels")
457
+ connection.select_values("SELECT DISTINCT fuel_code FROM automobile_make_model_year_variants").each do |fuel_code|
488
458
  unless valid_codes.include?(fuel_code)
489
459
  raise "Invalide fuel code in automobile_make_model_year_variants: #{fuel_code} is not in #{valid_codes}"
490
460
  end
@@ -493,18 +463,20 @@ AutomobileMakeModelYearVariant.class_eval do
493
463
 
494
464
  verify "Fuel efficiencies should be greater than zero" do
495
465
  [:fuel_efficiency, :fuel_efficiency_city, :fuel_efficiency_highway].each do |field|
496
- unless AutomobileMakeModelYearVariant.where(field => nil).count == 0
497
- raise "Invalid fuel efficiency in automobile_make_model_year_variants: nil is not > 0"
498
- end
499
- unless AutomobileMakeModelYearVariant.where(field => 0).count == 0
500
- raise "Invalid fuel efficiency in automobile_make_model_year_variants: 0 is not > 0"
466
+ if AutomobileMakeModelYearVariant.where(field => nil).any?
467
+ raise "Invalid #{field} in automobile_make_model_year_variants: nil is not > 0"
468
+ else
469
+ min = AutomobileMakeModelYearVariant.minimum(field)
470
+ unless min > 0
471
+ raise "Invalid #{field} in automobile_make_model_year_variants: #{min} is not > 0"
472
+ end
501
473
  end
502
474
  end
503
475
  end
504
476
 
505
477
  verify "Fuel efficiency units should be kilometres per litre" do
506
478
  %w{ fuel_efficiency_units fuel_efficiency_city_units fuel_efficiency_highway_units }.each do |field|
507
- AutomobileMakeModelYearVariant.find_by_sql("SELECT DISTINCT #{field} FROM automobile_make_model_year_variants").map(&:"#{field}").each do |value|
479
+ connection.select_values("SELECT DISTINCT #{field} FROM automobile_make_model_year_variants").each do |value|
508
480
  unless value == 'kilometres_per_litre'
509
481
  raise "Invalid #{field} in automobile_make_model_year_variants: #{value} is not 'kilometres_per_litre'"
510
482
  end
@@ -6,11 +6,41 @@ class AutomobileMakeModelYearVariant < ActiveRecord::Base
6
6
  belongs_to :make_model_year, :class_name => 'AutomobileMakeModelYear', :foreign_key => 'make_model_year_name'
7
7
  belongs_to :fuel, :class_name => 'AutomobileFuel', :foreign_key => 'fuel_code', :primary_key => 'code'
8
8
 
9
- data_miner do
10
- tap "Brighter Planet's sanitized automobile make model year variant data", Earth.taps_server
11
-
12
- process "pull dependencies" do
13
- run_data_miner_on_belongs_to_associations
14
- end
9
+ create_table do
10
+ string 'row_hash'
11
+ string 'name' # short name!
12
+ string 'make_name'
13
+ string 'make_model_name' # make + model
14
+ string 'make_year_name' # make + year
15
+ string 'make_model_year_name' # make + model + year
16
+ integer 'year'
17
+ float 'fuel_efficiency'
18
+ string 'fuel_efficiency_units'
19
+ float 'fuel_efficiency_city'
20
+ string 'fuel_efficiency_city_units'
21
+ float 'fuel_efficiency_highway'
22
+ string 'fuel_efficiency_highway_units'
23
+ string 'fuel_code'
24
+ string 'transmission'
25
+ string 'drive'
26
+ boolean 'turbo'
27
+ boolean 'supercharger'
28
+ integer 'cylinders'
29
+ float 'displacement'
30
+ float 'raw_fuel_efficiency_city'
31
+ string 'raw_fuel_efficiency_city_units'
32
+ float 'raw_fuel_efficiency_highway'
33
+ string 'raw_fuel_efficiency_highway_units'
34
+ integer 'carline_mfr_code'
35
+ integer 'vi_mfr_code'
36
+ integer 'carline_code'
37
+ integer 'carline_class_code'
38
+ boolean 'injection'
39
+ string 'carline_class_name'
40
+ string 'speeds'
41
+ index 'make_name'
42
+ index 'make_model_name'
43
+ index 'make_year_name'
44
+ index 'make_model_year_name'
15
45
  end
16
46
  end
@@ -1,20 +1,12 @@
1
1
  AutomobileMakeYear.class_eval do
2
2
  data_miner do
3
3
  process "Start from scratch" do
4
- connection.drop_table table_name
4
+ delete_all
5
5
  end
6
6
 
7
- schema Earth.database_options do
8
- string 'name'
9
- string 'make_name'
10
- integer 'year'
11
- float 'fuel_efficiency'
12
- string 'fuel_efficiency_units'
13
- integer 'volume' # This will sometimes be null because not all make_years have CAFE data
14
- end
15
-
16
- process "Ensure AutomobileMakeModelYearVariant is populated" do
7
+ process "Ensure AutomobileMakeModelYearVariant and AutomobileMakeFleetYear are populated" do
17
8
  AutomobileMakeModelYearVariant.run_data_miner!
9
+ AutomobileMakeFleetYear.run_data_miner!
18
10
  end
19
11
 
20
12
  process "Derive manufacturer names and years from automobile make model year variants" do
@@ -33,10 +25,6 @@ AutomobileMakeYear.class_eval do
33
25
  }
34
26
  end
35
27
 
36
- process "Ensure AutomobileMakeFleetYear is populated" do
37
- AutomobileMakeFleetYear.run_data_miner!
38
- end
39
-
40
28
  # FIXME TODO make this a method on AutomobileMakeYear?
41
29
  process "Calculate fuel efficiency from make fleet years for makes with CAFE data" do
42
30
  make_fleet_years = AutomobileMakeFleetYear.arel_table
@@ -3,12 +3,13 @@ class AutomobileMakeYear < ActiveRecord::Base
3
3
 
4
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
-
7
- data_miner do
8
- tap "Brighter Planet's make year data", Earth.taps_server
9
-
10
- process "Pull dependencies" do
11
- run_data_miner_on_belongs_to_associations
12
- end
6
+
7
+ create_table do
8
+ string 'name'
9
+ string 'make_name'
10
+ integer 'year'
11
+ float 'fuel_efficiency'
12
+ string 'fuel_efficiency_units'
13
+ integer 'volume' # This will sometimes be null because not all make_years have CAFE data
13
14
  end
14
15
  end
@@ -1,20 +1,5 @@
1
1
  AutomobileSizeClass.class_eval do
2
2
  data_miner do
3
- schema Earth.database_options do
4
- string 'name'
5
- string 'type_name'
6
- float 'annual_distance'
7
- string 'annual_distance_units'
8
- float 'fuel_efficiency_city'
9
- string 'fuel_efficiency_city_units'
10
- float 'fuel_efficiency_highway'
11
- string 'fuel_efficiency_highway_units'
12
- float 'hybrid_fuel_efficiency_city_multiplier'
13
- float 'hybrid_fuel_efficiency_highway_multiplier'
14
- float 'conventional_fuel_efficiency_city_multiplier'
15
- float 'conventional_fuel_efficiency_highway_multiplier'
16
- end
17
-
18
3
  # FIXME TODO pull this from AutomobileSizeClassYear
19
4
  import "a list of size classes and pre-calculated fuel efficiencies",
20
5
  :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdHlRUE5IcWlrRENhN0EtUldPTy1rX1E&gid=0&output=csv' do
@@ -6,7 +6,18 @@ class AutomobileSizeClass < ActiveRecord::Base
6
6
  :conventional_fuel_efficiency_city_multiplier => 0.987,
7
7
  :conventional_fuel_efficiency_highway_multiplier => 0.996
8
8
 
9
- data_miner do
10
- tap "Brighter Planet's sanitized automobile size class data", Earth.taps_server
9
+ create_table do
10
+ string 'name'
11
+ string 'type_name'
12
+ float 'annual_distance'
13
+ string 'annual_distance_units'
14
+ float 'fuel_efficiency_city'
15
+ string 'fuel_efficiency_city_units'
16
+ float 'fuel_efficiency_highway'
17
+ string 'fuel_efficiency_highway_units'
18
+ float 'hybrid_fuel_efficiency_city_multiplier'
19
+ float 'hybrid_fuel_efficiency_highway_multiplier'
20
+ float 'conventional_fuel_efficiency_city_multiplier'
21
+ float 'conventional_fuel_efficiency_highway_multiplier'
11
22
  end
12
23
  end
@@ -1,16 +1,5 @@
1
1
  AutomobileSizeClassYear.class_eval do
2
2
  data_miner do
3
- schema Earth.database_options do
4
- string 'name'
5
- string 'size_class_name'
6
- integer 'year'
7
- string 'type_name'
8
- float 'fuel_efficiency_city'
9
- string 'fuel_efficiency_city_units'
10
- float 'fuel_efficiency_highway'
11
- string 'fuel_efficiency_highway_units'
12
- end
13
-
14
3
  import "automobile size class year fuel efficiencies from the 2010 EPA Fuel Economy Trends report",
15
4
  :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdDZOLWdDdlZja04xZkJYc3NjeGxQamc&hl=en&gid=0&output=csv' do
16
5
  key 'name'
@@ -1,7 +1,14 @@
1
1
  class AutomobileSizeClassYear < ActiveRecord::Base
2
2
  set_primary_key :name
3
-
4
- data_miner do
5
- tap "Brighter Planet's sanitized automobile size class year data", Earth.taps_server
3
+
4
+ create_table do
5
+ string 'name'
6
+ string 'size_class_name'
7
+ integer 'year'
8
+ string 'type_name'
9
+ float 'fuel_efficiency_city'
10
+ string 'fuel_efficiency_city_units'
11
+ float 'fuel_efficiency_highway'
12
+ string 'fuel_efficiency_highway_units'
6
13
  end
7
14
  end
@@ -1,18 +1,6 @@
1
1
  # DEPRECATED - use AutomobileTypeFuelYearAge
2
2
  AutomobileTypeFuelAge.class_eval do
3
3
  data_miner do
4
- schema Earth.database_options do
5
- string 'name'
6
- string 'type_name'
7
- string 'fuel_common_name'
8
- integer 'age'
9
- float 'age_percent'
10
- float 'total_travel_percent'
11
- float 'annual_distance'
12
- string 'annual_distance_units'
13
- integer 'vehicles'
14
- end
15
-
16
4
  import "age distribution of gasoline passenger cars from the 2010 EPA GHG Inventory",
17
5
  :url => 'http://www.epa.gov/climatechange/emissions/downloads10/2010-Inventory-Annex-Tables.zip',
18
6
  :filename => 'Annex Tables/Annex 3/Table A-91.csv',
@@ -2,7 +2,15 @@
2
2
  class AutomobileTypeFuelAge < ActiveRecord::Base
3
3
  set_primary_key :name
4
4
 
5
- data_miner do
6
- tap "Brighter Planet's sanitized automobile type fuel age", Earth.taps_server
5
+ create_table do
6
+ string 'name'
7
+ string 'type_name'
8
+ string 'fuel_common_name'
9
+ integer 'age'
10
+ float 'age_percent'
11
+ float 'total_travel_percent'
12
+ float 'annual_distance'
13
+ string 'annual_distance_units'
14
+ integer 'vehicles'
7
15
  end
8
16
  end
@@ -1,16 +1,5 @@
1
1
  AutomobileTypeFuelControl.class_eval do
2
2
  data_miner do
3
- schema Earth.database_options do
4
- string 'name'
5
- string 'type_name'
6
- string 'fuel_common_name'
7
- string 'control_name'
8
- float 'ch4_emission_factor'
9
- string 'ch4_emission_factor_units'
10
- float 'n2o_emission_factor'
11
- string 'n2o_emission_factor_units'
12
- end
13
-
14
3
  import "automobile type fuel control data derived from the 2010 EPA GHG Inventory",
15
4
  :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdEloSTU5YUNOUXRFRUcxWHlTUi1GMkE&hl=en&gid=0&output=csv' do
16
5
  key 'name'
@@ -1,7 +1,13 @@
1
1
  class AutomobileTypeFuelControl < ActiveRecord::Base
2
2
  set_primary_key :name
3
-
4
- data_miner do
5
- tap "Brighter Planet's sanitized automobile type fuel control data", Earth.taps_server
3
+ create_table do
4
+ string 'name'
5
+ string 'type_name'
6
+ string 'fuel_common_name'
7
+ string 'control_name'
8
+ float 'ch4_emission_factor'
9
+ string 'ch4_emission_factor_units'
10
+ float 'n2o_emission_factor'
11
+ string 'n2o_emission_factor_units'
6
12
  end
7
13
  end
@@ -1,21 +1,5 @@
1
1
  AutomobileTypeFuelYear.class_eval do
2
2
  data_miner do
3
- schema Earth.database_options do
4
- string 'name'
5
- string 'type_name'
6
- string 'fuel_common_name'
7
- integer 'year'
8
- string 'type_year_name'
9
- float 'total_travel'
10
- string 'total_travel_units'
11
- float 'fuel_consumption'
12
- string 'fuel_consumption_units'
13
- float 'ch4_emission_factor'
14
- string 'ch4_emission_factor_units'
15
- float 'n2o_emission_factor'
16
- string 'n2o_emission_factor_units'
17
- end
18
-
19
3
  import "total vehicle miles travelled by gasoline passenger cars from the 2010 EPA GHG Inventory",
20
4
  :url => 'http://www.epa.gov/climatechange/emissions/downloads10/2010-Inventory-Annex-Tables.zip',
21
5
  :filename => 'Annex Tables/Annex 3/Table A-87.csv',
@@ -88,7 +72,7 @@ AutomobileTypeFuelYear.class_eval do
88
72
  end
89
73
  end
90
74
 
91
- process "Ensure necessary tables are populated" do
75
+ process "Ensure AutomobileTypeFuelYearControl and AutomobileTypeFuelControl are populated" do
92
76
  AutomobileTypeFuelYearControl.run_data_miner!
93
77
  AutomobileTypeFuelControl.run_data_miner!
94
78
  end
@@ -4,11 +4,19 @@ class AutomobileTypeFuelYear < ActiveRecord::Base
4
4
  has_many :year_controls, :class_name => 'AutomobileTypeFuelYearControl', :foreign_key => 'type_fuel_year_name'
5
5
  belongs_to :type_year, :class_name => 'AutomobileTypeYear', :foreign_key => 'type_year_name'
6
6
 
7
- data_miner do
8
- tap "Brighter Planet's sanitized automobile type fuel year data", Earth.taps_server
9
-
10
- process "pull dependencies" do
11
- run_data_miner_on_belongs_to_associations
12
- end
7
+ create_table do
8
+ string 'name'
9
+ string 'type_name'
10
+ string 'fuel_common_name'
11
+ integer 'year'
12
+ string 'type_year_name'
13
+ float 'total_travel'
14
+ string 'total_travel_units'
15
+ float 'fuel_consumption'
16
+ string 'fuel_consumption_units'
17
+ float 'ch4_emission_factor'
18
+ string 'ch4_emission_factor_units'
19
+ float 'n2o_emission_factor'
20
+ string 'n2o_emission_factor_units'
13
21
  end
14
22
  end
@@ -1,18 +1,5 @@
1
1
  AutomobileTypeFuelYearAge.class_eval do
2
2
  data_miner do
3
- schema Earth.database_options do
4
- string 'name'
5
- string 'type_name'
6
- string 'fuel_common_name'
7
- integer 'year'
8
- integer 'age'
9
- string 'type_fuel_year_name'
10
- float 'total_travel_percent'
11
- float 'annual_distance'
12
- string 'annual_distance_units'
13
- integer 'vehicles'
14
- end
15
-
16
3
  import "total travel distribution of gasoline passenger cars from the 2010 EPA GHG Inventory",
17
4
  :url => 'http://www.epa.gov/climatechange/emissions/downloads10/2010-Inventory-Annex-Tables.zip',
18
5
  :filename => 'Annex Tables/Annex 3/Table A-93.csv',
@@ -2,12 +2,17 @@ class AutomobileTypeFuelYearAge < ActiveRecord::Base
2
2
  set_primary_key :name
3
3
 
4
4
  belongs_to :type_fuel_year, :class_name => 'AutomobileTypeFuelYear', :foreign_key => 'type_fuel_year_name'
5
-
6
- data_miner do
7
- tap "Brighter Planet's sanitized automobile type fuel age", Earth.taps_server
8
-
9
- process "Pull dependencies" do
10
- run_data_miner_on_belongs_to_associations
11
- end
5
+
6
+ create_table do
7
+ string 'name'
8
+ string 'type_name'
9
+ string 'fuel_common_name'
10
+ integer 'year'
11
+ integer 'age'
12
+ string 'type_fuel_year_name'
13
+ float 'total_travel_percent'
14
+ float 'annual_distance'
15
+ string 'annual_distance_units'
16
+ integer 'vehicles'
12
17
  end
13
18
  end
@@ -1,16 +1,5 @@
1
1
  AutomobileTypeFuelYearControl.class_eval do
2
2
  data_miner do
3
- schema Earth.database_options do
4
- string 'name'
5
- string 'type_name'
6
- string 'fuel_common_name'
7
- integer 'year'
8
- string 'control_name'
9
- string 'type_fuel_control_name'
10
- string 'type_fuel_year_name'
11
- float 'total_travel_percent'
12
- end
13
-
14
3
  import "automobile type fuel year control data derived from the 2010 EPA GHG Inventory",
15
4
  :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdGpQV2xMdlZkV1JzVlVTeU5ZalF6elE&hl=en&gid=0&output=csv' do
16
5
  key 'name'
@@ -3,11 +3,14 @@ class AutomobileTypeFuelYearControl < ActiveRecord::Base
3
3
 
4
4
  belongs_to :control, :class_name => 'AutomobileTypeFuelControl', :foreign_key => 'type_fuel_control_name'
5
5
 
6
- data_miner do
7
- tap "Brighter Planet's sanitized automobile type fuel year control data", Earth.taps_server
8
-
9
- process "Pull dependencies" do
10
- run_data_miner_on_belongs_to_associations
11
- end
6
+ create_table do
7
+ string 'name'
8
+ string 'type_name'
9
+ string 'fuel_common_name'
10
+ integer 'year'
11
+ string 'control_name'
12
+ string 'type_fuel_control_name'
13
+ string 'type_fuel_year_name'
14
+ float 'total_travel_percent'
12
15
  end
13
16
  end
@@ -1,15 +1,5 @@
1
1
  AutomobileTypeYear.class_eval do
2
2
  data_miner do
3
- schema Earth.database_options do
4
- string 'name'
5
- string 'type_name'
6
- integer 'year'
7
- float 'hfc_emissions'
8
- string 'hfc_emissions_units'
9
- float 'hfc_emission_factor'
10
- string 'hfc_emission_factor_units'
11
- end
12
-
13
3
  import "automobile type year air conditioning emissions derived from the 2010 EPA GHG Inventory",
14
4
  :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdFoyTWhDeHpndTV5Ny1aX0sxR1ljSFE&hl=en&gid=0&output=csv' do
15
5
  key 'name'