Class: Eco::Data::Locations::NodeLevel
- Inherits:
-
NodeLevelStruct
show all
- Extended by:
- Builder
- Includes:
- NodeBase
- Defined in:
- lib/eco/data/locations/node_level.rb,
lib/eco/data/locations/node_level/serial.rb,
lib/eco/data/locations/node_level/builder.rb,
lib/eco/data/locations/node_level/cleaner.rb,
lib/eco/data/locations/node_level/parsing.rb
Overview
Class to treat input csv in a form of levels, where each column is one level,
and children are placed in higher columns right below the parent.
Defined Under Namespace
Modules: Builder, Cleaner, Parsing, Serial
Constant Summary
collapse
- ALL_ATTRS =
NODE_LEVEL_ATTRS
- ADDITIONAL_ATTRS =
%i[row_num]
- TAGS_ATTRS =
ALL_ATTRS - ADDITIONAL_ATTRS
Eco::Data::Locations::NodeBase::TagValidations::ALLOWED_CHARACTERS, Eco::Data::Locations::NodeBase::TagValidations::DOUBLE_BLANKS, Eco::Data::Locations::NodeBase::TagValidations::INVALID_TAG_REGEX, Eco::Data::Locations::NodeBase::TagValidations::VALID_TAG_CHARS, Eco::Data::Locations::NodeBase::TagValidations::VALID_TAG_REGEX
Instance Attribute Summary collapse
Attributes included from Serial
#serializer
#logger
Attributes included from Parsing
#node_class
Attributes included from NodeBase
#parent, #tracked_level
Instance Method Summary
collapse
Methods included from Serial
#nodes_to_csv_tree
Methods included from Convert
#csv_from, #empty_array, #empty_level_tracker_hash, #hash_tree_to_tree_csv, #log_pretty_inspect, #normalize_arrays, #report_repeated_node_ids
#log
Methods included from Cleaner
#done_ids, #fill_in_parents, #repeated_ids, #reset_trackers!, #tidy_nodes
Methods included from Parsing
#csv_matches_format?, #nodes_from_csv
Methods included from NodeBase
#attr, #copy, #set_attr, #set_attrs, #slice, #to_h, #values_at
#node_class
#treeify
#csv_list, #csv_tree, #hash_list, #hash_tree, #org_tree, #tree_class
#csv_nodes_from, #hash_tree_from_csv, #nodes_from_csv
#nodes_to_csv_list, #nodes_to_csv_tree, #serializer
#clean_id, #has_double_blanks?, #identify_invalid_characters, #invalid_warned!, #invalid_warned?, #remove_double_blanks, #replace_not_allowed
Instance Attribute Details
#parentId ⇒ Object
Returns the value of attribute parentId.
19
20
21
|
# File 'lib/eco/data/locations/node_level.rb', line 19
def parentId
@parentId
end
|
Instance Method Details
#actual_level ⇒ Object
42
43
44
|
# File 'lib/eco/data/locations/node_level.rb', line 42
def actual_level
tags_array.compact.length
end
|
#blanks_between? ⇒ Boolean
141
142
143
|
# File 'lib/eco/data/locations/node_level.rb', line 141
def blanks_between?
actual_level > empty_idx
end
|
#clear_level(i) ⇒ Object
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/eco/data/locations/node_level.rb', line 91
def clear_level(i)
case i
when Enumerable
target = i.to_a
when Integer
return false unless i >= 1 && i <= tag_attrs_count
target = Array(i..tag_attrs_count)
else
return false
end
return false if target.empty?
target.each do |n|
set_attr("l#{n}", nil)
end
true
end
|
#decouple(num = 1) ⇒ Object
We got a missing level that is compacted in one row
Here we get the missing intermediate levels
This is done from upper to lower level to ensure processing order
It skips last one, as that is this object already
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/eco/data/locations/node_level.rb', line 68
def decouple(num = 1)
with_info = filled_idxs
unless with_info.last == tag_idx
raise "Review this (row #{row_num}; '#{raw_tag}'): tag_idx is #{tag_idx}, while last filled idx is #{with_info.last}"
end
len = with_info.length
target_idxs = with_info[len-(num+1)..-2]
target_idxs.map do |idx|
self.copy.tap do |dup|
dup.clear_level(idx_to_level(idx + 1))
end
end
end
|
#empty_idx ⇒ Object
59
60
61
62
|
# File 'lib/eco/data/locations/node_level.rb', line 59
def empty_idx
tary = tags_array
tary.index(nil) || tary.length + 1
end
|
#filled_idxs ⇒ Object
135
136
137
138
139
|
# File 'lib/eco/data/locations/node_level.rb', line 135
def filled_idxs
tags_array.each_with_index.with_object([]) do |(tg, ix), out|
out << ix if tg
end
end
|
#id ⇒ Object
Also known as:
nodeId
21
22
23
|
# File 'lib/eco/data/locations/node_level.rb', line 21
def id
tag.upcase
end
|
#idx_to_level(x) ⇒ Object
127
128
129
|
# File 'lib/eco/data/locations/node_level.rb', line 127
def idx_to_level(x)
x + 1
end
|
#level ⇒ Object
38
39
40
|
# File 'lib/eco/data/locations/node_level.rb', line 38
def level
actual_level
end
|
#level_to_idx(x) ⇒ Object
131
132
133
|
# File 'lib/eco/data/locations/node_level.rb', line 131
def level_to_idx(x)
x - 1
end
|
#merge!(node) ⇒ Object
83
84
85
|
# File 'lib/eco/data/locations/node_level.rb', line 83
def merge!(node)
override_upper_levels(node.tags_array)
end
|
#name ⇒ Object
26
27
28
|
# File 'lib/eco/data/locations/node_level.rb', line 26
def name
tag
end
|
#override_lower_levels(src_tags_array, to_level: self.raw_level - 1) ⇒ Object
118
119
120
121
122
123
124
125
|
# File 'lib/eco/data/locations/node_level.rb', line 118
def override_lower_levels(src_tags_array, to_level: self.raw_level - 1)
target_lev = Array(1..to_level)
target_tags = src_tags_array[level_to_idx(1)..level_to_idx(to_level)]
target_lev.zip(target_tags).each do |(n, tag)|
set_attr("l#{n}", tag)
end
self
end
|
#override_upper_levels(src_tags_array, from_level: self.raw_level + 1) ⇒ Object
109
110
111
112
113
114
115
116
|
# File 'lib/eco/data/locations/node_level.rb', line 109
def override_upper_levels(src_tags_array, from_level: self.raw_level + 1)
target_lev = Array(from_level..tag_attrs_count)
target_tags = src_tags_array[level_to_idx(from_level)..level_to_idx(tag_attrs_count)]
target_lev.zip(target_tags).each do |(n, tag)|
set_attr("l#{n}", tag)
end
self
end
|
#previous_idx ⇒ Object
54
55
56
57
|
# File 'lib/eco/data/locations/node_level.rb', line 54
def previous_idx
idx = tag_idx - 1
idx < 0 ? nil : idx
end
|
#raw_level ⇒ Object
46
47
48
|
# File 'lib/eco/data/locations/node_level.rb', line 46
def raw_level
tags_array.index(raw_tag) + 1
end
|
#raw_tag ⇒ Object
34
35
36
|
# File 'lib/eco/data/locations/node_level.rb', line 34
def raw_tag
values_at(*TAGS_ATTRS.reverse).compact.first
end
|
#set_high_levels(node) ⇒ Object
87
88
89
|
# File 'lib/eco/data/locations/node_level.rb', line 87
def set_high_levels(node)
override_lower_levels(node.tags_array)
end
|
#tag ⇒ Object
30
31
32
|
# File 'lib/eco/data/locations/node_level.rb', line 30
def tag
clean_id(raw_tag)
end
|
#tag_attrs_count ⇒ Object
149
150
151
|
# File 'lib/eco/data/locations/node_level.rb', line 149
def tag_attrs_count
TAGS_ATTRS.length
end
|
#tag_idx ⇒ Object
50
51
52
|
# File 'lib/eco/data/locations/node_level.rb', line 50
def tag_idx
tags_array.index(raw_tag)
end
|
145
146
147
|
# File 'lib/eco/data/locations/node_level.rb', line 145
def tags_array
values_at(*TAGS_ATTRS)
end
|