module Jekyll::Algolia::Extractor

def self.add_unique_object_id(record)

current content of the record
Public: Adds a unique :objectID field to the hash, representing the
def self.add_unique_object_id(record)
  record[:objectID] = AlgoliaHTMLExtractor.uuid(record)
  record
end

def self.extract_raw_records(content)

content - The HTML content to parse

node to index and hierarchy
Public: Extract raw records from the file, including content for each
def self.extract_raw_records(content)
  AlgoliaHTMLExtractor.run(
    content,
    options: {
      css_selector: Configurator.algolia('nodes_to_index')
    }
  )
end

def self.run(file)

file - The Jekyll file to process

Public: Extract records from the file
def self.run(file)
  # Getting all hierarchical nodes from the HTML input
  raw_records = extract_raw_records(file.content)
  # Getting file metadata
  shared_metadata = FileBrowser.metadata(file)
  # Building the list of records
  records = []
  raw_records.map do |record|
    # We do not need to pass the HTML node element to the final record
    node = record[:node]
    record.delete(:node)
    # Merging each record info with file info
    record = Utils.compact_empty(record.merge(shared_metadata))
    # Apply custom user-defined hooks
    # Users can return `nil` from the hook to signal we should not index
    # such a record
    record = Hooks.apply_each(record, node)
    next if record.nil?
    records << record
  end
  records
end