earth 0.12.0 → 0.12.1
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/bin/earth_tester.rb +1 -0
- data/data/automobile/annual_emission_controls.csv +1 -1
- data/data/automobile/annual_fuel_consumption.csv +1 -1
- data/data/automobile/auto_fuel_data.csv +1 -1
- data/data/automobile/emission_control_techs.csv +1 -1
- data/data/automobile/trip_distances.csv +5 -0
- data/data/locality/country_flight_data.csv +18 -0
- data/data/locality/egrid_relationships.csv +27 -0
- data/data/locality/misc_zip_data.csv +1 -0
- data/data/locality/us_auto_data.csv +2 -0
- data/data/locality/wri_hdd_cdd_data.csv +174 -0
- data/data/locality/zip_climate_divisions.csv +41359 -0
- data/errata/country/wri_errata.csv +24 -24
- data/lib/earth/automobile/automobile_activity_year/data_miner.rb +4 -3
- data/lib/earth/automobile/automobile_activity_year_type/data_miner.rb +4 -3
- data/lib/earth/automobile/automobile_activity_year_type_fuel.rb +1 -1
- data/lib/earth/automobile/automobile_activity_year_type_fuel/data_miner.rb +4 -4
- data/lib/earth/automobile/automobile_fuel.rb +5 -5
- data/lib/earth/automobile/automobile_fuel/data_miner.rb +18 -13
- data/lib/earth/automobile/automobile_make/data_miner.rb +4 -3
- data/lib/earth/automobile/automobile_make_model/data_miner.rb +6 -7
- data/lib/earth/automobile/automobile_make_model_year/data_miner.rb +1 -2
- data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +5 -10
- data/lib/earth/automobile/automobile_type_fuel.rb +2 -2
- data/lib/earth/automobile/automobile_type_fuel/data_miner.rb +8 -7
- data/lib/earth/automobile/automobile_type_fuel_control.rb +1 -1
- data/lib/earth/automobile/automobile_type_fuel_control/data_miner.rb +1 -1
- data/lib/earth/automobile/automobile_type_fuel_year.rb +5 -5
- data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +7 -6
- data/lib/earth/automobile/automobile_type_fuel_year_control.rb +4 -4
- data/lib/earth/automobile/automobile_type_fuel_year_control/data_miner.rb +2 -2
- data/lib/earth/conversions_ext.rb +2 -0
- data/lib/earth/industry/industry.rb +0 -2
- data/lib/earth/industry/industry/data_miner.rb +5 -2
- data/lib/earth/locality/census_division.rb +2 -1
- data/lib/earth/locality/country.rb +3 -7
- data/lib/earth/locality/country/data_miner.rb +54 -75
- data/lib/earth/locality/egrid_country.rb +9 -3
- data/lib/earth/locality/egrid_country/data_miner.rb +14 -8
- data/lib/earth/locality/egrid_region.rb +15 -6
- data/lib/earth/locality/egrid_region/data_miner.rb +14 -18
- data/lib/earth/locality/egrid_subregion.rb +21 -19
- data/lib/earth/locality/egrid_subregion/data_miner.rb +27 -47
- data/lib/earth/locality/zip_code.rb +5 -4
- data/lib/earth/locality/zip_code/data_miner.rb +25 -14
- data/lib/earth/rail/rail_company/data_miner.rb +1 -1
- data/lib/earth/version.rb +1 -1
- data/spec/earth/automobile/automobile_activity_year_type_fuel_spec.rb +1 -1
- data/spec/earth/automobile/automobile_fuel_spec.rb +1 -1
- data/spec/earth/automobile/automobile_type_fuel_spec.rb +1 -1
- data/spec/earth/automobile/automobile_type_fuel_year_control_spec.rb +6 -6
- data/spec/earth/automobile/automobile_type_fuel_year_spec.rb +6 -6
- data/spec/earth/industry/industry_spec.rb +1 -3
- data/spec/earth/locality/country_spec.rb +67 -34
- data/spec/earth/locality/egrid_country_spec.rb +26 -0
- data/spec/earth/locality/egrid_region_spec.rb +27 -0
- data/spec/earth/locality/egrid_subregion_spec.rb +49 -0
- data/spec/earth/locality/zip_code_spec.rb +13 -24
- metadata +17 -4
@@ -1,56 +1,36 @@
|
|
1
1
|
require 'earth/fuel/data_miner'
|
2
|
+
|
2
3
|
EgridSubregion.class_eval do
|
3
4
|
data_miner do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
:
|
10
|
-
|
11
|
-
|
5
|
+
process "Start from scratch" do
|
6
|
+
delete_all
|
7
|
+
end
|
8
|
+
|
9
|
+
import "eGRID 2012 subregion data",
|
10
|
+
:url => 'http://www.epa.gov/cleanenergy/documents/egridzips/eGRID2012V1_0_year09_DATA.xls',
|
11
|
+
:sheet => 'SRL09',
|
12
|
+
:skip => 4 do
|
13
|
+
key 'abbreviation', :field_name => 'SUBRGN'
|
14
|
+
store 'name', :field_name => 'SRNAME'
|
12
15
|
store 'nerc_abbreviation', :field_name => 'NERC'
|
13
16
|
store 'net_generation', :field_name => 'SRNGENAN', :units => :megawatt_hours
|
14
|
-
store '
|
15
|
-
store '
|
16
|
-
store '
|
17
|
-
store '
|
17
|
+
store 'co2_emission_factor', :field_name => 'SRCO2RTA', :units => :pounds_per_megawatt_hour
|
18
|
+
store 'co2_biogenic_emission_factor', :static => '0.0', :units => :kilograms_per_kilowatt_hour
|
19
|
+
store 'ch4_emission_factor', :field_name => 'SRCH4RTA', :units => :pounds_per_gigawatt_hour
|
20
|
+
store 'n2o_emission_factor', :field_name => 'SRN2ORTA', :units => :pounds_per_gigawatt_hour
|
18
21
|
end
|
19
22
|
|
20
|
-
# FIXME TODO once 'US' subregion is no longer needed remove it from this source file
|
21
23
|
import "eGRID subregion to region associations",
|
22
|
-
:url =>
|
24
|
+
:url => "file://#{Earth::DATA_DIR}/locality/egrid_relationships.csv" do
|
23
25
|
key 'abbreviation'
|
24
26
|
store 'egrid_region_name'
|
25
27
|
end
|
26
28
|
|
27
|
-
|
28
|
-
# (ElectricityUse and Meeting)
|
29
|
-
process "Calculate national averages" do
|
30
|
-
us_average = find_by_abbreviation 'US'
|
31
|
-
subregions = where("abbreviation != 'US'")
|
32
|
-
|
33
|
-
us_average.name = 'United States'
|
34
|
-
us_average.nerc_abbreviation = 'US'
|
35
|
-
us_average.egrid_region_name = 'US'
|
36
|
-
us_average.net_generation = subregions.sum(:net_generation)
|
37
|
-
us_average.electricity_co2_emission_factor = subregions.weighted_average(:electricity_co2_emission_factor, :weighted_by => :net_generation)
|
38
|
-
us_average.electricity_co2_biogenic_emission_factor = subregions.weighted_average(:electricity_co2_biogenic_emission_factor, :weighted_by => :net_generation)
|
39
|
-
us_average.electricity_ch4_emission_factor = subregions.weighted_average(:electricity_ch4_emission_factor, :weighted_by => :net_generation)
|
40
|
-
us_average.electricity_n2o_emission_factor = subregions.weighted_average(:electricity_n2o_emission_factor, :weighted_by => :net_generation)
|
41
|
-
us_average.net_generation_units = 'megawatt_hours'
|
42
|
-
us_average.electricity_co2_emission_factor_units = 'pounds_per_megawatt_hour'
|
43
|
-
us_average.electricity_co2_biogenic_emission_factor_units = 'kilograms_per_kilowatt_hour'
|
44
|
-
us_average.electricity_ch4_emission_factor_units = 'pounds_per_gigawatt_hour'
|
45
|
-
us_average.electricity_n2o_emission_factor_units = 'pounds_per_gigawatt_hour'
|
46
|
-
us_average.save!
|
47
|
-
end
|
48
|
-
|
49
|
-
process "Convert co2 emission factor to metric units" do
|
29
|
+
process "Convert co2 emission factors to metric units" do
|
50
30
|
conversion_factor = 1.pounds.to(:kilograms) / 1_000.0 # kg / lbs * MWh / kWh
|
51
|
-
where(:
|
52
|
-
|
53
|
-
|
31
|
+
where(:co2_emission_factor_units => 'pounds_per_megawatt_hour').update_all(%{
|
32
|
+
co2_emission_factor = co2_emission_factor * #{conversion_factor},
|
33
|
+
co2_emission_factor_units = 'kilograms_per_kilowatt_hour'
|
54
34
|
})
|
55
35
|
end
|
56
36
|
|
@@ -61,24 +41,24 @@ EgridSubregion.class_eval do
|
|
61
41
|
process "Convert ch4 emission factor to metric units and co2e" do
|
62
42
|
conversion_factor = 1.pounds.to(:kilograms) / 1_000_000.0 # kg / lbs * GWh / kWh
|
63
43
|
gwp = GreenhouseGas[:ch4].global_warming_potential
|
64
|
-
where(:
|
65
|
-
|
66
|
-
|
44
|
+
where(:ch4_emission_factor_units => 'pounds_per_gigawatt_hour').update_all(%{
|
45
|
+
ch4_emission_factor = ch4_emission_factor * #{conversion_factor} * #{gwp},
|
46
|
+
ch4_emission_factor_units = 'kilograms_co2e_per_kilowatt_hour'
|
67
47
|
})
|
68
48
|
end
|
69
49
|
|
70
50
|
process "Convert n2o emission factor to metric units and co2e" do
|
71
51
|
conversion_factor = 1.pounds.to(:kilograms) / 1_000_000.0 # kg / lbs * GWh / kWh
|
72
52
|
gwp = GreenhouseGas[:n2o].global_warming_potential
|
73
|
-
where(:
|
74
|
-
|
75
|
-
|
53
|
+
where(:n2o_emission_factor_units => 'pounds_per_gigawatt_hour').update_all(%{
|
54
|
+
n2o_emission_factor = n2o_emission_factor * #{conversion_factor} * #{gwp},
|
55
|
+
n2o_emission_factor_units = 'kilograms_co2e_per_kilowatt_hour'
|
76
56
|
})
|
77
57
|
end
|
78
58
|
|
79
59
|
process "Calculate combined emission factor" do
|
80
60
|
update_all(%{
|
81
|
-
electricity_emission_factor =
|
61
|
+
electricity_emission_factor = co2_emission_factor + ch4_emission_factor + n2o_emission_factor,
|
82
62
|
electricity_emission_factor_units = 'kilograms_co2e_per_kilowatt_hour'
|
83
63
|
})
|
84
64
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require ::File.join(Earth::VENDOR_DIR, 'geokit-rails', 'lib', 'geokit-rails')
|
1
|
+
require ::File.join(Earth::VENDOR_DIR, 'geokit-rails', 'lib', 'geokit-rails') # for acts_as_mappable
|
2
2
|
|
3
3
|
class ZipCode < ActiveRecord::Base
|
4
4
|
self.primary_key = "name"
|
@@ -13,10 +13,12 @@ class ZipCode < ActiveRecord::Base
|
|
13
13
|
Country.united_states
|
14
14
|
end
|
15
15
|
|
16
|
+
# Used by LodgingProperty custom find to find properties near to a zip code
|
16
17
|
def latitude_longitude
|
17
18
|
[latitude, longitude]
|
18
19
|
end
|
19
20
|
|
21
|
+
# Used by LodgingProperty custom find to find properties near to a zip code
|
20
22
|
acts_as_mappable :default_units => :kilometres,
|
21
23
|
:lat_column_name => :latitude,
|
22
24
|
:lng_column_name => :longitude
|
@@ -29,8 +31,7 @@ class ZipCode < ActiveRecord::Base
|
|
29
31
|
col :egrid_subregion_abbreviation
|
30
32
|
col :climate_division_name
|
31
33
|
col :population, :type => :integer
|
32
|
-
|
33
|
-
warn_if_nonexistent_owner_except :egrid_subregion
|
34
|
-
|
34
|
+
|
35
35
|
warn_unless_size 43770
|
36
|
+
warn_if_nonexistent_owner_except :egrid_subregion
|
36
37
|
end
|
@@ -1,15 +1,11 @@
|
|
1
|
-
# FIXME TODO try to clean up this data
|
2
1
|
ZipCode.class_eval do
|
3
|
-
# sabshere 9/20/10 this isn't called anywhere
|
4
|
-
# def set_latitude_and_longitude
|
5
|
-
# return if latitude.present? and longitude.present?
|
6
|
-
# a = Geokit::Geocoders::YahooGeocoder.geocode name
|
7
|
-
# update_attributes! :latitude => a.lat, :longitude => a.lng
|
8
|
-
# end
|
9
|
-
|
10
2
|
data_miner do
|
3
|
+
process "Start from scratch" do
|
4
|
+
delete_all
|
5
|
+
end
|
6
|
+
|
11
7
|
import 'the Mapping Hacks zipcode database',
|
12
|
-
:url => 'http://
|
8
|
+
:url => 'http://mappinghacks.com/data/zipcode.zip', # http://archive.data.brighterplanet.com/zipcode.zip
|
13
9
|
:filename => 'zipcode.csv' do
|
14
10
|
key 'name', :field_name => 'zip', :sprintf => '%05d'
|
15
11
|
store 'state_postal_abbreviation', :field_name => 'state'
|
@@ -19,7 +15,7 @@ ZipCode.class_eval do
|
|
19
15
|
end
|
20
16
|
|
21
17
|
import 'a list of zipcode states and eGRID Subregions from the US EPA',
|
22
|
-
:url => 'http://www.epa.gov/cleanenergy/documents/egridzips/
|
18
|
+
:url => 'http://www.epa.gov/cleanenergy/documents/egridzips/Power_Profiler_Zipcode_Tool_v4-0.xlsx',
|
23
19
|
:sheet => 'Zip-subregion' do
|
24
20
|
key 'name', :field_name => 'ZIP (character)'
|
25
21
|
store 'state_postal_abbreviation', :field_name => 'State'
|
@@ -27,7 +23,7 @@ ZipCode.class_eval do
|
|
27
23
|
end
|
28
24
|
|
29
25
|
import 'a Brighter Planet-created list of zipcode Climate Divisions',
|
30
|
-
:url =>
|
26
|
+
:url => "file://#{Earth::DATA_DIR}/locality/zip_climate_divisions.csv" do
|
31
27
|
key 'name', :field_name => 'zip_code_name', :sprintf => '%05d'
|
32
28
|
store 'climate_division_name'
|
33
29
|
end
|
@@ -40,10 +36,25 @@ ZipCode.class_eval do
|
|
40
36
|
end
|
41
37
|
|
42
38
|
import 'misc zip code data not included in other sources',
|
43
|
-
:url =>
|
39
|
+
:url => "file://#{Earth::DATA_DIR}/locality/misc_zip_data.csv" do
|
44
40
|
key 'name', :sprintf => '%05d'
|
45
|
-
store 'state_postal_abbreviation'
|
46
|
-
store 'egrid_subregion_abbreviation'
|
41
|
+
store 'state_postal_abbreviation', :nullify => true
|
42
|
+
store 'egrid_subregion_abbreviation', :nullify => true
|
47
43
|
end
|
44
|
+
|
45
|
+
process "Derive missing state postal abbreviations from climate division name" do
|
46
|
+
where("state_postal_abbreviation IS NULL AND climate_division_name IS NOT NULL").update_all %{
|
47
|
+
state_postal_abbreviation = LEFT(climate_division_name, 2)
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
# FIXME TODO figure out how to speed this up then re-enable it
|
52
|
+
# process "Look up missing latitude and longitude" do
|
53
|
+
# where("latitude IS NULL OR longitude IS NULL").each do |zip|
|
54
|
+
# if (location = Geokit::Geocoders::MultiGeocoder.geocode zip.name).success
|
55
|
+
# zip.update_attributes! :latitude => location.lat, :longitude => location.lng
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
# end
|
48
59
|
end
|
49
60
|
end
|
@@ -90,7 +90,7 @@ RailCompany.class_eval do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
if company.electricity_intensity.present?
|
93
|
-
company.co2_emission_factor += company.electricity_intensity * (EgridSubregion.fallback.
|
93
|
+
company.co2_emission_factor += company.electricity_intensity * (EgridSubregion.fallback.co2_emission_factor / (1 - EgridRegion.fallback.loss_factor))
|
94
94
|
end
|
95
95
|
|
96
96
|
company.co2_emission_factor_units = 'kilograms_per_passenger_kilometre'
|
data/lib/earth/version.rb
CHANGED
@@ -16,7 +16,7 @@ describe AutomobileActivityYearTypeFuel do
|
|
16
16
|
describe 'verify', :sanity => true do
|
17
17
|
it { AAYTF.count.should == 120 }
|
18
18
|
it { AAYTF.where(:distance => nil).count.should == 0 }
|
19
|
-
it { AAYTF.where("
|
19
|
+
it { AAYTF.where("fuel_group != 'alternative' AND fuel_consumption IS NULL").count.should == 0 }
|
20
20
|
end
|
21
21
|
|
22
22
|
describe '.latest' do
|
@@ -54,7 +54,7 @@ describe AutomobileFuel do
|
|
54
54
|
|
55
55
|
it "all grades of gasoline should have same annual distance and emission factors" do
|
56
56
|
AutomobileFuel.where("name LIKE '%gasoline'").each do |fuel|
|
57
|
-
fuel.
|
57
|
+
fuel.group.should == 'gasoline'
|
58
58
|
fuel.annual_distance.should == AutomobileFuel.gasoline.annual_distance
|
59
59
|
fuel.co2_emission_factor.should == AutomobileFuel.gasoline.co2_emission_factor
|
60
60
|
fuel.ch4_emission_factor.should == AutomobileFuel.gasoline.ch4_emission_factor
|
@@ -37,7 +37,7 @@ describe AutomobileTypeFuel do
|
|
37
37
|
it 'should always be a match from 2009' do
|
38
38
|
AutomobileTypeFuel.find_each do |atf|
|
39
39
|
atf.latest_activity_year_type_fuel.type_name.should == atf.type_name
|
40
|
-
atf.latest_activity_year_type_fuel.
|
40
|
+
atf.latest_activity_year_type_fuel.fuel_group.should == atf.fuel_group
|
41
41
|
atf.latest_activity_year_type_fuel.activity_year.should == 2009
|
42
42
|
end
|
43
43
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'earth/automobile/automobile_type_fuel_year_control'
|
3
3
|
|
4
4
|
describe AutomobileTypeFuelYearControl do
|
5
|
-
let(:test_year_control) { ATFYC.where(:type_name => 'Passenger cars', :
|
5
|
+
let(:test_year_control) { ATFYC.where(:type_name => 'Passenger cars', :fuel_group => 'gasoline', :year => 2005).first }
|
6
6
|
|
7
7
|
before :all do
|
8
8
|
Earth.init :automobile, :load_data_miner => true
|
@@ -19,7 +19,7 @@ describe AutomobileTypeFuelYearControl do
|
|
19
19
|
it { ATFYC.count.should == 142 }
|
20
20
|
|
21
21
|
it 'total travel percent should sum to 1' do
|
22
|
-
ATFYC.group([:type_name, :
|
22
|
+
ATFYC.group([:type_name, :fuel_group, :year]).sum(:total_travel_percent).each do |grouping_criteria, total|
|
23
23
|
total.should be_within(1e-5).of(1.0)
|
24
24
|
end
|
25
25
|
end
|
@@ -27,10 +27,10 @@ describe AutomobileTypeFuelYearControl do
|
|
27
27
|
it { ATFYC.where(:type_fuel_control_name => nil).count.should == 0 }
|
28
28
|
end
|
29
29
|
|
30
|
-
describe '.
|
31
|
-
it { ATFYC.
|
32
|
-
it { ATFYC.
|
33
|
-
it { ATFYC.
|
30
|
+
describe '.find_all_by_type_name_and_fuel_group_and_closest_year' do
|
31
|
+
it { ATFYC.find_all_by_type_name_and_fuel_group_and_closest_year('Passenger cars', 'gasoline', 1980).should == ATFYC.find_all_by_type_name_and_fuel_group_and_year('Passenger cars', 'gasoline', 1985) }
|
32
|
+
it { ATFYC.find_all_by_type_name_and_fuel_group_and_closest_year('Passenger cars', 'gasoline', 2005).should == ATFYC.find_all_by_type_name_and_fuel_group_and_year('Passenger cars', 'gasoline', 2005) }
|
33
|
+
it { ATFYC.find_all_by_type_name_and_fuel_group_and_closest_year('Passenger cars', 'gasoline', 2012).should == ATFYC.find_all_by_type_name_and_fuel_group_and_year('Passenger cars', 'gasoline', 2010) }
|
34
34
|
end
|
35
35
|
|
36
36
|
describe '#ch4_emission_factor' do
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'earth/automobile/automobile_type_fuel_year'
|
3
3
|
|
4
4
|
describe AutomobileTypeFuelYear do
|
5
|
-
let(:test_atfy) { ATFY.where(:type_name => 'Passenger cars', :
|
5
|
+
let(:test_atfy) { ATFY.where(:type_name => 'Passenger cars', :fuel_group => 'gasoline', :year => 2005).first }
|
6
6
|
|
7
7
|
before :all do
|
8
8
|
Earth.init :automobile, :load_data_miner => true
|
@@ -19,7 +19,7 @@ describe AutomobileTypeFuelYear do
|
|
19
19
|
it { ATFY.count.should == 124 }
|
20
20
|
|
21
21
|
it 'shares should sum to 1' do
|
22
|
-
ATFY.sum(:share_of_type, :group => [:type_name, :
|
22
|
+
ATFY.sum(:share_of_type, :group => [:type_name, :fuel_group]).each do |groupers, total|
|
23
23
|
total.should be_within(1e-2).of(1.0)
|
24
24
|
end
|
25
25
|
end
|
@@ -37,10 +37,10 @@ describe AutomobileTypeFuelYear do
|
|
37
37
|
it { test_atfy.n2o_emission_factor_units.should == 'kilograms_co2e_per_kilometre' }
|
38
38
|
end
|
39
39
|
|
40
|
-
describe '.
|
41
|
-
it { ATFY.
|
42
|
-
it { ATFY.
|
43
|
-
it { ATFY.
|
40
|
+
describe '.find_by_type_name_and_fuel_group_and_closest_year' do
|
41
|
+
it { ATFY.find_by_type_name_and_fuel_group_and_closest_year('Passenger cars', 'gasoline', 1970).should == ATFY.find_by_type_name_and_fuel_group_and_year('Passenger cars', 'gasoline', 1979) }
|
42
|
+
it { ATFY.find_by_type_name_and_fuel_group_and_closest_year('Passenger cars', 'gasoline', 2005).should == ATFY.find_by_type_name_and_fuel_group_and_year('Passenger cars', 'gasoline', 2005) }
|
43
|
+
it { ATFY.find_by_type_name_and_fuel_group_and_closest_year('Passenger cars', 'gasoline', 2012).should == ATFY.find_by_type_name_and_fuel_group_and_year('Passenger cars', 'gasoline', 2009) }
|
44
44
|
end
|
45
45
|
|
46
46
|
describe '#type_fuel_year_controls' do
|
@@ -10,55 +10,79 @@ describe Country do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should import data' do
|
13
|
+
Country.delete_all if Country.table_exists?
|
13
14
|
Country.run_data_miner!
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
18
|
describe 'verify imported data', :sanity => true do
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
it
|
22
|
-
|
23
|
-
|
19
|
+
let(:us) { Country.united_states }
|
20
|
+
let(:uk) { Country.find 'GB' }
|
21
|
+
|
22
|
+
it { Country.count.should == 249 }
|
23
|
+
|
24
|
+
describe 'uses UTF-8 encoding' do
|
25
|
+
it { Country.find('AX').name.should == "Åland Islands" }
|
26
|
+
it { Country.find('CI').name.should == "Côte d'Ivoire" }
|
24
27
|
end
|
25
28
|
|
26
|
-
it '
|
27
|
-
|
29
|
+
it { Country.where('heating_degree_days >= 0 AND cooling_degree_days > 0').count.should == 173 }
|
30
|
+
|
31
|
+
describe 'US automobile data' do
|
32
|
+
it { us.automobile_urbanity.should == 0.43 }
|
33
|
+
it { us.automobile_city_speed.should be_within(5e-5).of(32.0259) }
|
34
|
+
it { us.automobile_highway_speed.should be_within(5e-5).of(91.8935) }
|
35
|
+
it { us.automobile_trip_distance.should be_within(5e-5).of(16.3348) }
|
28
36
|
end
|
29
37
|
|
30
|
-
|
31
|
-
Country.where('electricity_emission_factor
|
32
|
-
Country.where(:electricity_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour').count.should == 136
|
33
|
-
Country.where('electricity_loss_factor
|
34
|
-
|
35
|
-
Country.minimum(:electricity_emission_factor).should >= 0.0
|
36
|
-
Country.minimum(:electricity_loss_factor).should >= 0.0
|
37
|
-
Country.maximum(:electricity_loss_factor).should < 0.3
|
38
|
+
describe 'electricity data' do
|
39
|
+
it { Country.where('electricity_emission_factor >= 0').count.should == 136 }
|
40
|
+
it { Country.where(:electricity_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour').count.should == 136 }
|
41
|
+
it { Country.where('electricity_loss_factor >= 0').count.should == 136 }
|
42
|
+
it { Country.maximum(:electricity_loss_factor).should < 0.3 }
|
38
43
|
|
39
|
-
|
40
|
-
us.electricity_emission_factor.should be_within(
|
41
|
-
us.electricity_emission_factor_units.should == 'kilograms_co2e_per_kilowatt_hour'
|
42
|
-
us.electricity_loss_factor.should be_within(
|
44
|
+
# spot checks
|
45
|
+
it { us.electricity_emission_factor.should be_within(5e-6).of(0.55437) }
|
46
|
+
it { us.electricity_emission_factor_units.should == 'kilograms_co2e_per_kilowatt_hour' }
|
47
|
+
it { us.electricity_loss_factor.should be_within(5e-6).of(0.06503) }
|
43
48
|
|
44
|
-
|
45
|
-
uk.
|
46
|
-
uk.
|
47
|
-
uk.electricity_loss_factor.should be_within(0.001).of(0.073)
|
49
|
+
it { uk.electricity_emission_factor.should be_within(1e-5).of(0.51020) }
|
50
|
+
it { uk.electricity_emission_factor_units.should == 'kilograms_co2e_per_kilowatt_hour' }
|
51
|
+
it { uk.electricity_loss_factor.should be_within(1e-3).of(0.073) }
|
48
52
|
end
|
49
53
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
54
|
+
describe 'flight data' do
|
55
|
+
it { Country.where("flight_route_inefficiency_factor > 0").count.should == 17 }
|
56
|
+
it { us.flight_route_inefficiency_factor.should == 1.07 }
|
57
|
+
it { uk.flight_route_inefficiency_factor.should == 1.1 }
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'lodging data' do
|
61
|
+
it { us.lodging_occupancy_rate.should be_within(0.001).of(0.601) }
|
62
|
+
it { us.lodging_natural_gas_intensity.should be_within(0.00001).of(1.93316) }
|
63
|
+
it { us.lodging_natural_gas_intensity_units.should == 'cubic_metres_per_occupied_room_night' }
|
55
64
|
end
|
56
65
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
66
|
+
describe 'rail data' do
|
67
|
+
it { Country.where("rail_passengers > 0").count.should == 26 }
|
68
|
+
it { Country.where("rail_trip_distance > 0").count.should == 26 }
|
69
|
+
it { Country.where("rail_trip_electricity_intensity > 0").count.should == 26 }
|
70
|
+
it { Country.where("rail_trip_diesel_intensity > 0").count.should == 26 }
|
71
|
+
it { Country.where("rail_trip_co2_emission_factor > 0").count.should == 26 }
|
72
|
+
|
73
|
+
# spot checks
|
74
|
+
it { us.rail_passengers.should == 4467000000 }
|
75
|
+
it { us.rail_trip_distance.should be_within(5e-5).of(12.9952) }
|
76
|
+
it { us.rail_speed.should be_within(5e-5).of(32.4972) }
|
77
|
+
it { us.rail_trip_electricity_intensity.should be_within(5e-5).of(0.140512) }
|
78
|
+
it { us.rail_trip_diesel_intensity.should be_within(5e-5).of(0.0194) }
|
79
|
+
it { us.rail_trip_co2_emission_factor.should be_within(5e-5).of(0.0958) }
|
80
|
+
|
81
|
+
it { uk.rail_passengers.should == 1352150000 }
|
82
|
+
it { uk.rail_trip_distance.should be_within(5e-5).of(40.6904) }
|
83
|
+
it { uk.rail_trip_electricity_intensity.should be_within(5e-5).of(0.09) }
|
84
|
+
it { uk.rail_trip_diesel_intensity.should be_within(5e-5).of(0.0028) }
|
85
|
+
it { uk.rail_trip_co2_emission_factor.should be_within(5e-5).of(0.0458) }
|
62
86
|
end
|
63
87
|
end
|
64
88
|
|
@@ -67,4 +91,13 @@ describe Country do
|
|
67
91
|
Country.united_states.should == Country.find('US')
|
68
92
|
end
|
69
93
|
end
|
94
|
+
|
95
|
+
describe '.fallback' do
|
96
|
+
it 'has fallback electricity emission factor and electricity loss factor' do
|
97
|
+
fallback = Country.fallback
|
98
|
+
fallback.electricity_emission_factor.should be_within(0.00001).of(0.62609)
|
99
|
+
fallback.electricity_emission_factor_units.should == 'kilograms_co2e_per_kilowatt_hour'
|
100
|
+
fallback.electricity_loss_factor.should be_within(0.001).of(0.096)
|
101
|
+
end
|
102
|
+
end
|
70
103
|
end
|