class GetterCyndi5::Parser

Constants

DATA_PREFIX

Attributes

products[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/getter_cyndi5/parser.rb, line 5
def initialize(options = {})
  @options = options
  @products = []
end

Public Instance Methods

item_rows() click to toggle source
# File lib/getter_cyndi5/parser.rb, line 34
def item_rows
  document = @options.fetch(:document)
  item_row_selector = @options.fetch(:item_row_selector)
  document.css(item_row_selector)
end
parse() click to toggle source
# File lib/getter_cyndi5/parser.rb, line 10
def parse
  base_url = @options.fetch(:base_url)
  item_anchor_selector = @options.fetch(:item_anchor_selector)
  item_price_selector = @options.fetch(:item_price_selector)
  item_rows.each do |item_row|
    item_data = item_row.attributes.select { |k, v| k.start_with? DATA_PREFIX }.map { |k, v| [k.delete_prefix(DATA_PREFIX), v.value]}.to_h
    product_element = item_row.css(item_anchor_selector)[0]
    price_elements = item_row.css(item_price_selector)
    prices = {}
    price_elements.each do |price_element|
      prices[price_element.children[1].text] = price_element.children[0].text.gsub(/[^\d\.]/, '').to_f
    end
    attributes = {
      name: product_element.text,
      url: "#{base_url}#{product_element.attributes['href']}",
      item_data: item_data,
      prices: prices
    }
    product = GetterCyndi5::Product.new(attributes)
    products.append(product)
  end
  products
end