flight 0.1.5 → 0.1.6
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.
@@ -184,7 +184,7 @@ Feature: Flight Committee Calculations
|
|
184
184
|
| code | seats |
|
185
185
|
| BP-FM1 | 125.0 |
|
186
186
|
| BP-BA1 | 120.0 |
|
187
|
-
| BP-
|
187
|
+
| BP-XX1s | 130.0 |
|
188
188
|
|
189
189
|
Scenario Outline: Seats committee from aircraft missing seats
|
190
190
|
Given a flight emitter
|
@@ -265,10 +265,10 @@ Feature: Flight Committee Calculations
|
|
265
265
|
And the conclusion of the committee should have a record with "m1" equal to "4"
|
266
266
|
And the conclusion of the committee should have a record with "endpoint_fuel" equal to "0"
|
267
267
|
Examples:
|
268
|
-
| code
|
269
|
-
| BP-
|
270
|
-
| BP-XX3
|
271
|
-
| BP-XX4
|
268
|
+
| code |
|
269
|
+
| BP-XX1f |
|
270
|
+
| BP-XX3 |
|
271
|
+
| BP-XX4 |
|
272
272
|
|
273
273
|
Scenario: Fuel use coefficients committee from aircraft class
|
274
274
|
Given a flight emitter
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module BrighterPlanet
|
2
|
+
module Flight
|
3
|
+
module CarbonModel
|
4
|
+
class FuelUseEquation < Struct.new(:m3, :m2, :m1, :endpoint_fuel)
|
5
|
+
def empty?
|
6
|
+
values.all?(&:nil?) or values.all?(&:zero?)
|
7
|
+
end
|
8
|
+
|
9
|
+
def values
|
10
|
+
[m3, m2, m1, endpoint_fuel]
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_xml(options = {})
|
14
|
+
options[:indent] ||= 2
|
15
|
+
xml = options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
|
16
|
+
xml.instruct! unless options[:skip_instruct]
|
17
|
+
xml.fuel_use_equation do |estimate_block|
|
18
|
+
estimate_block.endpoint_fuel endpoint_fuel, :type => 'float'
|
19
|
+
estimate_block.m1 m1, :type => 'float'
|
20
|
+
estimate_block.m2 m2, :type => 'float'
|
21
|
+
estimate_block.m3 m3, :type => 'float'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
data/lib/flight/carbon_model.rb
CHANGED
@@ -7,12 +7,13 @@ require 'timeframe'
|
|
7
7
|
require 'date'
|
8
8
|
require 'weighted_average'
|
9
9
|
require 'builder'
|
10
|
+
require 'flight/carbon_model/fuel_use_equation'
|
10
11
|
|
11
12
|
## Flight carbon model
|
12
13
|
# This model is used by [Brighter Planet](http://brighterplanet.com)'s carbon emission [web service](http://carbon.brighterplanet.com) to estimate the **greenhouse gas emissions of passenger air travel**.
|
13
14
|
#
|
14
15
|
##### Timeframe and date
|
15
|
-
# The model estimates the emissions that occur during a particular `timeframe`. To do this it needs to know the `date` on which the flight occurred. For example, if the `timeframe` is January 2010, a flight that
|
16
|
+
# The model estimates the emissions that occur during a particular `timeframe`. To do this it needs to know the `date` on which the flight occurred. For example, if the `timeframe` is January 2010, a flight that occurred on January 5, 2010 will have emissions but a flight that occurred on February 1, 2010 will not.
|
16
17
|
#
|
17
18
|
##### Calculations
|
18
19
|
# The final estimate is the result of the **calculations** detailed below. These calculations are performed in reverse order, starting with the last calculation listed and finishing with the `emission` calculation. Each calculation is named according to the value it returns.
|
@@ -24,21 +25,20 @@ require 'builder'
|
|
24
25
|
# Each method lists any established calculation standards with which it **complies**. When compliance with a standard is requested, all methods that do not comply with that standard are ignored. This means that any values a particular method requires will have been calculated using a compliant method, because those are the only methods available. If any value did not have a compliant method in its calculation then it would be undefined, and the current method would have been ignored.
|
25
26
|
#
|
26
27
|
##### Collaboration
|
27
|
-
# Contributions to this carbon model are actively encouraged and warmly welcomed. This library includes a comprehensive test suite to ensure that your changes do not cause regressions. All changes
|
28
|
+
# Contributions to this carbon model are actively encouraged and warmly welcomed. This library includes a comprehensive test suite to ensure that your changes do not cause regressions. All changes should include test coverage for new functionality. Please see [sniff](http://github.com/brighterplanet/sniff#readme), our emitter testing framework, for more information.
|
28
29
|
module BrighterPlanet
|
29
30
|
module Flight
|
30
31
|
module CarbonModel
|
31
32
|
def self.included(base)
|
32
|
-
base.extend FastTimestamp
|
33
33
|
base.decide :emission, :with => :characteristics do
|
34
34
|
### Emission calculation
|
35
35
|
# Returns the `emission` estimate in *kg CO<sub>2</sub>e*.
|
36
|
-
# This is the passenger's share of the total flight emissions that
|
36
|
+
# This is the passenger's share of the total flight emissions that occurred during the `timeframe`.
|
37
37
|
committee :emission do
|
38
38
|
#### Emission from fuel, emission factor, freight share, passengers, multipliers, and date
|
39
39
|
# **Complies:** GHG Protocol, ISO-14064-1, Climate Registry Protocol
|
40
40
|
#
|
41
|
-
# - Checks whether the flight
|
41
|
+
# - Checks whether the flight occurred during the `timeframe`
|
42
42
|
# - Multiplies `fuel use` (*kg fuel*) by an `emission factor` (*kg CO<sub>2</sub>e / kg fuel*) and an `aviation multiplier` to give total flight emissions in *kg CO<sub>2</sub>e*
|
43
43
|
# - Multiplies by (1 - `freight share`) to take out emissions attributed to freight cargo and mail, leaving emissions attributed to passengers and their baggage
|
44
44
|
# - Divides by the number of `passengers` and multiplies by a `seat class multiplier` to give `emission` for the passenger
|
@@ -281,7 +281,7 @@ module BrighterPlanet
|
|
281
281
|
bts_code = flight_segment.aircraft_bts_code.to_s
|
282
282
|
aircraft = relevant_aircraft[bts_code]
|
283
283
|
aircraft_coefficient = aircraft.send(name)
|
284
|
-
if aircraft_coefficient.nil?
|
284
|
+
if aircraft_coefficient.nil?
|
285
285
|
aircraft_coefficient = aircraft.aircraft_class.send(name)
|
286
286
|
end
|
287
287
|
coefficient + (aircraft_coefficient * flight_segment.passengers)
|
@@ -574,57 +574,21 @@ module BrighterPlanet
|
|
574
574
|
end
|
575
575
|
|
576
576
|
### Date calculation
|
577
|
-
# Returns the `date` on which the flight
|
577
|
+
# Returns the `date` on which the flight occurred.
|
578
578
|
committee :date do
|
579
579
|
#### Date from client input
|
580
580
|
# **Complies:** All
|
581
581
|
#
|
582
|
-
# Uses the client-input
|
582
|
+
# Uses the client-input `date`.
|
583
583
|
|
584
584
|
#### Date from timeframe
|
585
585
|
# **Complies:** GHG Protocol, ISO-14064-1, Climate Registry Protocol
|
586
586
|
#
|
587
|
-
# Assumes the flight
|
587
|
+
# Assumes the flight occurred on the first day of the `timeframe`.
|
588
588
|
quorum 'from timeframe', :complies => [:ghg_protocol, :iso, :tcr] do |characteristics, timeframe|
|
589
589
|
timeframe.from
|
590
590
|
end
|
591
591
|
end
|
592
|
-
|
593
|
-
### Timeframe calculation
|
594
|
-
# Returns the `timeframe`.
|
595
|
-
# This is the period over which to calculate emissions.
|
596
|
-
|
597
|
-
#### Timeframe from client input
|
598
|
-
# **Complies:** All
|
599
|
-
#
|
600
|
-
# Uses the client-input value for `timeframe`.
|
601
|
-
|
602
|
-
#### Default timeframe
|
603
|
-
# **Complies:** All
|
604
|
-
#
|
605
|
-
# Uses the current calendar year.
|
606
|
-
end
|
607
|
-
end
|
608
|
-
|
609
|
-
class FuelUseEquation < Struct.new(:m3, :m2, :m1, :endpoint_fuel)
|
610
|
-
def empty?
|
611
|
-
values.all?(&:nil?) or values.all?(&:zero?)
|
612
|
-
end
|
613
|
-
|
614
|
-
def values
|
615
|
-
[m3, m2, m1, endpoint_fuel]
|
616
|
-
end
|
617
|
-
|
618
|
-
def to_xml(options = {})
|
619
|
-
options[:indent] ||= 2
|
620
|
-
xml = options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
|
621
|
-
xml.instruct! unless options[:skip_instruct]
|
622
|
-
xml.fuel_use_equation do |estimate_block|
|
623
|
-
estimate_block.endpoint_fuel endpoint_fuel, :type => 'float'
|
624
|
-
estimate_block.m1 m1, :type => 'float'
|
625
|
-
estimate_block.m2 m2, :type => 'float'
|
626
|
-
estimate_block.m3 m3, :type => 'float'
|
627
|
-
end
|
628
592
|
end
|
629
593
|
end
|
630
594
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
9
|
+
- 6
|
10
|
+
version: 0.1.6
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Andy Rossmeissl
|
@@ -18,165 +19,176 @@ autorequire:
|
|
18
19
|
bindir: bin
|
19
20
|
cert_chain: []
|
20
21
|
|
21
|
-
date: 2010-
|
22
|
+
date: 2010-12-02 00:00:00 -05:00
|
22
23
|
default_executable:
|
23
24
|
dependencies:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: activerecord
|
27
|
+
prerelease: false
|
26
28
|
requirement: &id001 !ruby/object:Gem::Requirement
|
27
29
|
none: false
|
28
30
|
requirements:
|
29
31
|
- - ~>
|
30
32
|
- !ruby/object:Gem::Version
|
33
|
+
hash: 5
|
31
34
|
segments:
|
32
35
|
- 3
|
33
36
|
- 0
|
34
37
|
- 1
|
35
38
|
version: 3.0.1
|
36
39
|
type: :development
|
37
|
-
prerelease: false
|
38
40
|
version_requirements: *id001
|
39
41
|
- !ruby/object:Gem::Dependency
|
40
42
|
name: bundler
|
43
|
+
prerelease: false
|
41
44
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
45
|
none: false
|
43
46
|
requirements:
|
44
47
|
- - ~>
|
45
48
|
- !ruby/object:Gem::Version
|
49
|
+
hash: 23
|
46
50
|
segments:
|
47
51
|
- 1
|
48
52
|
- 0
|
49
53
|
- 0
|
50
54
|
version: 1.0.0
|
51
55
|
type: :development
|
52
|
-
prerelease: false
|
53
56
|
version_requirements: *id002
|
54
57
|
- !ruby/object:Gem::Dependency
|
55
58
|
name: cucumber
|
59
|
+
prerelease: false
|
56
60
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
61
|
none: false
|
58
62
|
requirements:
|
59
63
|
- - ">="
|
60
64
|
- !ruby/object:Gem::Version
|
65
|
+
hash: 3
|
61
66
|
segments:
|
62
67
|
- 0
|
63
68
|
version: "0"
|
64
69
|
type: :development
|
65
|
-
prerelease: false
|
66
70
|
version_requirements: *id003
|
67
71
|
- !ruby/object:Gem::Dependency
|
68
72
|
name: jeweler
|
73
|
+
prerelease: false
|
69
74
|
requirement: &id004 !ruby/object:Gem::Requirement
|
70
75
|
none: false
|
71
76
|
requirements:
|
72
77
|
- - ~>
|
73
78
|
- !ruby/object:Gem::Version
|
79
|
+
hash: 7
|
74
80
|
segments:
|
75
81
|
- 1
|
76
82
|
- 4
|
77
83
|
- 0
|
78
84
|
version: 1.4.0
|
79
85
|
type: :development
|
80
|
-
prerelease: false
|
81
86
|
version_requirements: *id004
|
82
87
|
- !ruby/object:Gem::Dependency
|
83
88
|
name: rake
|
89
|
+
prerelease: false
|
84
90
|
requirement: &id005 !ruby/object:Gem::Requirement
|
85
91
|
none: false
|
86
92
|
requirements:
|
87
93
|
- - ">="
|
88
94
|
- !ruby/object:Gem::Version
|
95
|
+
hash: 3
|
89
96
|
segments:
|
90
97
|
- 0
|
91
98
|
version: "0"
|
92
99
|
type: :development
|
93
|
-
prerelease: false
|
94
100
|
version_requirements: *id005
|
95
101
|
- !ruby/object:Gem::Dependency
|
96
102
|
name: rdoc
|
103
|
+
prerelease: false
|
97
104
|
requirement: &id006 !ruby/object:Gem::Requirement
|
98
105
|
none: false
|
99
106
|
requirements:
|
100
107
|
- - ">="
|
101
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
102
110
|
segments:
|
103
111
|
- 0
|
104
112
|
version: "0"
|
105
113
|
type: :development
|
106
|
-
prerelease: false
|
107
114
|
version_requirements: *id006
|
108
115
|
- !ruby/object:Gem::Dependency
|
109
116
|
name: rspec
|
117
|
+
prerelease: false
|
110
118
|
requirement: &id007 !ruby/object:Gem::Requirement
|
111
119
|
none: false
|
112
120
|
requirements:
|
113
121
|
- - "="
|
114
122
|
- !ruby/object:Gem::Version
|
123
|
+
hash: 13
|
115
124
|
segments:
|
116
125
|
- 2
|
117
126
|
- 0
|
118
127
|
- 1
|
119
128
|
version: 2.0.1
|
120
129
|
type: :development
|
121
|
-
prerelease: false
|
122
130
|
version_requirements: *id007
|
123
131
|
- !ruby/object:Gem::Dependency
|
124
132
|
name: sniff
|
133
|
+
prerelease: false
|
125
134
|
requirement: &id008 !ruby/object:Gem::Requirement
|
126
135
|
none: false
|
127
136
|
requirements:
|
128
137
|
- - ~>
|
129
138
|
- !ruby/object:Gem::Version
|
139
|
+
hash: 19
|
130
140
|
segments:
|
131
141
|
- 0
|
132
|
-
-
|
142
|
+
- 3
|
133
143
|
- 0
|
134
|
-
version: 0.
|
144
|
+
version: 0.3.0
|
135
145
|
type: :development
|
136
|
-
prerelease: false
|
137
146
|
version_requirements: *id008
|
138
147
|
- !ruby/object:Gem::Dependency
|
139
148
|
name: emitter
|
149
|
+
prerelease: false
|
140
150
|
requirement: &id009 !ruby/object:Gem::Requirement
|
141
151
|
none: false
|
142
152
|
requirements:
|
143
153
|
- - ~>
|
144
154
|
- !ruby/object:Gem::Version
|
155
|
+
hash: 21
|
145
156
|
segments:
|
146
157
|
- 0
|
158
|
+
- 2
|
147
159
|
- 1
|
148
|
-
|
149
|
-
version: 0.1.8
|
160
|
+
version: 0.2.1
|
150
161
|
type: :runtime
|
151
|
-
prerelease: false
|
152
162
|
version_requirements: *id009
|
153
163
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
164
|
+
name: earth
|
165
|
+
prerelease: false
|
155
166
|
requirement: &id010 !ruby/object:Gem::Requirement
|
156
167
|
none: false
|
157
168
|
requirements:
|
158
|
-
- -
|
169
|
+
- - ~>
|
159
170
|
- !ruby/object:Gem::Version
|
171
|
+
hash: 17
|
160
172
|
segments:
|
161
173
|
- 0
|
162
|
-
|
174
|
+
- 3
|
175
|
+
- 1
|
176
|
+
version: 0.3.1
|
163
177
|
type: :runtime
|
164
|
-
prerelease: false
|
165
178
|
version_requirements: *id010
|
166
179
|
- !ruby/object:Gem::Dependency
|
167
|
-
name:
|
180
|
+
name: builder
|
181
|
+
prerelease: false
|
168
182
|
requirement: &id011 !ruby/object:Gem::Requirement
|
169
183
|
none: false
|
170
184
|
requirements:
|
171
|
-
- -
|
185
|
+
- - ">="
|
172
186
|
- !ruby/object:Gem::Version
|
187
|
+
hash: 3
|
173
188
|
segments:
|
174
189
|
- 0
|
175
|
-
|
176
|
-
- 7
|
177
|
-
version: 0.2.7
|
190
|
+
version: "0"
|
178
191
|
type: :runtime
|
179
|
-
prerelease: false
|
180
192
|
version_requirements: *id011
|
181
193
|
description: A software model in Ruby for the greenhouse gas emissions of a flight
|
182
194
|
email: andy@rossmeissl.net
|
@@ -193,6 +205,7 @@ files:
|
|
193
205
|
- README.rdoc
|
194
206
|
- lib/flight.rb
|
195
207
|
- lib/flight/carbon_model.rb
|
208
|
+
- lib/flight/carbon_model/fuel_use_equation.rb
|
196
209
|
- lib/flight/characterization.rb
|
197
210
|
- lib/flight/data.rb
|
198
211
|
- lib/flight/fallback.rb
|
@@ -201,8 +214,8 @@ files:
|
|
201
214
|
- lib/test_support/flight_record.rb
|
202
215
|
- README.markdown
|
203
216
|
- features/support/env.rb
|
204
|
-
- features/flight_emissions.feature
|
205
217
|
- features/flight_committees.feature
|
218
|
+
- features/flight_emissions.feature
|
206
219
|
has_rdoc: true
|
207
220
|
homepage: http://github.com/brighterplanet/flight
|
208
221
|
licenses: []
|
@@ -217,7 +230,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
217
230
|
requirements:
|
218
231
|
- - ">="
|
219
232
|
- !ruby/object:Gem::Version
|
220
|
-
hash:
|
233
|
+
hash: 3
|
221
234
|
segments:
|
222
235
|
- 0
|
223
236
|
version: "0"
|
@@ -226,6 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
226
239
|
requirements:
|
227
240
|
- - ">="
|
228
241
|
- !ruby/object:Gem::Version
|
242
|
+
hash: 3
|
229
243
|
segments:
|
230
244
|
- 0
|
231
245
|
version: "0"
|
@@ -238,6 +252,6 @@ specification_version: 3
|
|
238
252
|
summary: A carbon model
|
239
253
|
test_files:
|
240
254
|
- features/support/env.rb
|
241
|
-
- features/flight_emissions.feature
|
242
255
|
- features/flight_committees.feature
|
256
|
+
- features/flight_emissions.feature
|
243
257
|
- lib/test_support/flight_record.rb
|