Class: Pikelet::RecordDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/pikelet/record_definition.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file_definition, base_definition:) ⇒ RecordDefinition

Returns a new instance of RecordDefinition.



7
8
9
10
# File 'lib/pikelet/record_definition.rb', line 7

def initialize(file_definition, base_definition:)
  @file_definition = file_definition
  @field_definitions = base_definition && base_definition.field_definitions.dup || {}
end

Instance Attribute Details

#field_definitionsObject (readonly)

Returns the value of attribute field_definitions.



5
6
7
# File 'lib/pikelet/record_definition.rb', line 5

def field_definitions
  @field_definitions
end

#file_definitionObject (readonly)

Returns the value of attribute file_definition.



5
6
7
# File 'lib/pikelet/record_definition.rb', line 5

def file_definition
  @file_definition
end

Instance Method Details

#field(name, index, **options, &block) ⇒ Object



12
13
14
15
# File 'lib/pikelet/record_definition.rb', line 12

def field(name, index, **options, &block)
  @record_class = nil
  field_definitions[name] = Pikelet::FieldDefinition.new(index, **options, &block)
end

#parse(data) ⇒ Object



17
18
19
# File 'lib/pikelet/record_definition.rb', line 17

def parse(data)
  record_class.new(*field_definitions.values.map { |field| field.parse(data) })
end

#parse_hash(hash) ⇒ Object



21
22
23
# File 'lib/pikelet/record_definition.rb', line 21

def parse_hash(hash)
  record_class.new(*hash.values_at(*field_definitions.keys))
end

#record_classObject



25
26
27
# File 'lib/pikelet/record_definition.rb', line 25

def record_class
  @record_class ||= Struct.new(*field_definitions.keys.map(&:to_sym))
end