earth 0.4.12 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +1 -1
  3. data/earth.gemspec +7 -3
  4. data/features/automobile_make_model_year_variant.feature +10 -10
  5. data/features/step_definitions/data_steps.rb +1 -1
  6. data/features/support/env.rb +2 -2
  7. data/features/support/imports/automobile_fuel_good.csv +3 -3
  8. data/features/support/imports/automobile_make_model_year_variant_bad.csv +2 -2
  9. data/features/support/imports/automobile_make_model_year_variant_good.csv +2 -2
  10. data/lib/earth/air.rb +2 -1
  11. data/lib/earth/air/aircraft.rb +21 -8
  12. data/lib/earth/air/aircraft/data_miner.rb +85 -180
  13. data/lib/earth/air/aircraft_class.rb +9 -1
  14. data/lib/earth/air/aircraft_class/data_miner.rb +57 -20
  15. data/lib/earth/air/aircraft_fuel_use_equation.rb +26 -0
  16. data/lib/earth/air/aircraft_fuel_use_equation/data_miner.rb +26 -0
  17. data/lib/earth/air/aircraft_manufacturer.rb +0 -2
  18. data/lib/earth/air/aircraft_manufacturer/data_miner.rb +4 -1
  19. data/lib/earth/air/airline.rb +2 -11
  20. data/lib/earth/air/airline/data_miner.rb +10 -51
  21. data/lib/earth/air/airport.rb +2 -29
  22. data/lib/earth/air/airport/data_miner.rb +61 -56
  23. data/lib/earth/air/bts_aircraft.rb +7 -0
  24. data/lib/earth/air/bts_aircraft/data_miner.rb +15 -0
  25. data/lib/earth/air/data_miner.rb +2 -1
  26. data/lib/earth/air/flight_seat_class.rb +1 -4
  27. data/lib/earth/air/flight_segment.rb +16 -10
  28. data/lib/earth/air/flight_segment/data_miner.rb +170 -129
  29. data/lib/earth/automobile/automobile_make/data_miner.rb +12 -3
  30. data/lib/earth/automobile/automobile_make_model/data_miner.rb +4 -1
  31. data/lib/earth/automobile/automobile_make_model_year/data_miner.rb +4 -1
  32. data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +29 -16
  33. data/lib/earth/automobile/automobile_make_year/data_miner.rb +8 -2
  34. data/lib/earth/automobile/automobile_size_class/data_miner.rb +4 -1
  35. data/lib/earth/automobile/automobile_type_fuel_age/data_miner.rb +4 -1
  36. data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +4 -2
  37. data/lib/earth/automobile/automobile_type_fuel_year_age/data_miner.rb +4 -1
  38. data/lib/earth/automobile/automobile_type_year/data_miner.rb +4 -1
  39. data/lib/earth/fuel/fuel/data_miner.rb +4 -1
  40. data/lib/earth/hospitality/lodging_class.rb +0 -16
  41. data/lib/earth/hospitality/lodging_class/data_miner.rb +11 -1
  42. data/lib/earth/inflectors.rb +1 -1
  43. data/lib/earth/locality/country/data_miner.rb +14 -14
  44. data/lib/earth/locality/urbanity/data_miner.rb +4 -1
  45. data/lib/earth/residence/air_conditioner_use/data_miner.rb +4 -1
  46. data/lib/earth/residence/clothes_machine_use/data_miner.rb +4 -1
  47. data/lib/earth/residence/dishwasher_use/data_miner.rb +4 -1
  48. data/lib/earth/residence/residence_appliance/data_miner.rb +5 -2
  49. data/lib/earth/residence/residence_class/data_miner.rb +4 -1
  50. data/lib/earth/version.rb +1 -1
  51. data/spec/earth_spec.rb +2 -2
  52. data/test/test_aircraft_match.rb +732 -0
  53. metadata +87 -51
  54. data/features/flight_segment.feature +0 -14
  55. data/features/support/imports/flight_segment_bad.csv +0 -8
  56. data/features/support/imports/flight_segment_good.csv +0 -8
  57. data/lib/earth/air/flight_fuel_type.rb +0 -12
  58. data/lib/earth/air/flight_fuel_type/data_miner.rb +0 -12
@@ -14,8 +14,11 @@ AutomobileMakeModel.class_eval do
14
14
  string 'fuel_efficiency_highway_units'
15
15
  end
16
16
 
17
- process "Derive model names from automobile make model year variants" do
17
+ process "Ensure AutomobileMakeModelYearVariant is populated" do
18
18
  AutomobileMakeModelYearVariant.run_data_miner!
19
+ end
20
+
21
+ process "Derive model names from automobile make model year variants" do
19
22
  INSERT_IGNORE %{INTO automobile_make_models(name, make_name, model_name)
20
23
  SELECT automobile_make_model_year_variants.make_model_name, automobile_make_model_year_variants.make_name, automobile_make_model_year_variants.name FROM automobile_make_model_year_variants WHERE LENGTH(automobile_make_model_year_variants.make_name) > 0 AND LENGTH(automobile_make_model_year_variants.name) > 0
21
24
  }
@@ -17,8 +17,11 @@ AutomobileMakeModelYear.class_eval do
17
17
  string 'fuel_efficiency_highway_units'
18
18
  end
19
19
 
20
- process "Derive model year names from automobile make model year variants" do
20
+ process "Ensure AutomobileMakeModelYearVariant is populated" do
21
21
  AutomobileMakeModelYearVariant.run_data_miner!
22
+ end
23
+
24
+ process "Derive model year names from automobile make model year variants" do
22
25
  INSERT_IGNORE %{INTO automobile_make_model_years(name, make_name, model_name, make_model_name, year, make_year_name)
23
26
  SELECT automobile_make_model_year_variants.make_model_year_name, automobile_make_model_year_variants.make_name, automobile_make_model_year_variants.name, automobile_make_model_year_variants.make_model_name, automobile_make_model_year_variants.year, automobile_make_model_year_variants.make_year_name FROM automobile_make_model_year_variants WHERE LENGTH(automobile_make_model_year_variants.make_name) > 0 AND LENGTH(automobile_make_model_year_variants.make_model_name) > 0
24
27
  }
@@ -232,7 +232,10 @@ AutomobileMakeModelYearVariant.class_eval do
232
232
  'DU' => 'D',
233
233
  'G' => 'R',
234
234
  'GP' => 'P',
235
- 'GPR' => 'P'
235
+ 'GPR' => 'P',
236
+ 'GM' => 'P',
237
+ 'BE' => 'BE',
238
+ 'H' => 'H'
236
239
  }
