lib/nested_array/nested.rb in nested_array-2.3.0 vs lib/nested_array/nested.rb in nested_array-2.4.0

- old
+ new

@@ -311,9 +311,32 @@ ret.push [option_text, option_value] end ret end + # Преобразует вложенную структуру данных в плоскую, но добавляет в значение + # поля отвечающего за текстовое представление (:name) псевдографику + # древовидной структуры. + # Это позволяет вывести тэг select в сносном виде для использования с + # вложенными структурами. + def nested_to_collection_select(options={}) + options = NESTED_OPTIONS.merge options + ret = [] + last = [] + each_nested do |node, parents, level, is_last, origin| + 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}╸".html_safe + "#{node_text}" + option_value = node[options[:option_value]] + node[options[:option_text]] = option_text + ret.push node + end + ret + end + # "Скеивание" вложенных структур # ноды склеиваются если путь к ним одинаков; # путь определяется из сложения Текстов (конфигурируемо через :path_key); def concat_nested tree=nil, options={} options = NESTED_OPTIONS.merge options