lib/earth/pet/species.rb in earth-0.3.13 vs lib/earth/pet/species.rb in earth-0.3.14
- old
+ new
@@ -2,20 +2,29 @@
set_primary_key :name
scope :thoroughly_researched, :conditions => 'marginal_dietary_requirement IS NOT NULL'
falls_back_on :diet_emission_intensity => lambda { weighted_average :diet_emission_intensity, :weighted_by => :population }, # kg CO2 / joule
- :marginal_dietary_requirement => lambda { (thoroughly_researched.map(&:weighted_diet_size).sum / thoroughly_researched.sum(:population) ) / thoroughly_researched.weighted_average(:weight, :weighted_by => :population)}, # joules
+ :marginal_dietary_requirement => lambda { Species.marginal_dietary_requirement_fallback },
:fixed_dietary_requirement => 0, # force a zero intercept to be respectful of our tiny tiny animal friends
:weight => lambda { weighted_average :weight, :weighted_by => :population } # kg
data_miner do
tap "Brighter Planet's species data", Earth.taps_server
end
class << self
def [](name)
find_by_name name.to_s
+ end
+
+ def marginal_dietary_requirement_fallback
+ total_diet_size = thoroughly_researched.map(&:weighted_diet_size).sum
+ total_population = thoroughly_researched.sum(:population)
+ return 0.0 unless total_population > 0.0
+ average_weight = thoroughly_researched.weighted_average(:weight, :weighted_by => :population)
+ return 0.0 unless average_weight > 0.0
+ (total_diet_size / total_population) / average_weight
end
end
def diet_size
return unless weight and marginal_dietary_requirement and fixed_dietary_requirement