earth 0.5.4 → 0.6.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.
- data/Gemfile +1 -0
- data/TODO +2 -0
- data/bin/earth_tester.rb +62 -9
- data/earth.gemspec +7 -4
- data/lib/earth.rb +18 -17
- data/lib/earth/air.rb +2 -0
- data/lib/earth/air/aircraft.rb +76 -19
- data/lib/earth/air/aircraft/data_miner.rb +1 -63
- data/lib/earth/air/aircraft_class.rb +48 -12
- data/lib/earth/air/aircraft_class/data_miner.rb +3 -46
- data/lib/earth/air/aircraft_fuel_use_equation.rb +11 -13
- data/lib/earth/air/aircraft_instance.rb +9 -0
- data/lib/earth/air/aircraft_instance_seat_class.rb +12 -0
- data/lib/earth/air/airline.rb +6 -8
- data/lib/earth/air/airline/data_miner.rb +3 -3
- data/lib/earth/air/airport.rb +8 -10
- data/lib/earth/air/airport/data_miner.rb +1 -1
- data/lib/earth/air/bts_aircraft.rb +3 -5
- data/lib/earth/air/flight_distance_class.rb +4 -6
- data/lib/earth/air/flight_seat_class.rb +5 -7
- data/lib/earth/air/flight_segment.rb +58 -42
- data/lib/earth/air/flight_segment/data_miner.rb +11 -26
- data/lib/earth/automobile.rb +1 -0
- data/lib/earth/automobile/automobile_fuel.rb +78 -25
- data/lib/earth/automobile/automobile_fuel/data_miner.rb +5 -72
- data/lib/earth/automobile/automobile_make.rb +14 -6
- data/lib/earth/automobile/automobile_make/data_miner.rb +20 -35
- data/lib/earth/automobile/automobile_make_fleet_year.rb +39 -10
- data/lib/earth/automobile/automobile_make_fleet_year/data_miner.rb +0 -29
- data/lib/earth/automobile/automobile_make_model.rb +30 -9
- data/lib/earth/automobile/automobile_make_model/data_miner.rb +11 -26
- data/lib/earth/automobile/automobile_make_model_year.rb +41 -12
- data/lib/earth/automobile/automobile_make_model_year/data_miner.rb +14 -34
- data/lib/earth/automobile/automobile_make_model_year_variant.rb +56 -38
- data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +15 -61
- data/lib/earth/automobile/automobile_make_year.rb +15 -8
- data/lib/earth/automobile/automobile_make_year/data_miner.rb +17 -51
- data/lib/earth/automobile/automobile_size_class.rb +78 -14
- data/lib/earth/automobile/automobile_size_class/data_miner.rb +0 -66
- data/lib/earth/automobile/automobile_size_class_year.rb +38 -10
- data/lib/earth/automobile/automobile_size_class_year/data_miner.rb +0 -30
- data/lib/earth/automobile/automobile_type_fuel_age.rb +60 -11
- data/lib/earth/automobile/automobile_type_fuel_age/data_miner.rb +10 -65
- data/lib/earth/automobile/automobile_type_fuel_control.rb +41 -10
- data/lib/earth/automobile/automobile_type_fuel_control/data_miner.rb +0 -33
- data/lib/earth/automobile/automobile_type_fuel_year.rb +60 -15
- data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +1 -52
- data/lib/earth/automobile/automobile_type_fuel_year_age.rb +64 -12
- data/lib/earth/automobile/automobile_type_fuel_year_age/data_miner.rb +1 -59
- data/lib/earth/automobile/automobile_type_fuel_year_control.rb +31 -10
- data/lib/earth/automobile/automobile_type_fuel_year_control/data_miner.rb +2 -32
- data/lib/earth/automobile/automobile_type_year.rb +51 -10
- data/lib/earth/automobile/automobile_type_year/data_miner.rb +1 -43
- data/lib/earth/automobile/data_miner.rb +1 -0
- data/lib/earth/bus/bus_class.rb +108 -28
- data/lib/earth/bus/bus_class/data_miner.rb +0 -88
- data/lib/earth/bus/bus_fuel.rb +83 -15
- data/lib/earth/bus/bus_fuel/data_miner.rb +0 -76
- data/lib/earth/bus/bus_fuel_control.rb +8 -10
- data/lib/earth/bus/bus_fuel_year_control.rb +7 -9
- data/lib/earth/bus/bus_fuel_year_control/data_miner.rb +1 -5
- data/lib/earth/computation/computation_carrier.rb +11 -5
- data/lib/earth/computation/computation_carrier/data_miner.rb +0 -7
- data/lib/earth/computation/computation_carrier_instance_class.rb +25 -8
- data/lib/earth/computation/computation_carrier_instance_class/data_miner.rb +0 -18
- data/lib/earth/computation/computation_carrier_region.rb +5 -7
- data/lib/earth/diet/diet_class.rb +14 -16
- data/lib/earth/diet/food_group.rb +7 -9
- data/lib/earth/fuel/fuel.rb +14 -16
- data/lib/earth/fuel/fuel/data_miner.rb +7 -3
- data/lib/earth/fuel/fuel_price.rb +4 -6
- data/lib/earth/fuel/fuel_type.rb +12 -14
- data/lib/earth/fuel/fuel_year.rb +57 -16
- data/lib/earth/fuel/fuel_year/data_miner.rb +0 -43
- data/lib/earth/fuel/greenhouse_gas.rb +46 -9
- data/lib/earth/fuel/greenhouse_gas/data_miner.rb +0 -38
- data/lib/earth/hospitality/lodging_class.rb +10 -12
- data/lib/earth/industry/industry.rb +3 -5
- data/lib/earth/industry/industry_product.rb +6 -8
- data/lib/earth/industry/industry_product_line.rb +5 -7
- data/lib/earth/industry/industry_sector.rb +5 -7
- data/lib/earth/industry/merchant.rb +4 -6
- data/lib/earth/industry/merchant_category.rb +3 -5
- data/lib/earth/industry/merchant_category_industry.rb +5 -7
- data/lib/earth/industry/product_line.rb +5 -7
- data/lib/earth/industry/product_line_industry_product.rb +5 -7
- data/lib/earth/industry/sector.rb +5 -7
- data/lib/earth/locality/census_division.rb +21 -23
- data/lib/earth/locality/census_region.rb +3 -5
- data/lib/earth/locality/climate_division.rb +5 -7
- data/lib/earth/locality/country.rb +13 -15
- data/lib/earth/locality/egrid_region.rb +14 -5
- data/lib/earth/locality/egrid_region/data_miner.rb +0 -10
- data/lib/earth/locality/egrid_subregion.rb +71 -18
- data/lib/earth/locality/egrid_subregion/data_miner.rb +0 -59
- data/lib/earth/locality/petroleum_administration_for_defense_district.rb +6 -8
- data/lib/earth/locality/state.rb +6 -8
- data/lib/earth/locality/urbanity.rb +2 -4
- data/lib/earth/locality/urbanity/data_miner.rb +7 -3
- data/lib/earth/locality/zip_code.rb +8 -10
- data/lib/earth/pet/breed.rb +5 -7
- data/lib/earth/pet/breed_gender.rb +6 -8
- data/lib/earth/pet/gender.rb +2 -4
- data/lib/earth/pet/species.rb +15 -17
- data/lib/earth/rail/rail_class.rb +64 -14
- data/lib/earth/rail/rail_class/data_miner.rb +0 -51
- data/lib/earth/residence/air_conditioner_use.rb +4 -6
- data/lib/earth/residence/air_conditioner_use/data_miner.rb +7 -3
- data/lib/earth/residence/clothes_machine_use.rb +4 -6
- data/lib/earth/residence/clothes_machine_use/data_miner.rb +11 -9
- data/lib/earth/residence/dishwasher_use.rb +4 -6
- data/lib/earth/residence/dishwasher_use/data_miner.rb +11 -9
- data/lib/earth/residence/residence_appliance.rb +4 -6
- data/lib/earth/residence/residence_class.rb +2 -4
- data/lib/earth/residence/residence_class/data_miner.rb +7 -3
- data/lib/earth/residence/residence_fuel_price.rb +12 -14
- data/lib/earth/residence/residence_fuel_price/data_miner.rb +7 -0
- data/lib/earth/residence/residence_fuel_type.rb +6 -8
- data/lib/earth/residence/residential_energy_consumption_survey_response.rb +91 -93
- data/lib/earth/residence/residential_energy_consumption_survey_response/data_miner.rb +9 -8
- data/lib/earth/shipping/carrier.rb +57 -10
- data/lib/earth/shipping/carrier/data_miner.rb +0 -48
- data/lib/earth/shipping/carrier_mode.rb +41 -10
- data/lib/earth/shipping/carrier_mode/data_miner.rb +0 -33
- data/lib/earth/shipping/shipment_mode.rb +30 -7
- data/lib/earth/shipping/shipment_mode/data_miner.rb +0 -23
- data/lib/earth/utils.rb +45 -0
- data/lib/earth/version.rb +1 -1
- data/spec/earth/air/aircraft_spec.rb +1 -1
- data/vendor/clean_find_in_batches/init.rb +35 -0
- metadata +74 -47
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
AutomobileFuel.class_eval do
|
|
2
2
|
data_miner do
|
|
3
3
|
import "a list of pure automobile fuels",
|
|
4
|
-
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdE9xTEdueFM2R0diNTgxUlk1QXFSb2c&gid=0&output=
|
|
4
|
+
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdE9xTEdueFM2R0diNTgxUlk1QXFSb2c&gid=0&output=csv' do
|
|
5
5
|
key 'name'
|
|
6
6
|
store 'code'
|
|
7
7
|
store 'base_fuel_name'
|
|
@@ -28,7 +28,7 @@ AutomobileFuel.class_eval do
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
process "Derive annual distance" do
|
|
31
|
-
|
|
31
|
+
find_each do |record|
|
|
32
32
|
scope = record.type_fuel_year_ages.where(:year => record.type_fuel_year_ages.maximum('year'))
|
|
33
33
|
record.annual_distance = scope.weighted_average(:annual_distance, :weighted_by => :vehicles)
|
|
34
34
|
record.annual_distance_units = scope.first.annual_distance_units
|
|
@@ -37,7 +37,7 @@ AutomobileFuel.class_eval do
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
process "Derive co2 emission factor and co2 biogenic emission factors" do
|
|
40
|
-
|
|
40
|
+
find_each do |record|
|
|
41
41
|
if record.blend_fuel.present?
|
|
42
42
|
record.co2_emission_factor = (record.base_fuel.co2_emission_factor * (1 - record.blend_portion)) + (record.blend_fuel.co2_emission_factor * record.blend_portion)
|
|
43
43
|
record.co2_biogenic_emission_factor = (record.base_fuel.co2_biogenic_emission_factor * (1 - record.blend_portion)) + (record.blend_fuel.co2_biogenic_emission_factor * record.blend_portion)
|
|
@@ -52,7 +52,7 @@ AutomobileFuel.class_eval do
|
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
process "Derive ch4, n2o, and hfc emission factors" do
|
|
55
|
-
|
|
55
|
+
find_each do |record|
|
|
56
56
|
scope = record.type_fuel_years.where(:year => record.type_fuel_years.maximum('year'))
|
|
57
57
|
|
|
58
58
|
record.ch4_emission_factor = scope.weighted_average(:ch4_emission_factor, :weighted_by => :total_travel) * GreenhouseGas[:ch4].global_warming_potential
|
|
@@ -81,73 +81,6 @@ AutomobileFuel.class_eval do
|
|
|
81
81
|
|
|
82
82
|
# FIXME TODO verify code somehow
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
verify "#{attribute.humanize} should never be missing" do
|
|
86
|
-
AutomobileFuel.all.each do |fuel|
|
|
87
|
-
value = fuel.send(:"#{attribute}")
|
|
88
|
-
unless value.present?
|
|
89
|
-
puts "Missing #{attribute.humanize.downcase} for AutomobileFuel #{fuel.name}"
|
|
90
|
-
raise "Missing #{attribute.humanize.downcase} for AutomobileFuel #{fuel.name}"
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# FIXME TODO verify that base_fuel_name and blend_fuel_name are found in Fuel if present
|
|
97
|
-
# FIXME TODO verify that distance_key is found in AutomobileTypeFuelYearAge
|
|
98
|
-
# FIXME TODO verify that ef_key is found in AutomobileTypeFuelYear
|
|
99
|
-
|
|
100
|
-
verify "Blend portion should be from 0 to 1 if present" do
|
|
101
|
-
AutomobileFuel.all.each do |fuel|
|
|
102
|
-
if fuel.blend_portion.present?
|
|
103
|
-
unless fuel.blend_portion >=0 and fuel.blend_portion <= 1
|
|
104
|
-
puts "Invalid blend portion for AutomobileFuel #{fuel.name}: #{fuel.blend_portion} (should be from 0 to 1)"
|
|
105
|
-
raise "Invalid blend portion for AutomobileFuel #{fuel.name}: #{fuel.blend_portion} (should be from 0 to 1)"
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
["co2_emission_factor", "co2_biogenic_emission_factor"].each do |attribute|
|
|
112
|
-
verify "#{attribute.humanize} should be 0 or more" do
|
|
113
|
-
AutomobileFuel.all.each do |fuel|
|
|
114
|
-
value = fuel.send(attribute)
|
|
115
|
-
unless value >= 0
|
|
116
|
-
puts "Invalid #{attribute.humanize.downcase} for AutomobileFuel #{fuel.name}: #{value} (should be 0 or more)"
|
|
117
|
-
raise "Invalid #{attribute.humanize.downcase} for AutomobileFuel #{fuel.name}: #{value} (should be 0 or more)"
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
["ch4_emission_factor", "n2o_emission_factor", "hfc_emission_factor"].each do |attribute|
|
|
124
|
-
verify "#{attribute.humanize} should be > 0" do
|
|
125
|
-
AutomobileFuel.all.each do |fuel|
|
|
126
|
-
value = fuel.send(attribute)
|
|
127
|
-
unless value > 0
|
|
128
|
-
puts "Invalid #{attribute.humanize.downcase} for AutomobileFuel #{fuel.name}: #{value} (should be > 0)"
|
|
129
|
-
raise "Invalid #{attribute.humanize.downcase} for AutomobileFuel #{fuel.name}: #{value} (should be > 0)"
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
[["co2_emission_factor_units", "kilograms_per_litre"],
|
|
136
|
-
["co2_biogenic_emission_factor_units", "kilograms_per_litre"],
|
|
137
|
-
["ch4_emission_factor_units", "kilograms_co2e_per_litre"],
|
|
138
|
-
["n2o_emission_factor_units", "kilograms_co2e_per_litre"],
|
|
139
|
-
["hfc_emission_factor_units", "kilograms_co2e_per_litre"]].each do |pair|
|
|
140
|
-
attribute = pair[0]
|
|
141
|
-
proper_units = pair[1]
|
|
142
|
-
verify "#{attribute.humanize} should be #{proper_units.humanize.downcase}" do
|
|
143
|
-
AutomobileFuel.all.each do |fuel|
|
|
144
|
-
units = fuel.send(attribute)
|
|
145
|
-
unless units == proper_units
|
|
146
|
-
puts "Invalid #{attribute.humanize.downcase} for AutomobileFuel #{fuel.name}: #{units} (should be #{proper_units})"
|
|
147
|
-
fail
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
end
|
|
84
|
+
|
|
152
85
|
end
|
|
153
86
|
end
|
|
@@ -6,9 +6,17 @@ class AutomobileMake < ActiveRecord::Base
|
|
|
6
6
|
has_many :fleet_years, :class_name => 'AutomobileMakeFleetYear', :foreign_key => 'make_name'
|
|
7
7
|
has_many :make_model_year_variants, :class_name => 'AutomobileMakeModelYearVariant', :foreign_key => 'make_name'
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
col :name
|
|
10
|
+
col :fuel_efficiency, :type => :float
|
|
11
|
+
col :fuel_efficiency_units
|
|
12
|
+
|
|
13
|
+
# TODO convert to table_warnings
|
|
14
|
+
# verify "Fuel efficiency should be greater than zero" do
|
|
15
|
+
# AutomobileMake.all.each do |make|
|
|
16
|
+
# unless make.fuel_efficiency > 0
|
|
17
|
+
# raise "Invalid fuel efficiency for AutomobileMake #{make.name}: #{make.fuel_efficiency} (should be > 0)"
|
|
18
|
+
# end
|
|
19
|
+
# end
|
|
20
|
+
# end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -10,20 +10,24 @@ AutomobileMake.class_eval do
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
process "Derive manufacturer names from automobile make model year variants" do
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
::Earth::Utils.insert_ignore(
|
|
14
|
+
:src => AutomobileMakeModelYearVariant,
|
|
15
|
+
:dest => AutomobileMake,
|
|
16
|
+
:cols => {
|
|
17
|
+
:make_name => :name,
|
|
18
|
+
}
|
|
19
|
+
)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
# sabshere 1/31/11 add Avanti, DaimlerChrysler, IHC, Tesla, etc.
|
|
22
23
|
process "Derive extra manufacturer names from CAFE data" do
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
::Earth::Utils.insert_ignore(
|
|
25
|
+
:src => AutomobileMakeFleetYear,
|
|
26
|
+
:dest => AutomobileMake,
|
|
27
|
+
:cols => {
|
|
28
|
+
:make_name => :name,
|
|
29
|
+
}
|
|
30
|
+
)
|
|
27
31
|
end
|
|
28
32
|
|
|
29
33
|
# FIXME TODO make this a method on AutomobileMake?
|
|
@@ -33,36 +37,17 @@ AutomobileMake.class_eval do
|
|
|
33
37
|
conditional_relation = makes[:name].eq(make_fleet_years[:make_name])
|
|
34
38
|
relation = AutomobileMakeFleetYear.weighted_average_relation(:fuel_efficiency, :weighted_by => :volume).where(conditional_relation)
|
|
35
39
|
update_all "fuel_efficiency = (#{relation.to_sql})"
|
|
36
|
-
update_all "fuel_efficiency_units = 'kilometres_per_litre'"
|
|
37
40
|
end
|
|
38
41
|
|
|
39
42
|
process "Calculate fuel effeciency from automobile make model year variants for makes without CAFE data" do
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
connection.execute %{
|
|
46
|
-
UPDATE automobile_makes
|
|
47
|
-
SET automobile_makes.fuel_efficiency_units = 'kilometres_per_litre'
|
|
48
|
-
WHERE automobile_makes.fuel_efficiency_units IS NULL
|
|
49
|
-
}
|
|
43
|
+
update_all(
|
|
44
|
+
%{fuel_efficiency = (SELECT AVG(automobile_make_model_year_variants.fuel_efficiency) FROM automobile_make_model_year_variants WHERE automobile_makes.name = automobile_make_model_year_variants.make_name)},
|
|
45
|
+
'fuel_efficiency IS NULL'
|
|
46
|
+
)
|
|
50
47
|
end
|
|
51
48
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
unless make.fuel_efficiency > 0
|
|
55
|
-
raise "Invalid fuel efficiency for AutomobileMake #{make.name}: #{make.fuel_efficiency} (should be > 0)"
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
verify "Fuel efficiency units should be kilometres per litre" do
|
|
61
|
-
AutomobileMake.all.each do |make|
|
|
62
|
-
unless make.fuel_efficiency_units == "kilometres_per_litre"
|
|
63
|
-
raise "Invalid fuel efficiency units for AutomobileMake #{make.name}: #{make.fuel_efficiency_units} (should be kilometres_per_litre)"
|
|
64
|
-
end
|
|
65
|
-
end
|
|
49
|
+
process "Set units" do
|
|
50
|
+
update_all :fuel_efficiency_units => 'kilometres_per_litre'
|
|
66
51
|
end
|
|
67
52
|
end
|
|
68
53
|
end
|
|
@@ -4,14 +4,43 @@ class AutomobileMakeFleetYear < ActiveRecord::Base
|
|
|
4
4
|
belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
|
|
5
5
|
belongs_to :make_year, :class_name => 'AutomobileMakeYear', :foreign_key => 'make_year_name'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
col :name
|
|
8
|
+
col :make_year_name
|
|
9
|
+
col :make_name
|
|
10
|
+
col :fleet
|
|
11
|
+
col :year, :type => :integer
|
|
12
|
+
col :fuel_efficiency, :type => :float
|
|
13
|
+
col :fuel_efficiency_units
|
|
14
|
+
col :volume, :type => :integer
|
|
15
|
+
|
|
16
|
+
# TODO convert to table_warnings
|
|
17
|
+
# verify "Year should be from 1978 to 2011" do
|
|
18
|
+
# connection.select_values("SELECT DISTINCT year FROM automobile_make_fleet_years").each do |year|
|
|
19
|
+
# year = year.to_i
|
|
20
|
+
# unless year > 1977 and year < 2012
|
|
21
|
+
# raise "Invalid year in automobile_make_fleet_years: #{year} is not from 1978 to 2011"
|
|
22
|
+
# end
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
# verify "Fuel efficiency and volume should be greater than zero" do
|
|
27
|
+
# [:fuel_efficiency, :volume].each do |field|
|
|
28
|
+
# if AutomobileMakeFleetYear.where(field => nil).any?
|
|
29
|
+
# raise "Invalid #{field} in automobile_make_fleet_years: nil is not > 0"
|
|
30
|
+
# else
|
|
31
|
+
# min = AutomobileMakeFleetYear.minimum(field)
|
|
32
|
+
# unless min > 0
|
|
33
|
+
# raise "Invalid #{field} in automobile_make_fleet_years: #{min} is not > 0"
|
|
34
|
+
# end
|
|
35
|
+
# end
|
|
36
|
+
# end
|
|
37
|
+
# end
|
|
38
|
+
#
|
|
39
|
+
# verify "Fuel efficiency units should be kilometres per litre" do
|
|
40
|
+
# connection.select_values("SELECT DISTINCT fuel_efficiency_units FROM automobile_make_fleet_years").each do |units|
|
|
41
|
+
# unless units == "kilometres_per_litre"
|
|
42
|
+
# raise "Invalid fuel efficiency units in automobile_make_fleet_years: #{units} is not 'kilometres_per_litre'"
|
|
43
|
+
# end
|
|
44
|
+
# end
|
|
45
|
+
# end
|
|
17
46
|
end
|
|
@@ -12,34 +12,5 @@ AutomobileMakeFleetYear.class_eval do
|
|
|
12
12
|
store 'fuel_efficiency', :from_units => :miles_per_gallon, :to_units => :kilometres_per_litre
|
|
13
13
|
store 'volume'
|
|
14
14
|
end
|
|
15
|
-
|
|
16
|
-
verify "Year should be from 1978 to 2010" do
|
|
17
|
-
connection.select_values("SELECT DISTINCT year FROM automobile_make_fleet_years").each do |year|
|
|
18
|
-
unless year > 1977 and year < 2011
|
|
19
|
-
raise "Invalid year in automobile_make_fleet_years: #{year} is not from 1978 to 2010"
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
verify "Fuel efficiency and volume should be greater than zero" do
|
|
25
|
-
[:fuel_efficiency, :volume].each do |field|
|
|
26
|
-
if AutomobileMakeFleetYear.where(field => nil).any?
|
|
27
|
-
raise "Invalid #{field} in automobile_make_fleet_years: nil is not > 0"
|
|
28
|
-
else
|
|
29
|
-
min = AutomobileMakeFleetYear.minimum(field)
|
|
30
|
-
unless min > 0
|
|
31
|
-
raise "Invalid #{field} in automobile_make_fleet_years: #{min} is not > 0"
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
verify "Fuel efficiency units should be kilometres per litre" do
|
|
38
|
-
connection.select_values("SELECT DISTINCT fuel_efficiency_units FROM automobile_make_fleet_years").each do |units|
|
|
39
|
-
unless units == "kilometres_per_litre"
|
|
40
|
-
raise "Invalid fuel efficiency units in automobile_make_fleet_years: #{units} is not 'kilometres_per_litre'"
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
15
|
end
|
|
45
16
|
end
|
|
@@ -4,13 +4,34 @@ class AutomobileMakeModel < ActiveRecord::Base
|
|
|
4
4
|
belongs_to :make, :class_name => 'AutomobileMake', :foreign_key => 'make_name'
|
|
5
5
|
has_many :make_model_year_variants, :class_name => 'AutomobileMakeModelYearVariant', :foreign_key => 'make_model_name'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
col :name # make + model
|
|
8
|
+
col :make_name
|
|
9
|
+
col :model_name # model only
|
|
10
|
+
col :fuel_efficiency_city, :type => :float
|
|
11
|
+
col :fuel_efficiency_city_units
|
|
12
|
+
col :fuel_efficiency_highway, :type => :float
|
|
13
|
+
col :fuel_efficiency_highway_units
|
|
14
|
+
|
|
15
|
+
# TODO convert to table_warnings
|
|
16
|
+
# verify "Fuel efficiencies should be greater than zero" do
|
|
17
|
+
# AutomobileMakeModel.all.each do |model|
|
|
18
|
+
# %w{ city highway }.each do |type|
|
|
19
|
+
# fuel_efficiency = model.send(:"fuel_efficiency_#{type}")
|
|
20
|
+
# unless fuel_efficiency > 0
|
|
21
|
+
# raise "Invalid fuel efficiency #{type} for AutomobileMakeModel #{model.name}: #{fuel_efficiency} (should be > 0)"
|
|
22
|
+
# end
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# verify "Fuel efficiency units should be kilometres per litre" do
|
|
28
|
+
# AutomobileMakeModel.all.each do |model|
|
|
29
|
+
# %w{ city highway }.each do |type|
|
|
30
|
+
# units = model.send(:"fuel_efficiency_#{type}_units")
|
|
31
|
+
# unless units == "kilometres_per_litre"
|
|
32
|
+
# raise "Invalid fuel efficiency #{type} units for AutomobileMakeModel #{model.name}: #{units} (should be kilometres_per_litre)"
|
|
33
|
+
# end
|
|
34
|
+
# end
|
|
35
|
+
# end
|
|
36
|
+
# end
|
|
16
37
|
end
|
|
@@ -9,9 +9,16 @@ AutomobileMakeModel.class_eval do
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
process "Derive model names from automobile make model year variants" do
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
::Earth::Utils.insert_ignore(
|
|
13
|
+
:src => AutomobileMakeModelYearVariant,
|
|
14
|
+
:dest => AutomobileMakeModel,
|
|
15
|
+
:cols => {
|
|
16
|
+
:make_model_name => :name,
|
|
17
|
+
:make_name => :make_name,
|
|
18
|
+
:name => :model_name
|
|
19
|
+
}
|
|
20
|
+
# :where => 'LENGTH(src.make_name) > 0 AND LENGTH(src.make_model_name) > 0'
|
|
21
|
+
)
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
# FIXME TODO make this a method on AutomobileMakeModel?
|
|
@@ -25,29 +32,7 @@ AutomobileMakeModel.class_eval do
|
|
|
25
32
|
# sabshere 12/6/10 careful, don't use AutomobileMakeModelYearVariant.where here or you will be forced into projecting *
|
|
26
33
|
relation = variants.project(variants[:"fuel_efficiency_#{i}"].average).where(conditional_relation).where(null_check)
|
|
27
34
|
update_all "fuel_efficiency_#{i} = (#{relation.to_sql})"
|
|
28
|
-
update_all "fuel_efficiency_#{i}_units
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
verify "Fuel efficiencies should be greater than zero" do
|
|
33
|
-
AutomobileMakeModel.all.each do |model|
|
|
34
|
-
%w{ city highway }.each do |type|
|
|
35
|
-
fuel_efficiency = model.send(:"fuel_efficiency_#{type}")
|
|
36
|
-
unless fuel_efficiency > 0
|
|
37
|
-
raise "Invalid fuel efficiency #{type} for AutomobileMakeModel #{model.name}: #{fuel_efficiency} (should be > 0)"
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
verify "Fuel efficiency units should be kilometres per litre" do
|
|
44
|
-
AutomobileMakeModel.all.each do |model|
|
|
45
|
-
%w{ city highway }.each do |type|
|
|
46
|
-
units = model.send(:"fuel_efficiency_#{type}_units")
|
|
47
|
-
unless units == "kilometres_per_litre"
|
|
48
|
-
raise "Invalid fuel efficiency #{type} units for AutomobileMakeModel #{model.name}: #{units} (should be kilometres_per_litre)"
|
|
49
|
-
end
|
|
50
|
-
end
|
|
35
|
+
update_all "fuel_efficiency_#{i}_units" => 'kilometres_per_litre'
|
|
51
36
|
end
|
|
52
37
|
end
|
|
53
38
|
end
|
|
@@ -4,16 +4,45 @@ class AutomobileMakeModelYear < ActiveRecord::Base
|
|
|
4
4
|
belongs_to :make_year, :class_name => 'AutomobileMakeYear', :foreign_key => 'make_year_name'
|
|
5
5
|
has_many :make_model_year_variants, :class_name => 'AutomobileMakeModelYearVariant', :foreign_key => 'make_model_year_name'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
col :name # make + model + year
|
|
8
|
+
col :make_name
|
|
9
|
+
col :model_name
|
|
10
|
+
col :make_model_name
|
|
11
|
+
col :year, :type => :integer
|
|
12
|
+
col :make_year_name
|
|
13
|
+
col :fuel_efficiency_city, :type => :float
|
|
14
|
+
col :fuel_efficiency_city_units
|
|
15
|
+
col :fuel_efficiency_highway, :type => :float
|
|
16
|
+
col :fuel_efficiency_highway_units
|
|
17
|
+
|
|
18
|
+
# TODO convert to table_warnings
|
|
19
|
+
# verify "Year should be from 1985 to 2011" do
|
|
20
|
+
# AutomobileMakeModelYear.all.each do |model_year|
|
|
21
|
+
# unless model_year.year.to_i > 1984 and model_year.year.to_i < 2012
|
|
22
|
+
# raise "Invalid year for AutomobileMakeModelYear #{model_year.name}: #{model_year.year} (should be from 1985 to 2011)"
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# verify "Fuel efficiencies should be greater than zero" do
|
|
28
|
+
# AutomobileMakeModelYear.all.each do |model_year|
|
|
29
|
+
# %w{ city highway }.each do |type|
|
|
30
|
+
# fuel_efficiency = model_year.send(:"fuel_efficiency_#{type}")
|
|
31
|
+
# unless fuel_efficiency.to_f > 0
|
|
32
|
+
# raise "Invalid fuel efficiency #{type} for AutomobileMakeModelYear #{model_year.name}: #{fuel_efficiency} (should be > 0)"
|
|
33
|
+
# end
|
|
34
|
+
# end
|
|
35
|
+
# end
|
|
36
|
+
# end
|
|
37
|
+
#
|
|
38
|
+
# verify "Fuel efficiency units should be kilometres per litre" do
|
|
39
|
+
# AutomobileMakeModelYear.all.each do |model_year|
|
|
40
|
+
# %w{ city highway }.each do |type|
|
|
41
|
+
# units = model_year.send(:"fuel_efficiency_#{type}_units")
|
|
42
|
+
# unless units == "kilometres_per_litre"
|
|
43
|
+
# raise "Invalid fuel efficiency #{type} units for AutomobileMakeModelYear #{model_year.name}: #{units} (should be kilometres_per_litre)"
|
|
44
|
+
# end
|
|
45
|
+
# end
|
|
46
|
+
# end
|
|
47
|
+
# end
|
|
19
48
|
end
|