earth 0.5.0 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -5
- data/README.markdown +0 -8
- data/Rakefile +14 -10
- data/bin/earth_tester.rb +12 -12
- data/earth.gemspec +2 -1
- data/features/automobile_make_fleet_year.feature +9 -19
- data/features/automobile_make_model_year.feature +4 -4
- data/features/support/env.rb +11 -7
- data/features/support/imports/automobile_make_fleet_year_bad.csv +1 -1
- data/features/support/imports/automobile_make_fleet_year_good.csv +1 -1
- data/features/support/imports/automobile_make_model_year_bad.csv +1 -1
- data/features/support/imports/automobile_make_model_year_good.csv +1 -1
- data/lib/earth/air/aircraft/data_miner.rb +63 -15
- data/lib/earth/air/aircraft.rb +0 -11
- data/lib/earth/air/aircraft_class/data_miner.rb +0 -13
- data/lib/earth/air/aircraft_class.rb +12 -3
- data/lib/earth/air/aircraft_fuel_use_equation/data_miner.rb +0 -13
- data/lib/earth/air/aircraft_fuel_use_equation.rb +12 -3
- data/lib/earth/air/airline/data_miner.rb +0 -7
- data/lib/earth/air/airline.rb +6 -3
- data/lib/earth/air/airport/data_miner.rb +5 -14
- data/lib/earth/air/airport.rb +9 -7
- data/lib/earth/air/bts_aircraft/data_miner.rb +0 -5
- data/lib/earth/air/bts_aircraft.rb +3 -3
- data/lib/earth/air/data_miner.rb +2 -3
- data/lib/earth/air/flight_distance_class/data_miner.rb +0 -6
- data/lib/earth/air/flight_distance_class.rb +4 -3
- data/lib/earth/air/flight_seat_class/data_miner.rb +0 -7
- data/lib/earth/air/flight_seat_class.rb +6 -3
- data/lib/earth/air/flight_segment/data_miner.rb +30 -112
- data/lib/earth/air/flight_segment.rb +47 -13
- data/lib/earth/air.rb +2 -1
- data/lib/earth/automobile/automobile_fuel/data_miner.rb +1 -25
- data/lib/earth/automobile/automobile_fuel.rb +24 -8
- data/lib/earth/automobile/automobile_make/data_miner.rb +3 -16
- data/lib/earth/automobile/automobile_make.rb +5 -3
- data/lib/earth/automobile/automobile_make_fleet_year/data_miner.rb +16 -30
- data/lib/earth/automobile/automobile_make_fleet_year.rb +10 -7
- data/lib/earth/automobile/automobile_make_model/data_miner.rb +1 -11
- data/lib/earth/automobile/automobile_make_model.rb +9 -7
- data/lib/earth/automobile/automobile_make_model_year/data_miner.rb +4 -17
- data/lib/earth/automobile/automobile_make_model_year.rb +11 -6
- data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +37 -65
- data/lib/earth/automobile/automobile_make_model_year_variant.rb +36 -6
- data/lib/earth/automobile/automobile_make_year/data_miner.rb +3 -15
- data/lib/earth/automobile/automobile_make_year.rb +8 -7
- data/lib/earth/automobile/automobile_size_class/data_miner.rb +0 -15
- data/lib/earth/automobile/automobile_size_class.rb +13 -2
- data/lib/earth/automobile/automobile_size_class_year/data_miner.rb +0 -11
- data/lib/earth/automobile/automobile_size_class_year.rb +10 -3
- data/lib/earth/automobile/automobile_type_fuel_age/data_miner.rb +0 -12
- data/lib/earth/automobile/automobile_type_fuel_age.rb +10 -2
- data/lib/earth/automobile/automobile_type_fuel_control/data_miner.rb +0 -11
- data/lib/earth/automobile/automobile_type_fuel_control.rb +9 -3
- data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +1 -17
- data/lib/earth/automobile/automobile_type_fuel_year.rb +14 -6
- data/lib/earth/automobile/automobile_type_fuel_year_age/data_miner.rb +0 -13
- data/lib/earth/automobile/automobile_type_fuel_year_age.rb +12 -7
- data/lib/earth/automobile/automobile_type_fuel_year_control/data_miner.rb +0 -11
- data/lib/earth/automobile/automobile_type_fuel_year_control.rb +9 -6
- data/lib/earth/automobile/automobile_type_year/data_miner.rb +0 -10
- data/lib/earth/automobile/automobile_type_year.rb +9 -3
- data/lib/earth/bus/bus_class/data_miner.rb +0 -29
- data/lib/earth/bus/bus_class.rb +27 -2
- data/lib/earth/bus/bus_fuel/data_miner.rb +1 -16
- data/lib/earth/bus/bus_fuel.rb +15 -8
- data/lib/earth/bus/bus_fuel_control/data_miner.rb +0 -10
- data/lib/earth/bus/bus_fuel_control.rb +8 -3
- data/lib/earth/bus/bus_fuel_year_control/data_miner.rb +1 -10
- data/lib/earth/bus/bus_fuel_year_control.rb +8 -7
- data/lib/earth/bus/data_miner.rb +2 -0
- data/lib/earth/bus.rb +2 -0
- data/lib/earth/computation/computation_carrier/data_miner.rb +0 -5
- data/lib/earth/computation/computation_carrier.rb +3 -2
- data/lib/earth/computation/computation_carrier_instance_class/data_miner.rb +0 -8
- data/lib/earth/computation/computation_carrier_instance_class.rb +6 -6
- data/lib/earth/computation/computation_carrier_region/data_miner.rb +0 -7
- data/lib/earth/computation/computation_carrier_region.rb +6 -7
- data/lib/earth/computation/data_miner.rb +2 -0
- data/lib/earth/computation.rb +2 -0
- data/lib/earth/diet/diet_class/data_miner.rb +0 -16
- data/lib/earth/diet/diet_class.rb +16 -4
- data/lib/earth/diet/food_group/data_miner.rb +0 -9
- data/lib/earth/diet/food_group.rb +7 -2
- data/lib/earth/fuel/fuel/data_miner.rb +0 -16
- data/lib/earth/fuel/fuel.rb +14 -2
- data/lib/earth/fuel/fuel_price/data_miner.rb +0 -6
- data/lib/earth/fuel/fuel_price.rb +4 -6
- data/lib/earth/fuel/fuel_type/data_miner.rb +0 -14
- data/lib/earth/fuel/fuel_type.rb +14 -4
- data/lib/earth/fuel/fuel_year/data_miner.rb +0 -16
- data/lib/earth/fuel/fuel_year.rb +14 -2
- data/lib/earth/fuel/greenhouse_gas/data_miner.rb +0 -9
- data/lib/earth/fuel/greenhouse_gas.rb +10 -5
- data/lib/earth/hospitality/lodging_class/data_miner.rb +0 -12
- data/lib/earth/hospitality/lodging_class.rb +10 -2
- data/lib/earth/industry/data_miner.rb +0 -0
- data/lib/earth/industry/industry.rb +3 -10
- data/lib/earth/industry/industry_product.rb +6 -13
- data/lib/earth/industry/industry_product_line.rb +5 -12
- data/lib/earth/industry/industry_sector.rb +5 -12
- data/lib/earth/industry/merchant.rb +4 -11
- data/lib/earth/industry/merchant_category.rb +3 -10
- data/lib/earth/industry/merchant_category_industry.rb +5 -12
- data/lib/earth/industry/product_line.rb +5 -12
- data/lib/earth/industry/product_line_industry_product.rb +5 -12
- data/lib/earth/industry/sector.rb +5 -12
- data/lib/earth/locality/census_division/data_miner.rb +0 -23
- data/lib/earth/locality/census_division.rb +21 -6
- data/lib/earth/locality/census_region/data_miner.rb +0 -5
- data/lib/earth/locality/census_region.rb +3 -2
- data/lib/earth/locality/climate_division/data_miner.rb +0 -7
- data/lib/earth/locality/climate_division.rb +5 -7
- data/lib/earth/locality/country/data_miner.rb +16 -29
- data/lib/earth/locality/country.rb +15 -4
- data/lib/earth/locality/data_miner.rb +3 -0
- data/lib/earth/locality/egrid_region/data_miner.rb +0 -5
- data/lib/earth/locality/egrid_region.rb +5 -8
- data/lib/earth/locality/egrid_subregion/data_miner.rb +1 -20
- data/lib/earth/locality/egrid_subregion.rb +17 -6
- data/lib/earth/locality/petroleum_administration_for_defense_district/data_miner.rb +4 -13
- data/lib/earth/locality/petroleum_administration_for_defense_district.rb +8 -4
- data/lib/earth/locality/state/data_miner.rb +0 -8
- data/lib/earth/locality/state.rb +6 -7
- data/lib/earth/locality/urbanity/data_miner.rb +0 -4
- data/lib/earth/locality/urbanity.rb +2 -2
- data/lib/earth/locality/zip_code/data_miner.rb +0 -10
- data/lib/earth/locality/zip_code.rb +8 -6
- data/lib/earth/locality.rb +3 -0
- data/lib/earth/pet/breed/data_miner.rb +0 -7
- data/lib/earth/pet/breed.rb +5 -6
- data/lib/earth/pet/breed_gender/data_miner.rb +0 -8
- data/lib/earth/pet/breed_gender.rb +6 -6
- data/lib/earth/pet/gender/data_miner.rb +0 -3
- data/lib/earth/pet/gender.rb +2 -2
- data/lib/earth/pet/species/data_miner.rb +0 -17
- data/lib/earth/pet/species.rb +17 -4
- data/lib/earth/rail/rail_class/data_miner.rb +0 -14
- data/lib/earth/rail/rail_class.rb +12 -3
- data/lib/earth/residence/air_conditioner_use/data_miner.rb +0 -6
- data/lib/earth/residence/air_conditioner_use.rb +5 -3
- data/lib/earth/residence/clothes_machine_use/data_miner.rb +0 -6
- data/lib/earth/residence/clothes_machine_use.rb +4 -2
- data/lib/earth/residence/data_miner.rb +2 -0
- data/lib/earth/residence/dishwasher_use/data_miner.rb +0 -6
- data/lib/earth/residence/dishwasher_use.rb +5 -3
- data/lib/earth/residence/residence_appliance/data_miner.rb +0 -6
- data/lib/earth/residence/residence_appliance.rb +4 -2
- data/lib/earth/residence/residence_class/data_miner.rb +0 -4
- data/lib/earth/residence/residence_class.rb +2 -2
- data/lib/earth/residence/residence_fuel_price/data_miner.rb +0 -14
- data/lib/earth/residence/residence_fuel_price.rb +12 -7
- data/lib/earth/residence/residence_fuel_type/data_miner.rb +0 -8
- data/lib/earth/residence/residence_fuel_type.rb +6 -2
- data/lib/earth/residence/residential_energy_consumption_survey_response/data_miner.rb +0 -94
- data/lib/earth/residence/residential_energy_consumption_survey_response.rb +92 -6
- data/lib/earth/residence.rb +2 -0
- data/lib/earth/shipping/carrier/data_miner.rb +0 -10
- data/lib/earth/shipping/carrier.rb +8 -2
- data/lib/earth/shipping/carrier_mode/data_miner.rb +0 -10
- data/lib/earth/shipping/carrier_mode.rb +9 -3
- data/lib/earth/shipping/shipment_mode/data_miner.rb +0 -7
- data/lib/earth/shipping/shipment_mode.rb +5 -2
- data/lib/earth/version.rb +1 -1
- data/lib/earth.rb +92 -84
- data/spec/earth/air/aircraft_spec.rb +1 -1
- data/spec/earth_spec.rb +15 -15
- data/spec/spec_helper.rb +12 -9
- metadata +175 -171
- data/lib/earth/active_record_ext.rb +0 -9
- data/lib/earth/air/aircraft_manufacturer/data_miner.rb +0 -21
- data/lib/earth/air/aircraft_manufacturer.rb +0 -7
- data/lib/earth/base.rb +0 -7
data/Gemfile
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
|
1
|
+
gem 'data_miner', :path => ENV['LOCAL_DATA_MINER'] if ENV['LOCAL_DATA_MINER']
|
2
|
+
gem 'create_table', :path => ENV['LOCAL_CREATE_TABLE'] if ENV['LOCAL_CREATE_TABLE']
|
2
3
|
|
3
|
-
|
4
|
-
gemspec
|
4
|
+
source :rubygems
|
5
5
|
|
6
|
-
|
7
|
-
gem 'sniff', :path => ENV['LOCAL_SNIFF'] if ENV['LOCAL_SNIFF']
|
6
|
+
gemspec :path => '.'
|
8
7
|
|
9
8
|
if RUBY_VERSION < "1.9"
|
10
9
|
gem 'fastercsv'
|
data/README.markdown
CHANGED
@@ -11,14 +11,6 @@ The data that these models represent can be pulled from http://data.brighterplan
|
|
11
11
|
ft = AutomobileFuel.first
|
12
12
|
...
|
13
13
|
|
14
|
-
You can also run data imports via the data_miner gem.
|
15
|
-
|
16
|
-
require 'earth'
|
17
|
-
Earth.init :fuel
|
18
|
-
Earth.taps_server # 'http://user:pass@data.brighterplanet.com'
|
19
|
-
|
20
|
-
DataMiner.run :resource_names #> [FuelPrice]</tt>
|
21
|
-
|
22
14
|
## Collaboration cycle
|
23
15
|
Brighter Planet vigorously encourages collaborative improvement of its emitter libraries. Collaboration requires a (free) GitHub account.
|
24
16
|
|
data/Rakefile
CHANGED
@@ -24,11 +24,13 @@ Cucumber::Rake::Task.new(:features) do |t|
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
if RUBY_VERSION =~ /^1\.8/
|
28
|
+
desc "Run cucumber tests with RCov"
|
29
|
+
Cucumber::Rake::Task.new(:features_with_coverage) do |t|
|
30
|
+
t.cucumber_opts = "features --format pretty"
|
31
|
+
t.rcov = true
|
32
|
+
t.rcov_opts = ['--exclude', 'features']
|
33
|
+
end
|
32
34
|
end
|
33
35
|
|
34
36
|
require 'rspec/core/rake_task'
|
@@ -41,11 +43,13 @@ RSpec::Core::RakeTask.new(:examples) do |c|
|
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
if RUBY_VERSION =~ /^1\.8/
|
47
|
+
desc "Run specs with RCov"
|
48
|
+
RSpec::Core::RakeTask.new(:examples_with_coverage) do |t|
|
49
|
+
t.rcov = true
|
50
|
+
t.rcov_opts = ['--exclude', 'spec']
|
51
|
+
t.rspec_opts = '-Ispec'
|
52
|
+
end
|
49
53
|
end
|
50
54
|
|
51
55
|
task :test => [:features, :examples]
|
data/bin/earth_tester.rb
CHANGED
@@ -14,19 +14,19 @@ end
|
|
14
14
|
require 'active_support/all'
|
15
15
|
require 'active_record'
|
16
16
|
|
17
|
-
ActiveRecord::
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
ActiveRecord::Base.establish_connection(
|
18
|
+
'adapter' => 'mysql',
|
19
|
+
'database' => 'test_earth',
|
20
|
+
'username' => 'root',
|
21
|
+
'password' => 'password',
|
22
|
+
'encoding' => 'utf8' # very, very important
|
23
|
+
)
|
23
24
|
|
24
25
|
require 'earth'
|
25
26
|
|
26
|
-
Earth.init :load_data_miner => true, :apply_schemas => true
|
27
|
+
Earth.init ARGV[0], :load_data_miner => true, :apply_schemas => true
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
29
|
+
ActiveRecord::Base.logger = Logger.new $stderr
|
30
|
+
ActiveRecord::Base.logger.level = Logger::INFO
|
31
|
+
|
32
|
+
ARGV[1].camelcase.constantize.run_data_miner!
|
data/earth.gemspec
CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |s|
|
|
36
36
|
s.add_runtime_dependency 'geokit-rails'
|
37
37
|
s.add_runtime_dependency 'loose_tight_dictionary', '>=0.2.3'
|
38
38
|
s.add_runtime_dependency 'weighted_average'
|
39
|
+
s.add_runtime_dependency 'create_table', '>=0.0.2'
|
39
40
|
s.add_development_dependency 'bundler'
|
40
41
|
s.add_development_dependency 'bueller'
|
41
42
|
s.add_development_dependency 'cucumber'
|
@@ -43,6 +44,6 @@ Gem::Specification.new do |s|
|
|
43
44
|
s.add_development_dependency 'rdoc'
|
44
45
|
s.add_development_dependency 'rdoc'
|
45
46
|
s.add_development_dependency 'rspec'
|
46
|
-
s.add_development_dependency 'ruby-debug19'
|
47
47
|
s.add_development_dependency 'sqlite3-ruby'
|
48
|
+
s.add_development_dependency 'mysql' # for bin/earth_tester.rb
|
48
49
|
end
|
@@ -2,42 +2,32 @@ Feature: Data import for AutomobileMakeFleetYear
|
|
2
2
|
As a data user
|
3
3
|
I want to import MakeFleetYear data
|
4
4
|
So that I can perform year-based calculations
|
5
|
-
|
6
|
-
Scenario: Successfully verifying that year is from 1978 to 2009
|
7
|
-
Given a "AutomobileMakeFleetYear" data import fetches results listed in "automobile_make_fleet_year_good"
|
8
|
-
When a data import verifies "Year should be from 1978 to 2009"
|
9
|
-
Then the verification should be successful
|
10
5
|
|
11
|
-
Scenario: Successfully verifying that
|
6
|
+
Scenario: Successfully verifying that year is from 1978 to 2010
|
12
7
|
Given a "AutomobileMakeFleetYear" data import fetches results listed in "automobile_make_fleet_year_good"
|
13
|
-
When a data import verifies "
|
8
|
+
When a data import verifies "Year should be from 1978 to 2010"
|
14
9
|
Then the verification should be successful
|
15
10
|
|
16
|
-
Scenario: Successfully verifying that volume
|
11
|
+
Scenario: Successfully verifying that fuel efficiency and volume are greater than zero
|
17
12
|
Given a "AutomobileMakeFleetYear" data import fetches results listed in "automobile_make_fleet_year_good"
|
18
|
-
When a data import verifies "
|
13
|
+
When a data import verifies "Fuel efficiency and volume should be greater than zero"
|
19
14
|
Then the verification should be successful
|
20
|
-
|
15
|
+
|
21
16
|
Scenario: Successfully verifying that fuel efficiency units are kilometres per litre
|
22
17
|
Given a "AutomobileMakeFleetYear" data import fetches results listed in "automobile_make_fleet_year_good"
|
23
18
|
When a data import verifies "Fuel efficiency units should be kilometres per litre"
|
24
19
|
Then the verification should be successful
|
25
20
|
|
26
|
-
Scenario: Failing to verify that year is from 1978 to
|
21
|
+
Scenario: Failing to verify that year is from 1978 to 2010
|
27
22
|
Given a "AutomobileMakeFleetYear" data import fetches results listed in "automobile_make_fleet_year_bad"
|
28
|
-
When a data import verifies "Year should be from 1978 to
|
23
|
+
When a data import verifies "Year should be from 1978 to 2010"
|
29
24
|
Then the verification should not be successful
|
30
25
|
|
31
|
-
Scenario: Failing to verify that fuel efficiency
|
26
|
+
Scenario: Failing to verify that fuel efficiency and volume are greater than zero
|
32
27
|
Given a "AutomobileMakeFleetYear" data import fetches results listed in "automobile_make_fleet_year_bad"
|
33
|
-
When a data import verifies "Fuel efficiency should be greater than zero"
|
28
|
+
When a data import verifies "Fuel efficiency and volume should be greater than zero"
|
34
29
|
Then the verification should not be successful
|
35
30
|
|
36
|
-
Scenario: Failing to verify that volume is greater than zero
|
37
|
-
Given a "AutomobileMakeFleetYear" data import fetches results listed in "automobile_make_fleet_year_bad"
|
38
|
-
When a data import verifies "Volume should be greater than zero"
|
39
|
-
Then the verification should not be successful
|
40
|
-
|
41
31
|
Scenario: Failing to verify that fuel efficiency units are kilometres per litre
|
42
32
|
Given a "AutomobileMakeFleetYear" data import fetches results listed in "automobile_make_fleet_year_bad"
|
43
33
|
When a data import verifies "Fuel efficiency units should be kilometres per litre"
|
@@ -3,9 +3,9 @@ Feature: Data import for AutomobileMakeModelYear
|
|
3
3
|
I want to import MakeModelYear data
|
4
4
|
So that I can perform model year-based calculations
|
5
5
|
|
6
|
-
Scenario: Successfully verifying that year is from 1985 to
|
6
|
+
Scenario: Successfully verifying that year is from 1985 to 2011
|
7
7
|
Given a "AutomobileMakeModelYear" data import fetches results listed in "automobile_make_model_year_good"
|
8
|
-
When a data import verifies "Year should be from 1985 to
|
8
|
+
When a data import verifies "Year should be from 1985 to 2011"
|
9
9
|
Then the verification should be successful
|
10
10
|
|
11
11
|
Scenario: Successfully verifying that fuel efficiences are greater than zero
|
@@ -18,9 +18,9 @@ Feature: Data import for AutomobileMakeModelYear
|
|
18
18
|
When a data import verifies "Fuel efficiency units should be kilometres per litre"
|
19
19
|
Then the verification should be successful
|
20
20
|
|
21
|
-
Scenario: Failing to verify that year is from 1985 to
|
21
|
+
Scenario: Failing to verify that year is from 1985 to 2011
|
22
22
|
Given a "AutomobileMakeModelYear" data import fetches results listed in "automobile_make_model_year_bad"
|
23
|
-
When a data import verifies "Year should be from 1985 to
|
23
|
+
When a data import verifies "Year should be from 1985 to 2011"
|
24
24
|
Then the verification should not be successful
|
25
25
|
|
26
26
|
Scenario: Failing to verify that fuel efficiences are greater than zero
|
data/features/support/env.rb
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler'
|
3
|
-
|
4
3
|
Bundler.setup
|
5
|
-
|
4
|
+
require 'logger'
|
5
|
+
require 'active_record'
|
6
|
+
require 'data_miner'
|
7
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
8
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
9
|
require 'earth'
|
7
10
|
|
8
|
-
|
9
|
-
|
11
|
+
logger = Logger.new 'log/test.log'
|
12
|
+
logger.level = Logger::DEBUG
|
10
13
|
|
11
|
-
require 'active_record'
|
12
|
-
require 'sqlite3'
|
13
|
-
ActiveRecord::Base.logger = Logger.new 'log/test.log'
|
14
14
|
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
15
|
+
ActiveRecord::Base.logger = logger
|
16
|
+
|
17
|
+
DataMiner.logger = logger
|
18
|
+
|
15
19
|
Earth.init :all, :apply_schemas => true
|
@@ -1,2 +1,2 @@
|
|
1
1
|
name,year,fuel_efficiency,volume,fuel_efficiency_units
|
2
|
-
Honda
|
2
|
+
Honda 2011 DP,2011
|
@@ -1,2 +1,2 @@
|
|
1
1
|
name,year,fuel_efficiency,volume,fuel_efficiency_units
|
2
|
-
Honda
|
2
|
+
Honda 2010 DP,2010,15,2000,kilometres_per_litre
|
@@ -1,3 +1,3 @@
|
|
1
1
|
name,year,fuel_efficiency_city,fuel_efficiency_highway,fuel_efficiency_city_units,fuel_efficiency_highway_units
|
2
2
|
Toyota,2000,10,10.5,kilometres_per_litre,kilometres_per_litre
|
3
|
-
Honda,
|
3
|
+
Honda,2011,20,21,kilometres_per_litre,kilometres_per_litre
|
@@ -20,23 +20,23 @@ Aircraft.class_eval do
|
|
20
20
|
@manufacturer_whitelist ||= RemoteTable.new(:url => 'https://spreadsheets.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdFRFalpOdlg1cnF6amlSM1dDc1lya2c&output=csv').map { |record| record['Manufacturer'].to_regexp }
|
21
21
|
@manufacturer_whitelist.any? { |manufacturer_regexp| manufacturer_regexp.match candidate }
|
22
22
|
end
|
23
|
+
|
24
|
+
create_table do
|
25
|
+
string 'icao_code'
|
26
|
+
string 'manufacturer_name'
|
27
|
+
string 'model_name'
|
28
|
+
string 'description'
|
29
|
+
string 'aircraft_type'
|
30
|
+
string 'engine_type'
|
31
|
+
integer 'engines'
|
32
|
+
string 'weight_class'
|
33
|
+
string 'class_code'
|
34
|
+
string 'fuel_use_code'
|
35
|
+
float 'seats'
|
36
|
+
float 'passengers'
|
37
|
+
end
|
23
38
|
|
24
39
|
data_miner do
|
25
|
-
schema Earth.database_options do
|
26
|
-
string 'icao_code'
|
27
|
-
string 'manufacturer_name'
|
28
|
-
string 'model_name'
|
29
|
-
string 'description'
|
30
|
-
string 'aircraft_type'
|
31
|
-
string 'engine_type'
|
32
|
-
integer 'engines'
|
33
|
-
string 'weight_class'
|
34
|
-
string 'class_code'
|
35
|
-
string 'fuel_use_code'
|
36
|
-
float 'seats'
|
37
|
-
float 'passengers'
|
38
|
-
end
|
39
|
-
|
40
40
|
('A'..'Z').each do |letter|
|
41
41
|
import("aircraft made by whitelisted manufacturers whose ICAO code starts with '#{letter}' from the FAA",
|
42
42
|
:url => "http://www.faa.gov/air_traffic/publications/atpubs/CNT/5-2-#{letter}.htm",
|
@@ -96,6 +96,54 @@ Aircraft.class_eval do
|
|
96
96
|
FlightSegment.run_data_miner!
|
97
97
|
end
|
98
98
|
|
99
|
+
process "Cache fuzzy matches between FlightSegment aircraft_description and Aircraft description" do
|
100
|
+
LooseTightDictionary::CachedResult.setup
|
101
|
+
FlightSegment.find_by_sql("SELECT * FROM flight_segments GROUP BY aircraft_description HAVING aircraft_description IS NOT NULL").each do |flight_segment|
|
102
|
+
original_description = flight_segment.aircraft_description
|
103
|
+
|
104
|
+
# If the flight segment's aircraft_description contains '/' then it describes multiple aircraft.
|
105
|
+
# We need to synthesize descriptions for those aircraft, find all Aircraft that fuzzily match the
|
106
|
+
# synthesized descriptions, and associate those Aircraft with the original aircraft_description.
|
107
|
+
# e.g. boeing 747-100/200
|
108
|
+
if original_description.include?("/")
|
109
|
+
# Pull out the complete first aircraft description
|
110
|
+
# e.g. 'boeing 747-100'
|
111
|
+
first_description = original_description.split('/')[0]
|
112
|
+
|
113
|
+
# Pull out the root of the description - the text up to and including the last ' ' or '-'
|
114
|
+
# e.g. 'boeing 747-'
|
115
|
+
root_length = first_description.rindex(/[ \-]/)
|
116
|
+
root = first_description.slice(0..root_length)
|
117
|
+
|
118
|
+
# Pull out the suffixes - the text separated by forward slashes
|
119
|
+
# e.g. ['100', '200']
|
120
|
+
suffixes = original_description.split(root)[1].split('/')
|
121
|
+
|
122
|
+
# Create an array of synthesized descriptions by appending each suffix to the root
|
123
|
+
# e.g. ['boeing 747-100', 'boeing 747-200']
|
124
|
+
suffixes.map{ |suffix| root + suffix }.each do |synthesized_description|
|
125
|
+
# Look up the Aircraft that match each synthesized description and associate
|
126
|
+
# them with the original flight segment aircraft_description
|
127
|
+
Aircraft.loose_tight_dictionary.find_all(synthesized_description).each do |aircraft|
|
128
|
+
attrs = {
|
129
|
+
:a_class => "Aircraft",
|
130
|
+
:a => aircraft.description,
|
131
|
+
:b_class => "FlightSegment",
|
132
|
+
:b => original_description
|
133
|
+
}
|
134
|
+
unless ::LooseTightDictionary::CachedResult.exists? attrs
|
135
|
+
::LooseTightDictionary::CachedResult.create! attrs
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
# If the flight segment's aircraft_description doesn't contain '/' we can use
|
140
|
+
# a method provided by loose_tight_dictionary to associate it with Aircraft
|
141
|
+
else
|
142
|
+
flight_segment.cache_aircraft!
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
99
147
|
# FIXME TODO do we want to restrict this to certain years?
|
100
148
|
process "Derive some average characteristics from flight segments" do
|
101
149
|
Aircraft.find_each do |aircraft|
|
data/lib/earth/air/aircraft.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
# need this for association with FlightSegment through loose_tight_dictionary_cached_results
|
2
|
-
require 'loose_tight_dictionary/cached_result'
|
3
|
-
|
4
1
|
class Aircraft < ActiveRecord::Base
|
5
2
|
set_primary_key :icao_code
|
6
3
|
|
@@ -22,12 +19,4 @@ class Aircraft < ActiveRecord::Base
|
|
22
19
|
|
23
20
|
# Enable aircraft.flight_segments
|
24
21
|
cache_loose_tight_dictionary_matches_with :flight_segments, :primary_key => :description, :foreign_key => :aircraft_description
|
25
|
-
|
26
|
-
data_miner do
|
27
|
-
tap "Brighter Planet's sanitized aircraft data", Earth.taps_server
|
28
|
-
|
29
|
-
process "pull dependencies" do
|
30
|
-
run_data_miner_on_belongs_to_associations
|
31
|
-
end
|
32
|
-
end
|
33
22
|
end
|
@@ -1,18 +1,5 @@
|
|
1
1
|
AircraftClass.class_eval do
|
2
2
|
data_miner do
|
3
|
-
schema Earth.database_options do
|
4
|
-
string 'code'
|
5
|
-
float 'm3'
|
6
|
-
string 'm3_units'
|
7
|
-
float 'm2'
|
8
|
-
string 'm2_units'
|
9
|
-
float 'm1'
|
10
|
-
string 'm1_units'
|
11
|
-
float 'b'
|
12
|
-
string 'b_units'
|
13
|
-
float 'seats'
|
14
|
-
end
|
15
|
-
|
16
3
|
process "Ensure Aircraft is populated" do
|
17
4
|
Aircraft.run_data_miner!
|
18
5
|
end
|
@@ -10,8 +10,17 @@ class AircraftClass < ActiveRecord::Base
|
|
10
10
|
def valid_fuel_use_equation?
|
11
11
|
fuel_use_coefficients.all?(&:present?) and fuel_use_coefficients.any?(&:nonzero?)
|
12
12
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
|
14
|
+
create_table do
|
15
|
+
string 'code'
|
16
|
+
float 'm3'
|
17
|
+
string 'm3_units'
|
18
|
+
float 'm2'
|
19
|
+
string 'm2_units'
|
20
|
+
float 'm1'
|
21
|
+
string 'm1_units'
|
22
|
+
float 'b'
|
23
|
+
string 'b_units'
|
24
|
+
float 'seats'
|
16
25
|
end
|
17
26
|
end
|
@@ -1,18 +1,5 @@
|
|
1
1
|
AircraftFuelUseEquation.class_eval do
|
2
2
|
data_miner do
|
3
|
-
schema Earth.database_options do
|
4
|
-
string 'code'
|
5
|
-
string 'aircraft_description'
|
6
|
-
float 'm3'
|
7
|
-
string 'm3_units'
|
8
|
-
float 'm2'
|
9
|
-
string 'm2_units'
|
10
|
-
float 'm1'
|
11
|
-
string 'm1_units'
|
12
|
-
float 'b'
|
13
|
-
string 'b_units'
|
14
|
-
end
|
15
|
-
|
16
3
|
import "aircraft fuel use equations derived from EMEP/EEA and ICAO",
|
17
4
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdDltUVZVekVobEJPYlpFNUpWNkwyYXc&output=csv' do
|
18
5
|
key 'code'
|
@@ -19,8 +19,17 @@ class AircraftFuelUseEquation < ActiveRecord::Base
|
|
19
19
|
def valid_fuel_use_equation?
|
20
20
|
fuel_use_coefficients.all?(&:present?) and fuel_use_coefficients.any?(&:nonzero?)
|
21
21
|
end
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
|
23
|
+
create_table do
|
24
|
+
string 'code'
|
25
|
+
string 'aircraft_description'
|
26
|
+
float 'm3'
|
27
|
+
string 'm3_units'
|
28
|
+
float 'm2'
|
29
|
+
string 'm2_units'
|
30
|
+
float 'm1'
|
31
|
+
string 'm1_units'
|
32
|
+
float 'b'
|
33
|
+
string 'b_units'
|
25
34
|
end
|
26
35
|
end
|
@@ -1,12 +1,5 @@
|
|
1
1
|
Airline.class_eval do
|
2
2
|
data_miner do
|
3
|
-
schema Earth.database_options do
|
4
|
-
string 'name'
|
5
|
-
string 'bts_code'
|
6
|
-
string 'iata_code'
|
7
|
-
string 'icao_code'
|
8
|
-
end
|
9
|
-
|
10
3
|
import "a Brighter Planet-curated list of airlines",
|
11
4
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdDhoVHZmSTlZcHBsRUtPR0dPd0prMkE&output=csv' do
|
12
5
|
key 'name'
|
data/lib/earth/air/airline.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
class Airline < ActiveRecord::Base
|
2
2
|
set_primary_key :name
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
|
4
|
+
create_table do
|
5
|
+
string 'name'
|
6
|
+
string 'bts_code'
|
7
|
+
string 'iata_code'
|
8
|
+
string 'icao_code'
|
6
9
|
end
|
7
10
|
end
|
@@ -15,19 +15,10 @@ Airport.class_eval do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
data_miner do
|
18
|
-
schema Earth.database_options do
|
19
|
-
string 'iata_code'
|
20
|
-
string 'name'
|
21
|
-
string 'city'
|
22
|
-
string 'country_name'
|
23
|
-
string 'country_iso_3166_code'
|
24
|
-
float 'latitude'
|
25
|
-
float 'longitude'
|
26
|
-
end
|
27
|
-
|
28
18
|
import "the OpenFlights.org airports database",
|
29
19
|
:url => 'https://openflights.svn.sourceforge.net/svnroot/openflights/openflights/data/airports.dat',
|
30
20
|
:headers => %w{ id name city country_name iata_code icao_code latitude longitude altitude timezone daylight_savings },
|
21
|
+
:select => lambda { |record| record['iata_code'].present? },
|
31
22
|
:errata => { :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdFc2UzhQYU5PWEQ0N21yWFZGNmc2a3c&gid=0&output=csv',
|
32
23
|
:responder => Airport::Guru.new } do
|
33
24
|
key 'iata_code'
|
@@ -52,10 +43,10 @@ Airport.class_eval do
|
|
52
43
|
Country.run_data_miner!
|
53
44
|
end
|
54
45
|
|
55
|
-
process "
|
56
|
-
|
57
|
-
|
58
|
-
update_all %{country_iso_3166_code = "#{
|
46
|
+
process "Fill in blank country codes" do
|
47
|
+
Country.find_each do |country|
|
48
|
+
next unless country.name.present? and country.iso_3166_code.present?
|
49
|
+
update_all %{country_iso_3166_code = "#{country.iso_3166_code}"}, %{country_name LIKE "#{country.name}"}
|
59
50
|
end
|
60
51
|
end
|
61
52
|
|
data/lib/earth/air/airport.rb
CHANGED
@@ -6,12 +6,14 @@ class Airport < ActiveRecord::Base
|
|
6
6
|
acts_as_mappable :default_units => :nms,
|
7
7
|
:lat_column_name => :latitude,
|
8
8
|
:lng_column_name => :longitude
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
|
10
|
+
create_table do
|
11
|
+
string 'iata_code'
|
12
|
+
string 'name'
|
13
|
+
string 'city'
|
14
|
+
string 'country_name'
|
15
|
+
string 'country_iso_3166_code'
|
16
|
+
float 'latitude'
|
17
|
+
float 'longitude'
|
16
18
|
end
|
17
19
|
end
|
@@ -1,10 +1,5 @@
|
|
1
1
|
BtsAircraft.class_eval do
|
2
2
|
data_miner do
|
3
|
-
schema Earth.database_options do
|
4
|
-
string 'bts_code'
|
5
|
-
string 'description'
|
6
|
-
end
|
7
|
-
|
8
3
|
import "the BTS aircraft type lookup table",
|
9
4
|
:url => "http://www.transtats.bts.gov/Download_Lookup.asp?Lookup=L_AIRCRAFT_TYPE",
|
10
5
|
:errata => { :url => 'https://spreadsheets.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdEZ2d3JQMzV5T1o1T3JmVlFyNUZxdEE&output=csv' } do
|
data/lib/earth/air/data_miner.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
require 'earth/locality'
|
2
|
-
require 'earth/locality/data_miner'
|
3
1
|
require 'earth/air/aircraft/data_miner'
|
4
2
|
require 'earth/air/aircraft_class/data_miner'
|
5
3
|
require 'earth/air/aircraft_fuel_use_equation/data_miner'
|
6
|
-
require 'earth/air/aircraft_manufacturer/data_miner'
|
7
4
|
require 'earth/air/airline/data_miner'
|
8
5
|
require 'earth/air/airport/data_miner'
|
9
6
|
require 'earth/air/bts_aircraft/data_miner'
|
10
7
|
require 'earth/air/flight_distance_class/data_miner'
|
11
8
|
require 'earth/air/flight_seat_class/data_miner'
|
12
9
|
require 'earth/air/flight_segment/data_miner'
|
10
|
+
|
11
|
+
require 'earth/locality/data_miner'
|
@@ -1,11 +1,5 @@
|
|
1
1
|
FlightDistanceClass.class_eval do
|
2
2
|
data_miner do
|
3
|
-
schema Earth.database_options do
|
4
|
-
string 'name'
|
5
|
-
float 'distance'
|
6
|
-
string 'distance_units'
|
7
|
-
end
|
8
|
-
|
9
3
|
import "a list of distance classes taken from the WRI business travel tool and UK DEFRA/DECC GHG Conversion Factors for Company Reporting",
|
10
4
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdFBKM0xWaUhKVkxDRmdBVkE3VklxY2c&hl=en&gid=0&output=csv' do
|
11
5
|
key 'name'
|
@@ -1,12 +1,5 @@
|
|
1
1
|
FlightSeatClass.class_eval do
|
2
2
|
data_miner do
|
3
|
-
schema Earth.database_options do
|
4
|
-
string 'name'
|
5
|
-
string 'distance_class_name'
|
6
|
-
string 'seat_class_name'
|
7
|
-
float 'multiplier'
|
8
|
-
end
|
9
|
-
|
10
3
|
import "seat classes used in the WRI GHG Protocol calculation tools",
|
11
4
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdG5zSER1QmFVVkhNcTM2cmhCMEJtWVE&hl=en&gid=0&output=csv' do
|
12
5
|
key 'name'
|
@@ -2,8 +2,11 @@ class FlightSeatClass < ActiveRecord::Base
|
|
2
2
|
set_primary_key :name
|
3
3
|
|
4
4
|
falls_back_on :multiplier => 1
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
|
6
|
+
create_table do
|
7
|
+
string 'name'
|
8
|
+
string 'distance_class_name'
|
9
|
+
string 'seat_class_name'
|
10
|
+
float 'multiplier'
|
8
11
|
end
|
9
12
|
end
|