Module: Eco::API::UseCases::DefaultCases::CsvToTree::Helper
- Extended by:
- NodesCleaner, Treeify
- Defined in:
- lib/eco/api/usecases/default_cases/csv_to_tree_case/helper.rb
Class Method Summary
collapse
done_tags, fill_in_parents, repeated_tags, tidy_nodes, to_rows
Methods included from Treeify
treeify
Class Method Details
.csv_from(filename) ⇒ Object
7
8
9
10
11
12
13
14
15
|
# File 'lib/eco/api/usecases/default_cases/csv_to_tree_case/helper.rb', line 7
def csv_from(filename)
raise "Missing #{filename}" unless File.exists?(filename)
result = csv_from_file(filename)
if result.is_a?(Integer)
puts "An encoding problem was found on line #{result}"
result = csv_from_content(filename)
end
result
end
|
.csv_nodes(filename) ⇒ Object
44
45
46
|
# File 'lib/eco/api/usecases/default_cases/csv_to_tree_case/helper.rb', line 44
def csv_nodes(filename)
nodes_from_csv(csv_from(filename))
end
|
.nodes_from_csv(csv) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/eco/api/usecases/default_cases/csv_to_tree_case/helper.rb', line 17
def nodes_from_csv(csv)
i = 1; prev_level = nil; prev_node = nil; prev_nodes = Array(1..11).zip(Array.new(11, nil)).to_h
nodes = csv.each_with_object([]) do |row, out|
values = row.fields.map do |value|
value = value.to_s.strip
value.empty?? nil : value
end
i += 1
node = Node.new(i, *values)
prev_node ||= node
if prev_node.raw_level <= node.raw_level
node.set_high_levels(prev_node)
else
if parent_node = prev_nodes[node.raw_level - 1]
node.set_high_levels(parent_node)
else
raise "Node '#{node.raw_tag}' (#{node.row_num} row) doesn't have parent"
end
end
out << node
prev_nodes[node.raw_level] = node
prev_node = node
end
tidy_nodes(nodes)
end
|