Class: Pikelet::RecordDefinition
- Inherits:
-
Object
- Object
- Pikelet::RecordDefinition
- Defined in:
- lib/pikelet/record_definition.rb
Instance Attribute Summary collapse
-
#field_definitions ⇒ Object
readonly
Returns the value of attribute field_definitions.
-
#file_definition ⇒ Object
readonly
Returns the value of attribute file_definition.
Instance Method Summary collapse
- #field(name, index, **options, &block) ⇒ Object
-
#initialize(file_definition, base_definition:) ⇒ RecordDefinition
constructor
A new instance of RecordDefinition.
- #parse(data) ⇒ Object
- #parse_hash(hash) ⇒ Object
- #record_class ⇒ Object
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_definitions ⇒ Object (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_definition ⇒ Object (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, **, &block) @record_class = nil field_definitions[name] = Pikelet::FieldDefinition.new(index, **, &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_class ⇒ Object
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 |