lib/earth/locality/country.rb in earth-0.12.3 vs lib/earth/locality/country.rb in earth-0.12.4
- old
+ new
@@ -1,28 +1,44 @@
require 'earth/automobile'
-require 'earth/fuel'
require 'earth/hospitality'
require 'earth/rail'
class Country < ActiveRecord::Base
self.primary_key = "iso_3166_code"
has_many :rail_companies, :foreign_key => 'country_iso_3166_code' # used to calculate rail data
- has_many :lodging_classes, :foreign_key => 'country_iso_3166_code', :class_name => 'CountryLodgingClass'
+ has_one :electricity_mix, :foreign_key => 'country_iso_3166_code'
+ data_miner do
+ process "Ensure ElectricityMix is imported because it's like a belongs_to association" do
+ ElectricityMix.run_data_miner!
+ end
+ end
+
+ def self.united_states
+ find_by_iso_3166_code('US')
+ end
+
falls_back_on :name => 'fallback',
:automobile_urbanity => lambda { united_states.automobile_urbanity }, # for now assume US represents world
:automobile_fuel_efficiency => ((22.5 + 16.2) / 2.0).miles_per_gallon.to(:kilometres_per_litre), # average of passenger car fuel unknown and light goods vehicle fuel unknown - WRI Mobile Combustion calculation tool v2.0
:automobile_fuel_efficiency_units => 'kilometres_per_litre',
:automobile_city_speed => lambda { united_states.automobile_city_speed }, # for now assume US represents world
:automobile_city_speed_units => lambda { united_states.automobile_city_speed_units }, # for now assume US represents world
:automobile_highway_speed => lambda { united_states.automobile_highway_speed }, # for now assume US represents world
:automobile_highway_speed_units => lambda { united_states.automobile_highway_speed_units }, # for now assume US represents world
:automobile_trip_distance => lambda { united_states.automobile_trip_distance }, # for now assume US represents world
:automobile_trip_distance_units => lambda { united_states.automobile_trip_distance_units }, # for now assume US represents world
+ :electricity_mix => lambda { ElectricityMix.fallback },
:electricity_emission_factor => 0.626089, # from ecometrica paper - FIXME TODO calculate this
:electricity_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour', # FIXME TODO derive this
+ :electricity_co2_emission_factor => 0.623537, # from ecometrica paper - FIXME TODO calculate this
+ :electricity_co2_emission_factor_units => 'kilograms_per_kilowatt_hour', # FIXME TODO derive this
+ :electricity_ch4_emission_factor => 0.000208, # from ecometrica paper - FIXME TODO calculate this
+ :electricity_ch4_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour', # FIXME TODO derive this
+ :electricity_n2o_emission_factor => 0.002344, # from ecometrica paper - FIXME TODO calculate this
+ :electricity_n2o_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour', # FIXME TODO derive this
:electricity_loss_factor => 0.096, # from ecometrica paper - FIXME TODO calculate this
:flight_route_inefficiency_factor => lambda { maximum(:flight_route_inefficiency_factor) }, # default to the largest inefficiency factor
:lodging_occupancy_rate => lambda { united_states.lodging_occupancy_rate }, # for now assume US represents world
:lodging_natural_gas_intensity => lambda { united_states.lodging_natural_gas_intensity }, # for now assume US represents world
:lodging_natural_gas_intensity_units => lambda { united_states.lodging_natural_gas_intensity_units }, # for now assume US represents world
@@ -41,14 +57,10 @@
:rail_trip_diesel_intensity => lambda { weighted_average(:rail_trip_diesel_intensity, :weighted_by => :rail_passengers) },
:rail_trip_diesel_intensity_units => 'litres_per_passenger_kilometre', # FIXME TODO derive this
:rail_trip_co2_emission_factor => lambda { weighted_average(:rail_trip_co2_emission_factor, :weighted_by => :rail_passengers) },
:rail_trip_co2_emission_factor_units => 'kilograms_per_passenger_kilometre' # FIXME TODO derive this
- def self.united_states
- find_by_iso_3166_code('US')
- end
-
col :iso_3166_code # alpha-2 2-letter like GB
col :iso_3166_numeric_code, :type => :integer # numeric like 826; aka UN M49 code
col :iso_3166_alpha_3_code # 3-letter like GBR
col :name
col :heating_degree_days, :type => :float
@@ -64,10 +76,16 @@
col :automobile_highway_speed_units
col :automobile_trip_distance, :type => :float
col :automobile_trip_distance_units
col :electricity_emission_factor, :type => :float
col :electricity_emission_factor_units
+ col :electricity_co2_emission_factor, :type => :float
+ col :electricity_co2_emission_factor_units
+ col :electricity_ch4_emission_factor, :type => :float
+ col :electricity_ch4_emission_factor_units
+ col :electricity_n2o_emission_factor, :type => :float
+ col :electricity_n2o_emission_factor_units
col :electricity_loss_factor, :type => :float
col :flight_route_inefficiency_factor, :type => :float
col :lodging_occupancy_rate, :type => :float
col :lodging_natural_gas_intensity, :type => :float
col :lodging_natural_gas_intensity_units
@@ -88,7 +106,15 @@
col :rail_trip_diesel_intensity_units
col :rail_trip_co2_emission_factor, :type => :float
col :rail_trip_co2_emission_factor_units
warn_unless_size 249
- warn_if_nulls_except /heating/, /cooling/
+ warn_if_nulls_except(
+ /heating/,
+ /cooling/,
+ /automobile/,
+ /electricity/,
+ /flight/,
+ /lodging/,
+ /rail/
+ )
end