yml_builder 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/yml_builder/categories.rb +28 -1
- data/lib/yml_builder/common.rb +1 -1
- data/lib/yml_builder/common_offer.rb +69 -31
- data/lib/yml_builder/currencies.rb +33 -27
- data/lib/yml_builder/offer.rb +3 -0
- data/lib/yml_builder/offer_simple.rb +1 -1
- data/lib/yml_builder/offers.rb +21 -4
- data/lib/yml_builder/shop.rb +29 -23
- data/lib/yml_builder/version.rb +1 -1
- data/lib/yml_builder/yml.rb +30 -6
- data/test/test_yml.yml +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f345347a313447611efffb080f9fe5c71bd41702
|
|
4
|
+
data.tar.gz: aaa36cfb2590870a030f1b39756114ea43e06f74
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fa385fbdb34c75143286a4fb69d1ceed58df439faed06663adf657f0b4456201947d2d23e3a8f249a9d59bb34344aa4f57485994a6453dd304d2a13256019cd0
|
|
7
|
+
data.tar.gz: dda2773df6b790eb697709c5790275f5368bae2dfd1c9697cb834bccc83f868fc8452da1fcbd3b7549ecb5515eb4844fed3d32e48a70dd9ee023a70989e4e94f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
# Класс обеспечивает добавление в парйс-лист Yandex.Market категорий Интернет-магазинов
|
|
2
|
+
|
|
1
3
|
module YmlBuilder
|
|
2
4
|
class Categories
|
|
3
5
|
# Переменная содержит список id категорий, для которых необходимо формировать прайс-лист.
|
|
4
6
|
# Если переменная пуста, то включаются все категории
|
|
7
|
+
# @example Примеры использования
|
|
8
|
+
# price = YmlBuilder::Yml.new
|
|
9
|
+
# price.categories.filter = [1, 3, 4, 5]
|
|
5
10
|
attr_reader :filter
|
|
6
11
|
|
|
7
12
|
def initialize(stats)
|
|
@@ -9,6 +14,17 @@ module YmlBuilder
|
|
|
9
14
|
init_class
|
|
10
15
|
end
|
|
11
16
|
|
|
17
|
+
# Метод добавляет категорию Интернет-магазина в прайс-лист с учетом выставленных в значении filter настроек.
|
|
18
|
+
#
|
|
19
|
+
# @param [Hash] opts параметры категорий Интернет-магазина
|
|
20
|
+
# @option opts [Object] :id идентификатор категории (обязательно)
|
|
21
|
+
# @option opts [Integer] :parent_id идентификатор родительской категории (опционально)
|
|
22
|
+
# @option opts [String] :name название категории (обязательно)
|
|
23
|
+
# @return [Boolean] true, если категория была добавлена, и false, если добавление запрещено в filter
|
|
24
|
+
# @example Примеры использования
|
|
25
|
+
# price = YmlBuilder::Yml.new
|
|
26
|
+
# price.categories.add(id: 1, name: 'Игрушки')
|
|
27
|
+
# price.categories.add(id: 2, name: 'Игрушки для девочек', parent_id: 1)
|
|
12
28
|
def add(opts = {})
|
|
13
29
|
return false unless can_add?(opts[:id])
|
|
14
30
|
allow = [:id, :parent_id, :name]
|
|
@@ -34,6 +50,9 @@ module YmlBuilder
|
|
|
34
50
|
# Filter может принимать значения nil или [], тогда считается, что допустимо включение в прайс-лист
|
|
35
51
|
# всех товаров.
|
|
36
52
|
# @param [Array] allow массив id категорий, который должны попадать в результирующий прайс-лист
|
|
53
|
+
# @example Примеры использования
|
|
54
|
+
# price = YmlBuilder::Yml.new
|
|
55
|
+
# price.categories.filter = [1, 3, 4, 5]
|
|
37
56
|
def filter=(allow)
|
|
38
57
|
@filter = allow || Array.new
|
|
39
58
|
end
|
|
@@ -41,7 +60,7 @@ module YmlBuilder
|
|
|
41
60
|
# Метод формирует фрагмент YML файла каталога Яндекс.Маркет, содержащий список категорий
|
|
42
61
|
#
|
|
43
62
|
# @param [Integer] ident отступ от левого края в символах
|
|
44
|
-
# @return [String] фрагмент YML файла каталога
|
|
63
|
+
# @return [String] фрагмент YML файла каталога Яндекс.Маркет
|
|
45
64
|
def to_yml(ident = 4)
|
|
46
65
|
out = Array.new
|
|
47
66
|
out << '<categories>'
|
|
@@ -61,6 +80,14 @@ module YmlBuilder
|
|
|
61
80
|
out.join("\n")
|
|
62
81
|
end
|
|
63
82
|
|
|
83
|
+
# Метод возвращает true, если категория, передаваемая в качестве параметра, уже добавлена в прайс-лист
|
|
84
|
+
#
|
|
85
|
+
# @param [Object] id идентификатор категории
|
|
86
|
+
# @return [Boolean] true, если категория с заданным id уже была добавлена в прайс-лист
|
|
87
|
+
def has?(id)
|
|
88
|
+
@params[id].nil? ? false : true
|
|
89
|
+
end
|
|
90
|
+
|
|
64
91
|
private
|
|
65
92
|
|
|
66
93
|
def init_class
|
data/lib/yml_builder/common.rb
CHANGED
|
@@ -1,29 +1,34 @@
|
|
|
1
1
|
module YmlBuilder
|
|
2
2
|
class CommonOffer
|
|
3
|
+
# Уникальный идентификатор товара
|
|
4
|
+
# @example Примеры использования
|
|
5
|
+
# offer = YmlBuilder::Offer.new('simple')
|
|
6
|
+
# offer.id = 10
|
|
3
7
|
attr_accessor :id
|
|
8
|
+
# Уникальный идентификатор типа товара, в соответствии с классификацией Yandex.MArket. Устанавливается в конструкторе
|
|
9
|
+
# @example Примеры использования
|
|
10
|
+
# offer = YmlBuilder::Offer.new('simple')
|
|
11
|
+
# puts offer.type #=> 'simple'
|
|
4
12
|
attr_accessor :type
|
|
13
|
+
# Наличие товара на складе
|
|
14
|
+
# @example Примеры использования
|
|
15
|
+
# offer = YmlBuilder::Offer.new('simple')
|
|
16
|
+
# puts offer.available = true
|
|
5
17
|
attr_accessor :available
|
|
6
18
|
attr_accessor :bid
|
|
7
19
|
|
|
20
|
+
# Список обязательных полей для данного типа оффера
|
|
8
21
|
attr_accessor :mandatories
|
|
9
22
|
|
|
10
23
|
def initialize
|
|
11
24
|
init_class
|
|
12
25
|
end
|
|
13
26
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
@id = 0
|
|
20
|
-
@type = 'unknown'
|
|
21
|
-
@available = false
|
|
22
|
-
@bid = nil
|
|
23
|
-
|
|
24
|
-
@mandatories = Array.new
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
+
# Метод добавляет ссылку на фотографию товара в конец списка, и ограничивает список 10-ю фотографиями
|
|
28
|
+
# @param [String] url ссылка на фотографию товара
|
|
29
|
+
# @example Примеры использования
|
|
30
|
+
# offer = YmlBuilder::Offer.new('simple')
|
|
31
|
+
# offer.add_picture('http://example-site.ru/image1.jpg')
|
|
27
32
|
def add_picture(url)
|
|
28
33
|
@picture << url
|
|
29
34
|
@picture.uniq!
|
|
@@ -31,6 +36,11 @@ module YmlBuilder
|
|
|
31
36
|
@picture = @picture[0,9]
|
|
32
37
|
end
|
|
33
38
|
|
|
39
|
+
# Метод добавляет ссылку на фотографию товара в начало списка, и ограничивает список 10-ю фотографиями
|
|
40
|
+
# @param [String] url ссылка на фотографию товара (на основную фотографию)
|
|
41
|
+
# @example Примеры использования
|
|
42
|
+
# offer = YmlBuilder::Offer.new('simple')
|
|
43
|
+
# offer.add_cover_picture('http://example-site.ru/cover_image1.jpg')
|
|
34
44
|
def add_cover_picture(url)
|
|
35
45
|
@picture.unshift(url)
|
|
36
46
|
@picture.uniq!
|
|
@@ -38,10 +48,45 @@ module YmlBuilder
|
|
|
38
48
|
@picture = @picture[0,9]
|
|
39
49
|
end
|
|
40
50
|
|
|
51
|
+
# Метод добавляет характеристики товара (для секции 'param')
|
|
52
|
+
#
|
|
53
|
+
# @param [String] name наименование параметра, например "Количество товара"
|
|
54
|
+
# @param [String] unit суффикс параметра, например "шт."
|
|
55
|
+
# @param [Object] value значение параметра
|
|
56
|
+
# @example Примеры использования
|
|
57
|
+
# offer = YmlBuilder::Offer.new('simple')
|
|
58
|
+
# offer.add_param(name: "Количество", unit: "шт.", value: 100)
|
|
59
|
+
# offer.add_param(name: "Обложка", value: "мягкая")
|
|
41
60
|
def add_param(name:, unit: nil, value:)
|
|
42
61
|
@meta[name] = { unit: unit, value: value}
|
|
43
62
|
end
|
|
44
63
|
|
|
64
|
+
# Метод формирует фрагмент YML файла каталога Яндекс.Маркет для одного товара
|
|
65
|
+
#
|
|
66
|
+
# @param [Integer] ident отступ от левого края в символах
|
|
67
|
+
# @return [String] фрагмент YML файла каталога Яндекс.Маркет
|
|
68
|
+
def to_yml(ident = 4)
|
|
69
|
+
out = Array.new
|
|
70
|
+
out << header_line
|
|
71
|
+
|
|
72
|
+
@params.each do |key, value|
|
|
73
|
+
if [:picture, :param].include?(key)
|
|
74
|
+
out += to_yml_subsections(key)
|
|
75
|
+
elsif @mandatories.include?(key)
|
|
76
|
+
out << to_yml_mandatories(key, value)
|
|
77
|
+
else
|
|
78
|
+
out << to_yml_optional(key, value)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
out.compact!
|
|
82
|
+
|
|
83
|
+
out << footer_line
|
|
84
|
+
out.map! { |line| ' '.rjust(ident, ' ') + line }
|
|
85
|
+
out.join("\n")
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
private
|
|
89
|
+
|
|
45
90
|
def method_missing(method_sym, *arguments, &block)
|
|
46
91
|
if @params.include?(method_sym.to_s.gsub(/=$/, '').to_sym)
|
|
47
92
|
processing_method(method_sym, arguments.first)
|
|
@@ -54,8 +99,8 @@ module YmlBuilder
|
|
|
54
99
|
if method_sym.to_s.match(/=$/)
|
|
55
100
|
key = method_sym.to_s.gsub(/=$/, '')
|
|
56
101
|
warn "Предупреждение: url не должен превышать 512 символов" if key == 'url' && value.length > 512
|
|
57
|
-
warn "Предупреждение: price не может быть равен нулю" if key == 'price' && value.to_f == 0
|
|
58
|
-
warn "Предупреждение: weight не может быть равен нулю" if key == 'weight' && value.to_f == 0
|
|
102
|
+
warn "Предупреждение: price не может быть равен нулю (offer id #{@id})" if key == 'price' && value.to_f == 0
|
|
103
|
+
warn "Предупреждение: weight не может быть равен нулю (offer id #{@id})" if key == 'weight' && value.to_f == 0
|
|
59
104
|
@params[key.to_sym] = value
|
|
60
105
|
else
|
|
61
106
|
@params[method_sym.to_s.gsub(/=$/, '').to_sym]
|
|
@@ -111,24 +156,17 @@ module YmlBuilder
|
|
|
111
156
|
" <#{key_xml}>#{::YmlBuilder::Common.encode_special_chars(value)}</#{key_xml}>"
|
|
112
157
|
end
|
|
113
158
|
|
|
114
|
-
def
|
|
115
|
-
|
|
116
|
-
|
|
159
|
+
def init_class
|
|
160
|
+
@params = Hash.new
|
|
161
|
+
@meta = Hash.new
|
|
162
|
+
@picture = Array.new
|
|
117
163
|
|
|
118
|
-
@
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
out << to_yml_mandatories(key, value)
|
|
123
|
-
else
|
|
124
|
-
out << to_yml_optional(key, value)
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
out.compact!
|
|
164
|
+
@id = 0
|
|
165
|
+
@type = 'unknown'
|
|
166
|
+
@available = false
|
|
167
|
+
@bid = nil
|
|
128
168
|
|
|
129
|
-
|
|
130
|
-
out.map! { |line| ' '.rjust(ident, ' ') + line }
|
|
131
|
-
out.join("\n")
|
|
169
|
+
@mandatories = Array.new
|
|
132
170
|
end
|
|
133
171
|
|
|
134
172
|
end
|
|
@@ -5,25 +5,28 @@ module YmlBuilder
|
|
|
5
5
|
init_class
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@params[:uah] = nil
|
|
16
|
-
@params[:kzt] = nil
|
|
17
|
-
end
|
|
8
|
+
# Метод формирует фрагмент YML файла каталога Яндекс.Маркет, содержащий список валют
|
|
9
|
+
#
|
|
10
|
+
# @param [Integer] ident отступ от левого края в символах
|
|
11
|
+
# @return [String] фрагмент YML файла каталога Яндекс.Маркет
|
|
12
|
+
def to_yml(ident = 4)
|
|
13
|
+
out = Array.new
|
|
14
|
+
out << '<currencies>'
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
processing_method(method_sym, arguments.first)
|
|
22
|
-
else
|
|
23
|
-
super
|
|
16
|
+
@params.each do |key, value|
|
|
17
|
+
out << " <currency id=#{key.to_s.upcase.inspect} rate=#{value.to_s.upcase.inspect}/>" unless value.nil?
|
|
24
18
|
end
|
|
19
|
+
warn "Предупреждение: не указано ни одной валюты в секции 'currencies'" if out.count == 1
|
|
20
|
+
|
|
21
|
+
out << '</currencies>'
|
|
22
|
+
|
|
23
|
+
out.map! { |line| line = ' '.rjust(ident, ' ') + line }
|
|
24
|
+
|
|
25
|
+
out.join("\n")
|
|
25
26
|
end
|
|
26
27
|
|
|
28
|
+
private
|
|
29
|
+
|
|
27
30
|
def valid?(method_sym, allow, value)
|
|
28
31
|
return true if value.to_s.match(/^\s*[+-]?((\d+_?)*\d+(\.(\d+_?)*\d+)?|\.(\d+_?)*\d+)(\s*|([eE][+-]?(\d+_?)*\d+)\s*)$/)
|
|
29
32
|
return true if allow.include?(value)
|
|
@@ -43,20 +46,23 @@ module YmlBuilder
|
|
|
43
46
|
end
|
|
44
47
|
end
|
|
45
48
|
|
|
46
|
-
def
|
|
47
|
-
|
|
48
|
-
out << '<currencies>'
|
|
49
|
-
|
|
50
|
-
@params.each do |key, value|
|
|
51
|
-
out << " <currency id=#{key.to_s.upcase.inspect} rate=#{value.to_s.upcase.inspect}/>" unless value.nil?
|
|
52
|
-
end
|
|
53
|
-
warn "Предупреждение: не указано ни одной валюты в секции 'currencies'" if out.count == 1
|
|
54
|
-
|
|
55
|
-
out << '</currencies>'
|
|
49
|
+
def init_class
|
|
50
|
+
@params = Hash.new
|
|
56
51
|
|
|
57
|
-
|
|
52
|
+
@params[:rur] = nil
|
|
53
|
+
@params[:rub] = nil
|
|
54
|
+
@params[:usd] = nil
|
|
55
|
+
@params[:eur] = nil
|
|
56
|
+
@params[:uah] = nil
|
|
57
|
+
@params[:kzt] = nil
|
|
58
|
+
end
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
def method_missing(method_sym, *arguments, &block)
|
|
61
|
+
if @params.include?(method_sym.to_s.gsub(/=$/, '').to_sym)
|
|
62
|
+
processing_method(method_sym, arguments.first)
|
|
63
|
+
else
|
|
64
|
+
super
|
|
65
|
+
end
|
|
60
66
|
end
|
|
61
67
|
|
|
62
68
|
end
|
data/lib/yml_builder/offer.rb
CHANGED
data/lib/yml_builder/offers.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Модуль управления карточками товара разного типа. По сути - это класс-массив, в котором
|
|
2
|
+
# хранятся все товары
|
|
3
|
+
|
|
1
4
|
module YmlBuilder
|
|
2
5
|
class Offers
|
|
3
6
|
|
|
@@ -7,10 +10,12 @@ module YmlBuilder
|
|
|
7
10
|
init_class
|
|
8
11
|
end
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
# Метод добавляет товар в прайс-лист с учетом выставленных в значении filter настроек.
|
|
14
|
+
#
|
|
15
|
+
# @param [{YmlBuilder::CommonOffer}] offer карточка товара
|
|
16
|
+
# @example Примеры использования
|
|
17
|
+
# price = YmlBuilder::Yml.new
|
|
18
|
+
# price.offers.add(offer)
|
|
14
19
|
def add(offer)
|
|
15
20
|
return false unless @categories.can_add?(offer.category_id)
|
|
16
21
|
@offers[offer.id] = offer
|
|
@@ -24,6 +29,10 @@ module YmlBuilder
|
|
|
24
29
|
true
|
|
25
30
|
end
|
|
26
31
|
|
|
32
|
+
# Метод формирует фрагмент YML файла каталога Яндекс.Маркет для всего списка товаров
|
|
33
|
+
#
|
|
34
|
+
# @param [Integer] ident отступ от левого края в символах
|
|
35
|
+
# @return [String] фрагмент YML файла каталога Яндекс.Маркет
|
|
27
36
|
def to_yml(ident = 4)
|
|
28
37
|
@offers = @offers.sort_by { |id, offer| id }
|
|
29
38
|
|
|
@@ -38,5 +47,13 @@ module YmlBuilder
|
|
|
38
47
|
out.join("\n")
|
|
39
48
|
end
|
|
40
49
|
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def init_class
|
|
55
|
+
@offers = Hash.new
|
|
56
|
+
end
|
|
57
|
+
|
|
41
58
|
end
|
|
42
59
|
end
|
data/lib/yml_builder/shop.rb
CHANGED
|
@@ -5,6 +5,35 @@ module YmlBuilder
|
|
|
5
5
|
init_class
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
+
# Метод формирует фрагмент YML файла каталога Яндекс.Маркет для описания Интернет-магазина
|
|
9
|
+
#
|
|
10
|
+
# @return [String] фрагмент YML файла каталога Яндекс.Маркет
|
|
11
|
+
def to_yml
|
|
12
|
+
out = Array.new
|
|
13
|
+
out << ' <shop>'
|
|
14
|
+
|
|
15
|
+
@params[:m].each do |key, value|
|
|
16
|
+
raise "Ошибка секции 'company': не заполнено значение для обязательного ключа #{key.to_s.inspect}" if value == ''
|
|
17
|
+
out << " <#{key}>#{::YmlBuilder::Common.encode_special_chars(value)}</#{key}>"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
@params[:o].each do |key, value|
|
|
21
|
+
unless value.nil?
|
|
22
|
+
out << " <#{key}>#{::YmlBuilder::Common.encode_special_chars(value)}</#{key}>"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
out << ' {replace_currencies}'
|
|
27
|
+
out << ' {replace_categories}'
|
|
28
|
+
out << ' {replace_local_delivery_cost}'
|
|
29
|
+
out << ' {replace_offers}'
|
|
30
|
+
out << ' </shop>'
|
|
31
|
+
out.join("\n")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
8
37
|
def init_class
|
|
9
38
|
@params = Hash.new
|
|
10
39
|
|
|
@@ -43,29 +72,6 @@ module YmlBuilder
|
|
|
43
72
|
end
|
|
44
73
|
end
|
|
45
74
|
|
|
46
|
-
def to_yml
|
|
47
|
-
out = Array.new
|
|
48
|
-
out << ' <shop>'
|
|
49
|
-
|
|
50
|
-
@params[:m].each do |key, value|
|
|
51
|
-
raise "Ошибка секции 'company': не заполнено значение для обязательного ключа #{key.to_s.inspect}" if value == ''
|
|
52
|
-
out << " <#{key}>#{::YmlBuilder::Common.encode_special_chars(value)}</#{key}>"
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
@params[:o].each do |key, value|
|
|
56
|
-
unless value.nil?
|
|
57
|
-
out << " <#{key}>#{::YmlBuilder::Common.encode_special_chars(value)}</#{key}>"
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
out << ' {replace_currencies}'
|
|
62
|
-
out << ' {replace_categories}'
|
|
63
|
-
out << ' {replace_local_delivery_cost}'
|
|
64
|
-
out << ' {replace_offers}'
|
|
65
|
-
out << ' </shop>'
|
|
66
|
-
out.join("\n")
|
|
67
|
-
end
|
|
68
|
-
|
|
69
75
|
|
|
70
76
|
end
|
|
71
77
|
end
|
data/lib/yml_builder/version.rb
CHANGED
data/lib/yml_builder/yml.rb
CHANGED
|
@@ -3,15 +3,30 @@
|
|
|
3
3
|
|
|
4
4
|
module YmlBuilder
|
|
5
5
|
class Yml
|
|
6
|
-
# Ссылка на класс, описывающий контакты Интернет-магазина
|
|
6
|
+
# Ссылка на класс, описывающий контакты Интернет-магазина ({YmlBuilding::Shop})
|
|
7
|
+
# @example Примеры использования
|
|
8
|
+
# price = YmlBuilder::Yml.new
|
|
9
|
+
# price.shop.phone = '+7 (123) 456-7890'
|
|
7
10
|
attr_reader :shop
|
|
8
|
-
# Ссылка на класс, описывающий категории
|
|
11
|
+
# Ссылка на класс, описывающий категории (YmlBuilding::Categories)
|
|
12
|
+
# @example Примеры использования
|
|
13
|
+
# price = YmlBuilder::Yml.new
|
|
14
|
+
# price.categories.add(id: 1, name: "Игрушки")
|
|
15
|
+
# price.categories.add(id: 4, name: "Игрушки для девочек", parent_id: 1)
|
|
9
16
|
attr_reader :categories
|
|
10
|
-
# Ссылка на класс, описывающий валюты
|
|
17
|
+
# Ссылка на класс, описывающий валюты ({YmlBuilding::Currencies})
|
|
18
|
+
# @example Примеры использования
|
|
19
|
+
# price = YmlBuilder::Yml.new
|
|
20
|
+
# price.currencies.rub = 1
|
|
21
|
+
# price.currencies.usd = 55.04
|
|
22
|
+
# price.currencies.eur = :cbrf
|
|
11
23
|
attr_reader :currencies
|
|
12
|
-
# Ссылка на класс, управляющий товарами (офферами)
|
|
24
|
+
# Ссылка на класс, управляющий товарами (офферами) ({YmlBuilding::Offers})
|
|
13
25
|
attr_reader :offers
|
|
14
26
|
# Переменая, хранящая стоимость доставки в локации расположения Интернет-магазина
|
|
27
|
+
# @example Примеры использования
|
|
28
|
+
# price = YmlBuilder::Yml.new
|
|
29
|
+
# price.local_delivery_cost = 300
|
|
15
30
|
attr_reader :local_delivery_cost
|
|
16
31
|
|
|
17
32
|
|
|
@@ -25,7 +40,7 @@ module YmlBuilder
|
|
|
25
40
|
end
|
|
26
41
|
|
|
27
42
|
# Метод устанавливает стоимость доставки в месте локации магазина. Например, если магазин находится в Москве,
|
|
28
|
-
#
|
|
43
|
+
# то при указанни данной стоимости, она будет показана покупателям в этом же районе.
|
|
29
44
|
#
|
|
30
45
|
# @param [Float] value стоимость доставки в месте локации магазина
|
|
31
46
|
# @return [None] нет
|
|
@@ -34,9 +49,12 @@ module YmlBuilder
|
|
|
34
49
|
end
|
|
35
50
|
|
|
36
51
|
# Метод возвращает статистику по результатам генерации прайс-листа: всего товаров, товаров в наличии, стоимость
|
|
37
|
-
#
|
|
52
|
+
# товаров в наличии (без учета количества)
|
|
38
53
|
#
|
|
39
54
|
# @return [None] нет
|
|
55
|
+
# @example Примеры использования
|
|
56
|
+
# price = YmlBuilder::Yml.new
|
|
57
|
+
# price.stats #=> { :categories => 0, :total => 2, :available => 1, :price => 300.9 }
|
|
40
58
|
def stats
|
|
41
59
|
@stats.stats
|
|
42
60
|
end
|
|
@@ -44,6 +62,9 @@ module YmlBuilder
|
|
|
44
62
|
# Метод возвращает текстовую строку с прайс-листом в формате Яндекс.Маркет
|
|
45
63
|
#
|
|
46
64
|
# @return [String] строка с прайс-листом в формате utf-8
|
|
65
|
+
# @example Примеры использования
|
|
66
|
+
# price = YmlBuilder::Yml.new
|
|
67
|
+
# price.to_yml
|
|
47
68
|
def to_yml
|
|
48
69
|
out = @shop.to_yml
|
|
49
70
|
out.gsub!(/^\s{0,100}\{replace\_currencies\}/, @currencies.to_yml)
|
|
@@ -58,6 +79,9 @@ module YmlBuilder
|
|
|
58
79
|
#
|
|
59
80
|
# @param [String] filename название файла для записи прайс-листа
|
|
60
81
|
# @return [None] нет
|
|
82
|
+
# @example Примеры использования
|
|
83
|
+
# price = YmlBuilder::Yml.new
|
|
84
|
+
# price.save('price.yml')
|
|
61
85
|
def save(filename)
|
|
62
86
|
File.open(filename, 'w:windows-1251') {|f| f.write(to_yml) }
|
|
63
87
|
end
|
data/test/test_yml.yml
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: yml_builder
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stan Zhuravlev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-05-
|
|
11
|
+
date: 2015-05-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -40,7 +40,7 @@ dependencies:
|
|
|
40
40
|
version: '10.0'
|
|
41
41
|
description: |-
|
|
42
42
|
Библиотека содержит набор классов для формирования и валидации прайс-листов
|
|
43
|
-
в формате Яндекс YAML (
|
|
43
|
+
в формате Яндекс YAML (Yandex.Market).
|
|
44
44
|
Текущая версия поддерживает только упрощенные товарные карточки.
|
|
45
45
|
email:
|
|
46
46
|
- stan@post-api.ru
|