carbon 1.1.3 → 2.0.0

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.
Files changed (39) hide show
  1. data/.gitignore +4 -22
  2. data/CHANGELOG +11 -0
  3. data/Gemfile +10 -1
  4. data/README.markdown +185 -0
  5. data/Rakefile +13 -26
  6. data/bin/carbon +3 -3
  7. data/carbon.gemspec +17 -23
  8. data/developer_notes/MULTI.markdown +25 -0
  9. data/developer_notes/REDUCE_HTTP_CONNECTIONS.markdown +46 -0
  10. data/features/shell.feature +1 -1
  11. data/features/support/env.rb +3 -4
  12. data/lib/carbon.rb +242 -96
  13. data/lib/carbon/registry.rb +50 -0
  14. data/lib/carbon/shell.rb +14 -8
  15. data/lib/carbon/shell/emitter.rb +33 -29
  16. data/lib/carbon/version.rb +1 -1
  17. data/test/carbon_test.rb +167 -0
  18. metadata +128 -182
  19. data/MIT-LICENSE.txt +0 -19
  20. data/README.rdoc +0 -266
  21. data/doc/INTEGRATION_GUIDE.rdoc +0 -1002
  22. data/doc/examining-response-with-jsonview.png +0 -0
  23. data/doc/shell_example +0 -43
  24. data/doc/timeout-error.png +0 -0
  25. data/doc/with-committee-reports.png +0 -0
  26. data/doc/without-committee-reports.png +0 -0
  27. data/lib/carbon/base.rb +0 -62
  28. data/lib/carbon/emission_estimate.rb +0 -165
  29. data/lib/carbon/emission_estimate/request.rb +0 -100
  30. data/lib/carbon/emission_estimate/response.rb +0 -61
  31. data/lib/carbon/emission_estimate/storage.rb +0 -33
  32. data/spec/fixtures/vcr_cassettes/flight.yml +0 -47
  33. data/spec/fixtures/vcr_cassettes/residence.yml +0 -44
  34. data/spec/lib/carbon/emission_estimate/request_spec.rb +0 -41
  35. data/spec/lib/carbon/emission_estimate/response_spec.rb +0 -33
  36. data/spec/lib/carbon/emission_estimate_spec.rb +0 -32
  37. data/spec/lib/carbon_spec.rb +0 -384
  38. data/spec/spec_helper.rb +0 -60
  39. data/spec/specwatchr +0 -60
@@ -1,21 +1,26 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'conversions'
4
+
1
5
  module Carbon
2
6
  class Shell
7
+ # @private
3
8
  class Emitter < Bombshell::Environment
4
9
  include Bombshell::Shell
5
10
  include Carbon
6
11
 
12
+ # @private
7
13
  def initialize(name, input = {})
8
- @emitter = name
14
+ @emitter = name.to_s.singularize.camelcase
9
15
  @input = input
10
- characteristics_url = "http://carbon.brighterplanet.com/#{@emitter.to_s.pluralize}/options.json"
11
- response = REST.get(characteristics_url)
12
- if response.ok?
13
- @characteristics = ActiveSupport::JSON.decode response.body
16
+ response = ::Net::HTTP.get_response(::URI.parse("http://impact.brighterplanet.com/#{@emitter.underscore.pluralize}/options.json"))
17
+ if (200..299).include?(response.code.to_i)
18
+ @characteristics = ::MultiJson.decode response.body
14
19
  @characteristics.keys.each do |characteristic|
15
20
  instance_eval <<-meth
16
21
  def #{characteristic}(arg = nil)
17
22
  if arg
