Module: ArrayHasher

Defined in:
lib/array_hasher.rb,
lib/array_hasher/version.rb,
lib/array_hasher/formatter.rb

Defined Under Namespace

Classes: Formatter

Constant Summary collapse

VERSION =
"0.1.5"

Class Method Summary collapse

Class Method Details

.csv_each(path, ext_types = {}, &block) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/array_hasher.rb', line 28

def csv_each(path, ext_types = {}, &block)
  csv = CSV.open(path)
  formatter = new_formatter(parse_format(csv.gets))
  formatter.types.merge!(ext_types)
  if block
    csv.each { |line| block.call(formatter.parse(line)) }
  else
    Enumerator.new { |y| csv.each { |line| y << formatter.parse(line) } }
  end
end

.new_formatter(cols) ⇒ Object



12
13
14
# File 'lib/array_hasher.rb', line 12

def new_formatter(cols)
  Formatter.new(cols)
end

.parse_format(definition) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/array_hasher.rb', line 16

def parse_format(definition)
  definition.map do |val|
    name, type, opts = val.to_s.split(':', 3)

    [
      (name && name.length > 0) ? name.to_sym : nil,
      (type && type.length > 0) ? type.to_sym : nil,
      (opts && opts =~ /\A\{.*\}\z/) ? JSON.parse(opts) : {}
    ]
  end
end