brighter_planet_metadata 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ *~
data/Rakefile CHANGED
@@ -8,3 +8,5 @@ Rake::TestTask.new(:test) do |test|
8
8
  test.pattern = 'test/**/test_*.rb'
9
9
  test.verbose = true
10
10
  end
11
+
12
+ task :default => :test
@@ -21,14 +21,12 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency 'eat'
22
22
  s.add_dependency 'activesupport', '>=2.3.4'
23
23
  s.add_dependency 'i18n' # activesupport?
24
+ s.add_dependency 'cache_method'
24
25
  s.add_development_dependency 'fakeweb'
25
26
  s.add_development_dependency 'test-unit'
26
27
  s.add_development_dependency 'fakefs'
27
28
  s.add_development_dependency 'earth'
28
- if RUBY_VERSION > '1.9'
29
- s.add_development_dependency 'ruby-debug19'
30
- else
29
+ unless RUBY_VERSION > '1.9'
31
30
  s.add_development_dependency 'fastercsv' # earth
32
- s.add_development_dependency 'ruby-debug'
33
31
  end
34
32
  end
@@ -0,0 +1,12 @@
1
+ require 'dnsruby'
2
+ module BrighterPlanet
3
+ class Metadata
4
+ module AuthoritativeDnsResolver
5
+ def self.getaddress(domain_name)
6
+ r = ::Dnsruby::Resolver.new(:nameserver => %w{ ns1.easydns.com ns2.easydns.com ns3.easydns.org })
7
+ q = r.query domain_name, ::Dnsruby::Types.A, ::Dnsruby::Classes.IN
8
+ q.answer[0].address.to_s
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,7 +1,7 @@
1
1
  require 'singleton'
2
2
  module BrighterPlanet
3
3
  class Metadata
4
- class Cm1Adapter
4
+ class Cm1Authority
5
5
  include ::Singleton
6
6
  def authority?(universe, method_id)
7
7
  return unless universe == 'cm1_production'
@@ -13,27 +13,23 @@ module BrighterPlanet
13
13
  end
14
14
  end
15
15
  def emitters
16
- undifferentiated_emitters - beta_emitters
17
- end
18
- def beta_emitters
19
- undifferentiated_emitters.select do |name|
20
- begin
21
- "::BrighterPlanet::#{name}::BETA".constantize == true
22
- rescue ::NameError
23
- false
24
- end
16
+ ary = []
17
+ ::ObjectSpace.each_object(::BrighterPlanet::Emitter) do |obj|
18
+ ary.push obj.name.demodulize
25
19
  end
20
+ ary
26
21
  end
27
22
  def certified_emitters
28
23
  emitters
29
24
  end
30
- private
31
- def undifferentiated_emitters
32
- ary = []
33
- ::ObjectSpace.each_object(::BrighterPlanet::Emitter) do |obj|
34
- ary.push obj.name.demodulize
25
+ def protocols
26
+ emitters.map(&:constantize).map(&:protocols).flatten.uniq.inject({}) do |memo, p|
27
+ memo[p] = ::File.read(::File.join(::Rails.root, 'app', 'views', 'protocols', 'names', "_#{p}.html.erb")).strip
28
+ memo
35
29
  end
36
- ary
30
+ end
31
+ def color
32
+ (AuthoritativeDnsResolver.getaddress('carbon.brighterplanet.com') == '184.73.240.13') ? 'red' : 'blue'
37
33
  end
38
34
  end
39
35
  end
@@ -1,41 +1,16 @@
1
1
  require 'singleton'
2
2
  module BrighterPlanet
3
3
  class Metadata
4
- class Data1Adapter
4
+ class Data1Authority
5
5
  include ::Singleton
6
6
  def authority?(universe, method_id)
7
7
  return unless universe == 'data1_production'
8
8
  respond_to? method_id
9
9
  end
10
10
  def resources
