carbon 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -44,11 +44,11 @@ In order to calculate carbon emissions, we need to map the car's relevant attrib
44
44
  end
45
45
  end
46
46
 
47
- When you want to calculate emissions, simply call <tt>RentalCar#emission</tt>.
47
+ When you want to calculate emissions, simply call <tt>RentalCar#emission_estimate</tt>.
48
48
 
49
49
  > my_car = RentalCar.new([...])
50
50
  => #<RentalCar [...]>
51
- > my_emission = my_car.emission
51
+ > my_emission = my_car.emission_estimate
52
52
  => #<Carbon::EmissionEstimate [...]>
53
53
  > my_emission.to_f
54
54
  => 4919.2
@@ -75,9 +75,9 @@ Let's say <tt>RentalCar#make</tt> returns a <tt>Make</tt> object. You should def
75
75
 
76
76
  == A note on asynchronous queries
77
77
 
78
- To request an emission estimate asynchronously, simply pass an URL as the <tt>:callback</tt> option to <tt>#emission</tt>:
78
+ To request an emission estimate asynchronously, simply pass an URL as the <tt>:callback</tt> option to <tt>#emission_estimate</tt>:
79
79
 
80
- > RentalCar.new.emission :callback => http://example.com/my/callback/handler
80
+ > RentalCar.new.emission_estimate :callback => http://example.com/my/callback/handler
81
81
 
