world_bank_fetcher 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,16 +2,55 @@ require 'world_bank'
2
2
 
3
3
  module WorldBankFetcher
4
4
  class CountryParser
5
- def self.parse(data_collection)
6
- results = []
7
- data_collection.each do |datum|
8
- current_country = {}
9
- current_country[:name] = datum.name
10
- current_country[:capital] = datum.capital
11
- current_country[:region] = datum.region.raw.value
12
- results << current_country
13
- end
14
- results
5
+
6
+ def self.filter(data_collection)
7
+ data_collection.reject {|country| non_country_codes.include? country.iso2_code }
8
+ end
9
+
10
+ def self.non_country_codes
11
+ NON_COUNTRIES.map {|country_info| country_info[:iso2_code] }
15
12
  end
13
+
14
+ NON_COUNTRIES = [
15
+ {:name => "Arab World", :iso2_code => "1A"},
16
+ {:name => "Caribbean small states", :iso2_code => "S3"},
17
+ {:name => "East Asia & Pacific (developing only)", :iso2_code => "4E"},
18
+ {:name => "East Asia & Pacific (all income levels)", :iso2_code => "Z4"},
19
+ {:name => "Europe & Central Asia (developing only)", :iso2_code => "7E"},
20
+ {:name => "Europe & Central Asia (all income levels)", :iso2_code => "Z7"},
21
+ {:name => "Euro area", :iso2_code => "XC"},
22
+ {:name => "European Union", :iso2_code => "EU"},
23
+ {:name => "High income", :iso2_code => "XD"},
24
+ {:name => "Heavily indebted poor countries (HIPC)", :iso2_code => "XE"},
25
+ {:name => "Not classified", :iso2_code => "XY"},
26
+ {:name => "Latin America & Caribbean (developing only)", :iso2_code => "XJ"},
27
+ {:name => "Latin America & Caribbean (all income levels)", :iso2_code => "ZJ"},
28
+ {:name => "Least developed countries: UN classification", :iso2_code => "XL"},
29
+ {:name => "Low income", :iso2_code => "XM"},
30
+ {:name => "Lower middle income", :iso2_code => "XN"},
31
+ {:name => "Low & middle income", :iso2_code => "XO"},
32
+ {:name => "Middle East & North Africa (all income levels)", :iso2_code => "ZQ"},
33
+ {:name => "Middle income", :iso2_code => "XP"},
34
+ {:name => "Middle East & North Africa (developing only)", :iso2_code => "XQ"},
35
+ {:name => "North America", :iso2_code => "XU"},
36
+ {:name => "High income: nonOECD", :iso2_code => "XR"},
37
+ {:name => "High income: OECD", :iso2_code => "XS"},
38
+ {:name => "OECD members", :iso2_code => "OE"},
39
+ {:name => "Other small states", :iso2_code => "S4"},
40
+ {:name => "Pacific island small states", :iso2_code => "S2"},
41
+ {:name => "South Asia", :iso2_code => "8S"},
42
+ {:name => "Sub-Saharan Africa (developing only)", :iso2_code => "ZF"},
43
+ {:name => "Sub-Saharan Africa (all income levels)", :iso2_code => "ZG"},
44
+ {:name => "Small states", :iso2_code => "S1"},
45
+ {:name => "Upper middle income", :iso2_code => "XT"},
46
+ {:name => "World", :iso2_code => "1W"}
47
+ ]
16
48
  end
17
49
  end
50
+
51
+
52
+
53
+
54
+
55
+
56
+
@@ -12,8 +12,9 @@ module WorldBankFetcher
12
12
  end
13
13
 
14
14
  def fetch
15
- data = fetch_all_data query
16
- if data
15
+ all_data = fetch_all_data query
16
+ if all_data
17
+ data = @job_type == :indicator ? all_data : CountryParser.filter(all_data)
17
18
  @checksum = checksum data
18
19
  {:results => data, :checksum => @checksum}
