earth 0.0.40 → 0.0.41
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/earth.rb +30 -64
- data/lib/earth/air/aircraft/data_miner.rb +22 -9
- data/lib/earth/air/flight_segment/data_miner.rb +0 -4
- data/lib/earth/automobile/automobile_variant/data_miner.rb +2 -6
- data/lib/earth/industry/sector/data_miner.rb +1 -2
- data/lib/earth/locality/census_division.rb +5 -0
- data/lib/earth/locality/census_division/data_miner.rb +10 -15
- data/lib/earth/residence/residence_fuel_type.rb +0 -1
- data/lib/earth/residence/residential_energy_consumption_survey_response/data_miner.rb +0 -4
- data/spec/lib/earth_spec.rb +2 -2
- metadata +5 -6
- data/lib/earth/schema.rb +0 -8
data/lib/earth.rb
CHANGED
@@ -24,62 +24,18 @@ module Earth
|
|
24
24
|
def taps_server=(val)
|
25
25
|
@taps_server = val
|
26
26
|
end
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
Airport,
|
36
|
-
AutomobileFuelType,
|
37
|
-
AutomobileMake,
|
38
|
-
AutomobileMakeFleetYear,
|
39
|
-
AutomobileMakeYear,
|
40
|
-
AutomobileModel,
|
41
|
-
AutomobileModelYear,
|
42
|
-
AutomobileSizeClass,
|
43
|
-
AutomobileVariant,
|
44
|
-
Breed,
|
45
|
-
BreedGender,
|
46
|
-
BusClass,
|
47
|
-
CensusDivision,
|
48
|
-
CensusRegion,
|
49
|
-
ClimateDivision,
|
50
|
-
ClothesMachineUse,
|
51
|
-
Country,
|
52
|
-
DietClass,
|
53
|
-
DishwasherUse,
|
54
|
-
EgridRegion,
|
55
|
-
EgridSubregion,
|
56
|
-
FlightConfiguration,
|
57
|
-
FlightDistanceClass,
|
58
|
-
FlightDomesticity,
|
59
|
-
FlightFuelType,
|
60
|
-
FlightPropulsion,
|
61
|
-
FlightSeatClass,
|
62
|
-
FlightSegment,
|
63
|
-
FlightService,
|
64
|
-
FoodGroup,
|
65
|
-
Gender,
|
66
|
-
LodgingClass,
|
67
|
-
PetroleumAdministrationForDefenseDistrict,
|
68
|
-
RailClass,
|
69
|
-
ResidenceAppliance,
|
70
|
-
ResidenceClass,
|
71
|
-
ResidenceFuelPrice,
|
72
|
-
ResidenceFuelType,
|
73
|
-
ResidentialEnergyConsumptionSurveyResponse,
|
74
|
-
Species,
|
75
|
-
State,
|
76
|
-
Urbanity,
|
77
|
-
ZipCode
|
78
|
-
]
|
27
|
+
|
28
|
+
# Takes argument like Earth.resource_names(['air'])
|
29
|
+
# Default is search all domains
|
30
|
+
# For example, <tt>[ 'Aircraft', 'Airline' ]</tt>
|
31
|
+
def resource_names(search_domains = nil)
|
32
|
+
(search_domains || domains).map do |domain|
|
33
|
+
Dir[File.join(Earth.gem_root, 'lib', 'earth', domain, '*.rb')]
|
34
|
+
end.flatten.uniq.map { |p| File.basename(p, '.rb').camelcase } - %w{ DataMiner }
|
79
35
|
end
|
80
36
|
|
81
|
-
def
|
82
|
-
File.join(File.dirname(__FILE__), '..')
|
37
|
+
def gem_root
|
38
|
+
File.expand_path File.join(File.dirname(__FILE__), '..')
|
83
39
|
end
|
84
40
|
|
85
41
|
def domains
|
@@ -121,6 +77,7 @@ module Earth
|
|
121
77
|
private
|
122
78
|
def load_domains(domains, options)
|
123
79
|
if domains.empty? or domains.include?(:all)
|
80
|
+
# sabshere 9/16/10 why maintain this separately?
|
124
81
|
require 'earth/all'
|
125
82
|
require 'earth/data_miner' if options[:apply_schemas] or options[:load_data_miner]
|
126
83
|
elsif !domains.include?(:none)
|
@@ -133,24 +90,33 @@ private
|
|
133
90
|
|
134
91
|
def load_plugins
|
135
92
|
require 'earth/active_record_ext'
|
136
|
-
Dir[File.join(Earth.
|
93
|
+
Dir[File.join(Earth.gem_root, 'vendor', '**', 'init.rb')].each do |pluginit|
|
137
94
|
$:.unshift File.join(File.dirname(pluginit), 'lib')
|
138
95
|
load pluginit
|
139
96
|
end
|
140
97
|
end
|
141
98
|
|
142
99
|
def load_schemas
|
143
|
-
|
100
|
+
force_fallback_table
|
144
101
|
load_data_miner_schemas
|
145
102
|
end
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
103
|
+
|
104
|
+
# sabshere 9/17/10 this sucks. the falls_back_on gem sucks.
|
105
|
+
def force_fallback_table
|
106
|
+
c = ActiveRecord::Base.connection
|
107
|
+
if c.table_exists? 'fallbacks'
|
108
|
+
raise "The earth gem expects a different schema for the fallbacks table." unless c.column_exists?('fallbacks', 'name') and
|
109
|
+
c.column_exists?('fallbacks', 'values') and
|
110
|
+
c.column_exists?('fallbacks', 'created_at') and
|
111
|
+
c.column_exists?('fallbacks', 'updated_at')
|
112
|
+
else
|
113
|
+
c.create_table 'fallbacks' do |t|
|
114
|
+
t.string 'name'
|
115
|
+
t.text 'values'
|
116
|
+
t.datetime 'created_at'
|
117
|
+
t.datetime 'updated_at'
|
118
|
+
end
|
119
|
+
end
|
154
120
|
end
|
155
121
|
|
156
122
|
def load_data_miner_schemas
|
@@ -1,4 +1,24 @@
|
|
1
1
|
Aircraft.class_eval do
|
2
|
+
|
3
|
+
# TODO use http://www.transtats.bts.gov/Download_Lookup.asp?Lookup=L_AIRCRAFT_TYPE
|
4
|
+
def self.bts_name_dictionary
|
5
|
+
@_bts_dictionary ||= LooseTightDictionary.new RemoteTable.new(:url => 'http://www.transtats.bts.gov/Download_Lookup.asp?Lookup=L_AIRCRAFT_TYPE', :select => lambda { |record| record['Code'].to_i.between?(1, 998) }),
|
6
|
+
:tightenings => RemoteTable.new(:url => 'http://spreadsheets.google.com/pub?key=tiS_6CCDDM_drNphpYwE_iw&single=true&gid=0&output=csv', :headers => false),
|
7
|
+
:identities => RemoteTable.new(:url => 'http://spreadsheets.google.com/pub?key=tiS_6CCDDM_drNphpYwE_iw&single=true&gid=3&output=csv', :headers => false),
|
8
|
+
:blockings => RemoteTable.new(:url => 'http://spreadsheets.google.com/pub?key=tiS_6CCDDM_drNphpYwE_iw&single=true&gid=4&output=csv', :headers => false),
|
9
|
+
:blocking_only => true,
|
10
|
+
:right_reader => lambda { |record| record['Description'] }
|
11
|
+
end
|
12
|
+
|
13
|
+
# warning: self-referential, assumes it will be used once first import step is done
|
14
|
+
def self.icao_name_dictionary
|
15
|
+
@_icao_dictionary ||= LooseTightDictionary.new Aircraft.all,
|
16
|
+
:tightenings => RemoteTable.new(:url => 'http://spreadsheets.google.com/pub?key=tiS_6CCDDM_drNphpYwE_iw&single=true&gid=0&output=csv', :headers => false),
|
17
|
+
:identities => RemoteTable.new(:url => 'http://spreadsheets.google.com/pub?key=tiS_6CCDDM_drNphpYwE_iw&single=true&gid=3&output=csv', :headers => false),
|
18
|
+
:blockings => RemoteTable.new(:url => 'http://spreadsheets.google.com/pub?key=tiS_6CCDDM_drNphpYwE_iw&single=true&gid=4&output=csv', :headers => false),
|
19
|
+
:right_reader => lambda { |record| record.manufacturer_name.to_s + ' ' + record.name.to_s }
|
20
|
+
end
|
21
|
+
|
2
22
|
class Aircraft::BtsMatcher
|
3
23
|
attr_reader :wants
|
4
24
|
def initialize(wants)
|
@@ -71,10 +91,6 @@ Aircraft.class_eval do
|
|
71
91
|
end
|
72
92
|
|
73
93
|
data_miner do
|
74
|
-
process "Don't re-import too often" do
|
75
|
-
raise DataMiner::Skip unless DataMiner::Run.allowed? Aircraft
|
76
|
-
end
|
77
|
-
|
78
94
|
schema Earth.database_options do
|
79
95
|
string 'icao_code'
|
80
96
|
string 'manufacturer_name'
|
@@ -161,11 +177,8 @@ Aircraft.class_eval do
|
|
161
177
|
update_all "weighting = (#{segments.project(segments[:passengers].sum).where(aircraft[:bts_aircraft_type_code].eq(segments[:bts_aircraft_type_code])).to_sql})"
|
162
178
|
end
|
163
179
|
|
164
|
-
|
165
|
-
|
166
|
-
synthetic_resource.run_data_miner!
|
167
|
-
end
|
180
|
+
process "Synthesize AircraftManufacturer" do
|
181
|
+
AircraftManufacturer.run_data_miner!
|
168
182
|
end
|
169
|
-
|
170
183
|
end
|
171
184
|
end
|
@@ -159,10 +159,6 @@ FlightSegment.class_eval do
|
|
159
159
|
}.gsub /[\s]+/,''
|
160
160
|
|
161
161
|
data_miner do
|
162
|
-
process "Don't re-import too often" do
|
163
|
-
raise DataMiner::Skip unless DataMiner::Run.allowed? FlightSegment
|
164
|
-
end
|
165
|
-
|
166
162
|
schema Earth.database_options do
|
167
163
|
string 'row_hash'
|
168
164
|
string 'propulsion_id'
|
@@ -273,10 +273,6 @@ AutomobileVariant.class_eval do
|
|
273
273
|
end
|
274
274
|
|
275
275
|
data_miner do
|
276
|
-
process "Don't re-import too often" do
|
277
|
-
raise DataMiner::Skip unless DataMiner::Run.allowed? AutomobileVariant
|
278
|
-
end
|
279
|
-
|
280
276
|
schema Earth.database_options do
|
281
277
|
string 'row_hash'
|
282
278
|
string 'name' # short name!
|
@@ -454,9 +450,9 @@ AutomobileVariant.class_eval do
|
|
454
450
|
update_all 'fuel_efficiency_highway = 1 / ((0.001376 / 0.425143707) + (1.3466 / raw_fuel_efficiency_highway))'
|
455
451
|
end
|
456
452
|
|
457
|
-
|
453
|
+
%w{ AutomobileMake AutomobileModelYear AutomobileModel }.each do |synthetic_resource|
|
458
454
|
process "Synthesize #{synthetic_resource}" do
|
459
|
-
synthetic_resource.run_data_miner!
|
455
|
+
synthetic_resource.constantize.run_data_miner!
|
460
456
|
end
|
461
457
|
end
|
462
458
|
end
|
@@ -6,8 +6,7 @@ Sector.class_eval do
|
|
6
6
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdHV2dzdjdGVnLUJCdDA4TURXNThROVE&hl=en&single=true&gid=1&output=csv' do
|
7
7
|
key 'io_code'
|
8
8
|
store 'description'
|
9
|
-
store 'emission_factor'
|
10
|
-
store 'emission_factor_units'
|
9
|
+
store 'emission_factor', :units_field_name => 'emission_factor_units'
|
11
10
|
end
|
12
11
|
end
|
13
12
|
end
|
@@ -7,6 +7,11 @@ class CensusDivision < ActiveRecord::Base
|
|
7
7
|
has_many :climate_divisions, :through => :states
|
8
8
|
has_many :residential_energy_consumption_survey_responses, :foreign_key => 'census_division_number'
|
9
9
|
|
10
|
+
falls_back_on :meeting_building_natural_gas_intensity => 0.011973,
|
11
|
+
:meeting_building_fuel_oil_intensity => 0.0037381,
|
12
|
+
:meeting_building_electricity_intensity => 0.072444,
|
13
|
+
:meeting_building_district_heat_intensity => 3458.7
|
14
|
+
|
10
15
|
data_miner do
|
11
16
|
tap "Brighter Planet's sanitized census divisions", Earth.taps_server
|
12
17
|
|
@@ -22,11 +22,16 @@ CensusDivision.class_eval do
|
|
22
22
|
float 'lodging_building_district_heat_intensity'
|
23
23
|
string 'lodging_building_district_heat_intensity_units'
|
24
24
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
|
26
|
+
process 'Define some unit conversions' do
|
27
|
+
Conversions.register :hundred_cubic_feet_per_square_foot_hour, :cubic_metres_per_square_metre_hour, 30.48
|
28
|
+
Conversions.register :gallons_per_square_foot_hour, :litres_per_square_metre_hour, 40.745833
|
29
|
+
Conversions.register :kilowatt_hours_per_square_foot_hour, :kilowatt_hours_per_square_metre_hour, 10.76391
|
30
|
+
Conversions.register :thousand_btu_per_square_foot_hour, :joules_per_square_metre_hour, 11_356_527
|
31
|
+
Conversions.register :hundred_cubic_feet_per_room_night, :cubic_metres_per_room_night, 2.8317
|
32
|
+
Conversions.register :gallons_per_room_night, :litres_per_room_night, 3.7854
|
33
|
+
Conversions.register :thousand_btu_per_room_night, :joules_per_room_night, 1_055_056
|
34
|
+
end
|
30
35
|
|
31
36
|
import 'the U.S. Census Geographic Terms and Definitions',
|
32
37
|
:url => 'http://www.census.gov/popest/geographic/codes02.csv',
|
@@ -38,16 +43,6 @@ CensusDivision.class_eval do
|
|
38
43
|
store 'census_region_name', :field_name => 'Region', :dictionary => { :input => 'number', :output => 'name', :url => 'http://data.brighterplanet.com/census_regions.csv' }
|
39
44
|
end
|
40
45
|
|
41
|
-
process 'Define some unit conversions' do
|
42
|
-
Conversions.register :hundred_cubic_feet_per_square_foot_hour, :cubic_metres_per_square_metre_hour, 30.48
|
43
|
-
Conversions.register :gallons_per_square_foot_hour, :litres_per_square_metre_hour, 40.745833
|
44
|
-
Conversions.register :kilowatt_hours_per_square_foot_hour, :kilowatt_hours_per_square_metre_hour, 10.76391
|
45
|
-
Conversions.register :thousand_btu_per_square_foot_hour, :joules_per_square_metre_hour, 11_356_527
|
46
|
-
Conversions.register :hundred_cubic_feet_per_room_night, :cubic_metres_per_room_night, 2.8317
|
47
|
-
Conversions.register :gallons_per_room_night, :litres_per_room_night, 3.7854
|
48
|
-
Conversions.register :thousand_btu_per_room_night, :joules_per_room_night, 1_055_056
|
49
|
-
end
|
50
|
-
|
51
46
|
import 'meeting building fuel intensities calculated from CBECS 2003',
|
52
47
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdGotdjgtUEk0eUU0R3lxM1hHdlF1V0E&hl=en&output=csv' do
|
53
48
|
key 'number', :field_name => 'census_division'
|
@@ -1,9 +1,5 @@
|
|
1
1
|
ResidentialEnergyConsumptionSurveyResponse.class_eval do
|
2
2
|
data_miner do
|
3
|
-
process "Don't re-import too often" do
|
4
|
-
raise DataMiner::Skip unless DataMiner::Run.allowed? ResidentialEnergyConsumptionSurveyResponse
|
5
|
-
end
|
6
|
-
|
7
3
|
schema Earth.database_options do
|
8
4
|
integer 'department_of_energy_identifier'
|
9
5
|
string 'residence_class_id'
|
data/spec/lib/earth_spec.rb
CHANGED
@@ -7,13 +7,13 @@ describe Earth do
|
|
7
7
|
|
8
8
|
it 'should require all Earth models' do
|
9
9
|
lambda do
|
10
|
-
Earth.
|
10
|
+
Earth.resource_names.each { |k| k.constantize }
|
11
11
|
end.should_not raise_error(NameError)
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should include data_miner definitions' do
|
15
15
|
lambda do
|
16
|
-
Earth.
|
16
|
+
Earth.resource_names.each { |k| k.constantize.should_receive(:data_miner) }
|
17
17
|
end
|
18
18
|
require 'earth/data_miner'
|
19
19
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: earth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 77
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 41
|
10
|
+
version: 0.0.41
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Seamus Abshere
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-09-
|
20
|
+
date: 2010-09-17 00:00:00 -05:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
requirements:
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
hash:
|
31
|
+
hash: 299253624
|
32
32
|
segments:
|
33
33
|
- 3
|
34
34
|
- 0
|
@@ -366,7 +366,6 @@ files:
|
|
366
366
|
- lib/earth/residence/residence_fuel_type/data_miner.rb
|
367
367
|
- lib/earth/residence/residential_energy_consumption_survey_response.rb
|
368
368
|
- lib/earth/residence/residential_energy_consumption_survey_response/data_miner.rb
|
369
|
-
- lib/earth/schema.rb
|
370
369
|
- vendor/geokit-rails/CHANGELOG.rdoc
|
371
370
|
- vendor/geokit-rails/MIT-LICENSE
|
372
371
|
- vendor/geokit-rails/README.markdown
|