flight 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,13 +3,13 @@ Feature: Flight Committee Calculations
3
3
 
4
4
  Scenario: Cohort committee from t100 with usable characteristics
5
5
  Given a flight emitter
6
- And a characteristic "origin_airport.iata_code" of "DTW"
6
+ And a characteristic "origin_airport.iata_code" of "AIA"
7
7
  When the "cohort" committee is calculated
8
- Then the conclusion of the committee should have a record with "count" equal to "34"
8
+ Then the conclusion of the committee should have a record with "count" equal to "1"
9
9
 
10
10
  Scenario: Cohort committee from t100 with no usable characteristics
11
11
  Given a flight emitter
12
- And a characteristic "seat_class.name" of "business"
12
+ And a characteristic "origin_airport.iata_code" of "XXX"
13
13
  When the "cohort" committee is calculated
14
14
  Then the conclusion of the committee should be nil
15
15
 
@@ -18,19 +18,16 @@ Feature: Flight Committee Calculations
18
18
  And a characteristic "timeframe" of "<timeframe>"
19
19
  When the "date" committee is calculated
20
20
  Then the committee should have used quorum "from timeframe"
21
- And the conclusion of the committee should be "<from>"
21
+ And the conclusion of the committee should be "<date>"
22
22
  Examples:
23
- | timeframe | from |
23
+ | timeframe | date |
24
24
  | 2010-07-15/2010-07-20 | 2010-07-15 |
25
25
 
26
- Scenario Outline: Date committee from nil timeframe
26
+ Scenario: Date committee from nil timeframe
27
27
  Given a flight emitter
28
- And a characteristic "timeframe" of "<timeframe>"
28
+ And a characteristic "timeframe" of ""
29
29
  When the "date" committee is calculated
30
- Then the conclusion of the committee should be "<from>"
31
- Examples:
32
- | timeframe | from |
33
- | | |
30
+ Then the conclusion of the committee should be nil
34
31
 
35
32
  Scenario Outline: Date committee from creation date
36
33
  Given a flight emitter
@@ -50,9 +47,7 @@ Feature: Flight Committee Calculations
50
47
  And the conclusion of the committee should be "<multiplier>"
51
48
  Examples:
52
49
  | seat_class | multiplier |
53
- | business | 1.69 |
54
- | economy | 0.94 |
55
- | first | 1.47 |
50
+ | economy | 1.00 |
56
51
 
57
52
  Scenario: Seat class multiplier committee from default
58
53
  Given a flight emitter
@@ -60,193 +55,275 @@ Feature: Flight Committee Calculations
60
55
  Then the committee should have used quorum "default"
61
56
  And the conclusion of the committee should be "1.0"
62
57
 
63
- Scenario Outline: Domesticity committee from airline for domestic airlines
58
+ Scenario: Trips committee
64
59
  Given a flight emitter
65
- And a characteristic "airline.name" of "<airline>"
66
- When the "domesticity" committee is calculated
67
- Then the committee should have used quorum "from airline"
68
- And the conclusion of the committee should have a record with "name" equal to "<domesticity>"
69
- Examples:
70
- | airline | domesticity |
71
- | Midwest Aviation | Domestic Data, US Carriers Only |
60
+ When the "trips" committee is calculated
61
+ Then the conclusion of the committee should be "1.941"
72
62
 
73
- Scenario Outline: Domesticity committee from airline for international airlines
63
+ Scenario Outline: Freight share committee from cohort
74
64
  Given a flight emitter
75
- And a characteristic "airline.name" of "<airline>"
76
- When the "domesticity" committee is calculated
77
- Then the conclusion of the committee should be nil
65
+ And a characteristic "origin_airport.iata_code" of "<origin>"
66
+ When the "cohort" committee is calculated
67
+ And the "freight_share" committee is calculated
68
+ Then the committee should have used quorum "from cohort"
69
+ And the conclusion of the committee should be "<freight share>"
78
70
  Examples:
79
- | airline |
80
- | Aeroflot |
81
- | United Airlines |
71
+ | origin | freight share |
72
+ | ADA | 0.0099 |
73
+ | AIA | 0.09091 |
82
74
 
83
- Scenario Outline: Domesticity committee from destination airport for domestic airports
75
+ Scenario: Freight share committee from default
84
76
  Given a flight emitter
85
- And a characteristic "destination_airport.iata_code" of "<iata_code>"
86
- When the "domesticity" committee is calculated
87
- Then the committee should have used quorum "from destination"
88
- And the conclusion of the committee should have a record with "name" equal to "<domesticity>"
89
- Examples:
90
- | iata_code | domesticity |
91
- | ALO | Domestic Data, US Carriers Only |
92
- | TXK | Domestic Data, US Carriers Only |
77
+ When the "freight_share" committee is calculated
78
+ Then the committee should have used quorum "default"
79
+ And the conclusion of the committee should be "0.06391"
93
80
 
94
- Scenario Outline: Domesticity committee from destination airport for international airports
81
+ Scenario: Fuel type committee from default
95
82
  Given a flight emitter