11
- undifferentiated_resources - beta_resources
12
- end
13
- def beta_resources
14
- undifferentiated_resources.select do |name|
15
- begin
16
- "::#{name}::BETA".constantize == true
17
- rescue ::NameError
18
- false
19
- end
20
- end
21
- end
22
- def datasets
23
- undifferentiated_datasets - beta_datasets
24
- end
25
- def beta_datasets
26
- undifferentiated_datasets.select do |name|
27
- begin
28
- "::#{name}::BETA".constantize == true
29
- rescue ::NameError
30
- false
31
- end
32
- end
33
- end
34
- private
35
- def undifferentiated_resources
36
11
  ::Dir[::File.expand_path(::File.join(::File.dirname(::Gem.required_location('earth', 'earth.rb')), 'earth', '**', '*.rb'))].select { |f| ::File.read(f) =~ /class [\:A-Za-z0-9]+ < ActiveRecord::Base/ }.map { |path| ::File.basename(path, '.rb').camelcase }.sort
37
12
  end
38
- def undifferentiated_datasets
13
+ def datasets
39
14
  ::Dir[::File.expand_path(::File.join(::Rails.root, 'app', 'models', '**', '*.rb'))].select { |f| ::File.read(f) =~ /class [\:A-Za-z0-9]+ < Dataset/ }.map { |path| ::File.basename(path, '.rb').camelcase }.sort
40
15
  end
41
16
  end
@@ -11,87 +11,83 @@ end if ::ActiveSupport::VERSION::MAJOR == 3
11
11
 
12
12
  module BrighterPlanet
13
13
  class Metadata
14
+ autoload :AuthoritativeDnsResolver, 'brighter_planet_metadata/authoritative_dns_resolver'
15
+
14
16
  include ::Singleton
15
17
  LIVE_URL = {
16
18
  'datasets' => 'http://data.brighterplanet.com/datasets.json',
17
- 'beta_datasets' => 'http://data.brighterplanet.com/datasets.json',
18
19
  'emitters' => 'http://carbon.brighterplanet.com/emitters.json',
19
- 'beta_emitters' => 'http://carbon.brighterplanet.com/emitters.json',
20
20
  'certified_emitters' => 'http://certified.carbon.brighterplanet.com/emitters.json',
21
21
  'resources' => 'http://data.brighterplanet.com/resources.json',
22
- 'beta_resources' => 'http://data.brighterplanet.com/resources.json',
22
+ 'protocols' => 'http://carbon.brighterplanet.com/protocols.json',
23
+ 'color' => 'http://carbon.brighterplanet.com/color.json'
23
24
  }.freeze
24
25
 
25
- # sabshere 2/2/11 fallbacks current as of today
26
+ # sabshere 2/4/11 obv these have to be updated with some regularity
26
27
  FALLBACK = {
27
- 'datasets' => %w{ },
28
- 'beta_datasets' => %w{ AutomobileIndustry FlightIndustry },
29
- 'emitters' => %w{ Automobile AutomobileTrip BusTrip Computation Diet Flight FuelPurchase Lodging Meeting Motorcycle Pet Purchase RailTrip Residence Shipment },
30
- 'beta_emitters' => %w{ },
28
+ 'datasets' => %w{ AutomobileIndustry FlightIndustry },
29
+ 'emitters' => %w{ Automobile AutomobileTrip BusTrip Computation Diet ElectricityUse Flight FuelPurchase Lodging Meeting Motorcycle Pet Purchase RailTrip Residence Shipment },
31
30
  'certified_emitters' => %w{ },
32
31
  'resources' => %w{ AirConditionerUse Aircraft AircraftClass AircraftManufacturer Airline Airport AutomobileFuelType AutomobileMake AutomobileMakeFleetYear AutomobileMakeModel AutomobileMakeModelYear AutomobileMakeModelYearVariant AutomobileMakeYear AutomobileSizeClass AutomobileSizeClassYear AutomobileTypeFuelAge AutomobileTypeFuelControl AutomobileTypeFuelYear AutomobileTypeFuelYearControl AutomobileTypeYear Breed BreedGender BusClass Carrier CarrierMode CensusDivision CensusRegion ClimateDivision ClothesMachineUse ComputationPlatform Country DataCenterCompany DietClass DishwasherUse EgridRegion EgridSubregion FlightDistanceClass FlightFuelType FlightSeatClass FlightSegment FoodGroup FuelPrice FuelType FuelYear Gender GreenhouseGas Industry IndustryProduct IndustryProductLine IndustrySector LodgingClass Merchant MerchantCategory MerchantCategoryIndustry PetroleumAdministrationForDefenseDistrict ProductLine ProductLineIndustryProduct RailClass ResidenceAppliance ResidenceClass ResidenceFuelPrice ResidenceFuelType ResidentialEnergyConsumptionSurveyResponse Sector ServerType ServerTypeAlias ShipmentMode Species State Urbanity ZipCode },
33
- 'beta_resources' => %w{ },
32
+ 'protocols' => { 'ghg_protocol_scope_3' => 'Greenhouse Gas Protocol Scope 3', 'iso' => 'ISO 14064-1', 'tcr' => 'The Climate Registry', 'ghg_protocol_scope_1' => 'Greenhouse Gas Protocol Scope 1' },
33
+ 'color' => 'unknown'
34
34
  }.freeze
