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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/deepmerge.rb +2 -2
  3. data/lib/deepsort.rb +40 -37
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c91873c564f0e7ef2c0a2aaf0cb97d4e900eac69c6d5873191034c0e13da97df
4
- data.tar.gz: 398113a81fc4d0130c6ec9bc3823c712028f29ef6f55e7717615bb32a87c2458
3
+ metadata.gz: a8c27c10ad9644800ef6081ce5e83244c86ec6903abf5512e833cb17fc1ff64b
4
+ data.tar.gz: 4a5653a28d8def5fe5e4fea9e3b19c19dbcbee4458e9591d2f8e52b22fc7f945
5
5
  SHA512:
6
- metadata.gz: 6fadea71e40c94f706a146f3452a1a66730ce42468d60aeae6ded483214fd634d025d32517eb338ccc219021fe4e1c5d888e7d95322400b6e048759b4bfc942d
7
- data.tar.gz: ac98a6eae285ef8ac23d922c5943af7643d1c7fe966a23eea47a2c7c5a4507cc6d7d85afd974af115de4bcea5e9a2c6f292bbe8ee19be07a5314a21ffde46b71
6
+ metadata.gz: b40d744e34ad545c518aaed6cc08ec28b4cae8755e91c8d0083e53160e9d8f847299ae09e916fb487252d87206742ce6f9bfb5e663a34f319e8b3f354f732c88
7
+ data.tar.gz: 685db91e06d32153cebe13005ff462f58bcbc4d873f4121b8baa7a7d349d0212a374bb8a6f8208fc5426b9b6a87928fc33cccdd34d5cc1dfd4acc0f283d22d02
@@ -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 |key, oldval, newval|
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 |key, oldval, newval|
34
+ merge!(other) do |_key, oldval, newval|
35
35
  if oldval.respond_to? :deep_merge!
36
36
  oldval.deep_merge!(newval)
37
37
  else
@@ -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? :deep_sort_by
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.sort_by(&block)
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? :deep_sort_by!
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.sort_by!(&block)
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
- Hash[self.map do |key, value|
60
- [if key.respond_to? :deep_sort_by
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? :deep_sort_by
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
- end.sort_by(&block)]
75
+ Hash[options[:hash] == false ? hash : hash.sort_by(&block)]
73
76
  end
74
77
 
75
- def deep_sort_by!(&block)
76
- replace(Hash[self.map do |key, value|
77
- [if key.respond_to? :deep_sort_by!
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? :deep_sort_by!
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
- end.sort_by(&block)])
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.2
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: 2019-05-08 00:00:00.000000000 Z
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