96
- And a characteristic "destination_airport.iata_code" of "<iata_code>"
97
- When the "domesticity" committee is calculated
98
- Then the conclusion of the committee should be nil
99
- Examples:
100
- | iata_code |
101
- | DTW |
102
- | IAD |
103
- | GRR |
83
+ When the "fuel_type" committee is calculated
84
+ Then the conclusion of the committee should have a record with "emission_factor" equal to "2.52714"
104
85
 
105
- Scenario Outline: Domesticity committee from origin airport for domestic airports
86
+ Scenario: Emission factor committee
106
87
  Given a flight emitter
107
- And a characteristic "origin_airport.iata_code" of "<iata_code>"
108
- When the "domesticity" committee is calculated
109
- Then the committee should have used quorum "from origin"
110
- And the conclusion of the committee should have a record with "name" equal to "<domesticity>"
111
- Examples:
112
- | iata_code | domesticity |
113
- | ALO | Domestic Data, US Carriers Only |
114
- | TXK | Domestic Data, US Carriers Only |
88
+ When the "fuel_type" committee is calculated
89
+ And the "emission_factor" committee is calculated
90
+ Then the conclusion of the committee should be "3.1293"
115
91
 
116
- Scenario Outline: Domesticity committee from destination for international airports
92
+ Scenario: Radiative forcing index committee
117
93
  Given a flight emitter
118
- And a characteristic "destination_airport.iata_code" of "<iata_code>"
119
- When the "domesticity" committee is calculated
120
- Then the conclusion of the committee should be nil
121
- Examples:
122
- | iata_code |
123
- | DTW |
124
- | IAD |
125
- | GRR |
94
+ When the "fuel_type" committee is calculated
95
+ And the "radiative_forcing_index" committee is calculated
96
+ Then the conclusion of the committee should be "2"
97
+
98
+ Scenario: Emplanements per trip committee from default
99
+ Given a flight emitter
100
+ When the "emplanements_per_trip" committee is calculated
101
+ Then the conclusion of the committee should be "1.67"
126
102
 
127
- Scenario Outline: Domesticity committee from airports for domestic route
103
+ Scenario Outline: Distance committee from airports
128
104
  Given a flight emitter
129
105
  And a characteristic "origin_airport.iata_code" of "<origin>"
130
106
  And a characteristic "destination_airport.iata_code" of "<destination>"
131
- When the "domesticity" committee is calculated
132
- Then the committee should have used quorum "from origin"
133
- And the conclusion of the committee should have a record with "name" equal to "<domesticity>"
107
+ When the "distance" committee is calculated
108
+ Then the committee should have used quorum "from airports"
109
+ And the conclusion of the committee should be "<distance>"
134
110
  Examples:
135
- | origin | destination | domesticity |
136
- | DTW | SFO | Domestic Data, US Carriers Only |
111
+ | origin | destination | distance |
112
+ | ADA | AIA | 100.0 |
113
+ | AIA | WEA | 1000.0 |
137
114
 
138
- Scenario Outline: Domesticity committee from airports for international route
115
+ Scenario Outline: Distance committee from distance estimate
139
116
  Given a flight emitter
140
- And a characteristic "origin_airport.iata_code" of "<origin>"
141
- And a characteristic "destination_airport.iata_code" of "<destination>"
142
- When the "domesticity" committee is calculated
143
- Then the conclusion of the committee should be nil
117
+ And a characteristic "distance_estimate" of "<distance_estimate>"
118
+ When the "distance" committee is calculated
119
+ Then the committee should have used quorum "from distance estimate"
120
+ And the conclusion of the committee should be "<distance>"
144
121
  Examples:
145
- | origin | destination |
146
- | DTW | CDG |
122
+ | distance_estimate | distance |
123
+ | 185.2 | 100.0 |
147
124
 
148
- Scenario: Trips committee
125
+ Scenario Outline: Distance committee from distance class
149
126
  Given a flight emitter
150
- When the "trips" committee is calculated
151
- Then the conclusion of the committee should be "1.941"
127
+ And a characteristic "distance_class.name" of "<distance_class>"
128
+ When the "distance" committee is calculated
129
+ Then the committee should have used quorum "from distance class"
130
+ And the conclusion of the committee should be "<distance>"
131
+ Examples:
132
+ | distance_class | distance |
133
+ | petite | 100.0 |
152
134
 
153
- Scenario: Freight share committee from cohort
135
+ Scenario Outline: Distance committee from cohort
154
136
  Given a flight emitter
155
- And a characteristic "origin_airport.iata_code" of "DTW"
137
+ And a characteristic "airline.iata_code" of "<airline>"
156
138
  When the "cohort" committee is calculated
157
- And the "freight_share" committee is calculated
139
+ And the "distance" committee is calculated
158
140
  Then the committee should have used quorum "from cohort"
159
- And the conclusion of the committee should be "0.11876"
141
+ And the conclusion of the committee should be "<distance>"
142
+ Examples:
143
+ | airline | distance |
144
+ | DA | 100.0 |
145
+ | IA | 1000.0 |
160
146
 
161
- Scenario: Fuel type committee from default
147
+ Scenario: Distance committee from default
162
148
  Given a flight emitter
163
- When the "fuel_type" committee is calculated
164
- Then the conclusion of the committee should have a record with "emission_factor" equal to "2.527139"
149
+ When the "distance" committee is calculated
150
+ Then the committee should have used quorum "default"
151
+ And the conclusion of the committee should be "1121.73083"
165
152
 
166
- Scenario Outline: Emission factor committee
153
+ Scenario Outline: Adjusted distance committee
167
154
  Given a flight emitter
168
- And pending - no fuel type records yet
155
+ And a characteristic "distance_estimate" of "<distance_estimate>"
156
+ When the "distance" committee is calculated
157
+ And the "emplanements_per_trip" committee is calculated
158
+ And the "adjusted_distance" committee is calculated
159
+ Then the conclusion of the committee should be "<distance>"
160
+ Examples:
161
+ | distance_estimate | distance |
162
+ | 0 | 0 |
163
+ | 100 | 67.09227 |
169
164
 
170
- Scenario Outline: Radiative forcing index committee
165
+ Scenario Outline: Load factor committee from cohort
171
166
  Given a flight emitter
172
- And pending - no fuel type records yet
167
+ And a characteristic "origin_airport.iata_code" of "<origin>"
168
+ When the "cohort" committee is calculated
169
+ And the "load_factor" committee is calculated
170
+ Then the committee should have used quorum "from cohort"
171
+ And the conclusion of the committee should be "<load_factor>"
172
+ Examples:
173
+ | origin | load_factor |
174
+ | ADA | 0.8 |
173
175
 
174
- Scenario Outline: Radiative forcing index committee
176
+ Scenario: Load factor committee from default
175
177
  Given a flight emitter
176
- And pending - no fuel type records yet
178
+ When the "load_factor" committee is calculated
179
+ Then the committee should have used quorum "default"
180
+ And the conclusion of the committee should be "0.86667"
177
181
 
178
- Scenario: Emplanements per trip committee from default
182
+ Scenario Outline: Seats committee from aircraft
179
183
  Given a flight emitter
180
- When the "emplanements_per_trip" committee is calculated
181
- Then the conclusion of the committee should be "1.67"
184
+ And a characteristic "aircraft.icao_code" of "<code>"
185
+ When the "seats" committee is calculated
186
+ Then the committee should have used quorum "from aircraft"
187
+ And the conclusion of the committee should be "<seats>"
188
+ Examples:
189
+ | code | seats |
190
+ | FM1 | 125 |
191
+ | BA1 | 125 |
192
+ | BA2 | 100 |
182
193
 
183
- Scenario: Distance committee from default
194
+ Scenario: Seats committee from seats estimate
184
195
  Given a flight emitter
185
- When the "distance" committee is calculated
186
- Then the committee should have used quorum "default"
187
- And the conclusion of the committee should be "1121.73083"
196
+ And a characteristic "seats_estimate" of "100"
197
+ When the "seats" committee is calculated
198
+ Then the committee should have used quorum "from seats estimate"
199
+ And the conclusion of the committee should be "100"
188
200
 
189
- Scenario Outline: Distance committee from cohort
201
+ Scenario Outline: Seats committee from cohort
190
202
  Given a flight emitter
191
203
  And a characteristic "origin_airport.iata_code" of "<origin>"
192
- And a characteristic "destination_airport.iata_code" of "<destination>"
193
- And a characteristic "aircraft.icao_code" of "<craft>"
194
- And a characteristic "airline.iata_code" of "<airline>"
195
- And a characteristic "propulsion.name" of "<propulsion>"
196
- And a characteristic "domesticity.name" of "<domesticity>"
197
204
  When the "cohort" committee is calculated
198
- And the "distance" committee is calculated
205
+ And the "seats" committee is calculated
199
206
  Then the committee should have used quorum "from cohort"
200
- And the conclusion of the committee should be "<distance>"
207
+ And the conclusion of the committee should be "<seats>"
201
208
  Examples:
202
- | origin | destination | craft | airline | propulsion | domesticity | distance |
203
- | DTW | | A320 | UA | | Domestic Data, US Carriers Only | 325 |
209
+ | origin | seats |
210
+ | ADA | 125 |
204
211
 
205
- Scenario Outline: Distance committee from distance class
212
+ Scenario: Seats committee from aircraft class
206
213
  Given a flight emitter