19
20
  else
@@ -1,3 +1,3 @@
1
1
  module WorldBankFetcher
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -2,7 +2,6 @@ require "world_bank_fetcher/version"
2
2
  require 'world_bank'
3
3
  require 'world_bank_fetcher/job'
4
4
  require 'world_bank_fetcher/query_scheduler'
5
- require 'world_bank_fetcher/data_parser'
6
5
  require 'world_bank_fetcher/country_parser'
7
6
 
8
7
  module WorldBankFetcher
@@ -2,32 +2,14 @@ require 'helper'
2
2
 
3
3
  module WorldBankFetcher
4
4
  describe CountryParser do
5
- let(:france) { mock_country('France', "Paris", "Europe") }
6
- let(:canada) { mock_country('Canada', "Ottawa", "North America") }
7
-
8
- it "should parse a country object" do
9
- expected = [{:name => "France", :capital => "Paris", :region => "Europe"}]
10
- CountryParser.parse([france]).should eq(expected)
11
- end
12
-
13
- it "should parse multiple country objects" do
14
- expected = [{:name => "France", :capital => "Paris", :region => "Europe"},
15
- {:name => "Canada", :capital => "Ottawa", :region => "North America"} ]
16
- CountryParser.parse([france, canada]).should eq(expected)
17
- end
18
-
19
- private
20
- def mock_country(name, capital, region_name)
21
- region_hash = Object.new
22
- raw_object = Object.new
23
- raw_object.stub(:value).and_return(region_name)
24
- region_hash.stub(:raw).and_return(raw_object)
25
- country = double('country')
26
- country.stub(:name).and_return(name)
27
- country.stub(:capital).and_return(capital)
28
- country.stub(:region).and_return(region_hash)
29
- country
30
- end
31
-
5
+ let(:france) { WorldBank::Country.new('name' => 'France', 'iso2Code' => 'FR')}
6
+ let(:canada) { WorldBank::Country.new('name' => 'Canada', 'iso2Code' => 'CA')}
7
+ let(:arab_world) { WorldBank::Country.new('name' => 'Arab World', 'iso2Code' => '1A')}
8
+ let(:euro_area) {WorldBank::Country.new('name' => "Euro area", 'iso2Code' => "XC")}
9
+
10
+ it "should filter expected countries" do
11
+ CountryParser.filter([france, arab_world, canada]).should eq([france, canada])
12
+ CountryParser.filter([canada, euro_area, france, arab_world]).should eq([canada, france])
13
+ end
32
14
  end
33
15
  end
data/spec/job_spec.rb CHANGED
@@ -3,10 +3,6 @@ require 'helper'
3
3
  module WorldBankFetcher
4
4
  describe Job do
5
5
  let(:indicator_string) { 'SP.POP.TOTL' }
6
-
7
- before do
8
- DataParser.stub(:parse).and_return(:something)
9
- end
10
6
 
11
7
  context 'initialize' do
12
8
  it "should accept hash w/ indicator to specify job type in intializer" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: world_bank_fetcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -56,17 +56,15 @@ files:
56
56
  - LICENSE
57
57
  - README.md
58
58
  - Rakefile
59
- - country_list.txt
59
+ - country_lists/country_list.txt
60
+ - country_lists/non_country_list.txt
61
+ - country_lists/sorted_countries.txt
60
62
  - lib/world_bank_fetcher.rb
61
63
  - lib/world_bank_fetcher/country_parser.rb
62
- - lib/world_bank_fetcher/data_parser.rb
63
64
  - lib/world_bank_fetcher/job.rb
64
65
  - lib/world_bank_fetcher/query_scheduler.rb
65
66
  - lib/world_bank_fetcher/version.rb
66
- - non_country_list.txt
67
- - sorted_countries.txt
68
67
  - spec/country_parser_spec.rb
69
- - spec/data_parser_spec.rb
70
68
  - spec/helper.rb
