class Pikelet::RecordDefinition
Attributes
field_definitions[R]
file_definition[R]
Public Class Methods
new(file_definition, record_class: nil, base:)
click to toggle source
# File lib/pikelet/record_definition.rb, line 7 def initialize(file_definition, record_class: nil, base:) @file_definition = file_definition @field_definitions = base && base.field_definitions.dup || {} @record_class = record_class end
Public Instance Methods
default_record_class()
click to toggle source
# File lib/pikelet/record_definition.rb, line 32 def default_record_class Struct.new(*field_names) do def initialize(**attributes) super(*attributes.values_at(*self.class.members)) end end end
field(name, index, **options, &block)
click to toggle source
# File lib/pikelet/record_definition.rb, line 13 def field(name, index, **options, &block) field_definitions[name] = Pikelet::FieldDefinition.new(index, **options, &block) end
format(record, width: nil)
click to toggle source
# File lib/pikelet/record_definition.rb, line 21 def format(record, width: nil) width ||= self.width field_definitions.each_with_object(" " * width) do |(field_name, field_definition), result| field_definition.insert(record.send(field_name.to_sym), result) end end
parse(data)
click to toggle source
# File lib/pikelet/record_definition.rb, line 17 def parse(data) record_class.new(parse_fields(data)) end
record_class()
click to toggle source
# File lib/pikelet/record_definition.rb, line 28 def record_class @record_class ||= default_record_class end
signature_field()
click to toggle source
# File lib/pikelet/record_definition.rb, line 44 def signature_field field_definitions[file_definition.signature_field || :type_signature] end
width()
click to toggle source
# File lib/pikelet/record_definition.rb, line 40 def width field_definitions.values.map { |d| d.index.max }.max + 1 end
Private Instance Methods
field_names()
click to toggle source
# File lib/pikelet/record_definition.rb, line 50 def field_names field_definitions.keys.map(&:to_sym) end
parse_fields(data)
click to toggle source
# File lib/pikelet/record_definition.rb, line 54 def parse_fields(data) field_definitions.each_with_object({}) do |(field, definition), result| result[field.to_sym] = definition.parse(data) end end