carbon 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +24 -0
- data/VERSION +1 -1
- data/carbon.gemspec +2 -2
- data/lib/carbon.rb +15 -1
- data/spec/lib/carbon_spec.rb +1 -1
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -47,6 +47,30 @@ When you want to calculate emissions, simply call <tt>RentalCar</tt>#<tt>emissio
|
|
47
47
|
|
48
48
|
Read the {carbon gem RDoc}[http://rdoc.info/projects/brighterplanet/carbon] for more!
|
49
49
|
|
50
|
+
== Exceptions to watch out for
|
51
|
+
|
52
|
+
Since this gem connects to a web service, you need to be ready for network problems and latency. For example:
|
53
|
+
|
54
|
+
begin
|
55
|
+
my_emission = my_car.emission
|
56
|
+
rescue ::SocketError, ::Timeout::Error, ::Errno::ETIMEDOUT, ::Errno::ENETUNREACH, ::Errno::ECONNRESET, ::Errno::ECONNREFUSED
|
57
|
+
# These are general network errors raised by Net::HTTP.
|
58
|
+
# Your internet connection might be down, or our servers might be down.
|
59
|
+
rescue ::Carbon::RateLimited
|
60
|
+
# Realtime mode only.
|
61
|
+
# In order to prevent denial-of-service attacks, our servers rate limit requests.
|
62
|
+
# The gem will try up to three times to get an answer back from the server, waiting slightly longer each time.
|
63
|
+
# If you still get this exception, please contact us at staff@brighterplanet.com and we'll lift your rate.
|
64
|
+
rescue ::Carbon::RealtimeEstimateFailed
|
65
|
+
# Realtime mode only.
|
66
|
+
# Our server returned a 4XX or 5XX error.
|
67
|
+
# Please contact us at staff@brighterplanet.com if you get these more than a couple times.
|
68
|
+
rescue ::Carbon::QueueingFailed
|
69
|
+
# Async mode only.
|
70
|
+
# The gem connects directly to Amazon SQS in order to provide maximum throughput. If that service returns anything other than success, you get this exception.
|
71
|
+
# Please contact us at staff@brighterplanet.com if you see too many of these.
|
72
|
+
end
|
73
|
+
|
50
74
|
== A note on API keys
|
51
75
|
|
52
76
|
You should get an API key from http://keys.brighterplanet.com and set it globally:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/carbon.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{carbon}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.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"]
|
12
|
-
s.date = %q{2010-07-
|
12
|
+
s.date = %q{2010-07-20}
|
13
13
|
s.description = %q{Carbon allows you to easily calculate the carbon footprint of various activities. This is an API for the Brighter Planet Carbon Middleware service.}
|
14
14
|
s.email = %q{derek.kastner@brighterplanet.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/carbon.rb
CHANGED
@@ -170,7 +170,19 @@ module Carbon
|
|
170
170
|
end
|
171
171
|
|
172
172
|
def _realtime_emission(options = {}) # :nodoc:
|
173
|
-
|
173
|
+
attempts = 0
|
174
|
+
begin
|
175
|
+
response = _carbon_response options
|
176
|
+
raise ::Carbon::RateLimited if response.status_code == 403 and response.body =~ /Rate Limit/i
|
177
|
+
rescue ::Carbon::RateLimited
|
178
|
+
if attempts < 4
|
179
|
+
attempts += 1
|
180
|
+
sleep 0.2 * attempts
|
181
|
+
retry
|
182
|
+
else
|
183
|
+
raise $!, "Rate limited #{attempts} time(s) in a row"
|
184
|
+
end
|
185
|
+
end
|
174
186
|
raise ::Carbon::RealtimeEstimateFailed unless response.success?
|
175
187
|
::Carbon::EmissionEstimate.new ::ActiveSupport::JSON.decode(response.body)
|
176
188
|
end
|
@@ -206,6 +218,8 @@ module Carbon
|
|
206
218
|
# Returns an emission estimate.
|
207
219
|
#
|
208
220
|
# Note: <b>You need to take care of storing the return value to a local variable!</b> Every call to <tt>emission</tt> runs a query.
|
221
|
+
#
|
222
|
+
# Note also: please see the README about exceptions that you should watch out for.
|
209
223
|
#
|
210
224
|
# You can use it like a number...
|
211
225
|
# > my_car.emission + 5.1
|
data/spec/lib/carbon_spec.rb
CHANGED
@@ -94,7 +94,7 @@ describe Carbon do
|
|
94
94
|
it 'should post a message to SQS' do
|
95
95
|
c = RentalCar.new
|
96
96
|
c._carbon_request_url.should =~ /queue.amazonaws.com/
|
97
|
-
c.emission :timeframe => Timeframe.new(:year => 2009), :callback => 'http://www.postbin.org/
|
97
|
+
c.emission :timeframe => Timeframe.new(:year => 2009), :callback => 'http://www.postbin.org/1dj0146'
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
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:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Derek Kastner
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-07-
|
19
|
+
date: 2010-07-20 00:00:00 -05:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|