207
- And a characteristic "distance_class.name" of "<distance_class>"
208
- When the "distance" committee is calculated
209
- Then the committee should have used quorum "from distance class"
210
- And the conclusion of the committee should be "<distance>"
214
+ And a characteristic "aircraft_class.brighter_planet_aircraft_class_code" of "EX"
215
+ When the "seats" committee is calculated
216
+ Then the committee should have used quorum "from aircraft class"
217
+ And the conclusion of the committee should be "117"
218
+
219
+ Scenario: Seats committee from default
220
+ Given a flight emitter
221
+ When the "seats" committee is calculated
222
+ Then the committee should have used quorum "default"
223
+ And the conclusion of the committee should be "117"
224
+
225
+ Scenario: Passengers committee
226
+ Given a flight emitter
227
+ And a characteristic "seats" of "100"
228
+ And a characteristic "load_factor" of "0.9"
229
+ When the "passengers" committee is calculated
230
+ Then the conclusion of the committee should be "90"
231
+
232
+ Scenario Outline: Fuel use coefficients committee from aircraft
233
+ Given a flight emitter
234
+ And a characteristic "aircraft.icao_code" of "<code>"
235
+ When the "fuel_use_coefficients" committee is calculated
236
+ Then the committee should have used quorum "from aircraft"
237
+ And the conclusion of the committee should have a record with "m3" equal to "<m3>"
238
+ And the conclusion of the committee should have a record with "m2" equal to "<m2>"
239
+ And the conclusion of the committee should have a record with "m1" equal to "<m1>"
240
+ And the conclusion of the committee should have a record with "endpoint_fuel" equal to "<b>"
211
241
  Examples:
212
- | distance_class | distance |
213
- | epic | 8689.74081 |
214
- | long | 2606.92764 |
215
- | medium | 868.97408 |
216
- | short | 217.24406 |
242
+ | code | m3 | m2 | m1 | b |
243
+ | FM1 | 0 | 0 | 1 | 0 |
244
+ | BA1 | 0 | 0 | 2 | 0 |
217
245
 
218
- Scenario Outline: Distance committee from distance estimate
246
+ Scenario Outline: Fuel use coefficients committee from aircraft class
219
247
  Given a flight emitter
220
- And a characteristic "distance_estimate" of "<distance_estimate>"
221
- When the "distance" committee is calculated
222
- Then the committee should have used quorum "from distance estimate"
223
- And the conclusion of the committee should be "<distance>"
248
+ And a characteristic "aircraft_class.brighter_planet_aircraft_class_code" of "<code>"
249
+ When the "fuel_use_coefficients" committee is calculated
250
+ Then the committee should have used quorum "from aircraft class"
251
+ And the conclusion of the committee should have a record with "m3" equal to "<m3>"
252
+ And the conclusion of the committee should have a record with "m2" equal to "<m2>"
253
+ And the conclusion of the committee should have a record with "m1" equal to "<m1>"
254
+ And the conclusion of the committee should have a record with "endpoint_fuel" equal to "<b>"
224
255
  Examples:
225
- | distance_estimate | distance |
226
- | 123 | 66.41468 |
256
+ | code | m3 | m2 | m1 | b |
257
+ | EX | 0 | 0 | 2 | 0 |
227
258
 
228
- Scenario Outline: Distance committee from airports
259
+ Scenario Outline: Fuel use coefficients committee from cohort
229
260
  Given a flight emitter
230
261
  And a characteristic "origin_airport.iata_code" of "<origin>"
231
- And a characteristic "destination_airport.iata_code" of "<destination>"
232
- When the "distance" committee is calculated
233
- Then the committee should have used quorum "from airports"
234
- And the conclusion of the committee should be "<distance>"
262
+ When the "cohort" committee is calculated
263
+ And the "fuel_use_coefficients" committee is calculated
264
+ Then the committee should have used quorum "from cohort"
265
+ And the conclusion of the committee should have a record with "m3" equal to "<m3>"
266
+ And the conclusion of the committee should have a record with "m2" equal to "<m2>"
267
+ And the conclusion of the committee should have a record with "m1" equal to "<m1>"
268
+ And the conclusion of the committee should have a record with "endpoint_fuel" equal to "<b>"
235
269
  Examples:
236
- | origin | destination | distance |
237
- | DTW | SFO | 1803.65517 |
238
- | IAD | DCA | 20.32743 |
239
- | MSP | FRA | 3809.26855 |
270
+ | origin | m3 | m2 | m1 | b |
271
+ | AIA | 0 | 0 | 2 | 0 |
240
272
 
241
- Scenario Outline: Adjusted distance committee from distance
273
+ Scenario Outline: Fuel use coefficients committee from default
242
274
  Given a flight emitter
