nested_array 3.0.0 → 3.0.1
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/README-ru.md +16 -7
- data/lib/nested_array/engine.rb +11 -0
- data/lib/nested_array/nested.rb +3 -2
- data/lib/nested_array/version.rb +1 -1
- data/lib/nested_array.rb +2 -3
- data/nested_array.gemspec +13 -3
- metadata +3 -40
- data/.gitignore +0 -9
- data/.rspec +0 -4
- data/.rubocop.yml +0 -125
- data/.ruby-version +0 -1
- data/CHANGELOG.md +0 -41
- data/Gemfile +0 -12
- data/Gemfile.lock +0 -75
- data/README-ru-old.md +0 -333
- data/Rakefile +0 -2
- data/TODO.md +0 -12
- data/bash/build/gem.sh +0 -9
- data/bash/push/gem.sh +0 -15
- data/bash/test/gem.sh +0 -11
- data/bin/bundle +0 -105
- data/bin/byebug +0 -29
- data/bin/console +0 -14
- data/bin/htmldiff +0 -29
- data/bin/ldiff +0 -29
- data/bin/rake +0 -29
- data/bin/rspec +0 -29
- data/bin/setup +0 -8
- data/dev/nested_options.rb +0 -25
- data/doc/images/2.1.3.1.png +0 -0
- data/doc/images/2.1.3.2.png +0 -0
- data/doc/images/2.2.1.1.png +0 -0
- data/doc/images/2.2.1.2.png +0 -0
- data/doc/images/2.2.1.3-1.png +0 -0
- data/doc/images/2.2.1.3-2.png +0 -0
- data/doc/images/2.2.1.4-1.png +0 -0
- data/doc/images/2.2.1.4-2.png +0 -0
- data/doc/images/2.2.1.5.png +0 -0
- data/doc/images/2.2.2.1.png +0 -0
- data/doc/images/2.2.2.2.png +0 -0
- data/doc/images/2.2.2.3.png +0 -0
- data/doc/images/2.2.2.4.png +0 -0
- data/doc/images/2.2.3.1.png +0 -0
- data/doc/images/2.2.3.2.png +0 -0
- data/doc/images/2.2.3.3.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb4bd2f5d859ff9b134dda8114ebeea68041db5c043684cb10c8aa9d6fd0c951
|
4
|
+
data.tar.gz: 69282d083a602fb6f9066285e2a9c41206a2e9cc9f5cfac156ee0bc51df616ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8a38d1edc476a6b97bdcaf43cbc480925f6fdf8540be7dcbd12a7a917908447e1f0f44574647b405816fd59417b41ed3a9749ed45e46c85d8716910e9e86328
|
7
|
+
data.tar.gz: 26e869340517a302653028977a709a262beb6a43d0690464fa835466920b225315d7fdfbf8101fb686c2f68818f236a3c3837b62617fa93ed45e073614bdc57b
|
data/README-ru.md
CHANGED
@@ -532,7 +532,22 @@ puts nested.pretty_inspect
|
|
532
532
|
|
533
533
|
## Разработка
|
534
534
|
|
535
|
-
|
535
|
+
Часто используемые команды
|
536
|
+
|
537
|
+
```sh
|
538
|
+
# rspec управляет загружаемыми гемами, поэтому сам rspec запускается НЕ `bundle
|
539
|
+
# exec rspec`, а просто `rspec` или `./bin/rspec`.
|
540
|
+
rspec ./spec/lib/nested_array_spec.rb
|
541
|
+
rspec ./spec/lib/nested_array/nested_spec.rb
|
542
|
+
rspec # Прогон тестов
|
543
|
+
subl lib/nested_array/version.rb # Обновление версии
|
544
|
+
bundle exec yard doc # Обновление документации в doc/_index.html
|
545
|
+
git … # Git-фиксация в origin/master и тег
|
546
|
+
gem build # Сборка гема
|
547
|
+
gem push ./nested_array-… # Публикация гема
|
548
|
+
```
|
549
|
+
|
550
|
+
Для подключения локальной версии гема в rails замените в строке подключения
|
536
551
|
(файл Gemfile) второй аргумент (версию) на опцию path:
|
537
552
|
|
538
553
|
```rb
|
@@ -540,9 +555,3 @@ puts nested.pretty_inspect
|
|
540
555
|
# Работа с древовидными массивами
|
541
556
|
gem "nested_array", path: "../nested_array"
|
542
557
|
```
|
543
|
-
|
544
|
-
Часто используемые команды
|
545
|
-
|
546
|
-
```sh
|
547
|
-
|
548
|
-
```
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Определим класс Engine только если гем используется в окружении Rails
|
2
|
+
# (например, в приложении Ruby on Rails).
|
3
|
+
#
|
4
|
+
# Это позволяет использовать ассеты гема (например, CSS) в Rails-приложении,
|
5
|
+
# но при этом не мешает запускать тесты RSpec вне Rails-среды.
|
6
|
+
if defined?(Rails)
|
7
|
+
module NestedArray
|
8
|
+
class Engine < ::Rails::Engine
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/nested_array/nested.rb
CHANGED
@@ -50,6 +50,7 @@ module NestedArray::Nested
|
|
50
50
|
}
|
51
51
|
end
|
52
52
|
|
53
|
+
# Преобразует во вложенную структуру на основании parent_id
|
53
54
|
def to_nested(options = {})
|
54
55
|
options = NESTED_OPTIONS.merge options
|
55
56
|
# Зарезервированные поля узла.
|
@@ -313,9 +314,9 @@ module NestedArray::Nested
|
|
313
314
|
ret
|
314
315
|
end
|
315
316
|
|
316
|
-
#
|
317
|
-
# Возвращает массив для формирования опций html-тега <select>
|
317
|
+
# Возвращает массив для формирования опций html-тега <select>
|
318
318
|
# с псевдографикой, позволяющей вывести древовидную структуру.
|
319
|
+
#
|
319
320
|
# ```
|
320
321
|
# [['option_text1', 'option_value1'],['option_text2', 'option_value2'],…]
|
321
322
|
# ```
|
data/lib/nested_array/version.rb
CHANGED
data/lib/nested_array.rb
CHANGED
@@ -2,16 +2,15 @@ require "active_support/all"
|
|
2
2
|
|
3
3
|
require_relative "nested_array/version"
|
4
4
|
require_relative "nested_array/nested"
|
5
|
+
require_relative "nested_array/engine" # Подключаем engine отдельно
|
5
6
|
|
6
7
|
module NestedArray
|
7
8
|
class Array < ::Array
|
8
9
|
include NestedArray::Nested
|
9
10
|
end
|
10
|
-
|
11
|
-
class Engine < ::Rails::Engine
|
12
|
-
end
|
13
11
|
end
|
14
12
|
|
13
|
+
# Monkey-patch стандартного Array
|
15
14
|
class Array
|
16
15
|
include ::NestedArray::Nested
|
17
16
|
end
|
data/nested_array.gemspec
CHANGED
@@ -29,9 +29,19 @@ Gem::Specification.new do |spec|
|
|
29
29
|
|
30
30
|
# Specify which files should be added to the gem when it is released.
|
31
31
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
|
33
|
+
# spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
34
|
+
# `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
35
|
+
# end
|
36
|
+
spec.files = Dir[
|
37
|
+
"lib/**/*",
|
38
|
+
"vendor/assets/**/*",
|
39
|
+
"exe/**/*",
|
40
|
+
"README*",
|
41
|
+
"LICENSE*",
|
42
|
+
"*.gemspec"
|
43
|
+
]
|
44
|
+
|
35
45
|
spec.bindir = "exe"
|
36
46
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
37
47
|
spec.require_paths = ["lib"]
|
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: 3.0.
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zlatov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -87,48 +87,11 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
- ".gitignore"
|
91
|
-
- ".rspec"
|
92
|
-
- ".rubocop.yml"
|
93
|
-
- ".ruby-version"
|
94
|
-
- CHANGELOG.md
|
95
|
-
- Gemfile
|
96
|
-
- Gemfile.lock
|
97
90
|
- LICENSE.txt
|
98
|
-
- README-ru-old.md
|
99
91
|
- README-ru.md
|
100
92
|
- README.md
|
101
|
-
- Rakefile
|
102
|
-
- TODO.md
|
103
|
-
- bash/build/gem.sh
|
104
|
-
- bash/push/gem.sh
|
105
|
-
- bash/test/gem.sh
|
106
|
-
- bin/bundle
|
107
|
-
- bin/byebug
|
108
|
-
- bin/console
|
109
|
-
- bin/htmldiff
|
110
|
-
- bin/ldiff
|
111
|
-
- bin/rake
|
112
|
-
- bin/rspec
|
113
|
-
- bin/setup
|
114
|
-
- dev/nested_options.rb
|
115
|
-
- doc/images/2.1.3.1.png
|
116
|
-
- doc/images/2.1.3.2.png
|
117
|
-
- doc/images/2.2.1.1.png
|
118
|
-
- doc/images/2.2.1.2.png
|
119
|
-
- doc/images/2.2.1.3-1.png
|
120
|
-
- doc/images/2.2.1.3-2.png
|
121
|
-
- doc/images/2.2.1.4-1.png
|
122
|
-
- doc/images/2.2.1.4-2.png
|
123
|
-
- doc/images/2.2.1.5.png
|
124
|
-
- doc/images/2.2.2.1.png
|
125
|
-
- doc/images/2.2.2.2.png
|
126
|
-
- doc/images/2.2.2.3.png
|
127
|
-
- doc/images/2.2.2.4.png
|
128
|
-
- doc/images/2.2.3.1.png
|
129
|
-
- doc/images/2.2.3.2.png
|
130
|
-
- doc/images/2.2.3.3.png
|
131
93
|
- lib/nested_array.rb
|
94
|
+
- lib/nested_array/engine.rb
|
132
95
|
- lib/nested_array/nested.rb
|
133
96
|
- lib/nested_array/version.rb
|
134
97
|
- nested_array.gemspec
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.rubocop.yml
DELETED
@@ -1,125 +0,0 @@
|
|
1
|
-
# Игнорировать отсутствие магического комментария:
|
2
|
-
# frozen_string_literal: true
|
3
|
-
#
|
4
|
-
# Надо понимать что мы теряем производительность если не используем замороженные
|
5
|
-
# строки там где это возможно, применяйте!: ` -"неизменяемая строка" `
|
6
|
-
Style/FrozenStringLiteralComment:
|
7
|
-
Enabled: false
|
8
|
-
|
9
|
-
# Надо понимать что есть качественное различие между
|
10
|
-
#
|
11
|
-
# module Foo
|
12
|
-
# class Bar
|
13
|
-
# end
|
14
|
-
# end
|
15
|
-
#
|
16
|
-
# и
|
17
|
-
#
|
18
|
-
# class Foo::Bar
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
# Если где то в модуль вынесен код:
|
22
|
-
#
|
23
|
-
# module Foo
|
24
|
-
# X = 42
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# то следует инициализировать модуль До класса-потомка, иначе ошибка. Как выход,
|
28
|
-
# рубокоп предлагает везде использовать первый синтаксис, а это некрасиво)
|
29
|
-
Style/ClassAndModuleChildren:
|
30
|
-
Enabled: false
|
31
|
-
|
32
|
-
# Корячить пустые методы с точка-запятой, нет уж извините!
|
33
|
-
Style/EmptyMethod:
|
34
|
-
Enabled: false
|
35
|
-
|
36
|
-
# Не даёт сравнимать с нуль (... == 0), заставляет переписывать на `.zero?`, как-то вообще не согласен!
|
37
|
-
Style/NumericPredicate:
|
38
|
-
Enabled: false
|
39
|
-
|
40
|
-
Style/SymbolArray:
|
41
|
-
# Предпочитаю полный синтаксис вместо %i[foo bar], пстоянно забываю что
|
42
|
-
# такое %i, %w, %g, %Ж, %П, %x, %y, %й, %н, %я.
|
43
|
-
# EnforcedStyle: brackets
|
44
|
-
# Хотя нет, стиль написания может быть любым, учись понимать и так и сяк.
|
45
|
-
Enabled: false
|
46
|
-
|
47
|
-
# fail обычно бросает исключение, raise пребрасывает после отлова при
|
48
|
-
# необходимости.
|
49
|
-
Style/SignalException:
|
50
|
-
Enabled: false
|
51
|
-
|
52
|
-
# Что может быть более привычным чем простой if
|
53
|
-
Style/NegatedIf:
|
54
|
-
Enabled: false
|
55
|
-
|
56
|
-
Style/SymbolProc:
|
57
|
-
# Аргументы отдельно блоки отдельно:
|
58
|
-
# something.do_something(foo) { |o| o.bar }
|
59
|
-
# AllowMethodsWithArguments: true
|
60
|
-
# Отключена проверка стиля передачи блоков в метод, и так и сяк должно быть
|
61
|
-
# понятным.
|
62
|
-
Enabled: false
|
63
|
-
|
64
|
-
# Короткий синтаксис для слабаков! =) на мой взгляд, когда в одном хэш смешан
|
65
|
-
# короткий и полный синтаксис, тогда код читается рывками (читаем один
|
66
|
-
# синтаксис, преключаемся на другой, продолжать читать и потом вдруг обратно).
|
67
|
-
# Возможно дело привычки.
|
68
|
-
Style/HashSyntax:
|
69
|
-
EnforcedShorthandSyntax: never
|
70
|
-
|
71
|
-
# Разбивать метод или блок на подметоды только ради красоты кода не хочу, если
|
72
|
-
# всё что нужно сделать в методе задокумментировано и это не дублирующий код а
|
73
|
-
# просто большая отдельная задача, то почему бы и не 2000 строк.
|
74
|
-
Metrics/MethodLength:
|
75
|
-
Max: 100
|
76
|
-
Metrics/BlockLength:
|
77
|
-
Max: 300
|
78
|
-
Metrics/CyclomaticComplexity:
|
79
|
-
Max: 30
|
80
|
-
Metrics/PerceivedComplexity:
|
81
|
-
Max: 30
|
82
|
-
|
83
|
-
Metrics/ClassLength:
|
84
|
-
Max: 300
|
85
|
-
Metrics/ModuleLength:
|
86
|
-
Max: 300
|
87
|
-
|
88
|
-
# Assignment - присвоения, в том числе +=...
|
89
|
-
# Branch - явное прямое ветвление программы (вызов методов).
|
90
|
-
# Condition - логические выражения
|
91
|
-
# AbcSize = Math.sqrt(A * A + B * B + C * C)
|
92
|
-
Metrics/AbcSize:
|
93
|
-
# Enabled: false
|
94
|
-
Max: 100
|
95
|
-
CountRepeatedAttributes: false
|
96
|
-
|
97
|
-
# Я так привык — каждый пробел (отступ) должен быть обоснован, а не нафигачен
|
98
|
-
# до «красивого» отступа.
|
99
|
-
Layout/ArgumentAlignment:
|
100
|
-
EnforcedStyle: with_fixed_indentation
|
101
|
-
|
102
|
-
Layout/HashAlignment:
|
103
|
-
EnforcedHashRocketStyle: table
|
104
|
-
EnforcedColonStyle: key
|
105
|
-
|
106
|
-
Layout/FirstHashElementIndentation:
|
107
|
-
EnforcedStyle: consistent
|
108
|
-
|
109
|
-
# Терпеть не могу пробелы ради выравнивания, предпочитаю устанавливать
|
110
|
-
# необходимое количество отступов (отступ в ruby − кратен двум пробелам).
|
111
|
-
Layout/MultilineOperationIndentation:
|
112
|
-
EnforcedStyle: indented
|
113
|
-
Layout/MultilineMethodCallIndentation:
|
114
|
-
EnforcedStyle: indented
|
115
|
-
|
116
|
-
# Эммм, это ж короткий синтаксис, нахуй пробелы! array.map{|x| x.id}
|
117
|
-
Layout/SpaceBeforeBlockBraces:
|
118
|
-
EnforcedStyle: no_space
|
119
|
-
Layout/SpaceInsideBlockBraces:
|
120
|
-
EnforcedStyle: no_space
|
121
|
-
SpaceBeforeBlockParameters: false
|
122
|
-
|
123
|
-
# На какой вертикали начался блок, на той и должен закрываться.
|
124
|
-
Layout/BlockAlignment:
|
125
|
-
EnforcedStyleAlignWith: start_of_block
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.7.8
|
data/CHANGELOG.md
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# Changelog
|
2
|
-
|
3
|
-
## [2.4.0](https://github.com/Zlatov/nested_array/tree/2.4.0) (2023-01-19)
|
4
|
-
|
5
|
-
[Full Changelog](https://github.com/Zlatov/nested_array/compare/2.3.0...2.4.0)
|
6
|
-
|
7
|
-
## [2.3.0](https://github.com/Zlatov/nested_array/tree/2.3.0) (2023-01-18)
|
8
|
-
|
9
|
-
[Full Changelog](https://github.com/Zlatov/nested_array/compare/2.2.1...2.3.0)
|
10
|
-
|
11
|
-
**Security fixes:**
|
12
|
-
|
13
|
-
- \[Security\] Bump activesupport from 5.2.4.1 to 6.0.3.2 [\#5](https://github.com/Zlatov/nested_array/pull/5) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview))
|
14
|
-
|
15
|
-
## [2.2.1](https://github.com/Zlatov/nested_array/tree/2.2.1) (2023-01-14)
|
16
|
-
|
17
|
-
[Full Changelog](https://github.com/Zlatov/nested_array/compare/2.2.0...2.2.1)
|
18
|
-
|
19
|
-
## [2.2.0](https://github.com/Zlatov/nested_array/tree/2.2.0) (2020-03-10)
|
20
|
-
|
21
|
-
[Full Changelog](https://github.com/Zlatov/nested_array/compare/1.1.0...2.2.0)
|
22
|
-
|
23
|
-
## [1.1.0](https://github.com/Zlatov/nested_array/tree/1.1.0) (2020-02-14)
|
24
|
-
|
25
|
-
[Full Changelog](https://github.com/Zlatov/nested_array/compare/2.0.4...1.1.0)
|
26
|
-
|
27
|
-
## [2.0.4](https://github.com/Zlatov/nested_array/tree/2.0.4) (2020-01-19)
|
28
|
-
|
29
|
-
[Full Changelog](https://github.com/Zlatov/nested_array/compare/2.0.3...2.0.4)
|
30
|
-
|
31
|
-
## [2.0.3](https://github.com/Zlatov/nested_array/tree/2.0.3) (2020-01-19)
|
32
|
-
|
33
|
-
[Full Changelog](https://github.com/Zlatov/nested_array/compare/2.0.2...2.0.3)
|
34
|
-
|
35
|
-
## [2.0.2](https://github.com/Zlatov/nested_array/tree/2.0.2) (2020-01-19)
|
36
|
-
|
37
|
-
[Full Changelog](https://github.com/Zlatov/nested_array/compare/784a121dd18007e7e7d113f03c665eb39aa9b018...2.0.2)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
\* *This Changelog was automatically generated by [github_changelog_generator] (https://github.com/github-changelog-generator/github-changelog-generator)*
|
data/Gemfile
DELETED
data/Gemfile.lock
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
nested_array (3.0.0)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: https://rubygems.org/
|
8
|
-
specs:
|
9
|
-
activesupport (6.0.3.2)
|
10
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
11
|
-
i18n (>= 0.7, < 2)
|
12
|
-
minitest (~> 5.1)
|
13
|
-
tzinfo (~> 1.1)
|
14
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
15
|
-
ast (2.4.2)
|
16
|
-
awesome_print (1.8.0)
|
17
|
-
byebug (11.0.1)
|
18
|
-
concurrent-ruby (1.1.6)
|
19
|
-
diff-lcs (1.5.0)
|
20
|
-
i18n (1.8.3)
|
21
|
-
concurrent-ruby (~> 1.0)
|
22
|
-
minitest (5.14.1)
|
23
|
-
parallel (1.22.1)
|
24
|
-
parser (3.2.1.1)
|
25
|
-
ast (~> 2.4.1)
|
26
|
-
rainbow (3.1.1)
|
27
|
-
rake (10.5.0)
|
28
|
-
regexp_parser (2.7.0)
|
29
|
-
rexml (3.2.5)
|
30
|
-
rspec (3.12.0)
|
31
|
-
rspec-core (~> 3.12.0)
|
32
|
-
rspec-expectations (~> 3.12.0)
|
33
|
-
rspec-mocks (~> 3.12.0)
|
34
|
-
rspec-core (3.12.1)
|
35
|
-
rspec-support (~> 3.12.0)
|
36
|
-
rspec-expectations (3.12.2)
|
37
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
38
|
-
rspec-support (~> 3.12.0)
|
39
|
-
rspec-mocks (3.12.3)
|
40
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
41
|
-
rspec-support (~> 3.12.0)
|
42
|
-
rspec-support (3.12.0)
|
43
|
-
rubocop (1.28.2)
|
44
|
-
parallel (~> 1.10)
|
45
|
-
parser (>= 3.1.0.0)
|
46
|
-
rainbow (>= 2.2.2, < 4.0)
|
47
|
-
regexp_parser (>= 1.8, < 3.0)
|
48
|
-
rexml
|
49
|
-
rubocop-ast (>= 1.17.0, < 2.0)
|
50
|
-
ruby-progressbar (~> 1.7)
|
51
|
-
unicode-display_width (>= 1.4.0, < 3.0)
|
52
|
-
rubocop-ast (1.17.0)
|
53
|
-
parser (>= 3.1.1.0)
|
54
|
-
ruby-progressbar (1.13.0)
|
55
|
-
thread_safe (0.3.6)
|
56
|
-
tzinfo (1.2.7)
|
57
|
-
thread_safe (~> 0.1)
|
58
|
-
unicode-display_width (2.4.2)
|
59
|
-
zeitwerk (2.3.0)
|
60
|
-
|
61
|
-
PLATFORMS
|
62
|
-
ruby
|
63
|
-
|
64
|
-
DEPENDENCIES
|
65
|
-
activesupport (~> 6.0)
|
66
|
-
awesome_print (~> 1.8)
|
67
|
-
bundler (~> 2.0)
|
68
|
-
byebug (~> 11.0)
|
69
|
-
nested_array!
|
70
|
-
rake (~> 10.0)
|
71
|
-
rspec (~> 3.10)
|
72
|
-
rubocop
|
73
|
-
|
74
|
-
BUNDLED WITH
|
75
|
-
2.1.4
|
data/README-ru-old.md
DELETED
@@ -1,333 +0,0 @@
|
|
1
|
-
# NestedArray
|
2
|
-
|
3
|
-
Предназначен для преобразования в древовидную структуру плоских данных описанных
|
4
|
-
по паттерну «Список смежности» (Adjacency List), то есть в нодах указа предок
|
5
|
-
`parent_id`. Например:
|
6
|
-
|
7
|
-
```ruby
|
8
|
-
[
|
9
|
-
{id: 1, parent_id: nil, name: 'first', …},
|
10
|
-
{id: 2, parent_id: 1, name: 'second', …},
|
11
|
-
{id: 3, parent_id: 1, name: 'third', …}
|
12
|
-
]
|
13
|
-
# ↓ ↓ ↓
|
14
|
-
[
|
15
|
-
{id: 1, parent_id: nil, name: 'first', children: [
|
16
|
-
{id: 2, parent_id: 1, name: 'second', …},
|
17
|
-
{id: 3, parent_id: 1, name: 'third', …}
|
18
|
-
], …}
|
19
|
-
]
|
20
|
-
```
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
## Установка
|
26
|
-
|
27
|
-
Добавте строку в _Gemfile_ вашего приложения:
|
28
|
-
|
29
|
-
```ruby
|
30
|
-
# Работа с древовидными массивами.
|
31
|
-
gem "nested_array", "~> 3.0"
|
32
|
-
```
|
33
|
-
|
34
|
-
И затем выполните `bundle install`.
|
35
|
-
|
36
|
-
Или установите его как `gem install nested_array`
|
37
|
-
|
38
|
-
Если вы планируете использовать скромный CSS гема, добавте в
|
39
|
-
файл _app/assets/stylesheets/application.scss_:
|
40
|
-
|
41
|
-
```css
|
42
|
-
/* Отображение древовидных массивов. */
|
43
|
-
@import "nested_array";
|
44
|
-
```
|
45
|
-
|
46
|
-
|
47
|
-
## Использование
|
48
|
-
|
49
|
-
<a name="methods"></a>
|
50
|
-
* Список методов
|
51
|
-
* [to_nested](#to_nested) — преобразует плоскую структуру во вложенную;
|
52
|
-
* [each_nested](#each_nested) — перебирает вложенную стуктуру;
|
53
|
-
* [each_nested!](#each_nested) — перебирает вложенную стуктуру, предоставляя доступ к исходным данным;
|
54
|
-
* [nested_to_html](#nested_to_html) — преобразует вложенную структуру в html вёрстку (многоуровневый список `<ul><li>…`);
|
55
|
-
* [nested_to_options](#nested_to_options) — преобразует вложенную структуру в массив для формирования опций html-тега `<select>` с псевдографикой;
|
56
|
-
* [nested_to_collection_select](#nested_to_collection_select) — преобразует вложенную структуру в плоскую но добавляет псевдографику в тектовое поле для формирования тэга `<select>`;
|
57
|
-
* [concat_nested](#concat_nested) — скеивание вложенных структур, ноды склеиваются если путь к ним одинаков.
|
58
|
-
* Вывод
|
59
|
-
* Вложенный список ul > li
|
60
|
-
|
61
|
-
|
62
|
-
### Список методов
|
63
|
-
|
64
|
-
<a name="to_nested"></a>
|
65
|
-
#### to_nested [↑](#methods "К методам")
|
66
|
-
|
67
|
-
Преобразует плоскую структуру во вложенную.
|
68
|
-
|
69
|
-
```ruby
|
70
|
-
a = [{'id' => 1, 'parent_id' => nil}]
|
71
|
-
a = NestedArray::Array.new a
|
72
|
-
b = a.to_nested
|
73
|
-
```
|
74
|
-
|
75
|
-
__Опции__
|
76
|
-
|
77
|
-
У каждой ноды вложенной структуры есть базовые свойства, такие как
|
78
|
-
идентификатор, идентификатор предка и другие. Для доступа к этим данным
|
79
|
-
используются ключи, которые можно настроить как в примере ниже. По умолчанию
|
80
|
-
используются следующие __строковые__ (_чувствительны к string/symbol_) ключи:
|
81
|
-
|
82
|
-
```ruby
|
83
|
-
b = a.to_nested({
|
84
|
-
id: 'id', # указывает какое свойство ноды является идентификатором;
|
85
|
-
parent_id: 'parent_id', # -//- предком;
|
86
|
-
children: 'children', # -//- массивом потомков;
|
87
|
-
level: 'level' # -//- дополнительным свойством с уровнем вложенности;
|
88
|
-
root_id: nil # определяет что является корнем для построения дерева,
|
89
|
-
# например, для построения ветви корнем корнем
|
90
|
-
# является идентификатор одной из нод.
|
91
|
-
})
|
92
|
-
```
|
93
|
-
|
94
|
-
Дополнительные опции преобразования:
|
95
|
-
|
96
|
-
```ruby
|
97
|
-
b = a.to_nested({
|
98
|
-
hashed: false, # потомки могут храниться не в массиве а в хэше;
|
99
|
-
add_level: false, # добавляет в ноду информацию о уровене вложенности ноды;
|
100
|
-
})
|
101
|
-
```
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
<a name="each_nested"></a>
|
107
|
-
#### each_nested [↑](#methods "К методам")
|
108
|
-
|
109
|
-
Перебирает вложенную стуктуру.
|
110
|
-
|
111
|
-
```ruby
|
112
|
-
nested.each_nested do |node, parents, level, is_last_children|
|
113
|
-
puts node # > {'id' => ...}
|
114
|
-
puts parents # > [{'id' => ...}]
|
115
|
-
puts level # > 0
|
116
|
-
puts is_last_children # > false
|
117
|
-
end
|
118
|
-
```
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
<a name="nested_to_html"></a>
|
124
|
-
#### nested_to_html [↑](#methods "К методам")
|
125
|
-
|
126
|
-
Формирует _html_-код для вывода вложенных структур с использованием вложенных друг в друга списков `<ul>`.
|
127
|
-
|
128
|
-
__Пример__
|
129
|
-
|
130
|
-
```ruby
|
131
|
-
[
|
132
|
-
{'id' => 1, 'parent_id' => nil, 'name' => 'first'},
|
133
|
-
{'id' => 2, 'parent_id' => 1, 'name' => 'second'},
|
134
|
-
{'id' => 3, 'parent_id' => 1, 'name' => 'third'}
|
135
|
-
].to_nested.nested_to_html do |node|
|
136
|
-
node['name']
|
137
|
-
end
|
138
|
-
```
|
139
|
-
|
140
|
-
Вернёт
|
141
|
-
|
142
|
-
```html
|
143
|
-
<li>first
|
144
|
-
<ul>
|
145
|
-
<li>second</li>
|
146
|
-
<li>third</li>
|
147
|
-
</ul>
|
148
|
-
</li>
|
149
|
-
```
|
150
|
-
|
151
|
-
__Расширенный пример__
|
152
|
-
|
153
|
-
```ruby
|
154
|
-
.nested_to_html li: '<li class="my">', _ul: '<i></i></ul>' do |node, parents, level|
|
155
|
-
block_options = {}
|
156
|
-
block_options[:li] = '<li class="my current">' if node['id'] == 2
|
157
|
-
[
|
158
|
-
"id: #{node['id']}, #{node['name']}, parent name: #{parents[level]&.[]('name')}",
|
159
|
-
block_options
|
160
|
-
]
|
161
|
-
end
|
162
|
-
```
|
163
|
-
|
164
|
-
__Опции__
|
165
|
-
|
166
|
-
Все опции могут быть аргументами метода, и только некоторые опции влияют на результат через блок — на лету (последняя строка блока).
|
167
|
-
|
168
|
-
```ruby
|
169
|
-
tabulated: true,
|
170
|
-
inline: false,
|
171
|
-
tab: "\t",
|
172
|
-
ul: '<ul>', # может задаваться блоком
|
173
|
-
_ul: '</ul>',
|
174
|
-
li: '<li>', # может задаваться блоком
|
175
|
-
_li: '</li>',
|
176
|
-
```
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
<a name="nested_to_options"></a>
|
182
|
-
#### nested_to_options [↑](#methods "К методам")
|
183
|
-
|
184
|
-
Формирования опций для html-тега <select>
|
185
|
-
|
186
|
-
Возвращает массив с псевдографикой, позволяющей вывести древовидную структуру.
|
187
|
-
|
188
|
-
```ruby
|
189
|
-
|
190
|
-
[['option_text1', 'option_value1'],['option_text2', 'option_value2'],…]
|
191
|
-
```
|
192
|
-
|
193
|
-
__Опции__
|
194
|
-
|
195
|
-
```ruby
|
196
|
-
option_value: 'id', # Что брать в качестве значений при формировании опций селекта.
|
197
|
-
option_text: 'name',
|
198
|
-
```
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
<a name="nested_to_collection_select"></a>
|
204
|
-
#### nested_to_collection_select [↑](#methods "К методам")
|
205
|
-
|
206
|
-
Преобразует вложенную структуру данных в плоскую, но добавляет в значение поля
|
207
|
-
отвечающего за текстовое представление (:name) псевдографику древовидной
|
208
|
-
структуры.
|
209
|
-
|
210
|
-
Это позволяет вывести тэг select в сносном виде для использования с вложенными
|
211
|
-
структурами.
|
212
|
-
|
213
|
-
Пример с хелпером `collection_select`
|
214
|
-
|
215
|
-
```rb
|
216
|
-
<%= form.collection_select :catalog_ids,
|
217
|
-
Catalog.all.to_a.to_nested.nested_to_collection_select, :id, :name,
|
218
|
-
{
|
219
|
-
# prompt: true
|
220
|
-
# include_blank: true
|
221
|
-
},
|
222
|
-
{
|
223
|
-
multiple: true,
|
224
|
-
size: 10
|
225
|
-
}
|
226
|
-
%>
|
227
|
-
```
|
228
|
-
|
229
|
-
Пример с хелпером `select` в сочетании с `options_from_collection_for_select`
|
230
|
-
|
231
|
-
```erb
|
232
|
-
<% catalogs = Catalog.all.to_a %>
|
233
|
-
<%= form.select :catalog_ids,
|
234
|
-
options_from_collection_for_select(
|
235
|
-
catalogs.to_nested.nested_to_collection_select, :id, :name,
|
236
|
-
disabled: catalogs.select{|x| x.hidden?}.pluck(:id),
|
237
|
-
selected: form.object.catalog_ids
|
238
|
-
),
|
239
|
-
{
|
240
|
-
# prompt: true
|
241
|
-
# include_blank: true
|
242
|
-
},
|
243
|
-
{
|
244
|
-
multiple: true,
|
245
|
-
size: 10
|
246
|
-
}
|
247
|
-
%>
|
248
|
-
```
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
<a name="concat_nested"></a>
|
254
|
-
#### concat_nested [↑](#methods "К методам")
|
255
|
-
|
256
|
-
Скеивание вложенных структур.
|
257
|
-
|
258
|
-
* Ноды склеиваются если путь к ним одинаков;
|
259
|
-
* Путь определяется из сложения Текстов (конфигурируемо через :path_key);
|
260
|
-
|
261
|
-
__Опции__
|
262
|
-
|
263
|
-
```ruby
|
264
|
-
path_separator: '-=path_separator=-',
|
265
|
-
path_key: 'text',
|
266
|
-
```
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
### Вывод
|
271
|
-
|
272
|
-
#### Вложенный список ul-li
|
273
|
-
|
274
|
-

|
275
|
-
|
276
|
-
```ruby
|
277
|
-
<ul>
|
278
|
-
<% @catalogs.to_a.to_nested.each_nested do |node, origin| %>
|
279
|
-
<%= node.before -%>
|
280
|
-
<%= node.name -%>
|
281
|
-
<%= node.after -%>
|
282
|
-
<% end %>
|
283
|
-
</ul>
|
284
|
-
```
|
285
|
-
|
286
|
-

|
287
|
-
|
288
|
-
#### Вложенный расскрывающийся список
|
289
|
-
|
290
|
-
```ruby
|
291
|
-
<ul class="nested_array-details">
|
292
|
-
<% @catalogs.to_a.to_nested.each_nested details: true do |node, origin| %>
|
293
|
-
<%= node.before -%>
|
294
|
-
<%= node.name -%>
|
295
|
-
<%= node.after -%>
|
296
|
-
<% end %>
|
297
|
-
</ul>
|
298
|
-
```
|
299
|
-
|
300
|
-

|
301
|
-
|
302
|
-
Если необходимо открыть некоторые узлы
|
303
|
-
|
304
|
-
```ruby
|
305
|
-
<ul class="nested_array-details">
|
306
|
-
<% @catalogs.to_a.to_nested.each_nested details: true do |node, origin| %>
|
307
|
-
<%= node.before -%>
|
308
|
-
<%= node.name -%>
|
309
|
-
<%= node.after(open: node.is_has_children) -%>
|
310
|
-
<% end %>
|
311
|
-
</ul>
|
312
|
-
```
|
313
|
-
|
314
|
-

|
315
|
-
|
316
|
-
|
317
|
-
## Разработка
|
318
|
-
|
319
|
-
…
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
## Содействие
|
325
|
-
|
326
|
-
…
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
## Лицензия
|
332
|
-
|
333
|
-
В соответствии с условиями [лицензии MIT](https://opensource.org/licenses/MIT).
|
data/Rakefile
DELETED
data/TODO.md
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
При возврате массива OpenStruct (всегда) пропадает смысл метода `each_nested!`
|
2
|
-
который должен отдавать в переменной node исходные данные (ну они не исходые
|
3
|
-
уже). Поэтому необходимо выпустить версию 3.0.0 с удалением метода
|
4
|
-
`each_nested!`.
|
5
|
-
|
6
|
-
Добавлен метод nested_to_collection_select, нужно пересмотреть метод
|
7
|
-
nested_to_options (возможно удалить в следующей версии).
|
8
|
-
|
9
|
-
Переработать README-ru и на английский доперевести в конце концов.
|
10
|
-
|
11
|
-
Нужно интегрировать Rails::Engine класс, а то ругается при тестах. Класс нужен
|
12
|
-
чтобы в рельсе можно было использовать ассеты.
|
data/bash/build/gem.sh
DELETED
data/bash/push/gem.sh
DELETED
data/bash/test/gem.sh
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
|
3
|
-
set -eu
|
4
|
-
|
5
|
-
cd "$(dirname "${0}")"
|
6
|
-
|
7
|
-
cd ../..
|
8
|
-
|
9
|
-
# rspec управляет загружаемыми гемами, поэтому сам rspec запускается НЕ `bundle exec rspec`, а просто `rspec`
|
10
|
-
./bin/rspec --format doc ./spec/array_spec.rb
|
11
|
-
./bin/rspec --format doc ./spec/nested_array_array_spec.rb
|
data/bin/bundle
DELETED
@@ -1,105 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'bundle' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "rubygems"
|
12
|
-
|
13
|
-
m = Module.new do
|
14
|
-
module_function
|
15
|
-
|
16
|
-
def invoked_as_script?
|
17
|
-
File.expand_path($0) == File.expand_path(__FILE__)
|
18
|
-
end
|
19
|
-
|
20
|
-
def env_var_version
|
21
|
-
ENV["BUNDLER_VERSION"]
|
22
|
-
end
|
23
|
-
|
24
|
-
def cli_arg_version
|
25
|
-
return unless invoked_as_script? # don't want to hijack other binstubs
|
26
|
-
return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
|
27
|
-
bundler_version = nil
|
28
|
-
update_index = nil
|
29
|
-
ARGV.each_with_index do |a, i|
|
30
|
-
if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
|
31
|
-
bundler_version = a
|
32
|
-
end
|
33
|
-
next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
|
34
|
-
bundler_version = $1 || ">= 0.a"
|
35
|
-
update_index = i
|
36
|
-
end
|
37
|
-
bundler_version
|
38
|
-
end
|
39
|
-
|
40
|
-
def gemfile
|
41
|
-
gemfile = ENV["BUNDLE_GEMFILE"]
|
42
|
-
return gemfile if gemfile && !gemfile.empty?
|
43
|
-
|
44
|
-
File.expand_path("../../Gemfile", __FILE__)
|
45
|
-
end
|
46
|
-
|
47
|
-
def lockfile
|
48
|
-
lockfile =
|
49
|
-
case File.basename(gemfile)
|
50
|
-
when "gems.rb" then gemfile.sub(/\.rb$/, gemfile)
|
51
|
-
else "#{gemfile}.lock"
|
52
|
-
end
|
53
|
-
File.expand_path(lockfile)
|
54
|
-
end
|
55
|
-
|
56
|
-
def lockfile_version
|
57
|
-
return unless File.file?(lockfile)
|
58
|
-
lockfile_contents = File.read(lockfile)
|
59
|
-
return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
|
60
|
-
Regexp.last_match(1)
|
61
|
-
end
|
62
|
-
|
63
|
-
def bundler_version
|
64
|
-
@bundler_version ||= begin
|
65
|
-
env_var_version || cli_arg_version ||
|
66
|
-
lockfile_version || "#{Gem::Requirement.default}.a"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def load_bundler!
|
71
|
-
ENV["BUNDLE_GEMFILE"] ||= gemfile
|
72
|
-
|
73
|
-
# must dup string for RG < 1.8 compatibility
|
74
|
-
activate_bundler(bundler_version.dup)
|
75
|
-
end
|
76
|
-
|
77
|
-
def activate_bundler(bundler_version)
|
78
|
-
if Gem::Version.correct?(bundler_version) && Gem::Version.new(bundler_version).release < Gem::Version.new("2.0")
|
79
|
-
bundler_version = "< 2"
|
80
|
-
end
|
81
|
-
gem_error = activation_error_handling do
|
82
|
-
gem "bundler", bundler_version
|
83
|
-
end
|
84
|
-
return if gem_error.nil?
|
85
|
-
require_error = activation_error_handling do
|
86
|
-
require "bundler/version"
|
87
|
-
end
|
88
|
-
return if require_error.nil? && Gem::Requirement.new(bundler_version).satisfied_by?(Gem::Version.new(Bundler::VERSION))
|
89
|
-
warn "Activating bundler (#{bundler_version}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_version}'`"
|
90
|
-
exit 42
|
91
|
-
end
|
92
|
-
|
93
|
-
def activation_error_handling
|
94
|
-
yield
|
95
|
-
nil
|
96
|
-
rescue StandardError, LoadError => e
|
97
|
-
e
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
m.load_bundler!
|
102
|
-
|
103
|
-
if m.invoked_as_script?
|
104
|
-
load Gem.bin_path("bundler", "bundle")
|
105
|
-
end
|
data/bin/byebug
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'byebug' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "pathname"
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
-
Pathname.new(__FILE__).realpath)
|
14
|
-
|
15
|
-
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
-
|
17
|
-
if File.file?(bundle_binstub)
|
18
|
-
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
-
load(bundle_binstub)
|
20
|
-
else
|
21
|
-
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
-
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
require "rubygems"
|
27
|
-
require "bundler/setup"
|
28
|
-
|
29
|
-
load Gem.bin_path("byebug", "byebug")
|
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "nested_array"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start(__FILE__)
|
data/bin/htmldiff
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'htmldiff' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "pathname"
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
-
Pathname.new(__FILE__).realpath)
|
14
|
-
|
15
|
-
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
-
|
17
|
-
if File.file?(bundle_binstub)
|
18
|
-
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
-
load(bundle_binstub)
|
20
|
-
else
|
21
|
-
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
-
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
require "rubygems"
|
27
|
-
require "bundler/setup"
|
28
|
-
|
29
|
-
load Gem.bin_path("diff-lcs", "htmldiff")
|
data/bin/ldiff
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'ldiff' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "pathname"
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
-
Pathname.new(__FILE__).realpath)
|
14
|
-
|
15
|
-
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
-
|
17
|
-
if File.file?(bundle_binstub)
|
18
|
-
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
-
load(bundle_binstub)
|
20
|
-
else
|
21
|
-
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
-
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
require "rubygems"
|
27
|
-
require "bundler/setup"
|
28
|
-
|
29
|
-
load Gem.bin_path("diff-lcs", "ldiff")
|
data/bin/rake
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'rake' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "pathname"
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
-
Pathname.new(__FILE__).realpath)
|
14
|
-
|
15
|
-
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
-
|
17
|
-
if File.file?(bundle_binstub)
|
18
|
-
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
-
load(bundle_binstub)
|
20
|
-
else
|
21
|
-
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
-
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
require "rubygems"
|
27
|
-
require "bundler/setup"
|
28
|
-
|
29
|
-
load Gem.bin_path("rake", "rake")
|
data/bin/rspec
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'rspec' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "pathname"
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
-
Pathname.new(__FILE__).realpath)
|
14
|
-
|
15
|
-
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
-
|
17
|
-
if File.file?(bundle_binstub)
|
18
|
-
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
-
load(bundle_binstub)
|
20
|
-
else
|
21
|
-
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
-
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
require "rubygems"
|
27
|
-
require "bundler/setup"
|
28
|
-
|
29
|
-
load Gem.bin_path("rspec-core", "rspec")
|
data/bin/setup
DELETED
data/dev/nested_options.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require_relative '../lib/nested_array.rb'
|
2
|
-
require 'awesome_print'
|
3
|
-
|
4
|
-
a = [
|
5
|
-
{'id' => 1, 'parent_id' => nil, 'name' => 'category 1'},
|
6
|
-
{'id' => 2, 'parent_id' => nil, 'name' => 'category 2'},
|
7
|
-
{'id' => 3, 'parent_id' => 2, 'name' => 'category 3'},
|
8
|
-
{'id' => 4, 'parent_id' => nil, 'name' => 'category 4'},
|
9
|
-
{'id' => 5, 'parent_id' => 4, 'name' => 'category 5'},
|
10
|
-
{'id' => 6, 'parent_id' => 5, 'name' => 'category 6'},
|
11
|
-
{'id' => 7, 'parent_id' => nil, 'name' => 'category 7'},
|
12
|
-
{'id' => 8, 'parent_id' => 7, 'name' => 'category 8'},
|
13
|
-
{'id' => 9, 'parent_id' => 7, 'name' => 'category 9'},
|
14
|
-
{'id' => 10, 'parent_id' => 9, 'name' => 'category 10'},
|
15
|
-
{'id' => 11, 'parent_id' => 9, 'name' => 'category 11'}
|
16
|
-
]
|
17
|
-
|
18
|
-
b = a.shuffle
|
19
|
-
|
20
|
-
array = b.to_nested.nested_to_options
|
21
|
-
print 'array: '.red; p array
|
22
|
-
|
23
|
-
array.each do |v|
|
24
|
-
puts v[0]
|
25
|
-
end
|
data/doc/images/2.1.3.1.png
DELETED
Binary file
|
data/doc/images/2.1.3.2.png
DELETED
Binary file
|
data/doc/images/2.2.1.1.png
DELETED
Binary file
|
data/doc/images/2.2.1.2.png
DELETED
Binary file
|
data/doc/images/2.2.1.3-1.png
DELETED
Binary file
|
data/doc/images/2.2.1.3-2.png
DELETED
Binary file
|
data/doc/images/2.2.1.4-1.png
DELETED
Binary file
|
data/doc/images/2.2.1.4-2.png
DELETED
Binary file
|
data/doc/images/2.2.1.5.png
DELETED
Binary file
|
data/doc/images/2.2.2.1.png
DELETED
Binary file
|
data/doc/images/2.2.2.2.png
DELETED
Binary file
|
data/doc/images/2.2.2.3.png
DELETED
Binary file
|
data/doc/images/2.2.2.4.png
DELETED
Binary file
|
data/doc/images/2.2.3.1.png
DELETED
Binary file
|
data/doc/images/2.2.3.2.png
DELETED
Binary file
|
data/doc/images/2.2.3.3.png
DELETED
Binary file
|