nested_array 2.2.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +8 -6
- data/TODO.md +26 -0
- data/lib/nested_array/nested.rb +8 -4
- data/lib/nested_array/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f9301a9227bde8d348c788d152e3f673629fe658bf5081f7dbf46510b26159b
|
4
|
+
data.tar.gz: 6bdd98b0b83e52224afa7db078007805ffc19762ae9cb1f042dfe40f0add9248
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 106227d9e4b3f3c79fc2cac1ca1c340e18019ea674291d72d4712f5a780209d86913cc9c2f069f9be830bda1235a1f9572cf3a8b73f4dcff0d5c725853a29136
|
7
|
+
data.tar.gz: 0c2bb221a8a49d0ac5d4deaeb0f6879ccb472a0be79866603a7c56843503a6aedec3a8910c6f396548cd6a986ed07304842076f4d4df2178be7931e5b5f72413
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -6,18 +6,19 @@ PATH
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
activesupport (
|
9
|
+
activesupport (6.0.3.2)
|
10
10
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
11
11
|
i18n (>= 0.7, < 2)
|
12
12
|
minitest (~> 5.1)
|
13
13
|
tzinfo (~> 1.1)
|
14
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
14
15
|
awesome_print (1.8.0)
|
15
16
|
byebug (11.0.1)
|
16
|
-
concurrent-ruby (1.1.
|
17
|
+
concurrent-ruby (1.1.6)
|
17
18
|
diff-lcs (1.3)
|
18
|
-
i18n (1.
|
19
|
+
i18n (1.8.3)
|
19
20
|
concurrent-ruby (~> 1.0)
|
20
|
-
minitest (5.
|
21
|
+
minitest (5.14.1)
|
21
22
|
rake (10.5.0)
|
22
23
|
rspec (3.9.0)
|
23
24
|
rspec-core (~> 3.9.0)
|
@@ -33,14 +34,15 @@ GEM
|
|
33
34
|
rspec-support (~> 3.9.0)
|
34
35
|
rspec-support (3.9.0)
|
35
36
|
thread_safe (0.3.6)
|
36
|
-
tzinfo (1.2.
|
37
|
+
tzinfo (1.2.7)
|
37
38
|
thread_safe (~> 0.1)
|
39
|
+
zeitwerk (2.3.0)
|
38
40
|
|
39
41
|
PLATFORMS
|
40
42
|
ruby
|
41
43
|
|
42
44
|
DEPENDENCIES
|
43
|
-
activesupport (~>
|
45
|
+
activesupport (~> 6.0)
|
44
46
|
awesome_print (~> 1.8)
|
45
47
|
bundler (~> 2.0)
|
46
48
|
byebug (~> 11.0)
|
data/TODO.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Что реализовано, необходимо реализовать и почему
|
2
|
+
|
3
|
+
## Почему
|
4
|
+
|
5
|
+
### Почему возвращаем массив Hash
|
6
|
+
|
7
|
+
Когда хотим из плоской структуры получить древовидную, то на руках мы можем
|
8
|
+
иметь данные различного типа, например, массив Hash или массив ActiveRecord,
|
9
|
+
результатом обработки должен быть массив объектов у которых должно быть поле
|
10
|
+
children содержащее потомков. Именно поэтому мы не можем оставлять в результате
|
11
|
+
массив ActiveRecord, так как поле children будет конфликтовать с уже
|
12
|
+
существующим методом, например при использовании гема closure_tree. С другой
|
13
|
+
стороны мы моглибы внедрить поле nested_children во все объекты ActiveRecord,
|
14
|
+
но такой подход, мне кажется, похож на «Monkey patch».
|
15
|
+
|
16
|
+
|
17
|
+
## TODO
|
18
|
+
|
19
|
+
Хочу возвращать массив OpenStruct вместо массива Hash.
|
20
|
+
|
21
|
+
При возврате массива OpenStruct (всегда) пропадает смысл метода `each_nested!`
|
22
|
+
который должен отдавать в переменной node исходные данные (ну они не исходые
|
23
|
+
уже). Поэтому необходимо выпустить версию 3.0.0 с удалением метода
|
24
|
+
`each_nested!`.
|
25
|
+
|
26
|
+
Переработать README-ru и на английский доперевести в конце концов.
|
data/lib/nested_array/nested.rb
CHANGED
@@ -56,7 +56,7 @@ module NestedArray::Nested
|
|
56
56
|
if node != nil
|
57
57
|
is_last_children = cache[level][i[level]].blank?
|
58
58
|
|
59
|
-
yield(node.clone, parents.clone, level, is_last_children)
|
59
|
+
yield(node.clone, parents.clone, level, is_last_children, node.origin)
|
60
60
|
|
61
61
|
if !node[options[:children]].nil? && node[options[:children]].length > 0
|
62
62
|
level+= 1
|
@@ -85,8 +85,9 @@ module NestedArray::Nested
|
|
85
85
|
node = cache[level][i[level]]
|
86
86
|
i[level]+= 1
|
87
87
|
if node != nil
|
88
|
+
is_last_children = cache[level][i[level]].blank?
|
88
89
|
|
89
|
-
yield(node, parents, level)
|
90
|
+
yield(node, parents, level, is_last_children, node.origin)
|
90
91
|
|
91
92
|
if !node[options[:children]].nil? && node[options[:children]].length > 0
|
92
93
|
level+= 1
|
@@ -115,13 +116,14 @@ module NestedArray::Nested
|
|
115
116
|
nested = options[:hashed] ? {} : []
|
116
117
|
# Перебираем элементы в любом порядке!
|
117
118
|
self.each do |value|
|
119
|
+
origin = value
|
118
120
|
value = value.serializable_hash if !value.is_a? Hash
|
119
121
|
# 1. Если нет родителя текущего элемента, и текущий элемент не корневой, то:
|
120
122
|
# 1.1 создадим родителя
|
121
123
|
# 1.2 поместим в кэш
|
122
124
|
if !(cache.key? value[fields[:parent_id]]) && (value[fields[:parent_id]] != options[:root_id])
|
123
125
|
# 1.1
|
124
|
-
temp =
|
126
|
+
temp = OpenStruct.new
|
125
127
|
fields.each do |key, field|
|
126
128
|
case key
|
127
129
|
when :id
|
@@ -151,6 +153,7 @@ module NestedArray::Nested
|
|
151
153
|
value.keys.each do |field|
|
152
154
|
cache[value[fields[:id]]][field] = value[field] if !(field.in? fields)
|
153
155
|
end
|
156
|
+
cache[value[fields[:id]]].origin = origin
|
154
157
|
# 2.2
|
155
158
|
# Если текущий элемент не корневой - поместим в родителя, беря его из кэш
|
156
159
|
if value[fields[:parent_id]] != options[:root_id]
|
@@ -174,7 +177,7 @@ module NestedArray::Nested
|
|
174
177
|
# 3.3 поместим в родителя
|
175
178
|
else
|
176
179
|
# 3.1
|
177
|
-
temp =
|
180
|
+
temp = OpenStruct.new
|
178
181
|
fields.each do |key, field|
|
179
182
|
case key
|
180
183
|
when :id
|
@@ -190,6 +193,7 @@ module NestedArray::Nested
|
|
190
193
|
value.keys.each do |field|
|
191
194
|
temp[field] = value[field] if !(field.in? fields)
|
192
195
|
end
|
196
|
+
temp.origin = origin
|
193
197
|
# 3.2
|
194
198
|
cache[value[fields[:id]]] = temp
|
195
199
|
# 3.3
|
data/lib/nested_array/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nested_array
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zlatov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- README-ru.md
|
97
97
|
- README.md
|
98
98
|
- Rakefile
|
99
|
+
- TODO.md
|
99
100
|
- bash/build/gem.sh
|
100
101
|
- bash/push/gem.sh
|
101
102
|
- bash/test/gem.sh
|