243
- And a characteristic "distance_estimate" of "<distance_estimate>"
244
- When the "distance" committee is calculated
245
- And the "emplanements_per_trip" committee is calculated
246
- And the "adjusted_distance" committee is calculated
247
- Then the conclusion of the committee should be "<distance>"
275
+ When the "fuel_use_coefficients" committee is calculated
276
+ Then the committee should have used quorum "default"
277
+ And the conclusion of the committee should have a record with "m3" equal to "<m3>"
278
+ And the conclusion of the committee should have a record with "m2" equal to "<m2>"
279
+ And the conclusion of the committee should have a record with "m1" equal to "<m1>"
280
+ And the conclusion of the committee should have a record with "endpoint_fuel" equal to "<b>"
281
+ Examples:
282
+ | m3 | m2 | m1 | b |
283
+ | 0 | 0 | 2 | 0 |
284
+
285
+ Scenario: Adjusted distance per segment committee
286
+ Given a flight emitter
287
+ And a characteristic "adjusted_distance" of "100"
288
+ And a characteristic "emplanements_per_trip" of "2"
289
+ When the "adjusted_distance_per_segment" committee is calculated
290
+ Then the conclusion of the committee should be "50"
291
+
292
+ Scenario: Fuel per segment committee
293
+ Given a flight emitter
294
+ And a characteristic "adjusted_distance_per_segment" of "100"
295
+ And a characteristic "aircraft_class.brighter_planet_aircraft_class_code" of "EX"
296
+ When the "fuel_use_coefficients" committee is calculated
297
+ And the "fuel_per_segment" committee is calculated
298
+ Then the conclusion of the committee should be "200"
299
+
300
+ Scenario: Fuel committee
301
+ Given a flight emitter
302
+ And a characteristic "fuel_per_segment" of "100"
303
+ And a characteristic "emplanements_per_trip" of "2"
304
+ And a characteristic "trips" of "2"
305
+ When the "fuel" committee is calculated
306
+ Then the conclusion of the committee should be "400"
307
+
308
+ Scenario Outline: Emission committee from fuel and passengers and coefficients
309
+ Given a flight emitter
310
+ And a characteristic "fuel" of "<fuel>"
311
+ And a characteristic "passengers" of "<passengers>"
312
+ And a characteristic "seat_class_multiplier" of "<seat_mult>"
313
+ And a characteristic "emission_factor" of "<ef>"
314
+ And a characteristic "radiative_forcing_index" of "<rfi>"
315
+ And a characteristic "freight_share" of "<freight>"
316
+ And a characteristic "date" of "<date>"
317
+ And a characteristic "timeframe" of "2010-01-01/2010-12-31"
318
+ When the "emission" committee is calculated
319
+ Then the committee should have used quorum "from fuel and passengers with coefficients"
320
+ And the conclusion of the committee should be "<emission>"
248
321
  Examples:
249
- | distance_estimate | distance |
250
- | 0 | 0 |
251
- | 1 | 0.67092 |
252
- | 1254 | 841.33709 |
322
+ | fuel | passengers | seat_mult | ef | rfi | freight | date | emission |
323
+ | 100 | 100 | 1.5 | 10 | 2 | 0.10 | 2010-07-15 | 27 |
324
+
325
+ Scenario: Emission committee from default
326
+ Given a flight emitter
327
+ When the "emission" committee is calculated
328
+ Then the committee should have used quorum "default"
329
+ And the conclusion of the committee should be ""
@@ -1,15 +1,14 @@
1
1
  Feature: Flight Emissions Calculations
2
2
  The flight model should generate correct emission calculations
3
3
 
4
- Scenario Outline: Standard Calculations for origin/destination airport, airline, and craft
4
+ Scenario Outline: Standard Calculations for origin/destination airport, airline, and aircraft
5
5
  Given a flight has "origin_airport.iata_code" of "<source>"
6
6
  And it has "destination_airport.iata_code" of "<dest>"
7
7
  And it has "airline.iata_code" of "<airline>"
8
8
  And it has "date" of "<date>"
9
- And it used "aircraft.icao_code" "<aircraft>"
9
+ And it used "aircraft.bts_aircraft_type_code" "<aircraft>"
10
10
  When emissions are calculated
11
11
  Then the emission value should be within 1 kgs of <emission>
12
12
  Examples:
13
13
  | source | dest | airline | date | aircraft | emission |
14
- | DTW | SFO | UA | 2010-06-25 | A320 | 1153 |
15
- | IAD | CDG | AF | 2010-06-25 | A320 | 2070 |
14
+ | DCA | JFK | AA | 2010-06-25 | 1 | 1153 |
@@ -33,11 +33,11 @@ module BrighterPlanet
33
33
  end
34
34
 
35
35
  committee :fuel_per_segment do # returns kg fuel
36
- quorum 'from adjusted distance and fuel use formula and emplanements and trips', :needs => [:adjusted_distance_per_segment, :fuel_use_coefficients, :endpoint_fuel] do |characteristics|
37
- characteristics[:fuel_use_coefficients][:m3].to_f * characteristics[:adjusted_distance_per_segment].to_f ** 3 +
38
- characteristics[:fuel_use_coefficients][:m2].to_f * characteristics[:adjusted_distance_per_segment].to_f ** 2 +
39
- characteristics[:fuel_use_coefficients][:m1].to_f * characteristics[:adjusted_distance_per_segment].to_f +
40
- characteristics[:endpoint_fuel].to_f
36
+ quorum 'from adjusted distance per segment and fuel use coefficients', :needs => [:adjusted_distance_per_segment, :fuel_use_coefficients] do |characteristics|
37
+ characteristics[:fuel_use_coefficients].m3.to_f * characteristics[:adjusted_distance_per_segment].to_f ** 3 +
38
+ characteristics[:fuel_use_coefficients].m2.to_f * characteristics[:adjusted_distance_per_segment].to_f ** 2 +
39
+ characteristics[:fuel_use_coefficients].m1.to_f * characteristics[:adjusted_distance_per_segment].to_f +
40
+ characteristics[:fuel_use_coefficients].endpoint_fuel.to_f
41
41
  end
42
42
  end
