lib/earth/air/aircraft_class.rb in earth-0.5.4 vs lib/earth/air/aircraft_class.rb in earth-0.6.0

- old
+ new

@@ -1,26 +1,62 @@ class AircraftClass < ActiveRecord::Base set_primary_key :code has_many :aircraft, :foreign_key => 'class_code', :primary_key => 'code' + + col :code + col :m3, :type => :float + col :m3_units + col :m2, :type => :float + col :m2_units + col :m1, :type => :float + col :m1_units + col :b, :type => :float + col :b_units + col :seats, :type => :float def fuel_use_coefficients [m3, m2, m1, b] end def valid_fuel_use_equation? fuel_use_coefficients.all?(&:present?) and fuel_use_coefficients.any?(&:nonzero?) end - - force_schema do - string 'code' - float 'm3' - string 'm3_units' - float 'm2' - string 'm2_units' - float 'm1' - string 'm1_units' - float 'b' - string 'b_units' - float 'seats' + + class << self + def update_averages! + Aircraft.run_data_miner! + AircraftFuelUseEquation.run_data_miner! + find_each do |aircraft_class| + cumulative_passengers = 0 + aircraft_class.m3 = 0 + aircraft_class.m2 = 0 + aircraft_class.m1 = 0 + aircraft_class.b = 0 + + aircraft_class.aircraft.where('passengers > 0 AND fuel_use_code IS NOT NULL').each do |a| + cumulative_passengers += a.passengers + aircraft_class.m3 += a.fuel_use_equation.m3 * a.passengers + aircraft_class.m2 += a.fuel_use_equation.m2 * a.passengers + aircraft_class.m1 += a.fuel_use_equation.m1 * a.passengers + aircraft_class.b += a.fuel_use_equation.b * a.passengers + end + + if cumulative_passengers > 0 + aircraft_class.m3 /= cumulative_passengers + aircraft_class.m2 /= cumulative_passengers + aircraft_class.m1 /= cumulative_passengers + aircraft_class.b /= cumulative_passengers + end + + aircraft_class.seats = aircraft_class.aircraft.weighted_average(:seats, :weighted_by => :passengers) + + aircraft_class.m3_units = 'kilograms_per_cubic_nautical_mile' + aircraft_class.m2_units = 'kilograms_per_square_nautical_mile' + aircraft_class.m1_units = 'kilograms_per_nautical_mile' + aircraft_class.b_units = 'kilograms' + + aircraft_class.save! + end + end end end