module ETL #:nodoc:
module Transform #:nodoc:
# Transform which decodes coded values
class DecodeTransform < ETL::Transform::Transform
attr_accessor :decode_table_path
attr_accessor :decode_table_delimiter
attr_accessor :default_value
# Initialize the transformer
#
# Configuration options:
# * :decode_table_path: The path to the decode table (defaults to 'decode.txt')
# * :decode_table_delimiter: The decode table delimiter (defaults to ':')
# * :default_value: The default value to use (defaults to 'No Value')
def initialize(control, configuration={})
super
if configuration[:decode_table_path]
configuration[:decode_table_path] = File.join(File.dirname(control.file), configuration[:decode_table_path])
end
@decode_table_path = (configuration[:decode_table_path] || 'decode.txt')
@decode_table_delimiter = (configuration[:decode_table_delimiter] || ':')
@default_value = (configuration[:default_value] || 'No Value')
end
# Transform the value
def transform(name, value, row)
decode_table[value] || default_value
end
# Get the decode table
def decode_table
unless @decode_table
@decode_table = {}
open(decode_table_path).each do |line|
code, value = line.strip.split(decode_table_delimiter)
if code && code.length > 0
@decode_table[code] = value
else
@default_value = value
end
end
end
@decode_table
end
end
end
end