237
240
  attr_reader :year
238
241
  def initialize(options = {})
@@ -468,32 +471,42 @@ AutomobileMakeModelYearVariant.class_eval do
468
471
  end
469
472
 
470
473
  verify "Year should be from 1985 to 2011" do
471
- AutomobileMakeModelYearVariant.all.each do |variant|
472
- unless variant.year > 1984 and variant.year < 2012
473
- raise "Invalid year for AutomobileMakeModelYearVariant #{variant.row_hash}: #{variant.year} (should be from 1985 to 2011)"
474
+ AutomobileMakeModelYearVariant.find_by_sql("SELECT DISTINCT year FROM automobile_make_model_year_variants").map(&:year).each do |year|
475
+ unless year > 1984 and year < 2012
476
+ raise "Invalid year in automobile_make_model_year_variants: #{year} is not from 1985 to 2011"
474
477
  end
475
478
  end
476
479
  end
477
480
 
478
- # FIXME TODO verify fuel code appears in AutomobileFuel
481
+ process "Ensure AutomobileFuel is populated" do
482
+ AutomobileFuel.run_data_miner!
483
+ end
484
+
485
+ verify "Fuel code should appear in AutomobileFuel" do
486
+ valid_codes = AutomobileFuel.find_by_sql("SELECT DISTINCT code FROM automobile_fuels").map(&:code)
487
+ AutomobileMakeModelYearVariant.find_by_sql("SELECT DISTINCT fuel_code FROM automobile_make_model_year_variants").map(&:fuel_code).each do |fuel_code|
488
+ unless valid_codes.include?(fuel_code)
489
+ raise "Invalide fuel code in automobile_make_model_year_variants: #{fuel_code} is not in #{valid_codes}"
490
+ end
491
+ end
492
+ end
479
493
 
480
494
  verify "Fuel efficiencies should be greater than zero" do
481
- AutomobileMakeModelYearVariant.all.each do |variant|
482
- [:fuel_efficiency, :fuel_efficiency_city, :fuel_efficiency_highway].each do |type|
483
- fuel_efficiency = variant.send(type)
484
- unless fuel_efficiency > 0
485
- raise "Invalid fuel efficiency #{type} for AutomobileMakeModelYearVariant #{variant.row_hash}: #{fuel_efficiency} (should be < 0)"
486
- end
495
+ [:fuel_efficiency, :fuel_efficiency_city, :fuel_efficiency_highway].each do |field|
496
+ unless AutomobileMakeModelYearVariant.where(field => nil).count == 0
497
+ raise "Invalid fuel efficiency in automobile_make_model_year_variants: nil is not > 0"
498
+ end
499
+ unless AutomobileMakeModelYearVariant.where(field => 0).count == 0
500
+ raise "Invalid fuel efficiency in automobile_make_model_year_variants: 0 is not > 0"
487
501
  end
488
502
  end
489
503
  end
490
504
 
491
505
  verify "Fuel efficiency units should be kilometres per litre" do
492
- AutomobileMakeModelYearVariant.all.each do |variant|
493
- [:fuel_efficiency_units, :fuel_efficiency_city_units, :fuel_efficiency_highway_units].each do |type|
494
- units = variant.send(type)
495
- unless units == "kilometres_per_litre"
496
- raise "Invalid fuel efficiency #{type} units for AutomobileMakeModelYearVariant #{variant.row_hash}: #{units} (should be kilometres_per_litre)"
506
+ %w{ fuel_efficiency_units fuel_efficiency_city_units fuel_efficiency_highway_units }.each do |field|
507
+ AutomobileMakeModelYearVariant.find_by_sql("SELECT DISTINCT #{field} FROM automobile_make_model_year_variants").map(&:"#{field}").each do |value|
508
+ unless value == 'kilometres_per_litre'
509
+ raise "Invalid #{field} in automobile_make_model_year_variants: #{value} is not 'kilometres_per_litre'"
497
510
  end
498
511
  end
499
512
  end
@@ -13,8 +13,11 @@ AutomobileMakeYear.class_eval do
13
13
  integer 'volume' # This will sometimes be null because not all make_years have CAFE data
14
14
  end
15
15
 
16
- process "Derive manufacturer names and years from automobile make model year variants" do
16
+ process "Ensure AutomobileMakeModelYearVariant is populated" do
17
17
  AutomobileMakeModelYearVariant.run_data_miner!
18
+ end
19
+
20
+ process "Derive manufacturer names and years from automobile make model year variants" do
18
21
  INSERT_IGNORE %{INTO automobile_make_years(name, make_name, year)
19
22
  SELECT
20
23
  automobile_make_model_year_variants.make_year_name,
@@ -30,9 +33,12 @@ AutomobileMakeYear.class_eval do
30
33
  }
31
34
  end
32
35
 
36
+ process "Ensure AutomobileMakeFleetYear is populated" do
37
+ AutomobileMakeFleetYear.run_data_miner!
38
+ end
39
+
33
40
  # FIXME TODO make this a method on AutomobileMakeYear?
34
41
  process "Calculate fuel efficiency from make fleet years for makes with CAFE data" do
35
- AutomobileMakeFleetYear.run_data_miner!
36
42
  make_fleet_years = AutomobileMakeFleetYear.arel_table
37
43
  make_years = AutomobileMakeYear.arel_table
38
44
  conditional_relation = make_years[:name].eq(make_fleet_years[:make_year_name])
@@ -24,9 +24,12 @@ AutomobileSizeClass.class_eval do
24
24
  store 'fuel_efficiency_highway', :units_field_name => 'fuel_efficiency_highway_units'
25
25
  end
26
26
 
27
+ process "Ensure AutomobileTypeFuelYearAge is populated" do
28
+ AutomobileTypeFuelYearAge.run_data_miner!
29
+ end
30
+
27
31
  # FIXME TODO make this a method on AutomobileSizeClass?
28
32
  process "Calculate annual distance from AutomobileTypeFuelYearAge" do
29
- AutomobileTypeFuelYearAge.run_data_miner!
30
33
  ages = AutomobileTypeFuelYearAge.arel_table
31
34
  classes = AutomobileSizeClass.arel_table
32
35
  conditional_relation = ages[:type_name].eq(classes[:type_name])
@@ -139,9 +139,12 @@ AutomobileTypeFuelAge.class_eval do
139
139
  update_all "annual_distance_units = 'kilometres'"
140
140
  end
141
141
 
