earth 0.12.3 → 0.12.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/TODO +1 -0
- data/bin/earth_tester.rb +39 -47
- data/data/air/airlines.csv +45 -0
- data/data/air/airports.csv +11 -0
- data/data/hospitality/lodging_classes.csv +4 -0
- data/data/locality/national_electricity_efs.csv +137 -0
- data/earth.gemspec +1 -1
- data/errata/airline/bts_carrier_codes_errata.csv +2 -0
- data/lib/earth.rb +3 -0
- data/lib/earth/active_record_base_class_methods.rb +25 -0
- data/lib/earth/air/aircraft.rb +5 -4
- data/lib/earth/air/airline.rb +5 -1
- data/lib/earth/air/airline/data_miner.rb +1 -1
- data/lib/earth/air/airport.rb +10 -2
- data/lib/earth/air/airport/data_miner.rb +11 -5
- data/lib/earth/air/bts_aircraft.rb +1 -1
- data/lib/earth/air/flight_segment.rb +14 -1
- data/lib/earth/air/flight_segment/data_miner.rb +6 -13
- data/lib/earth/automobile/automobile_activity_year/data_miner.rb +1 -1
- data/lib/earth/automobile/automobile_activity_year_type/data_miner.rb +1 -1
- data/lib/earth/automobile/automobile_fuel/data_miner.rb +5 -5
- data/lib/earth/automobile/automobile_make/data_miner.rb +1 -1
- data/lib/earth/automobile/automobile_make_model/data_miner.rb +1 -1
- data/lib/earth/automobile/automobile_make_model_year/data_miner.rb +1 -1
- data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +6 -6
- data/lib/earth/automobile/automobile_type_fuel/data_miner.rb +2 -2
- data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +1 -1
- data/lib/earth/conversions_ext.rb +7 -6
- data/lib/earth/fuel/fuel.rb +1 -1
- data/lib/earth/fuel/fuel/data_miner.rb +1 -3
- data/lib/earth/hospitality/commercial_building_energy_consumption_survey_response.rb +3 -1
- data/lib/earth/hospitality/commercial_building_energy_consumption_survey_response/data_miner.rb +44 -11
- data/lib/earth/hospitality/lodging_class.rb +0 -1
- data/lib/earth/hospitality/lodging_class/data_miner.rb +3 -9
- data/lib/earth/industry/merchant_category/data_miner.rb +14 -0
- data/lib/earth/locality/country.rb +33 -7
- data/lib/earth/locality/country/data_miner.rb +46 -32
- data/lib/earth/locality/egrid_subregion.rb +1 -1
- data/lib/earth/locality/egrid_subregion/data_miner.rb +16 -31
- data/lib/earth/locality/electricity_mix.rb +37 -0
- data/lib/earth/locality/electricity_mix/data_miner.rb +87 -0
- data/lib/earth/locality/state.rb +12 -4
- data/lib/earth/locality/state/data_miner.rb +33 -18
- data/lib/earth/locality/zip_code.rb +9 -1
- data/lib/earth/locality/zip_code/data_miner.rb +4 -0
- data/lib/earth/rail/country_rail_traction/data_miner.rb +2 -2
- data/lib/earth/rail/country_rail_traction_class/data_miner.rb +2 -2
- data/lib/earth/rail/national_transit_database_record.rb +4 -0
- data/lib/earth/rail/rail_company/data_miner.rb +3 -3
- data/lib/earth/rail/rail_fuel/data_miner.rb +1 -1
- data/lib/earth/residence/clothes_machine_use/data_miner.rb +1 -1
- data/lib/earth/residence/dishwasher_use/data_miner.rb +1 -1
- data/lib/earth/residence/residence_fuel_price.rb +1 -1
- data/lib/earth/version.rb +1 -1
- data/spec/earth/air/airline_spec.rb +1 -1
- data/spec/earth/air/airport_spec.rb +7 -0
- data/spec/earth/air/flight_segment_spec.rb +26 -12
- data/spec/earth/automobile/automobile_type_fuel_spec.rb +1 -1
- data/spec/earth/automobile/automobile_type_fuel_year_spec.rb +3 -3
- data/spec/earth/fuel/fuel_spec.rb +1 -1
- data/spec/earth/hospitality/commercial_building_energy_consumption_survey_response_spec.rb +32 -19
- data/spec/earth/hospitality/lodging_class_spec.rb +18 -0
- data/spec/earth/industry/mecs_energy_spec.rb +2 -2
- data/spec/earth/industry/mecs_ratio_spec.rb +1 -1
- data/spec/earth/industry/merchant_category_spec.rb +17 -0
- data/spec/earth/locality/country_spec.rb +32 -16
- data/spec/earth/locality/egrid_subregion_spec.rb +40 -27
- data/spec/earth/locality/electricity_mix_spec.rb +70 -0
- data/spec/earth/locality/state_spec.rb +10 -11
- data/spec/earth/locality/zip_code_spec.rb +9 -5
- data/spec/earth_spec.rb +4 -4
- data/spec/spec_helper.rb +3 -0
- metadata +19 -10
- data/lib/earth/hospitality/country_lodging_class.rb +0 -18
- data/lib/earth/hospitality/country_lodging_class/data_miner.rb +0 -40
- data/lib/earth/industry/merchant.rb +0 -9
- data/spec/earth/hospitality/country_lodging_class_spec.rb +0 -30
data/lib/earth/locality/state.rb
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
class State < ActiveRecord::Base
|
2
2
|
self.primary_key = "postal_abbreviation"
|
3
3
|
|
4
|
+
has_many :zip_codes, :foreign_key => 'state_postal_abbreviation'
|
4
5
|
has_many :climate_divisions, :foreign_key => 'state_postal_abbreviation'
|
5
|
-
has_many :zip_codes, :foreign_key => 'state_postal_abbreviation'
|
6
6
|
belongs_to :census_division, :foreign_key => 'census_division_number'
|
7
7
|
has_one :census_region, :through => :census_division
|
8
|
+
has_one :electricity_mix, :foreign_key => 'state_postal_abbreviation'
|
8
9
|
belongs_to :petroleum_administration_for_defense_district, :foreign_key => 'petroleum_administration_for_defense_district_code'
|
9
10
|
|
11
|
+
data_miner do
|
12
|
+
process "Ensure Country and ElectricityMix are imported because they're like belongs_to associations" do
|
13
|
+
Country.run_data_miner!
|
14
|
+
ElectricityMix.run_data_miner!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
10
18
|
def country
|
11
19
|
Country.united_states
|
12
20
|
end
|
@@ -20,11 +28,11 @@ class State < ActiveRecord::Base
|
|
20
28
|
col :electricity_emission_factor, :type => :float
|
21
29
|
col :electricity_emission_factor_units
|
22
30
|
col :electricity_loss_factor, :type => :float
|
23
|
-
|
31
|
+
|
24
32
|
warn_if_nulls_except(
|
25
33
|
:census_division_number,
|
26
34
|
:petroleum_administration_for_defense_district_code
|
27
35
|
)
|
28
|
-
|
29
|
-
warn_unless_size
|
36
|
+
|
37
|
+
warn_unless_size 51
|
30
38
|
end
|
@@ -1,5 +1,9 @@
|
|
1
1
|
State.class_eval do
|
2
2
|
data_miner do
|
3
|
+
process "Start from scratch" do
|
4
|
+
delete_all
|
5
|
+
end
|
6
|
+
|
3
7
|
# state names, FIPS codes, and postal abbreviations
|
4
8
|
import 'the U.S. Census State ANSI Code file',
|
5
9
|
:url => 'http://www.census.gov/geo/www/ansi/state.txt',
|
@@ -27,34 +31,45 @@ State.class_eval do
|
|
27
31
|
store 'petroleum_administration_for_defense_district_code', :field_name => 'Code'
|
28
32
|
end
|
29
33
|
|
30
|
-
process 'ensure ZipCode
|
34
|
+
process 'ensure ZipCode and EgridSubregion are populated' do
|
31
35
|
ZipCode.run_data_miner!
|
32
36
|
EgridSubregion.run_data_miner!
|
33
|
-
EgridRegion.run_data_miner!
|
34
37
|
end
|
35
38
|
|
39
|
+
# DEPRECATED - when cut this can also cut electricity_emission_factor from EgridSubrgion
|
36
40
|
process 'derive average electricity emission factor and loss factor from zip code and eGRID data' do
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
INNER JOIN egrid_subregions ON egrid_subregions.abbreviation = zip_codes.egrid_subregion_abbreviation
|
49
|
-
INNER JOIN egrid_regions ON egrid_regions.name = egrid_subregions.egrid_region_name
|
50
|
-
WHERE zip_codes.state_postal_abbreviation = states.postal_abbreviation
|
41
|
+
safe_find_each do |state|
|
42
|
+
sub_pops = state.zip_codes.known_subregion.sum(:population, :group => :egrid_subregion)
|
43
|
+
|
44
|
+
ef = sub_pops.inject(0) do |memo, (subregion, population)|
|
45
|
+
memo += subregion.electricity_emission_factor * population
|
46
|
+
memo
|
47
|
+
end / sub_pops.values.sum
|
48
|
+
|
49
|
+
state.update_attributes!(
|
50
|
+
:electricity_emission_factor => ef,
|
51
|
+
:electricity_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour'
|
51
52
|
)
|
52
|
-
|
53
|
+
|
54
|
+
loss_factor = sub_pops.inject(0) do |memo, (subregion, population)|
|
55
|
+
memo += subregion.egrid_region.loss_factor * population
|
56
|
+
memo
|
57
|
+
end / sub_pops.values.sum
|
58
|
+
|
59
|
+
state.update_attributes! :electricity_loss_factor => loss_factor
|
60
|
+
end
|
53
61
|
end
|
54
62
|
|
55
63
|
# TODO import this from US census? would be slightly different: 0.7% for Alaska, 0.2% for New Mexico, etc.
|
56
64
|
process 'derive population from zip code data' do
|
57
|
-
|
65
|
+
safe_find_each do |state|
|
66
|
+
state.update_attributes! :population => state.zip_codes.sum(:population)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
process "Data mine Country and ElectricityMix because they're like belongs_to associations" do
|
71
|
+
Country.run_data_miner!
|
72
|
+
ElectricityMix.run_data_miner!
|
58
73
|
end
|
59
74
|
end
|
60
75
|
end
|
@@ -3,12 +3,20 @@ require ::File.join(Earth::VENDOR_DIR, 'geokit-rails', 'lib', 'geokit-rails') #
|
|
3
3
|
class ZipCode < ActiveRecord::Base
|
4
4
|
self.primary_key = "name"
|
5
5
|
|
6
|
-
belongs_to :egrid_subregion, :foreign_key => 'egrid_subregion_abbreviation'
|
7
6
|
belongs_to :climate_division, :foreign_key => 'climate_division_name'
|
8
7
|
belongs_to :state, :foreign_key => 'state_postal_abbreviation'
|
8
|
+
belongs_to :egrid_subregion, :foreign_key => 'egrid_subregion_abbreviation'
|
9
9
|
has_many :electric_markets, :foreign_key => 'zip_code_name'
|
10
10
|
has_many :electric_utilities, :through => :electric_markets
|
11
11
|
|
12
|
+
scope :known_subregion, where('egrid_subregion_abbreviation IS NOT NULL')
|
13
|
+
|
14
|
+
data_miner do
|
15
|
+
process "Ensure Country is imported because it's like a belongs_to association" do
|
16
|
+
Country.run_data_miner!
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
12
20
|
def country
|
13
21
|
Country.united_states
|
14
22
|
end
|
@@ -48,6 +48,10 @@ ZipCode.class_eval do
|
|
48
48
|
}
|
49
49
|
end
|
50
50
|
|
51
|
+
process "Data mine Country because it's like a belongs_to association" do
|
52
|
+
Country.run_data_miner!
|
53
|
+
end
|
54
|
+
|
51
55
|
# FIXME TODO figure out how to speed this up then re-enable it
|
52
56
|
# process "Look up missing latitude and longitude" do
|
53
57
|
# where("latitude IS NULL OR longitude IS NULL").each do |zip|
|
@@ -17,7 +17,7 @@ CountryRailTraction.class_eval do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
process "Standardize diesel intensity units" do
|
20
|
-
CountryRailTraction.where(:diesel_intensity_units => 'grams_per_passenger_kilometre').
|
20
|
+
CountryRailTraction.where(:diesel_intensity_units => 'grams_per_passenger_kilometre').safe_find_each do |record|
|
21
21
|
diesel = RailFuel.find_by_name("diesel")
|
22
22
|
record.diesel_intensity = record.diesel_intensity.grams.to(:kilograms) / diesel.density
|
23
23
|
record.diesel_intensity_units = [diesel.density_units.split("_per_")[1].pluralize, record.diesel_intensity_units.split("_per_")[1]].join('_per_')
|
@@ -26,7 +26,7 @@ CountryRailTraction.class_eval do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
process "Standardize co2 emission factor units" do
|
29
|
-
CountryRailTraction.where(:co2_emission_factor_units => 'grams_per_passenger_kilometre').
|
29
|
+
CountryRailTraction.where(:co2_emission_factor_units => 'grams_per_passenger_kilometre').safe_find_each do |record|
|
30
30
|
record.co2_emission_factor = record.co2_emission_factor.grams.to(:kilograms)
|
31
31
|
record.co2_emission_factor_units = ['kilograms', record.co2_emission_factor_units.split("_per_")[1]].join('_per_')
|
32
32
|
record.save!
|
@@ -18,7 +18,7 @@ CountryRailTractionClass.class_eval do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
process "Standardize diesel intensity units" do
|
21
|
-
CountryRailTractionClass.where(:diesel_intensity_units => 'grams_per_passenger_kilometre').
|
21
|
+
CountryRailTractionClass.where(:diesel_intensity_units => 'grams_per_passenger_kilometre').safe_find_each do |record|
|
22
22
|
diesel = RailFuel.find_by_name("diesel")
|
23
23
|
record.diesel_intensity = record.diesel_intensity.grams.to(:kilograms) / diesel.density
|
24
24
|
record.diesel_intensity_units = [diesel.density_units.split("_per_")[1].pluralize, record.diesel_intensity_units.split("_per_")[1]].join('_per_')
|
@@ -27,7 +27,7 @@ CountryRailTractionClass.class_eval do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
process "Standardize co2 emission factor units" do
|
30
|
-
CountryRailTractionClass.where(:co2_emission_factor_units => 'grams_per_passenger_kilometre').
|
30
|
+
CountryRailTractionClass.where(:co2_emission_factor_units => 'grams_per_passenger_kilometre').safe_find_each do |record|
|
31
31
|
record.co2_emission_factor = record.co2_emission_factor.grams.to(:kilograms)
|
32
32
|
record.co2_emission_factor_units = ['kilograms', record.co2_emission_factor_units.split("_per_")[1]].join('_per_')
|
33
33
|
record.save!
|
@@ -41,10 +41,14 @@ class NationalTransitDatabaseRecord < ActiveRecord::Base
|
|
41
41
|
col :other_fuel_description
|
42
42
|
|
43
43
|
warn_if_nulls_except(
|
44
|
+
:passenger_distance,
|
45
|
+
:passenger_distance_units,
|
44
46
|
:electricity,
|
45
47
|
:electricity_units,
|
46
48
|
:diesel,
|
47
49
|
:diesel_units,
|
50
|
+
:gasoline,
|
51
|
+
:gasoline_units,
|
48
52
|
:lpg,
|
49
53
|
:lpg_units,
|
50
54
|
:lng,
|
@@ -57,7 +57,7 @@ RailCompany.class_eval do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
process "Calculate average trip distance" do
|
60
|
-
|
60
|
+
safe_find_each do |company|
|
61
61
|
if company.passenger_distance.present? and company.passengers.present? and company.passengers > 0
|
62
62
|
company.trip_distance = company.passenger_distance / company.passengers
|
63
63
|
company.trip_distance_units = company.passenger_distance_units
|
@@ -67,7 +67,7 @@ RailCompany.class_eval do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
process "Calculate average trip speed" do
|
70
|
-
|
70
|
+
safe_find_each do |company|
|
71
71
|
if company.train_distance.present? and company.train_time.present? and company.train_time > 0
|
72
72
|
company.speed = company.train_distance / company.train_time
|
73
73
|
company.speed_units = "#{company.train_distance_units}_per_#{company.train_time_units.singularize}"
|
@@ -82,7 +82,7 @@ RailCompany.class_eval do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
process "Calculate co2 emission factor for US rail companies" do
|
85
|
-
where(:country_iso_3166_code => 'US').
|
85
|
+
where(:country_iso_3166_code => 'US').safe_find_each do |company|
|
86
86
|
company.co2_emission_factor = 0
|
87
87
|
|
88
88
|
if company.diesel_intensity.present?
|
@@ -15,7 +15,7 @@ RailFuel.class_eval do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
process "Convert ch4 and n2o emission factor units to kg co2e / l" do
|
18
|
-
RailFuel.
|
18
|
+
RailFuel.safe_find_each do |fuel|
|
19
19
|
if fuel.ch4_emission_factor_units == "grams_per_kilogram" and fuel.density_units == "kilograms_per_litre"
|
20
20
|
fuel.ch4_emission_factor = GreenhouseGas["ch4"].global_warming_potential * fuel.density * fuel.ch4_emission_factor / 1000.0
|
21
21
|
fuel.ch4_emission_factor_units = "kilograms_co2e_per_litre"
|
@@ -15,7 +15,7 @@ ClothesMachineUse.class_eval do
|
|
15
15
|
|
16
16
|
# sabshere 5/20/10 weird that this uses cohort
|
17
17
|
process "precalculate annual energy use" do
|
18
|
-
|
18
|
+
safe_find_each do |record|
|
19
19
|
record.annual_energy_from_electricity_for_clothes_driers = ResidentialEnergyConsumptionSurveyResponse.cohort(:clothes_machine_use_id => record.name).weighted_average :annual_energy_from_electricity_for_clothes_driers
|
20
20
|
record.annual_energy_from_electricity_for_clothes_driers_units = 'joules'
|
21
21
|
record.save!
|
@@ -15,7 +15,7 @@ DishwasherUse.class_eval do
|
|
15
15
|
|
16
16
|
# sabshere 5/25/10 weird that this uses cohort
|
17
17
|
process "precalculate annual energy" do
|
18
|
-
|
18
|
+
safe_find_each do |record|
|
19
19
|
record.annual_energy_from_electricity_for_dishwashers = ResidentialEnergyConsumptionSurveyResponse.cohort(:dishwasher_use_id => record.name).weighted_average :annual_energy_from_electricity_for_dishwashers
|
20
20
|
record.annual_energy_from_electricity_for_dishwashers_units = 'joules'
|
21
21
|
record.save!
|
data/lib/earth/version.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'earth/air/airport'
|
3
5
|
|
@@ -17,12 +19,17 @@ describe Airport do
|
|
17
19
|
Airport.count.should == 5324
|
18
20
|
end
|
19
21
|
|
22
|
+
it "should use utf-8 encoding" do
|
23
|
+
Airport.find('PDA').city.should == 'Puerto Inírida'
|
24
|
+
end
|
25
|
+
|
20
26
|
it "should have name" do
|
21
27
|
Airport.where(:name => nil).count.should == 0
|
22
28
|
end
|
23
29
|
|
24
30
|
it "should have city" do
|
25
31
|
Airport.where(:city => nil).count.should == 0
|
32
|
+
Airport.where(:city => '').count.should == 0
|
26
33
|
end
|
27
34
|
|
28
35
|
it "should have country code" do
|
@@ -12,41 +12,55 @@ describe FlightSegment do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
describe "verify imported data", :sanity => true do
|
15
|
+
describe "verify imported data", :sanity => true, :flight_segment => true do
|
16
16
|
it "should have all the data" do
|
17
|
-
FlightSegment.where(:year => 2009).count.should ==
|
18
|
-
FlightSegment.where(:year => 2010).count.should ==
|
19
|
-
FlightSegment.where(:year => 2011).count.should
|
17
|
+
FlightSegment.where(:year => 2009).count.should == 403_980
|
18
|
+
FlightSegment.where(:year => 2010).count.should == 421_884
|
19
|
+
FlightSegment.where(:year => 2011).count.should == 428_550
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should have year from 2009 to present" do
|
23
|
-
FlightSegment.where("year
|
23
|
+
FlightSegment.where("NOT(year >= 2009 AND year <= #{::Time.now.year})").count.should == 0
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should have data through 7 months ago" do
|
27
|
-
|
27
|
+
if (today = Date.today).day < 23
|
28
|
+
latest = today << 7
|
29
|
+
else
|
30
|
+
latest = today << 6
|
31
|
+
end
|
28
32
|
FlightSegment.maximum(:year).should == latest.year
|
29
33
|
FlightSegment.where(:year => latest.year).maximum(:month).should == latest.month
|
30
34
|
end
|
31
35
|
|
32
36
|
it "should have origin airport in airports" do
|
33
|
-
|
37
|
+
FlightSegment.connection.select_values("SELECT DISTINCT origin_airport_iata_code FROM flight_segments").each do |code|
|
38
|
+
Airport.exists?(:iata_code => code).should == true
|
39
|
+
end
|
34
40
|
end
|
35
41
|
|
36
42
|
it "should have destination airport in airports" do
|
37
|
-
|
43
|
+
FlightSegment.connection.select_values("SELECT DISTINCT destination_airport_iata_code FROM flight_segments").each do |code|
|
44
|
+
Airport.exists?(:iata_code => code).should == true
|
45
|
+
end
|
38
46
|
end
|
39
47
|
|
40
48
|
it "should have origin country iso code in countries" do
|
41
|
-
|
49
|
+
FlightSegment.connection.select_values("SELECT DISTINCT origin_country_iso_3166_code FROM flight_segments").each do |code|
|
50
|
+
Country.exists?(:iso_3166_code => code).should == true
|
51
|
+
end
|
42
52
|
end
|
43
53
|
|
44
54
|
it "should have destination country iso code in countries" do
|
45
|
-
|
55
|
+
FlightSegment.connection.select_values("SELECT DISTINCT destination_country_iso_3166_code FROM flight_segments").each do |code|
|
56
|
+
Country.exists?(:iso_3166_code => code).should == true
|
57
|
+
end
|
46
58
|
end
|
47
59
|
|
48
|
-
it "should have airline name" do
|
49
|
-
FlightSegment.
|
60
|
+
it "should have airline name in airlines" do
|
61
|
+
FlightSegment.connection.select_values("SELECT DISTINCT airline_name FROM flight_segments").each do |name|
|
62
|
+
Airline.exists?(:name => name).should == true
|
63
|
+
end
|
50
64
|
end
|
51
65
|
|
52
66
|
it "should have aircraft description" do
|
@@ -35,7 +35,7 @@ describe AutomobileTypeFuel do
|
|
35
35
|
|
36
36
|
describe '#latest_activity_year_type_fuel' do
|
37
37
|
it 'should always be a match from 2009' do
|
38
|
-
AutomobileTypeFuel.
|
38
|
+
AutomobileTypeFuel.safe_find_each do |atf|
|
39
39
|
atf.latest_activity_year_type_fuel.type_name.should == atf.type_name
|
40
40
|
atf.latest_activity_year_type_fuel.fuel_family.should == atf.fuel_family
|
41
41
|
atf.latest_activity_year_type_fuel.activity_year.should == 2009
|
@@ -29,11 +29,11 @@ describe AutomobileTypeFuelYear do
|
|
29
29
|
it { ATFY.where("n2o_emission_factor > 0").count.should == ATFY.count }
|
30
30
|
|
31
31
|
# spot checks
|
32
|
-
it { test_atfy.annual_distance.should
|
32
|
+
it { test_atfy.annual_distance.should be_within(0.05).of(19598.6) }
|
33
33
|
it { test_atfy.annual_distance_units.should == 'kilometres' }
|
34
|
-
it { test_atfy.ch4_emission_factor.should
|
34
|
+
it { test_atfy.ch4_emission_factor.should be_within(5e-7).of(0.000229) }
|
35
35
|
it { test_atfy.ch4_emission_factor_units.should == 'kilograms_co2e_per_kilometre' }
|
36
|
-
it { test_atfy.n2o_emission_factor.should
|
36
|
+
it { test_atfy.n2o_emission_factor.should be_within(5e-6).of(0.00147) }
|
37
37
|
it { test_atfy.n2o_emission_factor_units.should == 'kilograms_co2e_per_kilometre' }
|
38
38
|
end
|
39
39
|
|
@@ -20,7 +20,7 @@ describe Fuel do
|
|
20
20
|
|
21
21
|
it 'should have a record for district heat' do
|
22
22
|
district_heat = Fuel.find 'District Heat'
|
23
|
-
district_heat.co2_emission_factor.should be_within(
|
23
|
+
district_heat.co2_emission_factor.should be_within(5e-6).of(0.07598)
|
24
24
|
end
|
25
25
|
|
26
26
|
# TODO is there a way to check whether the value in the fuels table is NULL?
|
@@ -2,42 +2,55 @@ require 'spec_helper'
|
|
2
2
|
require 'earth/hospitality/commercial_building_energy_consumption_survey_response'
|
3
3
|
|
4
4
|
describe CommercialBuildingEnergyConsumptionSurveyResponse do
|
5
|
+
let(:cbecs) { CommercialBuildingEnergyConsumptionSurveyResponse }
|
6
|
+
|
5
7
|
describe "when importing data", :data_miner => true do
|
6
8
|
before do
|
7
9
|
Earth.init :hospitality, :load_data_miner => true, :skip_parent_associations => :true
|
8
10
|
end
|
9
11
|
|
10
12
|
it "imports all naics codes" do
|
11
|
-
|
13
|
+
cbecs.run_data_miner!
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
17
|
describe "verify imported data", :sanity => true do
|
16
|
-
|
18
|
+
let(:total) { cbecs.count }
|
19
|
+
let(:first_lodging) { cbecs.lodging_records.first }
|
17
20
|
|
18
|
-
it {
|
19
|
-
it {
|
20
|
-
it {
|
21
|
-
it {
|
22
|
-
it {
|
23
|
-
it {
|
24
|
-
it {
|
25
|
-
it {
|
21
|
+
it { total.should == 5215 }
|
22
|
+
it { cbecs.where("electricity_use >= 0").count.should == total }
|
23
|
+
it { cbecs.where("electricity_energy >= 0").count.should == total }
|
24
|
+
it { cbecs.where("natural_gas_use >= 0").count.should == total }
|
25
|
+
it { cbecs.where("natural_gas_energy >= 0").count.should == total }
|
26
|
+
it { cbecs.where("fuel_oil_use >= 0").count.should == total }
|
27
|
+
it { cbecs.where("fuel_oil_energy >= 0").count.should == total }
|
28
|
+
it { cbecs.where("district_heat_use >= 0").count.should == total }
|
29
|
+
it { cbecs.where("district_heat_energy >= 0").count.should == total }
|
26
30
|
|
31
|
+
# spot check
|
27
32
|
it "should have room nights and fuel intensities per room night for lodging_records" do
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
33
|
+
first_lodging.room_nights.should == 6205
|
34
|
+
|
35
|
+
first_lodging.electricity_energy.should be_within(0.5).of(221809)
|
36
|
+
first_lodging.electricity_per_room_night.should be_within(5e-4).of(37.711)
|
37
|
+
first_lodging.electricity_per_room_night_units.should == 'megajoules_per_room_night'
|
38
|
+
|
39
|
+
first_lodging.natural_gas_energy.should be_within(0.5).of(386700)
|
40
|
+
first_lodging.natural_gas_per_room_night.should be_within(5e-4).of(79.343)
|
41
|
+
first_lodging.natural_gas_per_room_night_units.should == 'megajoules_per_room_night'
|
42
|
+
|
43
|
+
first_lodging.fuel_oil_energy.should be_within(5e-4).of(0)
|
44
|
+
first_lodging.fuel_oil_per_room_night.should be_within(5e-4).of(12.97)
|
45
|
+
first_lodging.fuel_oil_per_room_night_units.should == 'megajoules_per_room_night'
|
32
46
|
end
|
33
47
|
end
|
34
48
|
|
35
49
|
describe ".lodging_records" do
|
36
|
-
it "should return
|
37
|
-
lodging_records
|
38
|
-
lodging_records.map(&:
|
39
|
-
lodging_records.
|
40
|
-
lodging_records.count.should == 192
|
50
|
+
it "should return records representing Hotels, Motels, and Inns with no other activity" do
|
51
|
+
cbecs.lodging_records.map(&:detailed_activity).uniq.sort.should == ['Hotel', 'Motel or inn']
|
52
|
+
cbecs.lodging_records.map(&:first_activity).uniq.should == [nil]
|
53
|
+
cbecs.lodging_records.count.should == 192
|
41
54
|
end
|
42
55
|
end
|
43
56
|
end
|