35
35
 
36
- # What beta_resources are available.
37
- def beta_resources
38
- authoritative_list_or_fallback 'beta_resources'
39
- end
40
-
41
36
  # What resources are available.
42
37
  def resources
43
- authoritative_list_or_fallback 'resources'
38
+ deep_copy_of_authoritative_value_or_fallback 'resources'
44
39
  end
45
40
 
46
41
  # What certified_emitters are available.
47
42
  def certified_emitters
48
- authoritative_list_or_fallback 'certified_emitters'
49
- end
50
-
51
- # What beta_emitters are available.
52
- def beta_emitters
53
- authoritative_list_or_fallback 'beta_emitters'
43
+ deep_copy_of_authoritative_value_or_fallback 'certified_emitters'
54
44
  end
55
45
 
56
46
  # What emitters are available.
57
47
  def emitters
58
- authoritative_list_or_fallback 'emitters'
48
+ deep_copy_of_authoritative_value_or_fallback 'emitters'
59
49
  end
60
50
 
61
51
  # What datasets are available.
62
52
  def datasets
63
- authoritative_list_or_fallback 'datasets'
53
+ deep_copy_of_authoritative_value_or_fallback 'datasets'
64
54
  end
65
-
66
- # What beta_datasets are available.
67
- def beta_datasets
68
- authoritative_list_or_fallback 'beta_datasets'
55
+
56
+ # What protocols are recognized
57
+ def protocols
58
+ deep_copy_of_authoritative_value_or_fallback 'protocols'
69
59
  end
70
-
60
+
61
+ # What 'color' the emission estimate service is today.
62
+ def color
63
+ deep_copy_of_authoritative_value_or_fallback 'color'
64
+ end
65
+
71
66
  # Clear out any cached values
72
67
  def refresh
73
- instance_variables.each { |ivar_name| instance_variable_set ivar_name, nil }
68
+ # instance_variables.each { |ivar_name| instance_variable_set ivar_name, nil }
69
+ clear_method_cache :authoritative_value_or_fallback
74
70
  end
75
71
 
76
72
  private
77
73
 
78
- autoload :Cm1Adapter, 'brighter_planet_metadata/cm1_adapter'
79
- def cm1_adapter
80
- Cm1Adapter.instance
74
+ autoload :Cm1Authority, 'brighter_planet_metadata/cm1_authority'
75
+ def cm1_authority
76
+ Cm1Authority.instance
81
77
  end
82
78
 
83
- autoload :Data1Adapter, 'brighter_planet_metadata/data1_adapter'
84
- def data1_adapter
85
- Data1Adapter.instance
79
+ autoload :Data1Authority, 'brighter_planet_metadata/data1_authority'
80
+ def data1_authority
81
+ Data1Authority.instance
86
82
  end
87
83
 
88
- def adapters
89
- [ cm1_adapter, data1_adapter ]
84
+ def authorities
85
+ [ cm1_authority, data1_authority ]
90
86
  end
