Sha256: ef79beceef4ced094d1346d178f02e2aaeefcff6763a3521c8e5bc1f9b488089

Contents?: true

Size: 1.89 KB

Versions: 5

Compression:

Stored size: 1.89 KB

Contents

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
  
  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.0
        aircraft_class.m2 = 0.0
        aircraft_class.m1 = 0.0
        aircraft_class.b = 0.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.save!
      end
      
      update_all :m3_units => 'kilograms_per_cubic_nautical_mile', :m2_units => 'kilograms_per_square_nautical_mile', :m1_units => 'kilograms_per_nautical_mile', :b_units  => 'kilograms'
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
earth-0.7.0 lib/earth/air/aircraft_class.rb
earth-0.6.6 lib/earth/air/aircraft_class.rb
earth-0.6.5 lib/earth/air/aircraft_class.rb
earth-0.6.4 lib/earth/air/aircraft_class.rb
earth-0.6.3 lib/earth/air/aircraft_class.rb