deepsort 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
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