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 ? '&nbsp;' : '┃'}.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);