Module: Ibge::Reader::Helpers

Included in:
Base
Defined in:
lib/ibge/reader/helpers.rb

Constant Summary collapse

SOURCES =
{
  dtb: "DTB_2014_subdistrito.xls",
  sidra: "sidra.xls"
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#defined_columnsObject (readonly)

Returns the value of attribute defined_columns.



9
10
11
# File 'lib/ibge/reader/helpers.rb', line 9

def defined_columns
  @defined_columns
end

#selected_sourceObject (readonly)

Returns the value of attribute selected_source.



9
10
11
# File 'lib/ibge/reader/helpers.rb', line 9

def selected_source
  @selected_source
end

Instance Method Details

#columns(columns) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/ibge/reader/helpers.rb', line 11

def columns(columns)
  if columns.empty?
    raise ArgumentError,
          "Columns must be provided as hash which contains " /
            "the index and field name"
  end

  @defined_columns ||= {}
  @selected_source ||= :dtb

  distinct_sources = []

  columns.each do |_, v|
    if v.is_a?(Hash)
      hash_column_definition = v.values.first

      unless hash_column_definition.key?(:from_source)
        raise ArgumentError, "#{v.key} must have the key from_source"
      end

      valid_informed_source(hash_column_definition[:from_source])

      distinct_sources << hash_column_definition[:from_source]
    end
  end

  distinct_sources = distinct_sources.compact.uniq.sort

  distinct_sources.each do |source|
    extracted_columns = columns.select do |_, v|
      v.is_a?(Hash) && v.values.first[:from_source] == source
    end

    @defined_columns[source] = extracted_columns.inject({}) do |h, (k, v)|
      h.merge!(k.to_s.to_sym => v.is_a?(Hash) ? v.keys.first : v)

      h
    end
  end

  if @selected_source
    @defined_columns[@selected_source] = columns.select do |_, v|
      v.is_a?(Symbol)
    end
  end
end

#source(selected_source = :dtb) ⇒ Object



58
59
60
61
62
# File 'lib/ibge/reader/helpers.rb', line 58

def source(selected_source = :dtb)
  valid_informed_source(selected_source)

  @selected_source = selected_source
end

#sourcesObject



64
65
66
# File 'lib/ibge/reader/helpers.rb', line 64

def sources
  SOURCES
end

#valid_informed_source(informed_source) ⇒ Object



68
69
70
71
72
73
74
75
# File 'lib/ibge/reader/helpers.rb', line 68

def valid_informed_source(informed_source)
  source_keys = sources.keys

  unless source_keys.include?(informed_source)
    raise ArgumentError,
          "Source must be one of those '#{source_keys.join(', ')}'"
  end
end