class Differential::Parser::Reader

This class is used to parse incoming datasets. Usage: Instantiate new object with configuration options. Call read to parse individual hash objects into Record objects.

Attributes

group_id_key[R]
record_id_key[R]
value_key[R]

Public Class Methods

new(record_id_key:, value_key:, group_id_key: nil) click to toggle source

Params:

record_id_key

The hash key(s) to use to uniquely identify a record (required)

value_key

The hash key used to extract the value of the record.

group_id_key

The hash key(s) to use to identify which group the record belongs to.

# File lib/differential/parser/reader.rb, line 25
def initialize(record_id_key:, value_key:, group_id_key: nil)
  raise ArgumentError, 'record_id_key is required'  unless record_id_key
  raise ArgumentError, 'value_key is required'      unless value_key

  @record_id_key  = record_id_key
  @value_key      = value_key
  @group_id_key   = group_id_key
end

Public Instance Methods

read(hash) click to toggle source
# File lib/differential/parser/reader.rb, line 34
def read(hash)
  id        = make_record_id(hash)
  group_id  = make_group_id(hash)
  value     = hash[value_key]

  ::Differential::Parser::Record.new(
    id: id,
    group_id: group_id,
    value: value,
    data: hash
  )
end

Private Instance Methods

array(hashes) click to toggle source
# File lib/differential/parser/reader.rb, line 65
def array(hashes)
  if hashes.is_a?(Hash)
    [hashes]
  # If the consumer passed in a value that responds to each (is enumerable-like) then
  # we can accept that as is.
  elsif !hashes.respond_to?(:each)
    Array(hashes)
  else
    hashes
  end
end
group_id_key_array() click to toggle source
# File lib/differential/parser/reader.rb, line 61
def group_id_key_array
  @group_id_key_array ||= Array(group_id_key)
end
make_group_id(hash) click to toggle source
# File lib/differential/parser/reader.rb, line 53
def make_group_id(hash)
  group_id_key_array.map { |k| hash[k] }
end
make_record_id(hash) click to toggle source
# File lib/differential/parser/reader.rb, line 49
def make_record_id(hash)
  record_id_key_array.map { |k| hash[k] }
end
record_id_key_array() click to toggle source
# File lib/differential/parser/reader.rb, line 57
def record_id_key_array
  @record_id_key_array ||= Array(record_id_key)
end