43
43
 
@@ -47,33 +47,58 @@ module BrighterPlanet
47
47
  end
48
48
  end
49
49
 
50
- committee :endpoint_fuel do
50
+ committee :fuel_use_coefficients do
51
51
  quorum 'from aircraft', :needs => :aircraft do |characteristics|
52
- characteristics[:aircraft].endpoint_fuel
52
+ aircraft = characteristics[:aircraft]
53
+ FuelUseEquation.new aircraft.m3, aircraft.m2, aircraft.m1, aircraft.endpoint_fuel
53
54
  end
54
55
 
55
56
  quorum 'from aircraft class', :needs => :aircraft_class do |characteristics|
56
- characteristics[:aircraft_class].endpoint_fuel
57
- end
58
-
59
- quorum 'default' do
60
- Aircraft.fallback.andand.endpoint_fuel
61
- end
62
- end
63
-
64
- committee :fuel_use_coefficients do
65
- quorum 'from aircraft', :needs => :aircraft do |characteristics|
66
- characteristics[:aircraft].attributes.symbolize_keys.slice(:m1, :m2, :m3)
57
+ aircraft_class = characteristics[:aircraft_class]
58
+ FuelUseEquation.new aircraft_class.m3, aircraft_class.m2, aircraft_class.m1, aircraft_class.endpoint_fuel
67
59
  end
68
60
 
69
- quorum 'from aircraft class', :needs => :aircraft_class do |characteristics|
70
- characteristics[:aircraft_class].attributes.symbolize_keys.slice(:m1, :m2, :m3)
61
+ quorum 'from cohort', :needs => :cohort do |characteristics|
62
+ flight_segments = characteristics[:cohort]
63
+
64
+ passengers = flight_segments.inject(0) do |passengers, flight_segment|
65
+ passengers + flight_segment.passengers
66
+ end
67
+
68
+ m3 = flight_segments.inject(0) do |m3, flight_segment|
69
+ aircraft = Aircraft.find_by_bts_aircraft_type_code flight_segment.bts_aircraft_type_code
70
+ m3 + (aircraft.m3 * flight_segment.passengers)
71
+ end
72
+
73
+ m2 = flight_segments.inject(0) do |m2, flight_segment|
74
+ aircraft = Aircraft.find_by_bts_aircraft_type_code flight_segment.bts_aircraft_type_code
75
+ m2 + (aircraft.m2 * flight_segment.passengers)
76
+ end
77
+
78
+ m1 = flight_segments.inject(0) do |m1, flight_segment|
79
+ aircraft = Aircraft.find_by_bts_aircraft_type_code flight_segment.bts_aircraft_type_code
80
+ m1 + (aircraft.m1 * flight_segment.passengers)
81
+ end
82
+
83
+ endpoint_fuel = flight_segments.inject(0) do |endpoint_fuel, flight_segment|
84
+ aircraft = Aircraft.find_by_bts_aircraft_type_code flight_segment.bts_aircraft_type_code
85
+ endpoint_fuel + (aircraft.endpoint_fuel * flight_segment.passengers)
86
+ end
87
+
88
+ if [m3, m2, m1, endpoint_fuel, passengers].any?(&:nonzero?)
89
+ m3 = m3 / passengers
90
+ m2 = m2 / passengers
91
+ m1 = m1 / passengers
92
+ endpoint_fuel = endpoint_fuel / passengers
93
+
94
+ FuelUseEquation.new m3, m2, m1, endpoint_fuel
95
+ end
71
96
  end
72
97
 
73
98
  quorum 'default' do
74
99
  fallback = Aircraft.fallback
75
100
  if fallback
76
- fallback.attributes.symbolize_keys.slice(:m1, :m2, :m3)
101
+ FuelUseEquation.new fallback.m3, fallback.m2, fallback.m1, fallback.endpoint_fuel
77
102
  end
78
103
  end
79
104
  end
@@ -205,33 +230,35 @@ module BrighterPlanet
205
230
  end
206
231
  end
207
232
 