18
- @input[:#{characteristic}] = arg
23
+ @input[:#{characteristic}] = arg.to_s.strip
19
24
  emission
20
25
  else
21
26
  @input[:#{characteristic}]
@@ -23,19 +28,17 @@ module Carbon
23
28
  end
24
29
  meth
25
30
  end
26
- if self.class.carbon_base && self.class.carbon_base.translation_table.any?
27
- self.class.carbon_base.reset_translation_table!
28
- end
29
31
  provisions = @characteristics.keys.map { |k| "provide :#{k}"}.join('; ')
30
32
  emit_as_block = "emit_as(:#{name}) { #{provisions} }"
31
33
  self.class.class_eval emit_as_block
32
34
  emission
33
35
  else
34
- puts " => Sorry, characteristics couldn't be retrieved for #{@emitter.to_s.pluralize} (via #{url})"
36
+ puts " => Sorry, characteristics couldn't be retrieved for #{@emitter.underscore.pluralize} (via #{url})"
35
37
  done
36
38
  end
37
39
  end
38
40
 
41
+ # @private
39
42
  def timeframe(t = nil)
40
43
  if t
41
44
  @timeframe = t
@@ -47,23 +50,28 @@ module Carbon
47
50
  end
48
51
  end
49
52
 
53
+ # @private
50
54
  def emission
51
55
  puts " => #{emission_in_kilograms} kg CO2e"
52
56
  end
53
57
 
58
+ # @private
54
59
  def emission_in_kilograms
55
- ::Carbon::EmissionEstimate.new(self, :timeframe => @timeframe).to_f
60
+ impact(:timeframe => @timeframe).decisions.carbon.object.value
56
61
  end
57
62
 
63
+ # @private
58
64
  def lbs
59
65
  puts " => #{emission_in_kilograms.kilograms.to :pounds} lbs CO2e"
60
66
  end
61
67
  alias :pounds :lbs
62
68
 
69
+ # @private
63
70
  def tons
64
71
  puts " => #{emission_in_kilograms.kilograms.to :tons} lbs CO2e"
65
72
  end
66
73
 
74
+ # @private
67
75
  def characteristics
68
76
  if @input.empty?
69
77
  puts " => (none)"
@@ -80,42 +88,40 @@ module Carbon
80
88
  end
81
89
  end
82
90
 
91
+ # @private
83
92
  def url
84
- request = ::Carbon::EmissionEstimate.new(self, :timeframe => @timeframe).request
85
- url = request.url
86
- if request.body.present?
87
- url << '?'
88
- url << request.body
89
- end
90
- puts " => #{url}"
93
+ puts " => #{impact(:timeframe => @timeframe).methodology}"
91
94
  end
92
95
 
96
+ # @private
93
97
  def methodology
94
98
  first = true
95
- ::Carbon::EmissionEstimate.new(self, :timeframe => @timeframe).reports.each do |report|
99
+ impact(:timeframe => @timeframe).decisions.each do |name, report|
96
100
  if first
97
101
  w = ' => '
98
102
  first = false
99
103
  else
100
104
  w = ' '
101
105
  end
102
- puts w + "#{report['committee']['name']}: #{report['quorum']['name']}"
106
+ puts w + "#{name}: #{report.methodology}"
103
107
  end
104
108
  end
105
109
 
110
+ # @private
106
111
  def reports
107
112
  first = true
108
- ::Carbon::EmissionEstimate.new(self, @timeframe => :timeframe).reports.each do |report|
113
+ impact(:timeframe => @timeframe).decisions.each do |name, report|
109
114
  if first
110
115
  w = ' => '
111
116
  first = false
112
117
  else
113
118
  w = ' '
114
119
  end
115
- puts w + "#{report['committee']['name']}: #{report['conclusion'].inspect}"
120
+ puts w + "#{name}: #{report.object.inspect}"
116
121
  end
117
122
  end
118
123
 
124
+ # @private
119
125
  def help
120
126
  puts " => #{@characteristics.keys.join ', '}"
121
127
  end
@@ -128,30 +134,28 @@ module Carbon
128
134
  end
129
135
  end
130
136
 
137
+ # @private
131
138
  def _name
132
139
  @emitter
133
140
  end
134
141
 
142
+ # @private
135
143
  def _timeframe
136
144
  @timeframe
137
145
  end
138
146
 
147
+ # @private
139
148
  def inspect
140
- "<Emitter[#{@emitter}]: #{@input.inspect}>"
149
+ "#<Emitter[#{@emitter}]: #{@input.inspect}>"
141
150
  end
142
151
 
152
+ # @private
143
153
  def done
144
154
  $emitters[@emitter] ||= []
145
155
  $emitters[@emitter] << @input
146
156
  puts " => Saved as #{@emitter} ##{$emitters[@emitter].length - 1}"
147
157
  quit
148
158
  end
149
-
150
- class << self
151
- def emitter_name
152
- @name
153
- end
154
- end
155
159
  end
156
160
  end
157
161
  end
@@ -1,3 +1,3 @@
1
1
  module Carbon
2
- VERSION = '1.1.3'
2
+ VERSION = "2.0.0"
3
3
  end
@@ -0,0 +1,167 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'benchmark'
4
+ require 'webmock/minitest'
5
+ WebMock.disable!
6
+ def with_web_mock
7
+ WebMock.enable!
8
+ WebMock.disable_net_connect!
9
+ yield
10
+ ensure
11
+ WebMock.disable!
12
+ end
13
+ require 'minitest/spec'
14
+ require 'minitest/autorun'
15
+ require 'minitest/reporters'
16
+ MiniTest::Unit.runner = MiniTest::SuiteRunner.new
17
+ MiniTest::Unit.runner.reporters << MiniTest::Reporters::SpecReporter.new
18
+ require 'timeframe'
19
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
20
+ require 'carbon'
21
+
22
+ Carbon.key = 'carbon_test'
23
+
24
+ class MyNissan
25
+ def name
26
+ 'Nissan'
27
+ end
28
+ def to_s
29
+ raise "Not fair!"
30
+ end
31
+ alias :inspect :to_s
32
+ end
33
+
34
+ class MyNissanAltima
35
+ class << self
36
+ def all(options)
37
+ raise unless options == { :order => :year }
38
+ [ new(2000), new(2001), new(2002), new(2003), new(2004) ]
39
+ end
40
+ end
41
+ def initialize(model_year)
42
+ @model_year = model_year
43
+ end
44
+ def make; MyNissan.new end
45
+ def model; 'Altima' end
46
+ def model_year; @model_year end # what BP knows as "year"
47
+ def fuel_type; 'R' end # what BP knows as "automobile_fuel" and keys on "code"
48
+ include Carbon
49
+ emit_as 'Automobile' do
50
+ provide(:make) { |my_nissan_altima| my_nissan_altima.make.name }
51
+ provide :model
52
+ provide :model_year, :as => :year
53
+ provide :fuel_type, :as => :automobile_fuel, :key => :code
54
+ end
55
+ end
56
+
57
+ describe Carbon do
58
+ # args could be mmm(:post, 'http://impact.brighterplanet.com/monkeys.json').to_return(:status => 500, :body => 'too many monkeys')
59
+ describe :query do
60
+ it "calculates flight impact" do
61
+ response = Carbon.query('Flight', :origin_airport => 'LAX', :destination_airport => 'SFO', :segments_per_trip => 1, :trips => 1)
62
+ response.decisions.carbon.object.value.must_be_close_to 200, 50
63
+ end
64
+ it "gets back characteristics" do
65
+ response = Carbon.query('Flight', :origin_airport => 'LAX', :destination_airport => 'SFO', :segments_per_trip => 1, :trips => 1)
66
+ response.characteristics.origin_airport.description.must_match %r{lax}i
67
+ end
68
+ it "tells you if the query is successful" do
69
+ response = Carbon.query('Flight')
70
+ response.success.must_equal true
71
+ end
72
+ it "is gentle about errors" do
73
+ response = Carbon.query('Monkey')
74
+ response.success.must_equal false
75
+ end
76
+ it "sends timeframe properly" do
77
+ response = Carbon.query('Flight', :timeframe => Timeframe.new(:year => 2009))
78
+ response.timeframe.startDate.must_equal '2009-01-01'
79
+ response.timeframe.endDate.must_equal '2010-01-01'
80
+ end
81
+ it "sends key properly" do
82
+ with_web_mock do
83
+ WebMock.stub_request(:post, 'http://impact.brighterplanet.com/flights.json').with(:key => 'carbon_test').to_return(:status => 500, :body => 'Good job')
84
+ response = Carbon.query('Flight')
85
+ response.error_body.must_equal 'Good job'
86
+ end
87
+ end
88
+ end
89
+ unless ENV['SKIP_MULTI'] == 'true'
90
+ describe :multi do
91
+ before do
92
+ @queries = []
93
+ 10.times do
94
+ @queries << ['Flight', {:origin_airport => 'LAX', :destination_airport => 'SFO', :segments_per_trip => 1, :trips => 1}]
95
+ @queries << ['RailTrip', {:distance => 25}]
96
+ @queries << ['AutomobileTrip', {:make => 'Nissan', :model => 'Altima'}]
97
+ @queries << ['Residence']
98
+ @queries << ['Monkey']
99
+ end
100
+ @queries = @queries.sort_by { rand }
101
+ end
102
+ it "runs multiple queries at once" do
103
+ responses = Carbon.multi(@queries)
104
+ error_count = 0
105
+ responses.each do |response|
106
+ if response.success
107
+ response.decisions.carbon.object.value.must_be :>, 0
108
+ response.decisions.carbon.object.value.must_be :<, 10_000
109
+ else
110
+ error_count += 1
111
+ end
112
+ end
113
+ error_count.must_equal 10
114
+ @queries.each_with_index do |query, i|
115
+ reference_response = Carbon.query(*query)
116
+ if reference_response.success
117
+ responses[i].decisions.must_equal reference_response.decisions
118
+ end
119
+ end
120
+ end
121
+ it "is faster than just calling #query over and over" do
122
+ # dry run
123
+ @queries.each { |query| Carbon.query(*query) }
124
+ # --
125
+ single_threaded_time = ::Benchmark.realtime do
126
+ @queries.each { |query| Carbon.query(*query) }
127
+ end
128
+ multi_threaded_time = ::Benchmark.realtime do
129
+ Carbon.multi(@queries)
130
+ end
131
+ # Carbon::#multi
132
+ # PASS test_0001_runs_multiple_queries_at_once (12.10s)
133
+ # Multi-threaded was 95% faster
134
+ # PASS test_0002_is_faster_than_just_calling_query_over_and_over (23.73s)
135
+ $stderr.puts " Multi-threaded was #{((single_threaded_time - multi_threaded_time) / single_threaded_time * 100).round}% faster"
136
+ multi_threaded_time.must_be :<, single_threaded_time
137
+ end
138
+ end
139
+ end
140
+ describe "mixin" do
141
+ describe :emit_as do
142
+ it "overwrites old emit_as blocks" do
143
+ eval %{class MyFoo; include Carbon; end}
144
+ MyFoo.emit_as('Automobile') { provide(:make) }
145
+ Carbon::Registry.instance['MyFoo'].characteristics.keys.must_equal [:make]
146
+ MyFoo.emit_as('Automobile') { provide(:model) }
147
+ Carbon::Registry.instance['MyFoo'].characteristics.keys.must_equal [:model]
148
+ end
149
+ end
150
+ describe '#impact' do
151
+ it "works" do
152
+ impact = MyNissanAltima.new(2006).impact
153
+ impact.decisions.carbon.object.value.must_be :>, 0
154
+ impact.characteristics.make.description.must_match %r{Nissan}i
155
+ impact.characteristics.model.description.must_match %r{Altima}i
156
+ impact.characteristics.year.description.to_i.must_equal 2006
157
+ impact.characteristics.automobile_fuel.description.must_match %r{regular gasoline}
158
+ end
159
+ it "takes timeframe" do
160
+ impact_2010 = MyNissanAltima.new(2006).impact(:timeframe => Timeframe.new(:year => 2010))
161
+ impact_2011 = MyNissanAltima.new(2006).impact(:timeframe => Timeframe.new(:year => 2011))
162
+ impact_2010.timeframe.startDate.must_equal '2010-01-01'
163
+ impact_2011.timeframe.startDate.must_equal '2011-01-01'
164
+ end
165
+ end
166
+ end
167
+ end
metadata CHANGED
@@ -1,238 +1,184 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: carbon
3
- version: !ruby/object:Gem::Version
4
- version: 1.1.3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
5
  prerelease:
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - 0
10
+ version: 2.0.0
6
11
  platform: ruby
7
- authors:
8
- - Derek Kastner
12
+ authors:
9
13
  - Seamus Abshere
10
- - Andy Rossmeissl
11
14
  autorequire:
12
15
  bindir: bin
13
16
  cert_chain: []
14
- date: 2011-11-17 00:00:00.000000000Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: activesupport
18
- requirement: &2167482440 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ! '>='
22
- - !ruby/object:Gem::Version
23
- version: 2.3.5
24
- type: :runtime
17
+
18
+ date: 2012-03-09 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: em-http-request
25
22
  prerelease: false
26
- version_requirements: *2167482440
27
- - !ruby/object:Gem::Dependency
28
- name: i18n
29
- requirement: &2167482000 !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
30
24
  none: false
31
- requirements:
32
- - - ! '>='
33
- - !ruby/object:Gem::Version
34
- version: '0'
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
35
32
  type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: activesupport
36
36
  prerelease: false
37
- version_requirements: *2167482000
38
- - !ruby/object:Gem::Dependency
39
- name: nap
40
- requirement: &2167481360 !ruby/object:Gem::Requirement
37
+ requirement: &id002 !ruby/object:Gem::Requirement
41
38
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
46
  type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: multi_json
47
50
  prerelease: false
48
- version_requirements: *2167481360
49
- - !ruby/object:Gem::Dependency
50
- name: timeframe
51
- requirement: &2167480700 !ruby/object:Gem::Requirement
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
52
  none: false
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
56
- version: '0'
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
57
60
  type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: hashie
58
64
  prerelease: false
59
- version_requirements: *2167480700
60
- - !ruby/object:Gem::Dependency
61
- name: blockenspiel
62
- requirement: &2167480040 !ruby/object:Gem::Requirement
65
+ requirement: &id004 !ruby/object:Gem::Requirement
63
66
  none: false
64
- requirements:
65
- - - ! '>='
66
- - !ruby/object:Gem::Version
67
- version: '0'
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
68
74
  type: :runtime
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: bombshell
69
78
  prerelease: false
70
- version_requirements: *2167480040
71
- - !ruby/object:Gem::Dependency
72
- name: conversions
73
- requirement: &2167479540 !ruby/object:Gem::Requirement
79
+ requirement: &id005 !ruby/object:Gem::Requirement
74
80
  none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
78
- version: '0'
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
79
88
  type: :runtime
89
+ version_requirements: *id005
90
+ - !ruby/object:Gem::Dependency
91
+ name: conversions
80
92
  prerelease: false
81
- version_requirements: *2167479540
82
- - !ruby/object:Gem::Dependency
83
- name: brighter_planet_metadata
84
- requirement: &2167479120 !ruby/object:Gem::Requirement
93
+ requirement: &id006 !ruby/object:Gem::Requirement
85
94
  none: false
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
90
102
  type: :runtime
103
+ version_requirements: *id006
104
+ - !ruby/object:Gem::Dependency
105
+ name: brighter_planet_metadata
91
106
  prerelease: false
92
- version_requirements: *2167479120
93
- - !ruby/object:Gem::Dependency
94
- name: bombshell
95
- requirement: &2167478680 !ruby/object:Gem::Requirement
107
+ requirement: &id007 !ruby/object:Gem::Requirement
96
108
  none: false
97
- requirements:
98
- - - ! '>='
99
- - !ruby/object:Gem::Version
100
- version: '0'
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
101
116
  type: :runtime
102
- prerelease: false
103
- version_requirements: *2167478680
104
- - !ruby/object:Gem::Dependency
105
- name: fakeweb
106
- requirement: &2167478180 !ruby/object:Gem::Requirement
107
- none: false
108
- requirements:
109
- - - ! '>='
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
- type: :development
113
- prerelease: false
114
- version_requirements: *2167478180
115
- - !ruby/object:Gem::Dependency
116
- name: rspec
117
- requirement: &2167477600 !ruby/object:Gem::Requirement
118
- none: false
119
- requirements:
120
- - - ! '>='
121
- - !ruby/object:Gem::Version
122
- version: '0'
123
- type: :development
124
- prerelease: false
125
- version_requirements: *2167477600
126
- - !ruby/object:Gem::Dependency
127
- name: aruba
128
- requirement: &2167476940 !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
134
- type: :development
135
- prerelease: false
136
- version_requirements: *2167476940
137
- - !ruby/object:Gem::Dependency
138
- name: rake
139
- requirement: &2167475940 !ruby/object:Gem::Requirement
140
- none: false
141
- requirements:
142
- - - ! '>='
143
- - !ruby/object:Gem::Version
144
- version: '0'
145
- type: :development
146
- prerelease: false
147
- version_requirements: *2167475940
148
- - !ruby/object:Gem::Dependency
149
- name: vcr
150
- requirement: &2167475060 !ruby/object:Gem::Requirement
151
- none: false
152
- requirements:
153
- - - ! '>='
154
- - !ruby/object:Gem::Version
155
- version: '0'
156
- type: :development
157
- prerelease: false
158
- version_requirements: *2167475060
159
- description: Carbon is a Ruby API wrapper for the Brighter Planet emission estimate
160
- web service (http://carbon.brighterplanet.com). By querying the web service, it
161
- can estimate the carbon emissions of many real-life objects, such as cars and houses,
162
- based on particular attributes that they may have.
163
- email:
164
- - derek.kastner@brighterplanet.com
165
- executables:
117
+ version_requirements: *id007
118
+ description: Brighter Planet API client for Ruby
119
+ email:
120
+ - seamus@abshere.net
121
+ - dkastner@gmail.com
122
+ - andy@rossmeissl.net
123
+ executables:
166
124
  - carbon
167
125
  extensions: []
126
+
168
127
  extra_rdoc_files: []
169
- files:
128
+
129
+ files:
170
130
  - .gitignore
131
+ - CHANGELOG
171
132
  - Gemfile
172
- - MIT-LICENSE.txt
173
- - README.rdoc
133
+ - README.markdown
174
134
  - Rakefile
175
135
  - bin/carbon
176
136
  - carbon.gemspec
177
- - doc/INTEGRATION_GUIDE.rdoc
178
- - doc/examining-response-with-jsonview.png
179
- - doc/shell_example
180
- - doc/timeout-error.png
181
- - doc/with-committee-reports.png
182
- - doc/without-committee-reports.png
137
+ - developer_notes/MULTI.markdown
138
+ - developer_notes/REDUCE_HTTP_CONNECTIONS.markdown
183
139
  - features/shell.feature
184
140
  - features/support/env.rb
185
141
  - lib/carbon.rb
186
- - lib/carbon/base.rb
187
- - lib/carbon/emission_estimate.rb
188
- - lib/carbon/emission_estimate/request.rb
189
- - lib/carbon/emission_estimate/response.rb
190
- - lib/carbon/emission_estimate/storage.rb
191
142
  - lib/carbon/registry.rb
192
143
  - lib/carbon/shell.rb
193
144
  - lib/carbon/shell/emitter.rb
194
145
  - lib/carbon/version.rb
195
- - spec/fixtures/vcr_cassettes/flight.yml
196
- - spec/fixtures/vcr_cassettes/residence.yml
197
- - spec/lib/carbon/emission_estimate/request_spec.rb
198
- - spec/lib/carbon/emission_estimate/response_spec.rb
199
- - spec/lib/carbon/emission_estimate_spec.rb
200
- - spec/lib/carbon_spec.rb
201
- - spec/spec_helper.rb
202
- - spec/specwatchr
146
+ - test/carbon_test.rb
203
147
  homepage: https://github.com/brighterplanet/carbon
204
148
  licenses: []
149
+
205
150
  post_install_message:
206
151
  rdoc_options: []
207
- require_paths:
152
+
153
+ require_paths:
208
154
  - lib
209
- required_ruby_version: !ruby/object:Gem::Requirement
155
+ required_ruby_version: !ruby/object:Gem::Requirement
210
156
  none: false
211
- requirements:
212
- - - ! '>='
213
- - !ruby/object:Gem::Version
214
- version: '0'
215
- required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ hash: 3
161
+ segments:
162
+ - 0
163
+ version: "0"
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
216
165
  none: false
217
- requirements:
218
- - - ! '>='
219
- - !ruby/object:Gem::Version
220
- version: '0'
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ hash: 3
170
+ segments:
171
+ - 0
172
+ version: "0"
221
173
  requirements: []
174
+
222
175
  rubyforge_project:
223
- rubygems_version: 1.8.11
176
+ rubygems_version: 1.8.17
224
177
  signing_key:
225
178
  specification_version: 3
226
- summary: Carbon is a Ruby API wrapper for the Brighter Planet emission estimate web
227
- service (http://carbon.brighterplanet.com).
228
- test_files:
179
+ summary: Brighter Planet API client for Ruby
180
+ test_files:
229
181
  - features/shell.feature
230
182
  - features/support/env.rb
231
- - spec/fixtures/vcr_cassettes/flight.yml
232
- - spec/fixtures/vcr_cassettes/residence.yml
233
- - spec/lib/carbon/emission_estimate/request_spec.rb
234
- - spec/lib/carbon/emission_estimate/response_spec.rb
235
- - spec/lib/carbon/emission_estimate_spec.rb
236
- - spec/lib/carbon_spec.rb
237
- - spec/spec_helper.rb
238
- - spec/specwatchr
183
+ - test/carbon_test.rb
184
+ has_rdoc: