class YmlBuilder::Offers
Public Class Methods
new(stats, categories)
click to toggle source
# File lib/yml_builder/offers.rb, line 7 def initialize(stats, categories) @stats = stats @categories = categories init_class end
Public Instance Methods
add(offer)
click to toggle source
Метод добавляет товар в прайс-лист с учетом выставленных в значении filter настроек.
@param [{YmlBuilder::CommonOffer}] offer карточка товара @example Примеры использования
price = YmlBuilder::Yml.new price.offers.add(offer)
# 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)
click to toggle source
Метод формирует фрагмент YML файла каталога Яндекс.Маркет для всего списка товаров
@param [Integer] ident отступ от левого края в символах @return [String] фрагмент YML файла каталога Яндекс.Маркет
# 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
Private Instance Methods
add_ident(str, ident)
click to toggle source
# File lib/yml_builder/offers.rb, line 62 def add_ident(str, ident) ' '.rjust(ident, ' ') + str end
init_class()
click to toggle source
# File lib/yml_builder/offers.rb, line 67 def init_class @offers = Hash.new end