91
87
 
92
88
  # A universe of operation, for example an EngineYard AppCloud "environment"
93
89
  def universe
94
- @universe ||= if ::ENV['BRIGHTER_PLANET_METADATA_FORCE_UNIVERSE'].present?
90
+ if ::ENV['BRIGHTER_PLANET_METADATA_FORCE_UNIVERSE'].present?
95
91
  ::ENV['BRIGHTER_PLANET_METADATA_FORCE_UNIVERSE']
96
92
  elsif ::File.readable? '/etc/brighterplanet/universe'
97
93
  ::File.read('/etc/brighterplanet/universe').chomp
@@ -100,27 +96,36 @@ module BrighterPlanet
100
96
  end
101
97
  end
102
98
 
99
+ def deep_copy_of_authoritative_value_or_fallback(k)
100
+ v = authoritative_value_or_fallback k
101
+ case v
102
+ when ::Hash
103
+ ::Hash[(v.map { |k, vv| [ k.to_s.dup, vv.to_s.dup] })]
104
+ when ::Array
105
+ v.map { |vv| vv.to_s.dup }
106
+ when ::String, ::Symbol
107
+ v.to_s.dup
108
+ else
109
+ raise "i only handle arrays of strings, hashes of strings, and strings"
110
+ end
111
+ end
112
+
103
113
  # Used internally to pull a live list of emitters/datasets/etc. or fall back to a static one.
104
- def authoritative_list_or_fallback(k)
114
+ def authoritative_value_or_fallback(k)
105
115
  k = k.to_s
106
- ivar_name = :"@#{k}"
107
- if cached_v = instance_variable_get(ivar_name) and cached_v.is_a?(::Array)
108
- return cached_v.map(&:dup) # deep copy of an array with strings
109
- end
110
- v = if adapter = adapters.detect { |a| a.authority? universe, k }
111
- adapter.send k
116
+ if (authority = authorities.detect { |a| a.authority? universe, k })
117
+ authority.send k
112
118
  else
113
119
  begin
114
120
  hsh = ::ActiveSupport::JSON.decode eat(LIVE_URL[k])
115
- raise unless hsh.has_key? k
116
- hsh[k]
121
+ kk = (k == 'certified_emitters') ? 'emitters' : k # the certified response will contain an 'emitters' key
122
+ raise unless hsh.has_key? kk
123
+ hsh[kk]
117
124
  rescue
118
125
  FALLBACK[k]
119
126
  end
120
127
  end
121
- raise "Unknown key #{k}" unless v.is_a? ::Array
122
- instance_variable_set ivar_name, v
123
- authoritative_list_or_fallback k
124
128
  end
129
+ cache_method :authoritative_value_or_fallback, 60
125
130
  end
126
131
  end
@@ -1,3 +1,3 @@
1
1
  module BrighterPlanetMetadata
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,3 +1,5 @@
1
+ require 'cache_method'
2
+
1
3
  module BrighterPlanet
2
4
  autoload :Metadata, 'brighter_planet_metadata/metadata'
3
5
  def self.metadata
@@ -8,12 +10,9 @@ end
8
10
  # sabshere 2/2/11 in case we ever want to define these directly on BrighterPlanet
9
11
  # %w{
10
12
  # datasets
11
- # beta_datasets
12
13
  # emitters
13
- # beta_emitters
14
14
  # certified_emitters
15
15
  # resources
16
- # beta_resources
17
16
  # }.each do |method_id|
18
17
  # eval %{
19
18
  # def self.#{method_id}
data/test/helper.rb CHANGED
@@ -2,7 +2,6 @@ require 'rubygems'
2
2
  require 'bundler'
3
3
  Bundler.setup
4
4
  require 'test/unit'
5
- require 'ruby-debug'
6
5
  require 'fakeweb'
7
6
  require 'fakefs/safe'
8
7
  require 'fileutils'
@@ -10,6 +10,7 @@ class TestFallback < Test::Unit::TestCase
10
10
  'http://carbon.brighterplanet.com/emitters.json',
