Class: YmlBuilder::Categories

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stats) ⇒ Categories

Returns a new instance of Categories.



13
14
15
16
# File 'lib/yml_builder/categories.rb', line 13

def initialize(stats)
  @stats = stats
  init_class
end

Instance Attribute Details

#filterObject

Переменная содержит список id категорий, для которых необходимо формировать прайс-лист. Если переменная пуста, то включаются все категории

Examples:

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

price = YmlBuilder::Yml.new
price.categories.filter = [1, 3, 4, 5]


10
11
12
# File 'lib/yml_builder/categories.rb', line 10

def filter
  @filter
end

Instance Method Details

#add(opts = {}) ⇒ Boolean

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

Examples:

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

price = YmlBuilder::Yml.new
price.categories.add(id: 1, name: 'Игрушки')
price.categories.add(id: 2, name: 'Игрушки для девочек', parent_id: 1)

Parameters:

  • opts (Hash) (defaults to: {})

    параметры категорий Интернет-магазина

Options Hash (opts):

  • :id (Object)

    идентификатор категории (обязательно)

  • :parent_id (Integer)

    идентификатор родительской категории (опционально)

  • :name (String)

    название категории (обязательно)

Returns:

  • (Boolean)

    true, если категория была добавлена, и false, если добавление запрещено в filter



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/yml_builder/categories.rb', line 30

def add(opts = {})
  return false unless can_add?(opts[:id])
  allow = [:id, :parent_id, :name]
  raise "Ошибка: для добавления категории используйте ключи #{allow.inspect}" if (opts.keys - allow).count > 0
  raise "Ошибка: не указан 'id' для добавления категории" if opts[:id].nil?
  raise "Ошибка: не указан 'name' для добавления категории" if opts[:name].nil?
  @params[opts[:id]] = { parent_id: opts[:parent_id], name: opts[:name] }
  @params            = Hash[@params.sort_by { |id, data| id }]
  @stats.add(:categories, 1)
  true
end

#can_add?(id) ⇒ Boolean

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

Parameters:

  • id (Object)

    идентифкатор категории товара

Returns:

  • (Boolean)

    true, если данный id категории указан в filter как допустимый для включения в прайс-лист



48
49
50
# File 'lib/yml_builder/categories.rb', line 48

def can_add?(id)
  @filter.count == 0 ? true : @filter.include?(id)
end

#has?(id) ⇒ Boolean

Метод возвращает true, если категория, передаваемая в качестве параметра, уже добавлена в прайс-лист

Parameters:

  • id (Object)

    идентификатор категории

Returns:

  • (Boolean)

    true, если категория с заданным id уже была добавлена в прайс-лист



93
94
95
# File 'lib/yml_builder/categories.rb', line 93

def has?(id)
  @params[id].nil? ? false : true
end

#to_yml(ident = 4) ⇒ String

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

Parameters:

  • ident (Integer) (defaults to: 4)

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

Returns:

  • (String)

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



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/yml_builder/categories.rb', line 69

def to_yml(ident = 4)
  out = Array.new
  out << '<categories>'

  @params.each do |id, value|
    if value[:parent_id].nil?
      out << "  <category id=#{id.to_s.inspect}>#{::YmlBuilder::Common.encode_special_chars(value[:name])}</category>"
    else
      out << "  <category id=#{id.to_s.inspect} parentId=#{value[:parent_id].to_s.inspect}>#{::YmlBuilder::Common.encode_special_chars(value[:name])}</category>"
    end
  end
  warn "Предупреждение: не указано ни одной категории в секции 'categories'" if out.count == 1

  out << '</categories>'

  out.map! { |line| line = ' '.rjust(ident, ' ') + line }
  out.join("\n")
end