Module: Meibo::DataModel::ClassMethods

Defined in:
lib/meibo/data_model.rb

Instance Method Summary collapse

Instance Method Details

#define_attributes(attribute_names_to_header_fields) ⇒ Object



8
9
10
11
12
13
14
15
16
17
# File 'lib/meibo/data_model.rb', line 8

def define_attributes(attribute_names_to_header_fields)
  attribute_names_to_header_fields = attribute_names_to_header_fields.dup.freeze
  attribute_names = attribute_names_to_header_fields.keys.freeze
  header_fields = attribute_names_to_header_fields.values.freeze
  define_class_attribute(:attribute_names_to_header_fields, attribute_names_to_header_fields)
  define_class_attribute(:attribute_names, attribute_names)
  define_class_attribute(:header_fields, header_fields)

  attr_reader(*attribute_names, :extension_fields)
end

#define_converters(converters) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/meibo/data_model.rb', line 19

def define_converters(converters)
  converters = converters.dup.freeze
  define_class_attribute(:converters, converters)
  define_header_converters
  define_parser_converters(converters)
  define_write_converters(converters)
end

#parse(csv) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/meibo/data_model.rb', line 27

def parse(csv)
  return to_enum(:parse, csv) unless block_given?

  _parse(csv) do |row|
    yield new(**row.to_h)
  end
end

#validate_header_fields(actual_header_fields) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/meibo/data_model.rb', line 35

def validate_header_fields(actual_header_fields)
  missing_header_fields = header_fields - actual_header_fields
  unless missing_header_fields.empty?
    message = "missing header fields: #{missing_header_fields.join(",")}"
    raise MissingHeaderFieldsError.new(message, missing_header_fields: missing_header_fields)
  end
  raise ScrambledHeaderFieldsError unless actual_header_fields.take(header_fields.size) == header_fields
end