11
11
  'http://certified.carbon.brighterplanet.com/emitters.json',
12
12
  'http://data.brighterplanet.com/resources.json',
13
+ 'http://carbon.brighterplanet.com/protocols.json',
13
14
  ].each do |url|
14
15
  FakeWeb.register_uri :get,
15
16
  url,
@@ -18,10 +19,6 @@ class TestFallback < Test::Unit::TestCase
18
19
  end
19
20
  end
20
21
 
21
- def test_beta_datasets
22
- assert ::BrighterPlanet.metadata.beta_datasets.include? 'AutomobileIndustry'
23
- end
24
-
25
22
  def test_emitters
26
23
  assert ::BrighterPlanet.metadata.emitters.include? 'AutomobileTrip'
27
24
  end
@@ -29,4 +26,12 @@ class TestFallback < Test::Unit::TestCase
29
26
  def test_resources
30
27
  assert ::BrighterPlanet.metadata.resources.include? 'AutomobileMake'
31
28
  end
29
+
30
+ def test_datasets
31
+ assert ::BrighterPlanet.metadata.datasets.include? 'AutomobileIndustry'
32
+ end
33
+
34
+ def test_protocols
35
+ assert ::BrighterPlanet.metadata.protocols.values.include? 'The Climate Registry'
36
+ end
32
37
  end
@@ -6,10 +6,6 @@ module BrighterPlanet
6
6
  module LiveCm1Emitter
7
7
  extend BrighterPlanet::Emitter
8
8
  end
9
- module LiveCm1BetaEmitter
10
- extend BrighterPlanet::Emitter
11
- BETA = true
12
- end
13
9
  end
14
10
 
15
11
  class TestLiveCm1 < Test::Unit::TestCase
@@ -25,14 +21,14 @@ class TestLiveCm1 < Test::Unit::TestCase
25
21
  end
26
22
 
27
23
  def test_authority
28
- assert ::BrighterPlanet::Metadata::Cm1Adapter.instance.authority?('cm1_production', 'emitters')
24
+ assert ::BrighterPlanet::Metadata::Cm1Authority.instance.authority?('cm1_production', 'emitters')
29
25
 
30
26
  # you don't have authority to say what's certified...
31
- assert !::BrighterPlanet::Metadata::Cm1Adapter.instance.authority?('cm1_production', 'certified_emitters')
27
+ assert !::BrighterPlanet::Metadata::Cm1Authority.instance.authority?('cm1_production', 'certified_emitters')
32
28
 
33
29
  # now you do
34
30
  Rails.application.certified = true
35
- assert ::BrighterPlanet::Metadata::Cm1Adapter.instance.authority?('cm1_production', 'certified_emitters')
31
+ assert ::BrighterPlanet::Metadata::Cm1Authority.instance.authority?('cm1_production', 'certified_emitters')
36
32
  ensure
37
33
  Rails.application.certified = false
38
34
  end
@@ -41,16 +37,17 @@ class TestLiveCm1 < Test::Unit::TestCase
41
37
  assert_equal %w{LiveCm1Emitter}, ::BrighterPlanet.metadata.emitters
42
38
  end
43
39
 
44
- def test_beta_emitters
45
- assert_equal %w{LiveCm1BetaEmitter}, ::BrighterPlanet.metadata.beta_emitters
40
+ def test_what_must_come_from_other_sources
41
+ assert_equal ::BrighterPlanet::Metadata::FALLBACK['resources'], ::BrighterPlanet.metadata.resources
46
42
  end
47
43
 
48
- def test_what_must_come_from_other_sources
44
+ # note: you still get a list of certified emitters! the point is that you, as the edge server, don't decide which ones they are
45
+ # in other words, nothing is ever certified unless Rails.application.certified?
46
+ def test_certified_emitters_as_if_on_edge
49
47
  assert_equal ::BrighterPlanet::Metadata::FALLBACK['certified_emitters'], ::BrighterPlanet.metadata.certified_emitters
