flight 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []