Class: Amazon::DatadiveImportParser

Inherits:
Object
  • Object
show all
Defined in:
app/services/amazon/datadive_import_parser.rb

Overview

Parses DataDive flat file export format (TSV) for Amazon listings
Expected format:
Row 1: Human-readable headers (Title, Key Product Features, etc.)
Row 2: Field names (item_name, bullet_point1, etc.)
Row 3+: Values

Field mapping:

  • item_name -> Title
  • bullet_point1-10 -> Feature 1-10 (compacted, blanks removed)
  • product_description -> Description
  • generic_keyword -> Generic Keyword

Defined Under Namespace

Classes: Result

Constant Summary collapse

FIELD_MAPPING =
{
  'item_name' => :title,
  'product_description' => :description,
  'generic_keyword' => :generic_keyword
}.freeze

Instance Method Summary collapse

Instance Method Details

#parse(raw_text) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'app/services/amazon/datadive_import_parser.rb', line 30

def parse(raw_text)
  return Result.new(success: false, error: 'No data provided') if raw_text.blank?

  # Parse all rows handling multiline quoted fields
  rows = parse_all_rows(raw_text.strip)
  return Result.new(success: false, error: 'Invalid format: needs at least 3 rows (headers, field names, values)') if rows.size < 3

  field_names = rows[1]
  values = rows[2]

  parse_error = validate_parsed_rows(field_names, values)
  return parse_error if parse_error

  data = extract_data(field_names, values)
  Result.new(success: true, data: data)
rescue StandardError => e
  Result.new(success: false, error: "Parse error: #{e.message}")
end

#validate_parsed_rows(field_names, values) ⇒ Object



49
50
51
52
53
54
# File 'app/services/amazon/datadive_import_parser.rb', line 49

def validate_parsed_rows(field_names, values)
  return Result.new(success: false, error: 'Field names row is empty') if field_names.empty?
  return Result.new(success: false, error: 'Values row is empty') if values.empty?

  nil
end