50
- assert_equal ::BrighterPlanet::Metadata::FALLBACK['resources'], ::BrighterPlanet.metadata.resources
51
48
  end
52
-
53
- def test_certified_emitters_as_though_from_certified
49
+
50
+ def test_certified_emitters_as_if_on_certified
54
51
  Rails.application.certified = true
55
52
  assert_equal %w{LiveCm1Emitter}, ::BrighterPlanet.metadata.certified_emitters
56
53
  ensure
@@ -19,11 +19,6 @@ class TestLiveData1 < Test::Unit::TestCase
19
19
  File.open(fake_resource_path, 'w') { |f| f.write "class ::LiveData1Resource < ActiveRecord::Base; end"}
20
20
  eval File.read(fake_resource_path) unless defined?(::LiveData1Resource)
21
21
 
22
- # fake what looks like a beta resource
23
- fake_beta_resource_path = File.join earth_gem_path, 'lib', 'earth', 'live_data1_beta_resource.rb'
24
- File.open(fake_beta_resource_path, 'w') { |f| f.write "class ::LiveData1BetaResource < ActiveRecord::Base; BETA = true; end"}
25
- eval File.read(fake_beta_resource_path) unless defined?(::LiveData1BetaResource)
26
-
27
22
  # FAKING DATASETS
28
23
  ::Rails.root = '/data/data1/current'
29
24
  eval "class ::Dataset; end"
@@ -32,12 +27,7 @@ class TestLiveData1 < Test::Unit::TestCase
32
27
  fake_dataset_path = File.join ::Rails.root, 'app', 'models', 'live_data1_dataset.rb'
33
28
  File.open(fake_dataset_path, 'w') { |f| f.write "class ::LiveData1Dataset < Dataset; end"}
34
29
  eval File.read(fake_dataset_path) unless defined?(::LiveData1Dataset)
35
-
36
- # fake what looks like a beta dataset
37
- fake_beta_dataset_path = File.join ::Rails.root, 'app', 'models', 'live_data1_beta_dataset.rb'
38
- File.open(fake_beta_dataset_path, 'w') { |f| f.write "class ::LiveData1BetaDataset < Dataset; BETA = true; end"}
39
- eval File.read(fake_beta_dataset_path) unless defined?(::LiveData1BetaDataset)
40
-
30
+
41
31
  # FAKING A UNIVERSE
42
32
  FileUtils.mkdir_p '/etc/brighterplanet'
43
33
  File.open('/etc/brighterplanet/universe', 'w') { |f| f.write 'data1_production' }
@@ -48,30 +38,17 @@ class TestLiveData1 < Test::Unit::TestCase
48
38
  end
49
39
 
50
40
  def test_authority
51
- assert ::BrighterPlanet.metadata.send(:data1_adapter).authority?('data1_production', 'resources')
52
- assert ::BrighterPlanet.metadata.send(:data1_adapter).authority?('data1_production', 'beta_resources')
53
- end
54
-
55
- def test_undifferentiated_resources
56
- assert_equal %w{LiveData1BetaResource LiveData1Resource}, ::BrighterPlanet.metadata.send(:data1_adapter).send(:undifferentiated_resources)
41
+ assert ::BrighterPlanet.metadata.send(:data1_authority).authority?('data1_production', 'resources')
57
42
  end
58
43
 
59
44
  def test_resources
60
45
  assert_equal %w{LiveData1Resource}, ::BrighterPlanet.metadata.resources
61
46
  end
62
-
63
- def test_beta_resources
64
- assert_equal %w{LiveData1BetaResource}, ::BrighterPlanet.metadata.beta_resources
65
- end
66
47
 
67
48
  def test_datasets
68
49
  assert_equal %w{LiveData1Dataset}, ::BrighterPlanet.metadata.datasets
69
50
  end
70
51
 
71
- def test_beta_datasets
72
- assert_equal %w{LiveData1BetaDataset}, ::BrighterPlanet.metadata.beta_datasets
73
- end
74
-
75
52
  def test_what_must_come_from_other_sources
