ibge 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ibge.rb +9 -8
- data/lib/ibge/reader/base.rb +90 -40
- data/lib/ibge/reader/helpers.rb +78 -0
- data/lib/ibge/reader/state.rb +1 -3
- data/lib/ibge/version.rb +1 -1
- data/spec/ibge/reader/base_spec.rb +76 -26
- data/spec/ibge/reader/district_spec.rb +15 -7
- data/spec/ibge/reader/meso_region_spec.rb +11 -3
- data/spec/ibge/reader/micro_region_spec.rb +12 -4
- data/spec/ibge/reader/municipality_spec.rb +14 -6
- data/spec/ibge/reader/neighborhood_spec.rb +11 -1
- data/spec/ibge/reader/state_spec.rb +22 -3
- data/spec/ibge/reader/sub_district_spec.rb +16 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ed56fa3c4b240472a91542f75c8a216f78ce28c
|
4
|
+
data.tar.gz: 9e49eb09876bbd6c12d1ae6778303b227c7ca68d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95c9383f0d6f2cdc4c8a79a7847159408ab6f1acad4e92027f8bcf41837d5a23efc6cb878c619c7a1ed6ec3160372a81d24f326e3372bde43b290293e4a0119c
|
7
|
+
data.tar.gz: 23cb3405ae6b2be14e7cd5c0afad076947b445fe62341b6c778322ae9bd05ba77cd23a5007fc361c59162c833ae9fd5e27359be1299addf37296162e7523767a
|
data/lib/ibge.rb
CHANGED
@@ -6,13 +6,14 @@ module Ibge
|
|
6
6
|
DATA_PATH = File.expand_path(File.join(__dir__, '..', 'data'))
|
7
7
|
|
8
8
|
module Reader
|
9
|
-
autoload :
|
10
|
-
autoload :
|
11
|
-
autoload :
|
12
|
-
autoload :
|
13
|
-
autoload :
|
14
|
-
autoload :
|
15
|
-
autoload :
|
16
|
-
autoload :
|
9
|
+
autoload :Helpers, "ibge/reader/helpers"
|
10
|
+
autoload :Base, "ibge/reader/base"
|
11
|
+
autoload :State, "ibge/reader/state"
|
12
|
+
autoload :MesoRegion, "ibge/reader/meso_region"
|
13
|
+
autoload :MicroRegion, "ibge/reader/micro_region"
|
14
|
+
autoload :Municipality, "ibge/reader/municipality"
|
15
|
+
autoload :District, "ibge/reader/district"
|
16
|
+
autoload :SubDistrict, "ibge/reader/sub_district"
|
17
|
+
autoload :Neighborhood, "ibge/reader/neighborhood"
|
17
18
|
end
|
18
19
|
end
|
data/lib/ibge/reader/base.rb
CHANGED
@@ -3,30 +3,7 @@ require 'spreadsheet'
|
|
3
3
|
module Ibge
|
4
4
|
module Reader
|
5
5
|
class Base
|
6
|
-
|
7
|
-
SOURCES = {
|
8
|
-
dtb: 'DTB_2014_subdistrito.xls',
|
9
|
-
sidra: 'sidra.xls'
|
10
|
-
}
|
11
|
-
|
12
|
-
attr_reader :defined_columns, :selected_source
|
13
|
-
|
14
|
-
def columns(columns = {})
|
15
|
-
@defined_columns = columns
|
16
|
-
end
|
17
|
-
|
18
|
-
def source(selected_source = :dtb)
|
19
|
-
unless SOURCES.keys.include?(selected_source)
|
20
|
-
raise ArgumentError, "Source must be one of those '#{SOURCES.keys.flatten.join(', ')}'"
|
21
|
-
end
|
22
|
-
|
23
|
-
@selected_source = selected_source
|
24
|
-
end
|
25
|
-
|
26
|
-
def sources
|
27
|
-
SOURCES
|
28
|
-
end
|
29
|
-
end
|
6
|
+
extend Ibge::Reader::Helpers
|
30
7
|
|
31
8
|
attr_reader :filename
|
32
9
|
|
@@ -35,37 +12,102 @@ module Ibge
|
|
35
12
|
end
|
36
13
|
|
37
14
|
def initialize(options = {})
|
38
|
-
@
|
15
|
+
@spreadsheet = {}
|
16
|
+
@rows = {}
|
17
|
+
@selected_sheet = {}
|
18
|
+
|
19
|
+
self.selected_source = self.class.selected_source
|
20
|
+
|
21
|
+
unless options.fetch(:filename, nil).nil?
|
22
|
+
filename = options.fetch(:filename)
|
23
|
+
|
24
|
+
if filename.is_a?(Hash)
|
25
|
+
sources_filename = options.fetch(:filename).keys
|
26
|
+
|
27
|
+
sources_filename.each do |source_filename|
|
28
|
+
self.class.valid_informed_source(source_filename)
|
29
|
+
end
|
30
|
+
else
|
31
|
+
raise ArgumentError,
|
32
|
+
"Filename must be a hash with the source as key"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
default_filename = default_filename_to(selected_source)
|
37
|
+
|
38
|
+
@filename = options.fetch(:filename, "#{DATA_PATH}/#{default_filename}")
|
39
39
|
end
|
40
40
|
|
41
41
|
def read
|
42
|
-
transformed_rows =
|
43
|
-
|
42
|
+
transformed_rows = []
|
43
|
+
previous_column_range = nil
|
44
|
+
|
45
|
+
if multiple_sources?
|
46
|
+
loaded_sources = defined_columns.keys.sort
|
47
|
+
|
48
|
+
loaded_sources.each do |loaded_source|
|
49
|
+
self.selected_source = loaded_source
|
50
|
+
@filename = default_filename_to(loaded_source)
|
51
|
+
|
52
|
+
if transformed_rows == []
|
53
|
+
transformed_rows = rows[1..-1].map do |row|
|
54
|
+
transform(row.compact.values_at(*column_range), column_range)
|
55
|
+
end
|
56
|
+
|
57
|
+
transformed_rows = transformed_rows.uniq
|
58
|
+
|
59
|
+
previous_column_range = column_range
|
60
|
+
else
|
61
|
+
transformed_rows.each do |transformed_row|
|
62
|
+
selected_rows = rows[1..-1].select do |r|
|
63
|
+
r[previous_column_range.first] == transformed_row.values.first
|
64
|
+
end
|
65
|
+
|
66
|
+
new_row = selected_rows.compact.uniq { |r| r[0] }.map do |row|
|
67
|
+
transform(row.compact.values_at(*column_range), column_range)
|
68
|
+
end
|
69
|
+
|
70
|
+
if new_row.empty?
|
71
|
+
columns = self.class.defined_columns[selected_source]
|
72
|
+
|
73
|
+
columns.each do |column|
|
74
|
+
new_row << { column[1] => "" }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
transformed_row.merge!(*new_row)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
else
|
83
|
+
transformed_rows = rows[1..-1].map do |row|
|
84
|
+
transform(row.compact.values_at(*column_range), column_range)
|
85
|
+
end
|
44
86
|
end
|
45
87
|
|
46
|
-
transformed_rows.uniq.sort_by { |
|
88
|
+
transformed_rows.uniq.sort_by { |h| data_sort(h) }
|
47
89
|
end
|
48
90
|
|
49
91
|
protected
|
50
92
|
|
51
|
-
|
52
|
-
|
93
|
+
attr_accessor :selected_source
|
94
|
+
|
95
|
+
def default_filename_to(source)
|
96
|
+
sources[source.to_sym]
|
53
97
|
end
|
54
98
|
|
55
99
|
def spreadsheet
|
56
|
-
|
100
|
+
filename = File.join(DATA_PATH, default_filename_to(selected_source))
|
101
|
+
|
102
|
+
@spreadsheet[selected_source] ||= Spreadsheet.open filename
|
57
103
|
end
|
58
104
|
|
59
105
|
def sheet
|
60
|
-
@selected_sheet ||= spreadsheet.worksheets.first
|
106
|
+
@selected_sheet[selected_source] ||= spreadsheet.worksheets.first
|
61
107
|
end
|
62
108
|
|
63
109
|
def rows
|
64
|
-
@rows ||= sheet.rows
|
65
|
-
end
|
66
|
-
|
67
|
-
def selected_source
|
68
|
-
self.class.selected_source || :dtb
|
110
|
+
@rows[selected_source] ||= sheet.rows
|
69
111
|
end
|
70
112
|
|
71
113
|
def sources
|
@@ -77,7 +119,7 @@ module Ibge
|
|
77
119
|
end
|
78
120
|
|
79
121
|
def column_keys
|
80
|
-
defined_columns.keys.map(&:to_s).map(&:to_i)
|
122
|
+
defined_columns[selected_source].keys.map(&:to_s).map(&:to_i)
|
81
123
|
end
|
82
124
|
|
83
125
|
def column_range
|
@@ -86,9 +128,13 @@ module Ibge
|
|
86
128
|
|
87
129
|
def transform(row, column_range)
|
88
130
|
row.each_with_index.inject({}) do |item, (raw_data, index)|
|
89
|
-
column_index = column_range[index]
|
131
|
+
column_index = column_range[index].to_s.to_sym
|
132
|
+
|
133
|
+
hash = {
|
134
|
+
defined_columns[selected_source][column_index] => raw_data
|
135
|
+
}
|
90
136
|
|
91
|
-
item.merge!(
|
137
|
+
item.merge!(hash)
|
92
138
|
end
|
93
139
|
end
|
94
140
|
|
@@ -102,6 +148,10 @@ module Ibge
|
|
102
148
|
|
103
149
|
order_values
|
104
150
|
end
|
151
|
+
|
152
|
+
def multiple_sources?
|
153
|
+
defined_columns.keys.size > 1
|
154
|
+
end
|
105
155
|
end
|
106
156
|
end
|
107
157
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Ibge
|
2
|
+
module Reader
|
3
|
+
module Helpers
|
4
|
+
SOURCES = {
|
5
|
+
dtb: "DTB_2014_subdistrito.xls",
|
6
|
+
sidra: "sidra.xls"
|
7
|
+
}
|
8
|
+
|
9
|
+
attr_reader :defined_columns, :selected_source
|
10
|
+
|
11
|
+
def columns(columns)
|
12
|
+
if columns.empty?
|
13
|
+
raise ArgumentError,
|
14
|
+
"Columns must be provided as hash which contains " /
|
15
|
+
"the index and field name"
|
16
|
+
end
|
17
|
+
|
18
|
+
@defined_columns ||= {}
|
19
|
+
@selected_source ||= :dtb
|
20
|
+
|
21
|
+
distinct_sources = []
|
22
|
+
|
23
|
+
columns.each do |_, v|
|
24
|
+
if v.is_a?(Hash)
|
25
|
+
hash_column_definition = v.values.first
|
26
|
+
|
27
|
+
unless hash_column_definition.key?(:from_source)
|
28
|
+
raise ArgumentError, "#{v.key} must have the key from_source"
|
29
|
+
end
|
30
|
+
|
31
|
+
valid_informed_source(hash_column_definition[:from_source])
|
32
|
+
|
33
|
+
distinct_sources << hash_column_definition[:from_source]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
distinct_sources = distinct_sources.compact.uniq.sort
|
38
|
+
|
39
|
+
distinct_sources.each do |source|
|
40
|
+
extracted_columns = columns.select do |_, v|
|
41
|
+
v.is_a?(Hash) && v.values.first[:from_source] == source
|
42
|
+
end
|
43
|
+
|
44
|
+
@defined_columns[source] = extracted_columns.inject({}) do |h, (k, v)|
|
45
|
+
h.merge!(k.to_s.to_sym => v.is_a?(Hash) ? v.keys.first : v)
|
46
|
+
|
47
|
+
h
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
if @selected_source
|
52
|
+
@defined_columns[@selected_source] = columns.select do |_, v|
|
53
|
+
v.is_a?(Symbol)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def source(selected_source = :dtb)
|
59
|
+
valid_informed_source(selected_source)
|
60
|
+
|
61
|
+
@selected_source = selected_source
|
62
|
+
end
|
63
|
+
|
64
|
+
def sources
|
65
|
+
SOURCES
|
66
|
+
end
|
67
|
+
|
68
|
+
def valid_informed_source(informed_source)
|
69
|
+
source_keys = sources.keys
|
70
|
+
|
71
|
+
unless source_keys.include?(informed_source)
|
72
|
+
raise ArgumentError,
|
73
|
+
"Source must be one of those '#{source_keys.join(', ')}'"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/ibge/reader/state.rb
CHANGED
data/lib/ibge/version.rb
CHANGED
@@ -1,47 +1,97 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
describe Ibge::Reader::Base do
|
4
|
-
|
5
|
-
|
4
|
+
context "source on top of the reader" do
|
5
|
+
class ReaderWithSource < Ibge::Reader::Base
|
6
|
+
source :sidra
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
columns "0": :code
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
+
subject { ReaderWithSource }
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
describe ".columns" do
|
14
|
+
it { should respond_to :columns }
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
it "maps the column index to a recognized column name" do
|
17
|
+
expect(subject.defined_columns).to eq sidra: { "0": :code }
|
18
|
+
end
|
17
19
|
end
|
18
|
-
end
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
describe ".read" do
|
22
|
+
context "without pass a :filename as option" do
|
23
|
+
it "reads the file inside data folder" do
|
24
|
+
expect(subject.read).to include code: "11"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "passing a :filename" do
|
29
|
+
it "reads the file provided" do
|
30
|
+
filename = "spec/fixtures/DTB_example_subdistrito.xls"
|
31
|
+
|
32
|
+
content = subject.read(filename: { dtb: filename })
|
33
|
+
|
34
|
+
expect(content).to include code: "11"
|
35
|
+
end
|
24
36
|
end
|
25
37
|
end
|
26
38
|
|
27
|
-
|
28
|
-
it
|
29
|
-
|
39
|
+
describe ".selected_source" do
|
40
|
+
it "show the default file source to read" do
|
41
|
+
expect(subject.selected_source).to eq :sidra
|
42
|
+
end
|
43
|
+
end
|
30
44
|
|
31
|
-
|
45
|
+
describe "#filename" do
|
46
|
+
it "sets the default to file inside data folder" do
|
47
|
+
expect(subject.new.filename).to include "data/sidra.xls"
|
32
48
|
end
|
33
49
|
end
|
34
50
|
end
|
35
51
|
|
36
|
-
|
37
|
-
|
38
|
-
|
52
|
+
context "without source defined" do
|
53
|
+
class ReaderWithoutSource < Ibge::Reader::Base
|
54
|
+
columns "0": :code
|
39
55
|
end
|
40
|
-
end
|
41
56
|
|
42
|
-
|
43
|
-
|
44
|
-
|
57
|
+
subject { ReaderWithoutSource }
|
58
|
+
|
59
|
+
describe ".columns" do
|
60
|
+
it { should respond_to :columns }
|
61
|
+
|
62
|
+
it "maps the column index to a recognized column name" do
|
63
|
+
expect(subject.defined_columns).to eq dtb: { "0": :code }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe ".read" do
|
68
|
+
context "without pass a :filename as option" do
|
69
|
+
it "reads the file inside data folder" do
|
70
|
+
expect(subject.read).to include code: "11"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "passing a :filename" do
|
75
|
+
it "reads the file provided" do
|
76
|
+
filename = "spec/fixtures/DTB_example_subdistrito.xls"
|
77
|
+
|
78
|
+
content = subject.read(filename: { dtb: filename })
|
79
|
+
|
80
|
+
expect(content).to include code: "11"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe ".selected_source" do
|
86
|
+
it "show the default file source to read" do
|
87
|
+
expect(subject.selected_source).to eq :dtb
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#filename" do
|
92
|
+
it "sets the default to file inside data folder" do
|
93
|
+
expect(subject.new.filename).to include "data/DTB_2014_subdistrito.xls"
|
94
|
+
end
|
45
95
|
end
|
46
96
|
end
|
47
97
|
end
|
@@ -3,13 +3,21 @@ require 'spec_helper'
|
|
3
3
|
describe Ibge::Reader::District do
|
4
4
|
subject { described_class }
|
5
5
|
|
6
|
+
let(:columns) do
|
7
|
+
{
|
8
|
+
dtb: {
|
9
|
+
"0": :state_code,
|
10
|
+
"2": :meso_region_code,
|
11
|
+
"4": :micro_region_code,
|
12
|
+
"6": :municipality_code,
|
13
|
+
"9": :code,
|
14
|
+
"10": :full_code,
|
15
|
+
"11": :name
|
16
|
+
}
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
6
20
|
it 'should have defined columns' do
|
7
|
-
expect(subject.defined_columns).to
|
8
|
-
"2": :meso_region_code,
|
9
|
-
"4": :micro_region_code,
|
10
|
-
"6": :municipality_code,
|
11
|
-
"9": :code,
|
12
|
-
"10": :full_code,
|
13
|
-
"11": :name
|
21
|
+
expect(subject.defined_columns).to eq columns
|
14
22
|
end
|
15
23
|
end
|
@@ -3,9 +3,17 @@ require 'spec_helper'
|
|
3
3
|
describe Ibge::Reader::MesoRegion do
|
4
4
|
subject { described_class }
|
5
5
|
|
6
|
+
let(:columns) do
|
7
|
+
{
|
8
|
+
dtb: {
|
9
|
+
"0": :state_code,
|
10
|
+
"2": :code,
|
11
|
+
"3": :name
|
12
|
+
}
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
6
16
|
it 'should have defined columns' do
|
7
|
-
expect(subject.defined_columns).to
|
8
|
-
"2": :code,
|
9
|
-
"3": :name
|
17
|
+
expect(subject.defined_columns).to eq columns
|
10
18
|
end
|
11
19
|
end
|
@@ -3,10 +3,18 @@ require 'spec_helper'
|
|
3
3
|
describe Ibge::Reader::MicroRegion do
|
4
4
|
subject { described_class }
|
5
5
|
|
6
|
+
let(:columns) do
|
7
|
+
{
|
8
|
+
dtb: {
|
9
|
+
"0": :state_code,
|
10
|
+
"2": :meso_region_code,
|
11
|
+
"4": :code,
|
12
|
+
"5": :name
|
13
|
+
}
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
6
17
|
it 'should have defined columns' do
|
7
|
-
expect(subject.defined_columns).to
|
8
|
-
"2": :meso_region_code,
|
9
|
-
"4": :code,
|
10
|
-
"5": :name
|
18
|
+
expect(subject.defined_columns).to eq columns
|
11
19
|
end
|
12
20
|
end
|
@@ -3,12 +3,20 @@ require 'spec_helper'
|
|
3
3
|
describe Ibge::Reader::Municipality do
|
4
4
|
subject { described_class }
|
5
5
|
|
6
|
+
let(:columns) do
|
7
|
+
{
|
8
|
+
dtb: {
|
9
|
+
"0": :state_code,
|
10
|
+
"2": :meso_region_code,
|
11
|
+
"4": :micro_region_code,
|
12
|
+
"6": :code,
|
13
|
+
"7": :full_code,
|
14
|
+
"8": :name
|
15
|
+
}
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
6
19
|
it 'should have defined columns' do
|
7
|
-
expect(subject.defined_columns).to
|
8
|
-
"2": :meso_region_code,
|
9
|
-
"4": :micro_region_code,
|
10
|
-
"6": :code,
|
11
|
-
"7": :full_code,
|
12
|
-
"8": :name
|
20
|
+
expect(subject.defined_columns).to eq columns
|
13
21
|
end
|
14
22
|
end
|
@@ -3,7 +3,17 @@ require 'spec_helper'
|
|
3
3
|
describe Ibge::Reader::Neighborhood do
|
4
4
|
subject { described_class }
|
5
5
|
|
6
|
+
let(:columns) do
|
7
|
+
{
|
8
|
+
sidra: {
|
9
|
+
"0": :state_code,
|
10
|
+
"3": :municipality_full_code,
|
11
|
+
"5": :name
|
12
|
+
}
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
6
16
|
it 'should have defined columns' do
|
7
|
-
expect(subject.defined_columns).to
|
17
|
+
expect(subject.defined_columns).to eq columns
|
8
18
|
end
|
9
19
|
end
|
@@ -1,9 +1,28 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
describe Ibge::Reader::State do
|
4
4
|
subject { described_class }
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
let(:columns) do
|
7
|
+
{
|
8
|
+
dtb: {
|
9
|
+
"0": :code,
|
10
|
+
"1": :state_name
|
11
|
+
},
|
12
|
+
|
13
|
+
sidra: {
|
14
|
+
"2": :state_federative_unit
|
15
|
+
}
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have defined columns" do
|
20
|
+
expect(subject.defined_columns).to eq columns
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should read from multiple sources" do
|
24
|
+
expect(subject.read).to include code: "11",
|
25
|
+
state_name: "Rondônia",
|
26
|
+
state_federative_unit: "RO"
|
8
27
|
end
|
9
28
|
end
|
@@ -3,14 +3,22 @@ require 'spec_helper'
|
|
3
3
|
describe Ibge::Reader::SubDistrict do
|
4
4
|
subject { described_class }
|
5
5
|
|
6
|
+
let(:columns) do
|
7
|
+
{
|
8
|
+
dtb: {
|
9
|
+
"0": :state_code,
|
10
|
+
"2": :meso_region_code,
|
11
|
+
"4": :micro_region_code,
|
12
|
+
"6": :municipality_code,
|
13
|
+
"9": :district_code,
|
14
|
+
"12": :code,
|
15
|
+
"13": :full_code,
|
16
|
+
"14": :name
|
17
|
+
}
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
6
21
|
it 'should have defined columns' do
|
7
|
-
expect(subject.defined_columns).to include
|
8
|
-
"2": :meso_region_code,
|
9
|
-
"4": :micro_region_code,
|
10
|
-
"6": :municipality_code,
|
11
|
-
"9": :district_code,
|
12
|
-
"12": :code,
|
13
|
-
"13": :full_code,
|
14
|
-
"14": :name
|
22
|
+
expect(subject.defined_columns).to include columns
|
15
23
|
end
|
16
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruno Arueira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spreadsheet
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- lib/ibge.rb
|
74
74
|
- lib/ibge/reader/base.rb
|
75
75
|
- lib/ibge/reader/district.rb
|
76
|
+
- lib/ibge/reader/helpers.rb
|
76
77
|
- lib/ibge/reader/meso_region.rb
|
77
78
|
- lib/ibge/reader/micro_region.rb
|
78
79
|
- lib/ibge/reader/municipality.rb
|