208
- committee :domesticity do
209
- quorum 'from airports', :needs => [:origin_airport, :destination_airport] do |characteristics|
210
- if [characteristics[:origin_airport], characteristics[:destination_airport]].all?(&:united_states?)
211
- FlightDomesticity.find_by_name('domestic')
212
- elsif [characteristics[:origin_airport], characteristics[:destination_airport]].any?(&:united_states?)
213
- FlightDomesticity.find_by_name('international')
214
- end
215
- end
216
-
217
- quorum 'from origin', :needs => :origin_airport do |characteristics|
218
- if characteristics[:origin_airport].all_flights_from_here_domestic?
219
- FlightDomesticity.find_by_name('domestic')
220
- end
221
- end
222
-
223
- quorum 'from destination', :needs => :destination_airport do |characteristics|
224
- if characteristics[:destination_airport].all_flights_to_here_domestic?
225
- FlightDomesticity.find_by_name('domestic')
226
- end
227
- end
228
-
229
- quorum 'from airline', :needs => :airline do |characteristics|
230
- if characteristics[:airline].all_flights_domestic?
231
- FlightDomesticity.find_by_name('domestic')
232
- end
233
- end
234
- end
233
+ # Disabling this for now because domesticity is pretty useless
234
+ # FIXME TODO make domesticity non-us-centric and check that data's ok
235
+ # committee :domesticity do
236
+ # quorum 'from airports', :needs => [:origin_airport, :destination_airport] do |characteristics|
237
+ # if [characteristics[:origin_airport], characteristics[:destination_airport]].all?(&:united_states?)
238
+ # FlightDomesticity.find_by_name('domestic')
239
+ # elsif [characteristics[:origin_airport], characteristics[:destination_airport]].any?(&:united_states?)
240
+ # FlightDomesticity.find_by_name('international')
241
+ # end
242
+ # end
243
+ #
244
+ # quorum 'from origin', :needs => :origin_airport do |characteristics|
245
+ # if characteristics[:origin_airport].all_flights_from_here_domestic?
246
+ # FlightDomesticity.find_by_name('domestic')
247
+ # end
248
+ # end
249
+ #
250
+ # quorum 'from destination', :needs => :destination_airport do |characteristics|
251
+ # if characteristics[:destination_airport].all_flights_to_here_domestic?
252
+ # FlightDomesticity.find_by_name('domestic')
253
+ # end
254
+ # end
255
+ #
256
+ # quorum 'from airline', :needs => :airline do |characteristics|
257
+ # if characteristics[:airline].all_flights_domestic?
258
+ # FlightDomesticity.find_by_name('domestic')
259
+ # end
260
+ # end
261
+ # end
235
262
 
236
263
  committee :seat_class_multiplier do
237
264
  quorum 'from seat class', :needs => :seat_class do |characteristics|
@@ -249,16 +276,18 @@ module BrighterPlanet
249
276
  end
250
277
 
251
278
  quorum 'from timeframe' do |characteristics, timeframe|
252
- timeframe.andand.from
279
+ timeframe.present? ? timeframe.from : nil
253
280
  end
254
281
  end
255
282
 
256
283
  committee :cohort do
257
- quorum 'from t100', :appreciates => FlightSegment::INPUT_CHARACTERISTICS do |characteristics|
258
- needed_characteristics = characteristics
259
- needed_characteristics.
260
- reject! { |k,v| !FlightSegment::INPUT_CHARACTERISTICS.include?(k) }
261
- cohort = FlightSegment.big_cohort needed_characteristics
284
+ quorum 'from t100', :appreciates => [:origin_airport, :destination_airport, :aircraft, :airline] do |characteristics|
285
+ provided_characteristics = [:origin_airport, :destination_airport, :aircraft, :airline].
286
+ inject(ActiveSupport::OrderedHash.new) do |memo, characteristic_name|
287
+ memo[characteristic_name] = characteristics[characteristic_name]
288
+ memo
289
+ end
290
+ cohort = FlightSegment.strict_cohort provided_characteristics
262
291
  if cohort.any?
263
292
  cohort
264
293
  else
@@ -268,6 +297,8 @@ module BrighterPlanet
268
297
  end
269
298
  end
270
299
  end
300
+
301
+ class FuelUseEquation < Struct.new(:m3, :m2, :m1, :endpoint_fuel); end
271
302
  end
272
303
  end
273
304
  end
data/lib/flight/data.rb CHANGED
@@ -26,9 +26,7 @@ module BrighterPlanet
26
26
  time 'time_of_day'
27
27
  end
28
28
 
29
- process "pull dependencies" do
30
- run_data_miner_on_belongs_to_associations
31
- end
29
+ process :run_data_miner_on_belongs_to_associations
32
30
  end
33
31
  end
34
32
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flight
3
3
  version: !ruby/object:Gem::Version
4
- hash: 61
4
+ hash: 59
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 17
10
- version: 0.0.17
9
+ - 18
10
+ version: 0.0.18
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andy Rossmeissl
@@ -19,31 +19,30 @@ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
21
 
22
- date: 2010-08-12 00:00:00 -04:00
22
+ date: 2010-09-08 00:00:00 -05:00
23
23
  default_executable:
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
26
- type: :development
27
- prerelease: false
28
26
  name: activerecord
29
- version_requirements: &id001 !ruby/object:Gem::Requirement
27
+ prerelease: false
28
+ requirement: &id001 !ruby/object:Gem::Requirement
30
29
  none: false
31
30
  requirements:
32
31
  - - "="
33
32
  - !ruby/object:Gem::Version
34
- hash: -1848230024
33
+ hash: 299253624
35
34
  segments:
36
35
  - 3
37
36
  - 0
38
37
  - 0
39
38
  - beta4
40
39
  version: 3.0.0.beta4
41
- requirement: *id001
42
- - !ruby/object:Gem::Dependency
43
40
  type: :development
44
- prerelease: false
41
+ version_requirements: *id001
42
+ - !ruby/object:Gem::Dependency
45
43
  name: bundler
46
- version_requirements: &id002 !ruby/object:Gem::Requirement
44
+ prerelease: false
45
+ requirement: &id002 !ruby/object:Gem::Requirement
47
46
  none: false