76
53
  assert_equal ::BrighterPlanet::Metadata::FALLBACK['emitters'], ::BrighterPlanet.metadata.emitters
77
54
  end
@@ -9,10 +9,12 @@ class TestLiveRemote < Test::Unit::TestCase
9
9
  FakeWeb.clean_registry
10
10
  FakeWeb.allow_net_connect = false
11
11
  {
12
- 'http://data.brighterplanet.com/datasets.json' => { 'datasets' => %w{ LiveRemoteDataset }, 'beta_datasets' => %w{ LiveRemoteBetaDataset } },
13
- 'http://carbon.brighterplanet.com/emitters.json' => { 'emitters' => %w{ LiveRemoteEmitter }, 'beta_emitters' => %w{ LiveRemoteBetaEmitter }, 'certified_emitters' => %w{ } },
14
- 'http://certified.carbon.brighterplanet.com/emitters.json' => { 'emitters' => %w{ LiveRemoteCertifiedEmitter }, 'beta_emitters' => %w{ }, 'certified_emitters' => %w{ LiveRemoteCertifiedEmitter } },
15
- 'http://data.brighterplanet.com/resources.json' => { 'resources' => %w{ LiveRemoteResource }, 'beta_resources' => %w{ LiveRemoteBetaResource } },
12
+ 'http://data.brighterplanet.com/datasets.json' => { 'datasets' => %w{ LiveRemoteDataset } },
13
+ 'http://carbon.brighterplanet.com/emitters.json' => { 'emitters' => %w{ LiveRemoteEmitter } },
14
+ 'http://certified.carbon.brighterplanet.com/emitters.json' => { 'emitters' => %w{ LiveRemoteCertifiedEmitter } },
15
+ 'http://data.brighterplanet.com/resources.json' => { 'resources' => %w{ LiveRemoteResource } },
16
+ 'http://carbon.brighterplanet.com/protocols.json' => { 'protocols' => { 'fooprotocol' => 'Foo Protocol' } },
17
+ 'http://carbon.brighterplanet.com/color.json' => { 'color' => 'magenta'}
16
18
  }.each do |url, hsh|
17
19
  FakeWeb.register_uri :get,
18
20
  url,
@@ -34,12 +36,9 @@ class TestLiveRemote < Test::Unit::TestCase
34
36
 
35
37
  %w{
36
38
  datasets
37
- beta_datasets
38
39
  emitters
39
- beta_emitters
40
40
  certified_emitters
41
41
  resources
42
- beta_resources
43
42
  }.each do |kind|
44
43
  eval %{
45
44
  def test_#{kind}
@@ -47,4 +46,12 @@ class TestLiveRemote < Test::Unit::TestCase
47
46
  end
48
47
  }
49
48
  end
49
+
50
+ def test_protocols
51
+ assert ::BrighterPlanet.metadata.protocols.values.include?('Foo Protocol')
52
+ end
53
+
54
+ def test_color
55
+ assert_equal 'magenta', ::BrighterPlanet.metadata.color
56
+ end
50
57
  end
data/test/test_real.rb CHANGED
@@ -7,14 +7,12 @@ class TestReal < Test::Unit::TestCase
7
7
  FakeWeb.clean_registry
8
8
  FakeWeb.allow_net_connect = true
9
9
  $old_fallback = BrighterPlanet::Metadata::FALLBACK
10
- $stderr.puts "clearing fallbacks..."
11
- BrighterPlanet::Metadata.const_set 'FALLBACK', Hash.new([])
10
+ silence_warnings { BrighterPlanet::Metadata.const_set 'FALLBACK', Hash.new([]) }
12
11
  end
13
12
 
14
13
  def teardown
15
14
  super
16
- $stderr.puts "restoring fallbacks..."
17
- BrighterPlanet::Metadata.const_set 'FALLBACK', $old_fallback
15
+ silence_warnings { BrighterPlanet::Metadata.const_set 'FALLBACK', $old_fallback }
18
16
  end
19
17
 
20
18
  def test_emitters
@@ -26,6 +24,14 @@ class TestReal < Test::Unit::TestCase
26
24
  end
