Class: YmlBuilder::Offers
- Inherits:
-
Object
- Object
- YmlBuilder::Offers
- Defined in:
- lib/yml_builder/offers.rb
Instance Method Summary collapse
-
#add(offer) ⇒ Object
Метод добавляет товар в прайс-лист с учетом выставленных в значении filter настроек.
-
#initialize(stats, categories) ⇒ Offers
constructor
A new instance of Offers.
-
#to_yml(ident = 4) ⇒ String
Метод формирует фрагмент YML файла каталога Яндекс.Маркет для всего списка товаров.
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 настроек.
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 файла каталога Яндекс.Маркет для всего списка товаров
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 |