lib/nested_array/nested.rb in nested_array-1.2.0 vs lib/nested_array/nested.rb in nested_array-2.0.0
- old
+ new
@@ -29,20 +29,13 @@
_li: '</li>',
# Параматры для "склеивания" вложенных структур
path_separator: '-=path_separator=-',
path_key: 'text',
-
- # Настройки формирования массива для опций тега <select>
- option_value: 'id', # Что брать в качестве значений при формировании опций селекта.
- option_text: 'name',
}
end
- #
- # Перебирает вложенную стуктуру.
- #
def each_nested options={}
options = NESTED_OPTIONS.merge options
level = 0
cache = []
cache[level] = self.clone
@@ -52,13 +45,12 @@
i[level] = 0
while level >= 0
node = cache[level][i[level]]
i[level]+= 1
if node != nil
- is_last_children = cache[level][i[level]].blank?
- yield(node.clone, parents.clone, level, is_last_children)
+ yield(node.clone, parents.clone, level)
if !node[options[:children]].nil? && node[options[:children]].length > 0
level+= 1
parents[level] = node.clone
cache[level] = node[options[:children]]
@@ -250,20 +242,19 @@
while level >= 0
node = cache[level][i[level]]
i[level]+= 1
if node != nil
- node_html, node_options = yield(node.clone, parents.clone, level)
html+= options[:tab] * (level * 2 + 1) if options[:tabulated]
- html+= node_options&.[](:li) || options[:li]
- html+= node_html.to_s
+ html+= options[:li]
+ html+= yield(node.clone, parents.clone, level)
if !node[options[:children]].nil? && node[options[:children]].length > 0
level+= 1
html+= "\n" if !options[:inline]
html+= options[:tab] * (level * 2) if options[:tabulated]
- html+= node_options&.[](:ul) || options[:ul]
+ html+= options[:ul]
html+= "\n" if !options[:inline]
parents[level] = node.clone
cache[level] = node[options[:children]]
i[level] = 0
else
@@ -282,32 +273,9 @@
end
level-= 1
end
end
html.html_safe
- end
-
- #
- # Возвращает массив для формирования опций html-тега <select>
- # с псевдографикой, позволяющей вывести древовидную структуру.
- # ```
- # [['option_text1', 'option_value1'],['option_text2', 'option_value2'],…]
- # ```
- def nested_to_options options={}
- options = NESTED_OPTIONS.merge options
- ret = []
- last = []
- each_nested do |node, parents, level, is_last|
- last[level+1] = is_last
- node_text = node[options[:option_text]]
- node_level = (1..level).map{|l| last[l] == true ? ' ' : '┃'}.join
- node_last = is_last ? '┗' : '┣'
- node_children = node[options[:children]].present? && node[options[:children]].length > 0 ? '┳' : '━'
- option_text = "#{node_level}#{node_last}#{node_children}╸#{node_text}"
- option_value = node[options[:option_value]]
- ret.push [option_text, option_value]
- end
- ret
end
# "Скеивание" вложенных структур
# ноды склеиваются если путь к ним одинаков;
# путь определяется из сложения Текстов (конфигурируемо через :path_key);