27
25
 
28
26
  def test_datasets
29
- assert ::BrighterPlanet.metadata.beta_datasets.include?('AutomobileIndustry')
27
+ assert ::BrighterPlanet.metadata.datasets.include?('AutomobileIndustry')
28
+ end
29
+
30
+ def test_protocols
31
+ assert ::BrighterPlanet.metadata.protocols.values.include?('The Climate Registry')
32
+ end
33
+
34
+ def test_color
35
+ assert %w{ red blue }.include?(::BrighterPlanet.metadata.color)
30
36
  end
31
37
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brighter_planet_metadata
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease: false
4
+ hash: 27
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Seamus Abshere
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-03 00:00:00 -06:00
18
+ date: 2011-03-25 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -63,7 +63,7 @@ dependencies:
63
63
  type: :runtime
64
64
  version_requirements: *id003
65
65
  - !ruby/object:Gem::Dependency
66
- name: fakeweb
66
+ name: cache_method
67
67
  prerelease: false
68
68
  requirement: &id004 !ruby/object:Gem::Requirement
69
69
  none: false
@@ -74,10 +74,10 @@ dependencies:
74
74
  segments:
75
75
  - 0
76
76
  version: "0"
77
- type: :development
77
+ type: :runtime
78
78
  version_requirements: *id004
79
79
  - !ruby/object:Gem::Dependency
80
- name: test-unit
80
+ name: fakeweb
81
81
  prerelease: false
82
82
  requirement: &id005 !ruby/object:Gem::Requirement
83
83
  none: false
@@ -91,7 +91,7 @@ dependencies:
91
91
  type: :development
92
92
  version_requirements: *id005
93
93
  - !ruby/object:Gem::Dependency
94
- name: fakefs
94
+ name: test-unit
95
95
  prerelease: false
96
96
  requirement: &id006 !ruby/object:Gem::Requirement
97
97
  none: false
@@ -105,7 +105,7 @@ dependencies:
105
105
  type: :development
106
106
  version_requirements: *id006
107
107
  - !ruby/object:Gem::Dependency
108
- name: earth
108
+ name: fakefs
109
109
  prerelease: false
110
110
  requirement: &id007 !ruby/object:Gem::Requirement
111
111
  none: false
@@ -119,7 +119,7 @@ dependencies:
119
119
  type: :development
120
120
  version_requirements: *id007
121
121
  - !ruby/object:Gem::Dependency
122
- name: fastercsv
122
+ name: earth
123
123
  prerelease: false
124
124
  requirement: &id008 !ruby/object:Gem::Requirement
125
125
  none: false
@@ -133,7 +133,7 @@ dependencies:
133
133
  type: :development
134
134
  version_requirements: *id008
135
135
  - !ruby/object:Gem::Dependency
136
- name: ruby-debug
136
+ name: fastercsv
137
137
  prerelease: false
138
138
  requirement: &id009 !ruby/object:Gem::Requirement
139
139
  none: false
@@ -162,8 +162,9 @@ files:
162
162
  - bin/brighter_planet_metadata
163
163
  - brighter_planet_metadata.gemspec
164
164
  - lib/brighter_planet_metadata.rb
165
- - lib/brighter_planet_metadata/cm1_adapter.rb
166
- - lib/brighter_planet_metadata/data1_adapter.rb
165
+ - lib/brighter_planet_metadata/authoritative_dns_resolver.rb
166
+ - lib/brighter_planet_metadata/cm1_authority.rb
167
+ - lib/brighter_planet_metadata/data1_authority.rb
167
168
  - lib/brighter_planet_metadata/metadata.rb
168
169
  - lib/brighter_planet_metadata/version.rb
169
170
  - test/helper.rb
@@ -204,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
205
  requirements: []
205
206
 
206
207
  rubyforge_project: brighter_planet_metadata
207
- rubygems_version: 1.3.7
208
+ rubygems_version: 1.6.2
208
209
  signing_key:
209
210
  specification_version: 3
210
211
  summary: Names of Brighter Planet things