48
47
  requirements:
49
48
  - - ">="
@@ -56,12 +55,12 @@ dependencies:
56
55
  - beta
57
56
  - 2
58
57
  version: 1.0.0.beta.2
59
- requirement: *id002
60
- - !ruby/object:Gem::Dependency
61
58
  type: :development
62
- prerelease: false
59
+ version_requirements: *id002
60
+ - !ruby/object:Gem::Dependency
63
61
  name: cucumber
64
- version_requirements: &id003 !ruby/object:Gem::Requirement
62
+ prerelease: false
63
+ requirement: &id003 !ruby/object:Gem::Requirement
65
64
  none: false
66
65
  requirements:
67
66
  - - "="
@@ -72,12 +71,12 @@ dependencies:
72
71
  - 8
73
72
  - 3
74
73
  version: 0.8.3
75
- requirement: *id003
76
- - !ruby/object:Gem::Dependency
77
74
  type: :development
78
- prerelease: false
75
+ version_requirements: *id003
76
+ - !ruby/object:Gem::Dependency
79
77
  name: jeweler
80
- version_requirements: &id004 !ruby/object:Gem::Requirement
78
+ prerelease: false
79
+ requirement: &id004 !ruby/object:Gem::Requirement
81
80
  none: false
82
81
  requirements:
83
82
  - - "="
@@ -88,12 +87,12 @@ dependencies:
88
87
  - 4
89
88
  - 0
90
89
  version: 1.4.0
91
- requirement: *id004
92
- - !ruby/object:Gem::Dependency
93
90
  type: :development
94
- prerelease: false
91
+ version_requirements: *id004
92
+ - !ruby/object:Gem::Dependency
95
93
  name: rake
96
- version_requirements: &id005 !ruby/object:Gem::Requirement
94
+ prerelease: false
95
+ requirement: &id005 !ruby/object:Gem::Requirement
97
96
  none: false
98
97
  requirements:
99
98
  - - ">="
@@ -102,12 +101,12 @@ dependencies:
102
101
  segments:
103
102
  - 0
104
103
  version: "0"
105
- requirement: *id005
106
- - !ruby/object:Gem::Dependency
107
104
  type: :development
108
- prerelease: false
105
+ version_requirements: *id005
106
+ - !ruby/object:Gem::Dependency
109
107
  name: rdoc
110
- version_requirements: &id006 !ruby/object:Gem::Requirement
108
+ prerelease: false
109
+ requirement: &id006 !ruby/object:Gem::Requirement
111
110
  none: false
112
111
  requirements:
113
112
  - - ">="
@@ -116,12 +115,12 @@ dependencies:
116
115
  segments:
117
116
  - 0
118
117
  version: "0"
119
- requirement: *id006
120
- - !ruby/object:Gem::Dependency
121
118
  type: :development
122
- prerelease: false
119
+ version_requirements: *id006
120
+ - !ruby/object:Gem::Dependency
123
121
  name: rspec
124
- version_requirements: &id007 !ruby/object:Gem::Requirement
122
+ prerelease: false
123
+ requirement: &id007 !ruby/object:Gem::Requirement
125
124
  none: false
126
125
  requirements:
127
126
  - - "="
@@ -134,39 +133,40 @@ dependencies:
134
133
  - beta
135
134
  - 17
136
135
  version: 2.0.0.beta.17
137
- requirement: *id007
138
- - !ruby/object:Gem::Dependency
139
136
  type: :development
140
- prerelease: false
137
+ version_requirements: *id007
138
+ - !ruby/object:Gem::Dependency
141
139
  name: sniff
142
- version_requirements: &id008 !ruby/object:Gem::Requirement
140
+ prerelease: false
141
+ requirement: &id008 !ruby/object:Gem::Requirement
143
142
  none: false
144
143
  requirements:
145
144
  - - "="
146
145
  - !ruby/object:Gem::Version
147
- hash: 31
146
+ hash: 11
148
147
  segments:
149
148
  - 0
150
149
  - 1
151
- - 2
152
- version: 0.1.2
153
- requirement: *id008
150
+ - 8
151
+ version: 0.1.8
152
+ type: :development
153
+ version_requirements: *id008
154
154
  - !ruby/object:Gem::Dependency
155
- type: :runtime
156
- prerelease: false
157
155
  name: emitter
158
- version_requirements: &id009 !ruby/object:Gem::Requirement
156
+ prerelease: false
157
+ requirement: &id009 !ruby/object:Gem::Requirement
159
158
  none: false
160
159
  requirements:
161
160
  - - ">="
162
161
  - !ruby/object:Gem::Version
163
- hash: 29
162
+ hash: 23
164
163
  segments:
165
164
  - 0
166
165
  - 0
167
- - 1
168
- version: 0.0.1
169
- requirement: *id009
166
+ - 4
167
+ version: 0.0.4
168
+ type: :runtime
169
+ version_requirements: *id009
170
170
  description: A software model in Ruby for the greenhouse gas emissions of a flight
171
171
  email: andy@rossmeissl.net
172
172
  executables: []