71
69
  - spec/job_spec.rb
72
70
  - spec/query_scheduler_spec.rb
@@ -85,7 +83,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
83
  version: '0'
86
84
  segments:
87
85
  - 0
88
- hash: -1312866395706772168
86
+ hash: 780221342756096436
89
87
  required_rubygems_version: !ruby/object:Gem::Requirement
90
88
  none: false
91
89
  requirements:
@@ -94,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
92
  version: '0'
95
93
  segments:
96
94
  - 0
97
- hash: -1312866395706772168
95
+ hash: 780221342756096436
98
96
  requirements: []
99
97
  rubyforge_project:
100
98
  rubygems_version: 1.8.24
@@ -103,7 +101,6 @@ specification_version: 3
103
101
  summary: Fetches local WorldBank country and indicator data.
104
102
  test_files:
105
103
  - spec/country_parser_spec.rb
106
- - spec/data_parser_spec.rb
107
104
  - spec/helper.rb
108
105
  - spec/job_spec.rb
109
106
  - spec/query_scheduler_spec.rb
@@ -1,16 +0,0 @@
1
- require 'world_bank'
2
-
3
- module WorldBankFetcher
4
- class DataParser
5
- def self.parse(data_collection)
6
- indicator_id = data_collection.first.id
7
- results = {:id => indicator_id }
8
- data_collection.each do |datum|
9
- return nil unless datum.id === indicator_id
10
- results[datum.others['country']['value']] ||= []
11
- results[datum.others['country']['value']] << { :year => datum.date, :value => datum.value }
12
- end
13
- results
14
- end
15
- end
16
- end
@@ -1,47 +0,0 @@
1
- require 'helper'
2
-
3
- module WorldBankFetcher
4
- describe DataParser do
5
- let(:indicator_id) { 'DJ.JIE.JIDL' }
6
- let(:datum1) { mock_data(:country => 'Mexico', :year => 1990, :id => indicator_id, :value => 234) }
7
- let(:data) { [datum1] }
8
-
9
- it "should parse data and return expected hash structure" do
10
- actual = DataParser.parse data
11
- actual.should eq({:id => indicator_id, 'Mexico' => [{:year => 1990, :value => 234}]})
12
- end
13
-
14
- it "should return nil when provided data for multiple indicators" do
15
- datum2 = mock_data(:country => 'Mexico', :year => 1990, :id => 'NJ.EKD.DKEL', :value => 234)
16
- DataParser.parse([datum1, datum2]).should be_nil
17
- end
18
-
19
- it "should handle more complext data" do
20
- d1 = mock_data(:country => 'Mexico', :year => 1990, :id => indicator_id, :value => 234)
21
- d2 = mock_data(:country => 'Mexico', :year => 1992, :id => indicator_id, :value => 456)
22
- d3 = mock_data(:country => 'France', :year => 1990, :id => indicator_id, :value => 789)
23
- expected = {:id => indicator_id, 'Mexico' => [{:year => 1990, :value => 234}, {:year => 1992, :value => 456}], 'France' => [{:year => 1990, :value => 789}]}
24
-
25
- DataParser.parse([d1,d2,d3]).should eq(expected)
26
- end
27
-
28
- it "should mock data properly" do
29
- f = data.first
30
- f.value.should eq(234)
31
- f.id.should eq('DJ.JIE.JIDL')
32
- f.date.should eq(1990)
33
- f.others['country']['value'].should eq('Mexico')
34
- end
35
-
36
- def mock_data(attr)
37
- mockal = Object.new
38
- mockal.stub(:value).and_return(attr[:value])
39
- mockal.stub(:id).and_return(attr[:id])
40
- mockal.stub(:date).and_return(attr[:year])
41
-
42
- country_data = {'country' => {'value' => attr[:country]}}
43
- mockal.stub(:others).and_return(country_data)
44
- mockal
45
- end
46
- end
47
- end