carbon 0.0.0 → 0.0.1
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.
- data/lib/carbon.rb +9 -0
- data/lib/carbon/emitter.rb +30 -1
- data/lib/carbon/emitter/class_methods.rb +14 -0
- data/lib/carbon/flight.rb +10 -0
- data/lib/carbon/resource.rb +60 -0
- metadata +18 -3
data/lib/carbon.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'carbon/emitter'
|
2
|
+
require 'carbon/flight'
|
1
3
|
|
2
4
|
module Carbon
|
3
5
|
class << self
|
@@ -7,5 +9,12 @@ module Carbon
|
|
7
9
|
def api_key=(val)
|
8
10
|
@api_key = val
|
9
11
|
end
|
12
|
+
|
13
|
+
def base_url
|
14
|
+
@base_url ||= 'http://carbon.brighterplanet.com'
|
15
|
+
end
|
16
|
+
def base_url=(val)
|
17
|
+
@base_url = val
|
18
|
+
end
|
10
19
|
end
|
11
20
|
end
|
data/lib/carbon/emitter.rb
CHANGED
@@ -1,7 +1,36 @@
|
|
1
|
+
require 'carbon/resource'
|
2
|
+
require 'carbon/emitter/class_methods'
|
3
|
+
|
1
4
|
module Carbon
|
2
5
|
module Emitter
|
3
|
-
|
6
|
+
class NotYetCalculated < StandardError; end
|
7
|
+
include Resource
|
8
|
+
|
9
|
+
def self.included(target)
|
10
|
+
target.extend Carbon::Emitter::ClassMethods
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(args = {})
|
14
|
+
args.each do |name, value|
|
15
|
+
next unless self.class.characteristics.include?(name.to_sym)
|
16
|
+
self.send("#{name}=", value)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def methodology
|
21
|
+
raise Emitter::NotYetCalculated if result.nil?
|
22
|
+
@methodology
|
23
|
+
end
|
24
|
+
|
25
|
+
def emission
|
26
|
+
raise Emitter::NotYetCalculated if result.nil?
|
27
|
+
@emission
|
28
|
+
end
|
4
29
|
|
30
|
+
def calculate!
|
31
|
+
fetch_calculation
|
32
|
+
@emission = result['emission']
|
33
|
+
@methodology = result['methodology']
|
5
34
|
end
|
6
35
|
end
|
7
36
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Carbon
|
2
|
+
class Flight
|
3
|
+
include Carbon::Emitter
|
4
|
+
|
5
|
+
characteristics :date, :year, :time_of_day, :destination_airport,
|
6
|
+
:origin_airport, :distance_class, :distance_estimate, :domesticity,
|
7
|
+
:airline, :trips, :emplanements_per_trip, :seat_class, :load_factor,
|
8
|
+
:seats_estimate, :aircraft_class, :aircraft, :propulsion
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Carbon
|
5
|
+
module Resource
|
6
|
+
class << self
|
7
|
+
def included(target)
|
8
|
+
if target == Carbon::Emitter
|
9
|
+
Carbon::Emitter::ClassMethods.instance_eval { include(Carbon::Resource::ClassMethods) }
|
10
|
+
else
|
11
|
+
target.extend(Carbon::Resource::ClassMethods)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def underscore(string)
|
16
|
+
string.gsub(/([a-z])([A-Z])/,'\1_\2').downcase
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
module ClassMethods
|
22
|
+
def resource_name(val = nil)
|
23
|
+
@resource_name = val.to_s unless val.nil?
|
24
|
+
if @resource_name.nil?
|
25
|
+
class_name = self.to_s.split('::').last
|
26
|
+
@resource_name ||= "#{Carbon::Resource.underscore(class_name)}s"
|
27
|
+
end
|
28
|
+
@resource_name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
attr_accessor :result
|
34
|
+
|
35
|
+
def fields
|
36
|
+
self.class.characteristics.map(&:to_s).inject({}) do |hash, char|
|
37
|
+
value = self.send(char)
|
38
|
+
if value.respond_to?(:keys)
|
39
|
+
hash[char] = {}
|
40
|
+
value.each do |key, value|
|
41
|
+
hash[char][key.to_s] = value
|
42
|
+
end
|
43
|
+
elsif !value.nil?
|
44
|
+
hash[char] = value
|
45
|
+
end
|
46
|
+
hash
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def resource
|
51
|
+
url = URI.join(Carbon.base_url, self.class.resource_name)
|
52
|
+
@resource ||= RestClient::Resource.new(url.to_s)
|
53
|
+
end
|
54
|
+
|
55
|
+
def fetch_calculation
|
56
|
+
response = resource.post fields, :accept => :json
|
57
|
+
self.result = JSON.parse(response.body)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Derek Kastner
|
@@ -18,7 +18,7 @@ date: 2010-01-22 00:00:00 -05:00
|
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: rest-client
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
@@ -29,6 +29,18 @@ dependencies:
|
|
29
29
|
version: "0"
|
30
30
|
type: :runtime
|
31
31
|
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: fakeweb
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :development
|
43
|
+
version_requirements: *id002
|
32
44
|
description: Carbon allows you to easily calculate the carbon footprint of various activities. This is an API for the Brighter Planet Carbon Middleware service.
|
33
45
|
email: derek@brighterplanet.com
|
34
46
|
executables: []
|
@@ -38,7 +50,10 @@ extensions: []
|
|
38
50
|
extra_rdoc_files:
|
39
51
|
- MIT-LICENSE.txt
|
40
52
|
files:
|
53
|
+
- lib/carbon/emitter/class_methods.rb
|
41
54
|
- lib/carbon/emitter.rb
|
55
|
+
- lib/carbon/flight.rb
|
56
|
+
- lib/carbon/resource.rb
|
42
57
|
- lib/carbon.rb
|
43
58
|
- MIT-LICENSE.txt
|
44
59
|
has_rdoc: true
|