deepsort 0.4.2 → 0.4.3
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/lib/deepmerge.rb +2 -2
- data/lib/deepsort.rb +40 -37
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8c27c10ad9644800ef6081ce5e83244c86ec6903abf5512e833cb17fc1ff64b
|
4
|
+
data.tar.gz: 4a5653a28d8def5fe5e4fea9e3b19c19dbcbee4458e9591d2f8e52b22fc7f945
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b40d744e34ad545c518aaed6cc08ec28b4cae8755e91c8d0083e53160e9d8f847299ae09e916fb487252d87206742ce6f9bfb5e663a34f319e8b3f354f732c88
|
7
|
+
data.tar.gz: 685db91e06d32153cebe13005ff462f58bcbc4d873f4121b8baa7a7d349d0212a374bb8a6f8208fc5426b9b6a87928fc33cccdd34d5cc1dfd4acc0f283d22d02
|
data/lib/deepmerge.rb
CHANGED
@@ -21,7 +21,7 @@ module DeepMerge
|
|
21
21
|
# inject this method into the Hash class to add deep merge functionality to Hashes
|
22
22
|
module DeepMergeHash
|
23
23
|
def deep_merge(other)
|
24
|
-
merge(other) do |
|
24
|
+
merge(other) do |_key, oldval, newval|
|
25
25
|
if oldval.respond_to? :deep_merge
|
26
26
|
oldval.deep_merge(newval)
|
27
27
|
else
|
@@ -31,7 +31,7 @@ module DeepMerge
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def deep_merge!(other)
|
34
|
-
merge!(other) do |
|
34
|
+
merge!(other) do |_key, oldval, newval|
|
35
35
|
if oldval.respond_to? :deep_merge!
|
36
36
|
oldval.deep_merge!(newval)
|
37
37
|
else
|
data/lib/deepsort.rb
CHANGED
@@ -16,77 +16,80 @@
|
|
16
16
|
module DeepSort
|
17
17
|
# inject this method into the Array class to add deep sort functionality to Arrays
|
18
18
|
module DeepSortArray
|
19
|
-
def deep_sort
|
20
|
-
deep_sort_by { |obj| obj }
|
19
|
+
def deep_sort(options = {})
|
20
|
+
deep_sort_by(options) { |obj| obj }
|
21
21
|
end
|
22
22
|
|
23
|
-
def deep_sort!
|
24
|
-
deep_sort_by! { |obj| obj }
|
23
|
+
def deep_sort!(options = {})
|
24
|
+
deep_sort_by!(options) { |obj| obj }
|
25
25
|
end
|
26
26
|
|
27
|
-
def deep_sort_by(&block)
|
28
|
-
self.map do |value|
|
29
|
-
if value.respond_to?
|
30
|
-
value.deep_sort_by(&block)
|
27
|
+
def deep_sort_by(options = {}, &block)
|
28
|
+
array = self.map do |value|
|
29
|
+
if value.respond_to?(:deep_sort_by)
|
30
|
+
value.deep_sort_by(options, &block)
|
31
31
|
else
|
32
32
|
value
|
33
33
|
end
|
34
|
-
end
|
34
|
+
end
|
35
|
+
options[:array] == false ? array : array.sort_by(&block)
|
35
36
|
end
|
36
37
|
|
37
|
-
def deep_sort_by!(&block)
|
38
|
-
self.map! do |value|
|
39
|
-
if value.respond_to?
|
40
|
-
value.deep_sort_by!(&block)
|
38
|
+
def deep_sort_by!(options = {}, &block)
|
39
|
+
array = self.map! do |value|
|
40
|
+
if value.respond_to?(:deep_sort_by!)
|
41
|
+
value.deep_sort_by!(options, &block)
|
41
42
|
else
|
42
43
|
value
|
43
44
|
end
|
44
|
-
end
|
45
|
+
end
|
46
|
+
options[:array] == false ? array : array.sort_by!(&block)
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
48
50
|
# inject this method into the Hash class to add deep sort functionality to Hashes
|
49
51
|
module DeepSortHash
|
50
|
-
def deep_sort
|
51
|
-
deep_sort_by { |obj| obj }
|
52
|
+
def deep_sort(options = {})
|
53
|
+
deep_sort_by(options) { |obj| obj }
|
52
54
|
end
|
53
55
|
|
54
|
-
def deep_sort!
|
55
|
-
deep_sort_by! { |obj| obj }
|
56
|
+
def deep_sort!(options = {})
|
57
|
+
deep_sort_by!(options) { |obj| obj }
|
56
58
|
end
|
57
59
|
|
58
|
-
def deep_sort_by(&block)
|
59
|
-
|
60
|
-
[if key.respond_to?
|
61
|
-
key.deep_sort_by(&block)
|
60
|
+
def deep_sort_by(options = {}, &block)
|
61
|
+
hash = self.map do |key, value|
|
62
|
+
[if key.respond_to?(:deep_sort_by)
|
63
|
+
key.deep_sort_by(options, &block)
|
62
64
|
else
|
63
65
|
key
|
64
66
|
end,
|
65
67
|
|
66
|
-
if value.respond_to?
|
67
|
-
value.deep_sort_by(&block)
|
68
|
+
if value.respond_to?(:deep_sort_by)
|
69
|
+
value.deep_sort_by(options, &block)
|
68
70
|
else
|
69
71
|
value
|
70
72
|
end]
|
73
|
+
end
|
71
74
|
|
72
|
-
|
75
|
+
Hash[options[:hash] == false ? hash : hash.sort_by(&block)]
|
73
76
|
end
|
74
77
|
|
75
|
-
def deep_sort_by!(&block)
|
76
|
-
|
77
|
-
[if key.respond_to?
|
78
|
-
key.deep_sort_by!(&block)
|
78
|
+
def deep_sort_by!(options = {}, &block)
|
79
|
+
hash = self.map do |key, value|
|
80
|
+
[if key.respond_to?(:deep_sort_by!)
|
81
|
+
key.deep_sort_by!(options, &block)
|
79
82
|
else
|
80
83
|
key
|
81
84
|
end,
|
82
85
|
|
83
|
-
if value.respond_to?
|
84
|
-
value.deep_sort_by!(&block)
|
86
|
+
if value.respond_to?(:deep_sort_by!)
|
87
|
+
value.deep_sort_by!(options, &block)
|
85
88
|
else
|
86
89
|
value
|
87
90
|
end]
|
88
|
-
|
89
|
-
|
91
|
+
end
|
92
|
+
replace(Hash[options[:hash] == false ? hash : hash.sort_by!(&block)])
|
90
93
|
end
|
91
94
|
|
92
95
|
# comparison for hashes is ill-defined. this performs array or string comparison if the normal comparison fails.
|
@@ -101,9 +104,9 @@ Hash.send(:include, DeepSort::DeepSortHash)
|
|
101
104
|
|
102
105
|
# and if you don't like calling member methods on objects, these two functions do it for you.
|
103
106
|
# if the object cannot be deep sorted, it will simply return the sorted object or the object itself if sorting isn't available.
|
104
|
-
def deep_sort(obj)
|
107
|
+
def deep_sort(obj, options = {})
|
105
108
|
if obj.respond_to? :deep_sort
|
106
|
-
obj.deep_sort
|
109
|
+
obj.deep_sort(options)
|
107
110
|
elsif obj.respond_to? :sort
|
108
111
|
obj.sort
|
109
112
|
else
|
@@ -112,9 +115,9 @@ def deep_sort(obj)
|
|
112
115
|
end
|
113
116
|
|
114
117
|
# similar to the deep_sort method, but performs the deep sort in place
|
115
|
-
def deep_sort!(obj)
|
118
|
+
def deep_sort!(obj, options = {})
|
116
119
|
if obj.respond_to? :deep_sort!
|
117
|
-
obj.deep_sort!
|
120
|
+
obj.deep_sort!(options)
|
118
121
|
elsif obj.respond_to? :sort!
|
119
122
|
obj.sort!
|
120
123
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deepsort
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Crossen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Recursively sort nested ruby Arrays and Hashes + deepmerge
|
14
14
|
email: markcrossen@studentbody.byu.edu
|