142
+ process "Ensure AutomobileTypeFuelYear is populated" do
143
+ AutomobileTypeFuelYear.run_data_miner!
144
+ end
145
+
142
146
  # FIXME TODO maybe make this a method on AutomobileTypeFuelAge?
143
147
  process "Calculate number of vehicles from total travel percent and AutomobileTypeFuelYear" do
144
- AutomobileTypeFuelYear.run_data_miner!
145
148
  connection.execute %{
146
149
  UPDATE automobile_type_fuel_ages
147
150
  SET vehicles =
@@ -88,10 +88,12 @@ AutomobileTypeFuelYear.class_eval do
88
88
  end
89
89
  end
90
90
 
91
- process "Calculate CH4 and N2O emision factors from AutomobileTypeFuelYearControl and AutomobileTypeFuelControl" do
91
+ process "Ensure necessary tables are populated" do
92
92
  AutomobileTypeFuelYearControl.run_data_miner!
93
93
  AutomobileTypeFuelControl.run_data_miner!
94
-
94
+ end
95
+
96
+ process "Calculate CH4 and N2O emision factors from AutomobileTypeFuelYearControl and AutomobileTypeFuelControl" do
95
97
  AutomobileTypeFuelYear.all.each do |record|
96
98
  record.ch4_emission_factor = record.year_controls.map do |year_control|
97
99
  year_control.total_travel_percent * year_control.control.ch4_emission_factor
@@ -119,8 +119,11 @@ AutomobileTypeFuelYearAge.class_eval do
119
119
  end
120
120
  end
121
121
 
122
- process "Calculate number of vehicles from total travel percent and AutomobileTypeFuelYear" do
122
+ process "Ensure AutomobileTypeFuelYear is populated" do
123
123
  AutomobileTypeFuelYear.run_data_miner!
124
+ end
125
+
126
+ process "Calculate number of vehicles from total travel percent and AutomobileTypeFuelYear" do
124
127
  AutomobileTypeFuelYearAge.all.each do |record|
125
128
  record.vehicles = record.total_travel_percent * record.type_fuel_year.total_travel / record.annual_distance
126
129
  record.save
@@ -18,8 +18,11 @@ AutomobileTypeYear.class_eval do
18
18
  store 'hfc_emissions', :units_field_name => 'hfc_emissions_units'
19
19
  end
20
20
 
21
- process "Calculate HFC emission factor from AutomobileTypeFuelYear" do
21
+ process "Ensure AutomobileTypeFuelYear is populated" do
22
22
  AutomobileTypeFuelYear.run_data_miner!
23
+ end
24
+
25
+ process "Calculate HFC emission factor from AutomobileTypeFuelYear" do
23
26
  AutomobileTypeYear.all.each do |record|
24
27
  record.hfc_emission_factor = record.hfc_emissions / record.type_fuel_years.sum('fuel_consumption')
25
28
  record.hfc_emission_factor_units = "kilograms_co2e_per_litre"
@@ -16,8 +16,11 @@ Fuel.class_eval do
16
16
  string 'co2_biogenic_emission_factor_units'
17
17
  end
18
18
 
19
- process "Derive fuel names from FuelYear" do
19
+ process "Ensure FuelYear is populated" do
20
20
  FuelYear.run_data_miner!
21
+ end
22
+
23
+ process "Derive fuel names from FuelYear" do
21
24
  INSERT_IGNORE %{INTO fuels(name)
22
25
  SELECT DISTINCT fuel_years.fuel_name FROM fuel_years
23
26
  }
@@ -1,22 +1,6 @@
1
1
  class LodgingClass < ActiveRecord::Base
2
- extend Earth::Base
3
-
4
2
  set_primary_key :name
5
3
 
6
- def self.schema_definition
7
- lambda do
8
- string 'name'
9
- float 'natural_gas_intensity'
10
- string 'natural_gas_intensity_units'
11
- float 'fuel_oil_intensity'
12
- string 'fuel_oil_intensity_units'
13
- float 'electricity_intensity'
14
- string 'electricity_intensity_units'
15
- float 'district_heat_intensity'
16
- string 'district_heat_intensity_units'
17
- end
18
- end
19
-
20
4
  data_miner do
21
5
  tap "Brighter Planet's lodging class data", Earth.taps_server
22
6
  end
@@ -1,6 +1,16 @@
1
1
  LodgingClass.class_eval do
2
2
  data_miner do
3
- LodgingClass.define_schema(self)
3
+ schema Earth.database_options do
4
+ string 'name'
5
+ float 'electricity_intensity'
6
+ string 'electricity_intensity'
7
+ float 'natural_gas_intensity'
8
+ string 'natural_gas_intensity'
9
+ float 'fuel_oil_intensity'
10
+ string 'fuel_oil_intensity'
11
+ float 'district_heat_intensity'
12
+ string 'district_heat_intensity'
13
+ end
4
14
 
5
15
  import "a list of lodging classes and pre-calculated emission factors",
6
16
  :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdGZZWmZtWEJlYzhRNXlPdWpBTldlcUE&hl=en&gid=0&output=csv' do
@@ -1,5 +1,5 @@
1
1
  ActiveSupport::Inflector.inflections do |inflect|
2
- inflect.uncountable 'aircraft'
2
+ inflect.uncountable %w{ aircraft bts_aircraft }
3
3
  inflect.uncountable 'commons'
4
4
  inflect.uncountable 'food'
5
5
  inflect.uncountable 'shelter'
@@ -41,20 +41,20 @@ Country.class_eval do
41
41
  end
42
42
 
43
43
  # FIXME TODO eventually need to do this for all countries
44
- process "Derive US average automobile fuel efficiency from AutomobileTypeFuelYear" do
45
- AutomobileTypeFuelYear.run_data_miner!
46
-
47
- scope = AutomobileTypeFuelYear.where(:year => AutomobileTypeFuelYear.maximum(:year))
48
- fe = scope.sum(:total_travel) / scope.sum(:fuel_consumption)
49
- units = scope.first.total_travel_units + '_per_' + scope.first.fuel_consumption_units.singularize
50
-
51
- connection.execute %{
52
- UPDATE countries
53
- SET automobile_fuel_efficiency = #{fe},
54
- automobile_fuel_efficiency_units = '#{units}'
55
- WHERE iso_3166_code = 'US'
56
- }
57
- end
44
+ # process "Derive US average automobile fuel efficiency from AutomobileTypeFuelYear" do
45
+ # AutomobileTypeFuelYear.run_data_miner!
46
+ #
47
+ # scope = AutomobileTypeFuelYear.where(:year => AutomobileTypeFuelYear.maximum(:year))
48
+ # fe = scope.sum(:total_travel) / scope.sum(:fuel_consumption)
49
+ # units = scope.first.total_travel_units + '_per_' + scope.first.fuel_consumption_units.singularize
50
+ #
51
+ # connection.execute %{
52
+ # UPDATE countries
53
+ # SET automobile_fuel_efficiency = #{fe},
54
+ # automobile_fuel_efficiency_units = '#{units}'
55
+ # WHERE iso_3166_code = 'US'
56
+ # }
57
+ # end
58
58
 
59
59
  process "Convert automobile city speed from miles per hour to kilometres per hour" do
60
60
  conversion_factor = 1.miles.to(:kilometres)
@@ -4,8 +4,11 @@ Urbanity.class_eval do
4
4
  string 'name'
5
5
  end
6
6
 
7
- process "derive from ResidentialEnergyConsumptionSurveyResponse" do
7
+ process "Ensure ResidentialEnergyConsumptionSurveyResponse is populated" do
8
8
  ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
9
+ end
10
+
11
+ process "Derive from ResidentialEnergyConsumptionSurveyResponse" do
9
12
  INSERT_IGNORE %{INTO urbanities(name)
10
13
  SELECT DISTINCT recs_responses.urbanity_id FROM recs_responses WHERE LENGTH(recs_responses.urbanity_id) > 0
11
14
  }
@@ -6,8 +6,11 @@ AirConditionerUse.class_eval do
6
6
  string 'fugitive_emission_units'
7
7
  end
8
8
 
9
- process "derive from ResidentialEnergyConsumptionSurveyResponse" do
9
+ process "Ensure ResidentialEnergyConsumptionSurveyResponse is populated" do
10
10
  ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
11
+ end
12
+
13
+ process "Derive from ResidentialEnergyConsumptionSurveyResponse" do
11
14
  INSERT_IGNORE %{INTO air_conditioner_uses(name)
12
15
  SELECT DISTINCT recs_responses.central_ac_use FROM recs_responses WHERE LENGTH(recs_responses.central_ac_use) > 0
13
16
  }
@@ -6,8 +6,11 @@ ClothesMachineUse.class_eval do
6
6
  string 'annual_energy_from_electricity_for_clothes_driers_units'
7
7
  end
8
8
 
9
- process "derive from ResidentialEnergyConsumptionSurveyResponse" do
9
+ process "Ensure ResidentialEnergyConsumptionSurveyResponse is populated" do
10
10
  ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
11
+ end
12
+
13
+ process "Derive from ResidentialEnergyConsumptionSurveyResponse" do
11
14
  INSERT_IGNORE %{INTO clothes_machine_uses(name)
12
15
  SELECT DISTINCT recs_responses.clothes_washer_use FROM recs_responses WHERE LENGTH(recs_responses.clothes_washer_use) > 0
13
16
  }
@@ -6,8 +6,11 @@ DishwasherUse.class_eval do
6
6
  string 'annual_energy_from_electricity_for_dishwashers_units'
7
7
  end
8
8
 
9
- process "derive from ResidentialEnergyConsumptionSurveyResponse" do
9
+ process "Ensure ResidentialEnergyConsumptionSurveyResponse is populated" do
10
10
  ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
11
+ end
12
+
13
+ process "Derive from ResidentialEnergyConsumptionSurveyResponse" do
11
14
  INSERT_IGNORE %{INTO dishwasher_uses(name)
12
15
  SELECT DISTINCT recs_responses.dishwasher_use_id FROM recs_responses WHERE LENGTH(recs_responses.dishwasher_use_id) > 0
13
16
  }
@@ -5,9 +5,12 @@ ResidenceAppliance.class_eval do
5
5
  float 'annual_energy_from_electricity'
6
6
  string 'annual_energy_from_electricity_units'
7
7
  end
8
-
9
- process "Derive from residential energy consumption survey responses" do
8
+
9
+ process "Ensure ResidentialEnergyConsumptionSurveyResponse is populated" do
10
10
  ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
11
+ end
12
+
13
+ process "Derive from ResidentialEnergyConsumptionSurveyResponse" do
11
14
  ResidentialEnergyConsumptionSurveyResponse.column_names.grep(/_count$/).each do |column_name|
12
15
  appliance_name = column_name.sub '_count', ''
13
16
  appliance = find_or_create_by_name appliance_name
@@ -4,8 +4,11 @@ ResidenceClass.class_eval do
4
4
  string :name
5
5
  end
6
6
 
7
- process "derive from ResidentialEnergyConsumptionSurveyResponse" do
7
+ process "Ensure ResidentialEnergyConsumptionSurveyResponse is populated" do
8
8
  ResidentialEnergyConsumptionSurveyResponse.run_data_miner!
9
+ end
10
+
11
+ process "Derive from ResidentialEnergyConsumptionSurveyResponse" do
9
12
  INSERT_IGNORE %{INTO residence_classes(name)
10
13
  SELECT DISTINCT recs_responses.residence_class_id FROM recs_responses WHERE LENGTH(recs_responses.residence_class_id) > 0
11
14
  }
@@ -1,3 +1,3 @@
1
1
  module Earth
2
- VERSION = "0.4.12"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -23,7 +23,7 @@ describe Earth do
23
23
  describe '.resources' do
24
24
  it 'should get a list of resources' do
25
25
  resources = Earth.resources
26
- resources.keys.count.should == 75
26
+ resources.keys.count.should == 76
27
27
  resources['FuelType'][:domain].should == 'fuel'
28
28
  end
29
29
  it 'should exclude data_miner files' do
@@ -33,7 +33,7 @@ describe Earth do
33
33
 
34
34
  describe '.resource_names' do
35
35
  it 'should get a list of all resource names' do
36
- Earth.resource_names.count.should == 75
36
+ Earth.resource_names.count.should == 76
37
37
  Earth.resource_names.should include('Aircraft')
38
38
  Earth.resource_names.should include('Industry')
39
39
  end
@@ -0,0 +1,732 @@
1
+ class TestAircraftMatch < Test::Unit::TestCase
2
+ def test_014_user_input_matches_icao_codes
3
+ user_input = "Boeing 727-100RE"
4
+ assert_equal ["R721"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
5
+ end
6
+
7
+ def test_015_user_input_matches_icao_codes
8
+ user_input = "Boeing 727 200RE"
9
+ assert_equal ["R722"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
10
+ end
11
+
12
+ def test_006_user_input_matches_icao_codes
13
+ user_input = "Boeing 747400 domestic"
14
+ assert_equal ["B74D"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
15
+ end
16
+
17
+ def test_006_user_input_matches_icao_codes
18
+ user_input = "Boeing 777-200lr"
19
+ assert_equal ["B77L"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
20
+ end
21
+
22
+ def test_006_user_input_matches_icao_codes
23
+ user_input = "Boeing 707-100"
24
+ assert_equal ["B701"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
25
+ end
26
+
27
+ def test_006_user_input_matches_icao_codes
28
+ user_input = "Boeing 707-200"
29
+ assert_equal ["B701", "B703"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
30
+ end
31
+
32
+ def test_006_user_input_matches_icao_codes
33
+ user_input = "Boeing 717-200"
34
+ assert_equal ["B712"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
35
+ end
36
+
37
+ def test_006_user_input_matches_icao_codes
38
+ user_input = "Boeing 717-100"
39
+ assert_equal ["B712"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
40
+ end
41
+
42
+ def test_006_user_input_matches_icao_codes
43
+ user_input = "Boeing 727-100"
44
+ assert_equal ["B721"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
45
+ end
46
+
47
+ def test_006_user_input_matches_icao_codes
48
+ user_input = "Boeing 727-300"
49
+ assert_equal ["B721", "B722"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
50
+ end
51
+
52
+ def test_006_user_input_matches_icao_codes
53
+ user_input = "Boeing 737-900"
54
+ assert_equal ["B739"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
55
+ end
56
+
57
+ def test_002_user_input_matches_icao_codes
58
+ user_input = "Boeing 747-100"
59
+ assert_equal ["B741"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
60
+ end
61
+
62
+ def test_002_user_input_matches_icao_codes
63
+ user_input = "Boeing 747-500"
64
+ assert_equal ["B741", "B742", "B743", "B744", "B74D", "B74R", "B74S"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
65
+ end
66
+
67
+ def test_003_user_input_matches_icao_codes
68
+ user_input = "Boeing 757-200"
69
+ assert_equal ["B752"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
70
+ end
71
+
72
+ def test_003_user_input_matches_icao_codes
73
+ user_input = "Boeing 757-100"
74
+ assert_equal ["B752", "B753"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
75
+ end
76
+
77
+ def test_003_user_input_matches_icao_codes
78
+ user_input = "Boeing 767-200"
79
+ assert_equal ["B762"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
80
+ end
81
+
82
+ def test_003_user_input_matches_icao_codes
83
+ user_input = "Boeing 767-100"
84
+ assert_equal ["B762", "B763", "B764"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
85
+ end
86
+
87
+ def test_003_user_input_matches_icao_codes
88
+ user_input = "Boeing 777-200"
89
+ assert_equal ["B772", "B77L"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
90
+ end
91
+
92
+ def test_003_user_input_matches_icao_codes
93
+ user_input = "Boeing 777-100"
94
+ assert_equal ["B772", "B773", "B77L"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
95
+ end
96
+
97
+ def test_003_user_input_matches_icao_codes
98
+ user_input = "Boeing 727 Stage 3"
99
+ assert_equal ["B72Q"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
100
+ end
101
+
102
+ def test_003_user_input_matches_icao_codes
103
+ user_input = "Boeing 737 Stage 3"
104
+ assert_equal ["B73Q"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
105
+ end
106
+
107
+ def test_003_user_input_matches_icao_codes
108
+ user_input = "Boeing 737 Stage 4"
109
+ assert_equal ["B731", "B732", "B733", "B734", "B735", "B736", "B737", "B738", "B739", "B73Q"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
110
+ end
111
+
112
+ def test_003_user_input_matches_icao_codes
113
+ user_input = "Boeing 747SP"
114
+ assert_equal ["B74S"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
115
+ end
116
+
117
+ def test_003_user_input_matches_icao_codes
118
+ user_input = "Boeing 747 SR"
119
+ assert_equal ["B74R"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
120
+ end
121
+
122
+ def test_003_user_input_matches_icao_codes
123
+ user_input = "Boeing 747SCA"
124
+ assert_equal ["BSCA"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
125
+ end
126
+
127
+ def test_003_user_input_matches_icao_codes
128
+ user_input = "Boeing 747S"
129
+ assert_equal ["B741", "B742", "B743", "B744", "B74D", "B74R", "B74S"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
130
+ end
131
+
132
+ def test_003_user_input_matches_icao_codes
133
+ user_input = "Boeing 720"
134
+ assert_equal ["B720"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
135
+ end
136
+
137
+ def test_003_user_input_matches_icao_codes
138
+ user_input = "Boeing 707"
139
+ assert_equal ["B701", "B703"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
140
+ end
141
+
142
+ def test_003_user_input_matches_icao_codes
143
+ user_input = "Boeing 787"
144
+ assert_equal [], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
145
+ end
146
+
147
+ def test_003_user_input_matches_icao_codes
148
+ user_input = "Airbus A300600"
149
+ assert_equal ["A306"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
150
+ end
151
+
152
+ def test_003_user_input_matches_icao_codes
153
+ user_input = "Airbus A300 100"
154
+ assert_equal ["A306", "A30B"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
155
+ end
156
+
157
+ def test_003_user_input_matches_icao_codes
158
+ user_input = "Airbus A300-600st"
159
+ assert_equal ["A3ST"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
160
+ end
161
+
162
+ def test_003_user_input_matches_icao_codes
163
+ user_input = "Airbus Beluga"
164
+ assert_equal ["A3ST"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
165
+ end
166
+
167
+ def test_003_user_input_matches_icao_codes
168
+ user_input = "Airbus A330-200"
169
+ assert_equal ["A332"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
170
+ end
171
+
172
+ def test_003_user_input_matches_icao_codes
173
+ user_input = "Airbus A330-100"
174
+ assert_equal ["A332", "A333"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
175
+ end
176
+
177
+ def test_003_user_input_matches_icao_codes
178
+ user_input = "Airbus A340-200"
179
+ assert_equal ["A342"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
180
+ end
181
+
182
+ def test_003_user_input_matches_icao_codes
183
+ user_input = "Airbus A340-100"
184
+ assert_equal ["A342", "A343", "A345", "A346"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
185
+ end
186
+
187
+ def test_003_user_input_matches_icao_codes
188
+ user_input = "Airbus A380-800"
189
+ assert_equal ["A388"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
190
+ end
191
+
192
+ def test_003_user_input_matches_icao_codes
193
+ user_input = "Airbus A380-100"
194
+ assert_equal ["A388"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
195
+ end
196
+
197
+ def test_003_user_input_matches_icao_codes
198
+ user_input = "Airbus A300C"
199
+ assert_equal ["A30B"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
200
+ end
201
+
202
+ def test_003_user_input_matches_icao_codes
203
+ user_input = "Airbus A300X"
204
+ assert_equal ["A306", "A30B"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
205
+ end
206
+
207
+ def test_003_user_input_matches_icao_codes
208
+ user_input = "Airbus A318"
209
+ assert_equal ["A318"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
210
+ end
211
+
212
+ def test_003_user_input_matches_icao_codes
213
+ user_input = "Airbus A311"
214
+ assert_equal [], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
215
+ end
216
+
217
+ def test_003_user_input_matches_icao_codes
218
+ user_input = "Airbus A321"
219
+ assert_equal ["A321"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
220
+ end
221
+
222
+ def test_003_user_input_matches_icao_codes
223
+ user_input = "Airbus A322"
224
+ assert_equal [], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
225
+ end
226
+
227
+ def test_003_user_input_matches_icao_codes
228
+ user_input = "Airbus A350"
229
+ assert_equal [], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
230
+ end
231
+
232
+ def test_003_user_input_matches_icao_codes
233
+ user_input = "Canadair CL601"
234
+ assert_equal ["CL60"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
235
+ end
236
+
237
+ def test_003_user_input_matches_icao_codes
238
+ user_input = "Canadair CL215"
239
+ assert_equal ["CL2P"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
240
+ end
241
+
242
+ def test_003_user_input_matches_icao_codes
243
+ user_input = "Canadair CL215 turbine"
244
+ assert_equal ["CL2T"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
245
+ end
246
+
247
+ def test_003_user_input_matches_icao_codes
248
+ user_input = "Canadair CL44O"
249
+ assert_equal ["CL4G"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
250
+ end
251
+
252
+ def test_003_user_input_matches_icao_codes
253
+ user_input = "Canadair CRJ440"
254
+ assert_equal ["CRJ2"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
255
+ end
256
+
257
+ def test_003_user_input_matches_icao_codes
258
+ user_input = "Canadair CRJ111"
259
+ assert_equal ["CRJ1"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
260
+ end
261
+
262
+ def test_003_user_input_matches_icao_codes
263
+ user_input = "Embraer ERJ130"
264
+ assert_equal ["E135"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
265
+ end
266
+
267
+ def test_003_user_input_matches_icao_codes
268
+ user_input = "Embraer ERJ145XR"
269
+ assert_equal ["E45X"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
270
+ end
271
+
272
+ def test_003_user_input_matches_icao_codes
273
+ user_input = "Embraer EMB110"
274
+ assert_equal ["E110"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
275
+ end
276
+
277
+ def test_003_user_input_matches_icao_codes
278
+ user_input = "Embraer Bandeirante"
279
+ assert_equal ["E110"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
280
+ end
281
+
282
+ def test_003_user_input_matches_icao_codes
283
+ user_input = "Embraer EMB120"
284
+ assert_equal ["E120"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
285
+ end
286
+
287
+ def test_003_user_input_matches_icao_codes
288
+ user_input = "Embraer Brasilia"
289
+ assert_equal ["E120"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
290
+ end
291
+
292
+ def test_003_user_input_matches_icao_codes
293
+ user_input = "Embraer EMB121"
294
+ assert_equal ["E121"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
295
+ end
296
+
297
+ def test_003_user_input_matches_icao_codes
298
+ user_input = "Embraer Xingu"
299
+ assert_equal ["E121"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
300
+ end
301
+
302
+ def test_003_user_input_matches_icao_codes
303
+ user_input = "Embraer EMB201"
304
+ assert_equal ["IPAN"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
305
+ end
306
+
307
+ def test_003_user_input_matches_icao_codes
308
+ user_input = "Embraer Ipanema"
309
+ assert_equal ["IPAN"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
310
+ end
311
+
312
+ def test_003_user_input_matches_icao_codes
313
+ user_input = "McDonnell Douglas DC3"
314
+ assert_equal ["DC3", "DC3S"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
315
+ end
316
+
317
+ def test_003_user_input_matches_icao_codes
318
+ user_input = "McDonnell Douglas DC3S"
319
+ assert_equal ["DC3S"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
320
+ end
321
+
322
+ def test_003_user_input_matches_icao_codes
323
+ user_input = "McDonnell Douglas DC8-50"
324
+ assert_equal ["DC85"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
325
+ end
326
+
327
+ def test_003_user_input_matches_icao_codes
328
+ user_input = "McDonnell Douglas DC8-40"
329
+ assert_equal ["DC85", "DC86", "DC87", "DC8Q"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
330
+ end
331
+
332
+ def test_003_user_input_matches_icao_codes
333
+ user_input = "McDonnell Douglas DC8 Stage 3"
334
+ assert_equal ["DC8Q"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
335
+ end
336
+
337
+ def test_003_user_input_matches_icao_codes
338
+ user_input = "McDonnell Douglas DC9-10"
339
+ assert_equal ["DC91"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
340
+ end
341
+
342
+ def test_003_user_input_matches_icao_codes
343
+ user_input = "McDonnell Douglas DC9-60"
344
+ assert_equal ["DC91", "DC92", "DC93", "DC94", "DC95", "DC9Q"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
345
+ end
346
+
347
+ def test_003_user_input_matches_icao_codes
348
+ user_input = "McDonnell Douglas DC9 Stage 3"
349
+ assert_equal ["DC9Q"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
350
+ end
351
+
352
+ def test_003_user_input_matches_icao_codes
353
+ user_input = "McDonnell Douglas DC10-10"
354
+ assert_equal ["DC10"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
355
+ end
356
+
357
+ def test_003_user_input_matches_icao_codes
358
+ user_input = "McDonnell Douglas DC4"
359
+ assert_equal ["DC4"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
360
+ end
361
+
362
+ def test_003_user_input_matches_icao_codes
363
+ user_input = "McDonnell Douglas DC5"
364
+ assert_equal [], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
365
+ end
366
+
367
+ def test_003_user_input_matches_icao_codes
368
+ user_input = "McDonnell Douglas MD81"
369
+ assert_equal ["MD81"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
370
+ end
371
+
372
+ def test_003_user_input_matches_icao_codes
373
+ user_input = "McDonnell Douglas MD84"
374
+ assert_equal ["MD81", "MD82", "MD83", "MD87", "MD88"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
375
+ end
376
+
377
+ def test_003_user_input_matches_icao_codes
378
+ user_input = "McDonnell Douglas MD11"
379
+ assert_equal ["MD11"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
380
+ end
381
+
382
+ def test_003_user_input_matches_icao_codes
383
+ user_input = "McDonnell Douglas MD90"
384
+ assert_equal ["MD90"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
385
+ end
386
+
387
+ def test_003_user_input_matches_icao_codes
388
+ user_input = "McDonnell Douglas C133"
389
+ assert_equal ["C133"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
390
+ end
391
+
392
+ def test_003_user_input_matches_icao_codes
393
+ user_input = "McDonnell Douglas Cargomaster"
394
+ assert_equal ["C133"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
395
+ end
396
+
397
+ def test_003_user_input_matches_icao_codes
398
+ user_input = "de Havilland DHC8-100"
399
+ assert_equal ["DH8A"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
400
+ end
401
+
402
+ def test_003_user_input_matches_icao_codes
403
+ user_input = "de Havilland DHC8-500"
404
+ assert_equal ["DH8A", "DH8B", "DH8C", "DH8D"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
405
+ end
406
+
407
+ def test_003_user_input_matches_icao_codes
408
+ user_input = "de Havilland DHC1"
409
+ assert_equal ["DHC1"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
410
+ end
411
+
412
+ def test_003_user_input_matches_icao_codes
413
+ user_input = "de Havilland Chipmunk"
414
+ assert_equal ["DHC1"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
415
+ end
416
+
417
+ def test_003_user_input_matches_icao_codes
418
+ user_input = "de Havilland DHC2 mk1"
419
+ assert_equal ["DHC2"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
420
+ end
421
+
422
+ def test_003_user_input_matches_icao_codes
423
+ user_input = "de Havilland DHC2 mk3"
424
+ assert_equal ["DH2T"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
425
+ end
426
+
427
+ def test_003_user_input_matches_icao_codes
428
+ user_input = "de Havilland Beaver"
429
+ assert_equal ["DHC2"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
430
+ end
431
+
432
+ def test_003_user_input_matches_icao_codes
433
+ user_input = "de Havilland Turbo Beaver"
434
+ assert_equal ["DH2T"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
435
+ end
436
+
437
+ def test_003_user_input_matches_icao_codes
438
+ user_input = "de Havilland DHC2"
439
+ assert_equal ["DHC2", "DH2T"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
440
+ end
441
+
442
+ def test_003_user_input_matches_icao_codes
443
+ user_input = "de Havilland DHC3"
444
+ assert_equal ["DHC3", "DH3T"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
445
+ end
446
+
447
+ def test_003_user_input_matches_icao_codes
448
+ user_input = "de Havilland Otter"
449
+ assert_equal ["DHC3"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
450
+ end
451
+
452
+ def test_003_user_input_matches_icao_codes
453
+ user_input = "de Havilland Turbo Otter"
454
+ assert_equal ["DH3T"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
455
+ end
456
+
457
+ def test_003_user_input_matches_icao_codes
458
+ user_input = "de Havilland DHC4"
459
+ assert_equal ["DHC4"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
460
+ end
461
+
462
+ def test_003_user_input_matches_icao_codes
463
+ user_input = "de Havilland Caribou"
464
+ assert_equal ["DHC4"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
465
+ end
466
+
467
+ def test_003_user_input_matches_icao_codes
468
+ user_input = "de Havilland DHC5"
469
+ assert_equal ["DHC5"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
470
+ end
471
+
472
+ def test_003_user_input_matches_icao_codes
473
+ user_input = "de Havilland Buffalo"
474
+ assert_equal ["DHC5"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
475
+ end
476
+
477
+ def test_003_user_input_matches_icao_codes
478
+ user_input = "de Havilland DHC6"
479
+ assert_equal ["DHC6"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
480
+ end
481
+
482
+ def test_003_user_input_matches_icao_codes
483
+ user_input = "de Havilland Twin"
484
+ assert_equal ["DHC6"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
485
+ end
486
+
487
+ def test_003_user_input_matches_icao_codes
488
+ user_input = "de Havilland DHC7"
489
+ assert_equal ["DHC7"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
490
+ end
491
+
492
+ def test_003_user_input_matches_icao_codes
493
+ user_input = "de Havilland Dash 7"
494
+ assert_equal ["DHC7"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
495
+ end
496
+
497
+ def test_003_user_input_matches_icao_codes
498
+ user_input = "aerospatiale atr42"
499
+ assert_equal ["AT43", "AT44", "AT45"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
500
+ end
501
+
502
+ def test_003_user_input_matches_icao_codes
503
+ user_input = "aerospatiale atr72"
504
+ assert_equal ["AT72"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
505
+ end
506
+
507
+ def test_003_user_input_matches_icao_codes
508
+ user_input = "bae bae 146 100"
509
+ assert_equal ["B461"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
510
+ end
511
+
512
+ def test_003_user_input_matches_icao_codes
513
+ user_input = "bae bae146-400"
514
+ assert_equal ["B461", "B462", "B463"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
515
+ end
516
+
517
+ def test_003_user_input_matches_icao_codes
518
+ user_input = "bae jetstream 32"
519
+ assert_equal ["JS32"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
520
+ end
521
+
522
+ def test_003_user_input_matches_icao_codes
523
+ user_input = "bae jetstream super 31"
524
+ assert_equal ["JS32"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
525
+ end
526
+
527
+ def test_003_user_input_matches_icao_codes
528
+ user_input = "bae jetstream 31"
529
+ assert_equal ["JS31"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
530
+ end
531
+
532
+ def test_003_user_input_matches_icao_codes
533
+ user_input = "bae jetstream 41"
534
+ assert_equal ["JS41"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
535
+ end
536
+
537
+ def test_003_user_input_matches_icao_codes
538
+ user_input = "bae atp"
539
+ assert_equal ["atp"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
540
+ end
541
+
542
+ def test_003_user_input_matches_icao_codes
543
+ user_input = "bae bac one-eleven"
544
+ assert_equal ["BA11"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
545
+ end
546
+
547
+ def test_003_user_input_matches_icao_codes
548
+ user_input = "bae bac111"
549
+ assert_equal ["BA11"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
550
+ end
551
+
552
+ def test_003_user_input_matches_icao_codes
553
+ user_input = "bae bae125-1000"
554
+ assert_equal ["H25C"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
555
+ end
556
+
557
+ def test_003_user_input_matches_icao_codes
558
+ user_input = "bae bae125-70"
559
+ assert_equal ["H25B"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
560
+ end
561
+
562
+ def test_003_user_input_matches_icao_codes
563
+ user_input = "bae bae125-75"
564
+ assert_equal ["H25B"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
565
+ end
566
+
567
+ def test_003_user_input_matches_icao_codes
568
+ user_input = "bae bae125-80"
569
+ assert_equal ["H25B"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
570
+ end
571
+
572
+ def test_003_user_input_matches_icao_codes
573
+ user_input = "bae bae125-85"
574
+ assert_equal ["H25B"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
575
+ end
576
+
577
+ def test_003_user_input_matches_icao_codes
578
+ user_input = "bae bae125-90"
579
+ assert_equal ["H25B"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
580
+ end
581
+
582
+ def test_003_user_input_matches_icao_codes
583
+ user_input = "bae bae125-95"
584
+ assert_equal [], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
585
+ end
586
+
587
+ def test_003_user_input_matches_icao_codes
588
+ user_input = "bae bae125"
589
+ assert_equal [], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
590
+ end
591
+
592
+ def test_003_user_input_matches_icao_codes
593
+ user_input = "fokker 50"
594
+ assert_equal ["F50"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
595
+ end
596
+
597
+ def test_003_user_input_matches_icao_codes
598
+ user_input = "fokker 61"
599
+ assert_equal ["F60"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
600
+ end
601
+
602
+ def test_003_user_input_matches_icao_codes
603
+ user_input = "fokker 72"
604
+ assert_equal ["F70"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
605
+ end
606
+
607
+ def test_003_user_input_matches_icao_codes
608
+ user_input = "fokker 103"
609
+ assert_equal ["F100"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
610
+ end
611
+
612
+ def test_003_user_input_matches_icao_codes
613
+ user_input = "fokker 80"
614
+ assert_equal [], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
615
+ end
616
+
617
+ def test_003_user_input_matches_icao_codes
618
+ user_input = "fokker F27"
619
+ assert_equal ["F27"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
620
+ end
621
+
622
+ def test_003_user_input_matches_icao_codes
623
+ user_input = "fokker Friendship"
624
+ assert_equal ["F27"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
625
+ end
626
+
627
+ def test_003_user_input_matches_icao_codes
628
+ user_input = "fokker F28"
629
+ assert_equal ["F28"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
630
+ end
631
+
632
+ def test_003_user_input_matches_icao_codes
633
+ user_input = "fokker Fellowship"
634
+ assert_equal ["F28"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
635
+ end
636
+
637
+ def test_003_user_input_matches_icao_codes
638
+ user_input = "fokker super"
639
+ assert_equal ["SUNV"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
640
+ end
641
+
642
+ def test_003_user_input_matches_icao_codes
643
+ user_input = "saab 2000"
644
+ assert_equal ["SB20"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
645
+ end
646
+
647
+ def test_003_user_input_matches_icao_codes
648
+ user_input = "saab 340"
649
+ assert_equal ["SF34"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
650
+ end
651
+
652
+ def test_003_user_input_matches_icao_codes
653
+ user_input = "saab 91"
654
+ assert_equal ["SB91"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
655
+ end
656
+
657
+ def test_003_user_input_matches_icao_codes
658
+ user_input = "saab safir"
659
+ assert_equal ["SB91"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
660
+ end
661
+
662
+ def test_003_user_input_matches_icao_codes
663
+ user_input = "hawker beechcraft 1900"
664
+ assert_equal ["B190"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
665
+ end
666
+
667
+ def test_003_user_input_matches_icao_codes
668
+ user_input = "cessna 401"
669
+ assert_equal ["C402"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
670
+ end
671
+
672
+ def test_003_user_input_matches_icao_codes
673
+ user_input = "cessna 402"
674
+ assert_equal ["C402"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
675
+ end
676
+
677
+ def test_003_user_input_matches_icao_codes
678
+ user_input = "cessna 208"
679
+ assert_equal ["C208"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
680
+ end
681
+
682
+ def test_003_user_input_matches_icao_codes
683
+ user_input = "cessna caravan"
684
+ assert_equal ["C208"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
685
+ end
686
+
687
+ def test_003_user_input_matches_icao_codes
688
+ user_input = "cessna cargomaster"
689
+ assert_equal ["C208"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
690
+ end
691
+
692
+ def test_003_user_input_matches_icao_codes
693
+ user_input = "cessna grand caravan"
694
+ assert_equal ["C208"], Aircraft.loose_tight_dictionary.find_all(user_input).map(&:icao_code)
695
+ end
696
+
697
+
698
+
699
+ # def test_001_flight_segments_match_icao_codes
700
+ # flight_segment_bts_aircraft_type_description = 'BOEING 747-100' # aka type 816
701
+ # assert_equal %w{ B741 B742 B743 B744 B74D B74R B74S }, Aircraft.loose_tight_dictionary(flight_segment_bts_aircraft_type_description).map(&:icao_code)
702
+ # end
703
+ #
704
+ # def test_003_user_input_matches_flight_segments
705
+ # user_input = '747'
706
+ # aircraft_suggested_by_user_input = Aircraft.loose_tight_dictionary(user_input)
707
+ #
708
+ # # this is why the following query should work...
709
+ # # FlightSegment.cohort(:aircraft => [ B731, B732 ])
710
+ # # FlightSegment => FuzzyAircraftMatch <= Aircraft
711
+ # # select * from flight_segments
712
+ # # inner join
713
+ # # fuzzy_aircraft_matches on
714
+ # # flight_segments.aircraft_description = fuzzy_aircraft_matches.bbb # FlightSegment.has_many :aircraft [...] :foreign_key => :bbb
715
+ # # where
716
+ # # fuzzy_aircraft_matches.aaa in ('B731', 'B732') # Aircraft.has_many :aircraft [...] :foreign_key => :aaa
717
+ #
718
+ # assert_equal [...flight segments...], FlightSegment.cohort(:aircraft => aircraft_suggested_by_user_input)
719
+ # end
720
+ #
721
+ # def test_004_user_input_matches_fuel_use_equations
722
+ # user_input = '747'
723
+ # aircraft_suggested_by_user_input = Aircraft.loose_tight_dictionary(user_input)
724
+ #
725
+ # # see above for why this would work
726
+ # # ...
727
+ # # fuel_use_equations.aircraft_description = fuzzy_aircraft_matches.bbb # FuelUseEquation.has_many :aircraft [...] :foreign_key => :bbb
728
+ # # ...
729
+ #
730
+ # assert_equal [...flight segments...], FuelUseEquation.cohort(:aircraft => aircraft_suggested_by_user_input)
731
+ # end
732
+ end