82
82
  A good way to test this is to set up a {PostBin}[http://postbin.org].
83
83
 
@@ -86,7 +86,7 @@ A good way to test this is to set up a {PostBin}[http://postbin.org].
86
86
  Since this gem connects to a web service, you need to be ready for network problems and latency. For example:
87
87
 
88
88
  begin
89
- my_emission = my_car.emission
89
+ my_emission = my_car.emission_estimate
90
90
  rescue ::SocketError, ::Timeout::Error, ::Errno::ETIMEDOUT, ::Errno::ENETUNREACH, ::Errno::ECONNRESET, ::Errno::ECONNREFUSED
91
91
  # These are general network errors raised by Net::HTTP.
92
92
  # Your internet connection might be down, or our servers might be down.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.3
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{carbon}
8
- s.version = "0.2.2"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Derek Kastner", "Seamus Abshere", "Andy Rossmeissl"]
12
- s.date = %q{2010-07-21}
12
+ s.date = %q{2010-07-22}
13
13
  s.description = %q{Carbon is a Ruby API wrapper for the Brighter Planet emission estimate web service (http://carbon.brighterplanet.com). By querying the web service, it can estimate the carbon emissions of many real-life objects, such as cars and houses, based on particular attributes that they may have.}
14
14
  s.email = %q{derek.kastner@brighterplanet.com}
15
15
  s.extra_rdoc_files = [
@@ -35,7 +35,7 @@ require 'carbon/emission_estimate'
35
35
  # * A rental car emits carbon like an "automobile", which is one of Brighter Planet's recognized emitter classes.
36
36
  # * Your implementation can provide up to three data points about a rental car: its make, its model, and its model year (but not necessarily all of them, all the time.)
37
37
  #
38
- # Once you've mixed in <tt>Carbon</tt>, you get the method <tt>emission</tt>, which you can call at any time to request an emission estimate.
38
+ # Once you've mixed in <tt>Carbon</tt>, you get the method <tt>emission_estimate</tt>, which you can call at any time to request an emission estimate.
39
39
  module Carbon
40
40
  def self.included(klass) # :nodoc:
41
41
  klass.cattr_accessor :carbon_base
@@ -73,7 +73,7 @@ module Carbon
73
73
  self.carbon_base ||= ::Carbon::Base.new self, emitter_common_name
74
74
  ::Blockenspiel.invoke block, carbon_base
75
75
  end
76
- # japanese-style preferred
76
+ # Third-person singular preferred.
77
77
  alias :emits_as :emit_as
78
78
  end
79
79
 
@@ -82,10 +82,10 @@ module Carbon
82
82
  # Note: please see the README about <b>exceptions that you should watch out for</b>.
83
83
  #
84
84
  # You can use it like a number...
85
- # > my_car.emission + 5.1
85
+ # > my_car.emission_estimate + 5.1
86
86
  # => 415.39
87
87
  # Or you can get information about the response
88
- # > my_car.emission.methodology
88
+ # > my_car.emission_estimate.methodology
89
89
  # => 'http://carbon.brighterplanet.com/automobiles.html?[...]'
90
90
  #
91
91
  # === Options:
@@ -99,5 +99,4 @@ module Carbon
99
99
  @emission_estimate.take_options options
100
100
  @emission_estimate
101
101
  end
102
- alias :emission :emission_estimate
103
102
  end
@@ -50,7 +50,7 @@ module Carbon
50
50
  # translation_table[:make] = 'epa_code'
51
51
  translation_table[characteristic] = options[:key]
52
52
  end
53
- # japanese-style preferred
53
+ # Third-person singular preferred.
54
54
  alias :provides :provide
55
55
  end
56
56
  end
@@ -6,11 +6,9 @@ module Carbon
6
6
  #
7
7
  # If you ask for a callback, on the other hand, you can't use them as numbers.
8
8
  #
9
- # So, you can just say <tt>my_car.emission</tt> and you'll get something like <tt>4308.29</tt>.
9
+ # So, you can just say <tt>my_car.emission_estimate.to_s</tt> and you'll get something like <tt>"4308.29"</tt>.
10
10
  #
11
- # At the same time, they contain all the data you get back from the emission estimate web service. For example, you could say <tt>puts my_donut_factor.emission.oven_count</tt> (see the tests) and you'd get back the oven count used in the calculation, if any.
12
- #
13
- # Note: <b>you need to take care of storing emission estimates to local variables!</b> The gem doesn't cache these for you. Every time you call <tt>emission</tt> it will send another query to the server!
11
+ # At the same time, they contain all the data you get back from the emission estimate web service. For example, you could say <tt>puts my_donut_factor.emission_estimate.oven_count</tt> (see the tests) and you'd get back the oven count used in the calculation, if any.
14
12
  class EmissionEstimate
15
13
  def initialize(emitter)
16
14
  @emitter = emitter
@@ -37,7 +35,7 @@ module Carbon
37
35
  # This is useful for characteristics that are unique to an emitter.
38
36
  #
39
37
  # For example:
40
- # > my_car.emission.model
38
+ # > my_car.emission_estimate.model
41
39
  # => 'Ford Taurus'
42
40
  def method_missing(method_id, *args, &blk)
43
41
  if !block_given? and args.empty? and response.data.has_key? method_id.to_s
@@ -95,7 +93,7 @@ module Carbon
95
93
  response.data['errors']
96
94
  end
97
95
  # The URL of the methodology report indicating how this estimate was calculated.
98
- # > my_car.emission.methodology
96
+ # > my_car.emission_estimate.methodology
99
97
  # => 'http://carbon.brighterplanet.com/automobiles.html?[...]'
100
98
  def methodology
101
99
  response.data['methodology']
@@ -55,8 +55,8 @@ describe Carbon do
55
55
  c.model = 'Acura'
56
56
  c.model_year = 2003
57
57
  c.fuel_economy = 32
58
- c.emission.should == 134.599
59
- c.emission.emission_units.should == 'kilograms'
58
+ c.emission_estimate.should == 134.599
59
+ c.emission_estimate.emission_units.should == 'kilograms'
60
60
  end
61
61
 
62
62
  describe 'caching' do
@@ -65,10 +65,10 @@ describe Carbon do
65
65
  c.model = 'Acura'
66
66
  c.model_year = 2003
67
67
  c.fuel_economy = 32
68
- c.emission.should == 134.599
69
- first_raw_request = c.emission.response.raw_request
70
- c.emission.should == 134.599
71
- c.emission.response.raw_request.object_id.should == first_raw_request.object_id
68
+ c.emission_estimate.should == 134.599
69
+ first_raw_request = c.emission_estimate.response.raw_request
70
+ c.emission_estimate.should == 134.599
71
+ c.emission_estimate.response.raw_request.object_id.should == first_raw_request.object_id
72
72
  end
73
73
 
74
74
  it "should recalculate if parameters change" do
@@ -76,11 +76,11 @@ describe Carbon do
76
76
  c.model = 'Acura'
77
77
  c.model_year = 2003
78
78
  c.fuel_economy = 32
79
- c.emission.should == 134.599
80
- first_raw_request = c.emission.response.raw_request
79
+ c.emission_estimate.should == 134.599
80
+ first_raw_request = c.emission_estimate.response.raw_request
81
81
  c.model = 'Honda'
82
- c.emission.should == 134.599
83
- c.emission.response.raw_request.object_id.should_not == first_raw_request.object_id
82
+ c.emission_estimate.should == 134.599
83
+ c.emission_estimate.response.raw_request.object_id.should_not == first_raw_request.object_id
84
84
  end
85
85
 
86
86
  it "should recalculate if parameters change (though the options hash)" do
@@ -88,19 +88,19 @@ describe Carbon do
88
88
  c.model = 'Acura'
89
89
  c.model_year = 2003
90
90
  c.fuel_economy = 32
91
- c.emission.should == 134.599
92
- first_raw_request = c.emission.response.raw_request
93
- c.emission(:timeframe => Timeframe.new(:year => 2009)).should == 134.599
94
- c.emission.response.raw_request.object_id.should_not == first_raw_request.object_id
91
+ c.emission_estimate.should == 134.599
92
+ first_raw_request = c.emission_estimate.response.raw_request
93
+ c.emission_estimate(:timeframe => Timeframe.new(:year => 2009)).should == 134.599
94
+ c.emission_estimate.response.raw_request.object_id.should_not == first_raw_request.object_id
95
95
  end
96
96
 
97
97
  it "should recalculate if the callback changes" do
98
98
  c = RentalCar.new
99
99
  c.model = 'Acura'
100
- c.emission.should == 134.599
101
- first_raw_request = c.emission.response.raw_request
102
- c.emission.callback = CALLBACK_URL
103
- c.emission.response.raw_request.object_id.should_not == first_raw_request.object_id
100
+ c.emission_estimate.should == 134.599
101
+ first_raw_request = c.emission_estimate.response.raw_request
102
+ c.emission_estimate.callback = CALLBACK_URL
103
+ c.emission_estimate.response.raw_request.object_id.should_not == first_raw_request.object_id
104
104
  end
105
105
  end
106
106
 
@@ -108,115 +108,115 @@ describe Carbon do
108
108
  it 'should send simple params' do
109
109
  d = DonutFactory.new
110
110
  d.oven_count = 12_000
111
- d.emission.request.body.should =~ /oven_count=12000/
111
+ d.emission_estimate.request.body.should =~ /oven_count=12000/
112
112
  end
113
113
 
114
114
  it 'send complex params' do
115
115
  d = DonutFactory.new
116
116
  d.mixer.upc = 123
117
- d.emission.request.body.should include({:mixer => { :upc => 123 }}.to_query)
117
+ d.emission_estimate.request.body.should include({:mixer => { :upc => 123 }}.to_query)
118
118
  end
119
119
 
120
120
  it 'should not send attributes that are blank' do
121
121
  d = DonutFactory.new
122
122
  d.mixer.upc = 123
123
- d.emission.request.body.should_not =~ /oven_count/
124
- d.emission.request.body.should_not =~ /timeframe/
123
+ d.emission_estimate.request.body.should_not =~ /oven_count/
124
+ d.emission_estimate.request.body.should_not =~ /timeframe/
125
125
  end
126
126
 
127
127
  it 'should send attributes that are false' do
128
128
  d = DonutFactory.new
129
129
  d.mixer.upc = false
130
- d.emission.request.body.should include({:mixer => { :upc => 'false' }}.to_query)
130
+ d.emission_estimate.request.body.should include({:mixer => { :upc => 'false' }}.to_query)
131
131
  end
132
132
 
133
133
  it 'should send the key' do
134
134
  d = DonutFactory.new
135
- d.emission.request.body.should =~ /key=valid/
135
+ d.emission_estimate.request.body.should =~ /key=valid/
136
136
  end
137
137
 
138
138
  it 'should override defaults' do
139
139
  d = DonutFactory.new
140
140
  key = 'ADifferentOne'
141
- d.emission.key.should == 'valid'
142
- d.emission.key = key
143
- d.emission.key.should == key
141
+ d.emission_estimate.key.should == 'valid'
142
+ d.emission_estimate.key = key
143
+ d.emission_estimate.key.should == key
144
144
  end
145
145
 
146
146
  it 'should accept timeframes' do
147
147
  c = RentalCar.new
148
148
  t = Timeframe.new(:year => 2009)
149
- c.emission.timeframe = t
150
- c.emission.request.body.should include(t.to_query(:timeframe))
149
+ c.emission_estimate.timeframe = t
150
+ c.emission_estimate.request.body.should include(t.to_query(:timeframe))
151
151
  end
152
152
 
153
153
  it 'should accept timeframes inline' do
154
154
  c = RentalCar.new
155
155
  t = Timeframe.new(:year => 2009)
156
- c.emission(:timeframe => t)
157
- c.emission.request.body.should include(t.to_query(:timeframe))
156
+ c.emission_estimate(:timeframe => t)
157
+ c.emission_estimate.request.body.should include(t.to_query(:timeframe))
158
158
  end
159
159
 
160
160
  it 'should read active subtimeframes back from calculations' do
161
161
  c = RentalCar.new
162
- c.emission.active_subtimeframe.should == Timeframe.new(:year => 2008)
162
+ c.emission_estimate.active_subtimeframe.should == Timeframe.new(:year => 2008)
163
163
  end
164
164
 
165
165
  it 'should not generate post bodies with lots of empty params' do
166
166
  c = RentalCar.new
167
- c.emission :timeframe => Timeframe.new(:year => 2009)
168
- c.emission.request.body.should_not include('&&')
169
- c.emission.request.body.should_not =~ /=[^a-z0-9]/i
167
+ c.emission_estimate :timeframe => Timeframe.new(:year => 2009)
168
+ c.emission_estimate.request.body.should_not include('&&')
169
+ c.emission_estimate.request.body.should_not =~ /=[^a-z0-9]/i
170
170
  end
171
171
  end
172
172
 
173
173
  describe 'asynchronous (queued) requests' do
174
174
  it 'should post a message to SQS' do
175
175
  c = RentalCar.new
176
- c.emission.callback = CALLBACK_URL
177
- c.emission.request.url.should =~ /queue.amazonaws.com/
176
+ c.emission_estimate.callback = CALLBACK_URL
177
+ c.emission_estimate.request.url.should =~ /queue.amazonaws.com/
178
178
  end
179
179
 
180
180
  it 'should have nil data in its response' do
181
181
  c = RentalCar.new
182
- c.emission.callback = CALLBACK_URL
183
- c.emission.emission_value.should be_nil
184
- c.emission.emission_units.should be_nil
185
- c.emission.methodology.should be_nil
182
+ c.emission_estimate.callback = CALLBACK_URL
183
+ c.emission_estimate.emission_value.should be_nil
184
+ c.emission_estimate.emission_units.should be_nil
185
+ c.emission_estimate.methodology.should be_nil
186
186
  end
187
187
 
188
188
  it "should not compare itself to numbers" do
189
189
  c = RentalCar.new
190
- c.emission.callback = CALLBACK_URL
191
- c.emission.should_not == 0.0
190
+ c.emission_estimate.callback = CALLBACK_URL
191
+ c.emission_estimate.should_not == 0.0
192
192
  end
193
193
 
194
194
  it 'should not allow itself to be treated as a number' do
195
195
  c = RentalCar.new
196
- c.emission.callback = CALLBACK_URL
196
+ c.emission_estimate.callback = CALLBACK_URL
197
197
  lambda {
198
- c.emission + 5
198
+ c.emission_estimate + 5
199
199
  }.should raise_error(::Carbon::TriedToUseAsyncResponseAsNumber)
200
200
  lambda {
201
- c.emission.to_f
201
+ c.emission_estimate.to_f
202
202
  }.should raise_error(::Carbon::TriedToUseAsyncResponseAsNumber)
203
203
  end
204
204
  end
205
205
 
206
206
  describe 'internally' do
207
- it "should ignore invalid options passed to #emission" do
207
+ it "should ignore invalid options passed to #emission_estimate" do
208
208
  c = RentalCar.new
209
209
  t = Timeframe.new(:year => 2009)
210
- c.emission :timeframe => t, :method_missing => 'helo there', :response => 'foo'
211
- c.emission.instance_variable_get(:@timeframe).object_id.should == t.object_id
212
- c.emission.instance_variable_get(:@method_missing).should be_nil
213
- c.emission.instance_variable_get(:@response).should be_nil
210
+ c.emission_estimate :timeframe => t, :method_missing => 'helo there', :response => 'foo'
211
+ c.emission_estimate.instance_variable_get(:@timeframe).object_id.should == t.object_id
212
+ c.emission_estimate.instance_variable_get(:@method_missing).should be_nil
213
+ c.emission_estimate.instance_variable_get(:@response).should be_nil
214
214
  end
215
215
 
216
216
  it "should raise an error on EmissionEstimate if method isn't found" do
217
217
  c = RentalCar.new
218
218
  lambda {
219
- c.emission.foobar
219
+ c.emission_estimate.foobar
220
220
  }.should raise_error(NoMethodError, /EmissionEstimate/)
221
221
  end
222
222
 
@@ -226,7 +226,7 @@ describe Carbon do
226
226
  d.mixer.to_param
227
227
  }.should raise_error(RuntimeError, /instead please/)
228
228
  lambda {
229
- d.emission.to_f
229
+ d.emission_estimate.to_f
230
230
  }.should_not raise_error
231
231
  end
232
232
  end
@@ -236,7 +236,7 @@ end
236
236
  # it 'should actually do a request!' do
237
237
  # FakeWeb.clean_registry
238
238
  # c = RentalCar.new
239
- # c.emission.to_i.should be_close(5500, 500)
240
- # c.emission.emission_units.should == 'kilograms'
239
+ # c.emission_estimate.to_i.should be_close(5500, 500)
240
+ # c.emission_estimate.emission_units.should == 'kilograms'
241
241
  # end
242
242
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carbon
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 2
10
- version: 0.2.2
9
+ - 3
10
+ version: 0.2.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Derek Kastner
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-07-21 00:00:00 -05:00
20
+ date: 2010-07-22 00:00:00 -05:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency