class Streamer::FactProviders::CSVProvider

CSVProvider implements Finder Provider interface

Attributes

key[R]
path[R]

Public Class Methods

new(path) click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 9
def initialize(path)
  @path = path
end

Public Instance Methods

field_number(field) click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 39
def field_number(field)
  headers.index(field) + 1
end
find(key) click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 13
def find(key)
  @key = key
  return hash_result if segments.size == 2
  return scalar_result if segments.size == 3
end
hash_result() click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 23
def hash_result
  Hash[headers.zip CSV.parse_line(lines)]
end
headers() click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 35
def headers
  @headers ||= CSV.parse_line(`head -n 1 #{path}`)
end
lines() click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 31
def lines
  `#{processing_statement}`.strip
end
processing_statement() click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 43
      def processing_statement
        segs = segments
        return unless segs.size > 1 && segs.size < 4
        <<-STMT
awk -F'","|,' '($#{field_number(segs[0])} ~ /^#{segs[1]}$/){print $0}' #{path}
        STMT
      end
scalar_result() click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 27
def scalar_result
  hash_result[segments[2]]
end
segments() click to toggle source
# File lib/streamer/fact_providers/csv_provider.rb, line 19
def segments
  key.split('.')
end