Class: YmlBuilder::Offers

Inherits:
Object
  • Object
show all
Defined in:
lib/yml_builder/offers.rb

Instance Method Summary collapse

Constructor Details

#initialize(stats, categories) ⇒ Offers

Returns a new instance of Offers.



7
8
9
10
11
# File 'lib/yml_builder/offers.rb', line 7

def initialize(stats, categories)
  @stats      = stats
  @categories = categories
  init_class
end

Instance Method Details

#add(offer) ⇒ Object

Метод добавляет товар в прайс-лист с учетом выставленных в значении filter настроек.

Examples:

Примеры использования

price = YmlBuilder::Yml.new
price.offers.add(offer)

Parameters:



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/yml_builder/offers.rb', line 20

def add(offer)
  return false unless @categories.can_add?(offer.category_id)
  @offers[offer.id] = offer

  # Формируем статистику
  @stats.add(:total, 1)
  if offer.available
    @stats.add(:available, 1)
    @stats.add(:price, (offer.price || 0))
  end
  true
end

#to_yml(ident = 4) ⇒ String

Метод формирует фрагмент YML файла каталога Яндекс.Маркет для всего списка товаров

Parameters:

  • ident (Integer) (defaults to: 4)

    отступ от левого края в символах

Returns:

  • (String)

    фрагмент YML файла каталога Яндекс.Маркет



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/yml_builder/offers.rb', line 38

def to_yml(ident = 4)
  @offers = @offers.sort_by { |id, offer| id }

  out = Array.new
  idx = 1
  out << add_ident("<offers>", ident)
  @offers.each do |_, offer|
    # Формируем один товар в YAML, разбиваем на строки, чтобы к каждой
    # добавить нужное количество пробелов для формирования корректного
    # YAML-файла
    arr = offer.to_yml(2).split(/[\n\r]/)
    arr.map! { |line| add_ident(line, ident) }
    out << arr.join("\n")
    # puts "#{idx}/#{@offers.count}" if idx % 1000 == 0
    idx += 1
  end
  out << add_ident("</offers>", ident)
  out.join("\n")
end