abstractivator 0.7.0 → 0.8.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/lib/abstractivator/sort.rb +16 -0
- data/lib/abstractivator/version.rb +1 -1
- data/spec/lib/abstractivator/sort_spec.rb +54 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2cea52cc38ca98adfa7d74c52cf4ba4f7092199
|
4
|
+
data.tar.gz: 312ae9d15598a24323ad84d5bf5ce504a15bc4a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8915f8bc9b77a6e3fba1bed0578b28d4a08e7bf99d7e96eff0698268c6e43dba869ea40a334646e38c670e094fcf42fe403f105f12016287c79c852a256ba984
|
7
|
+
data.tar.gz: 9b040c5a59386fc9ff8b10e484eb9fb0ad71c354378a61afe5a815973f69fe041469d28aebbda95517fd93444b93e98b86760bfae35105b0d9d8ef9cb10b8ddc
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Abstractivator
|
2
|
+
module Sort
|
3
|
+
def deep_sort_hash(obj)
|
4
|
+
case obj
|
5
|
+
when Hash
|
6
|
+
obj.sort.to_h.each_with_object({}) do |(k, v), a|
|
7
|
+
a[k] = deep_sort_hash(v)
|
8
|
+
end
|
9
|
+
when Array
|
10
|
+
obj.map(&method(:deep_sort_hash))
|
11
|
+
else
|
12
|
+
obj
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'abstractivator/sort'
|
2
|
+
|
3
|
+
describe Abstractivator::Sort do
|
4
|
+
include Abstractivator::Sort
|
5
|
+
describe '#deep_sort_hash' do
|
6
|
+
context 'when empty hash' do
|
7
|
+
let(:hash) { {} }
|
8
|
+
it 'returns empty hash' do
|
9
|
+
expect_same_order(deep_sort, {})
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when single level' do
|
14
|
+
let(:hash) { {one: 1, two: '2', three: 3, four: '4'} }
|
15
|
+
it 'returns new hash with the keys sorted alpha-numerically' do
|
16
|
+
expected = {four: '4', one: 1, three: 3, two: '2'}
|
17
|
+
expect_same_order(deep_sort, expected)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when mult-level hash' do
|
22
|
+
let(:hash) { {one: 1, two: {three: {four: '4', five: 5}}, six: 6} }
|
23
|
+
it 'returns new hash with the keys sorted alpha-numerically' do
|
24
|
+
expected = {one: 1, six: 6, two: {three: {five: 5, four: '4'}}}
|
25
|
+
expect_same_order(deep_sort, expected)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when contains an array' do
|
30
|
+
let(:hash) { {one: 1, two: [{three: {four: '4', five: 5}}, 'six', :seven], eight: 8} }
|
31
|
+
it 'returns new hash with the keys sorted alpha-numerically (does not sort arrays)' do
|
32
|
+
expected = {eight: 8, one: 1, two: [{three: {five: 5, four: '4'}}, 'six', :seven]}
|
33
|
+
expect_same_order(deep_sort, expected)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def deep_sort
|
38
|
+
deep_sort_hash(hash)
|
39
|
+
end
|
40
|
+
|
41
|
+
def expect_same_order(actual, expected)
|
42
|
+
case actual
|
43
|
+
when Hash
|
44
|
+
expect(actual.keys).to eql expected.keys
|
45
|
+
expect_same_order(actual.values, expected.values)
|
46
|
+
when Array
|
47
|
+
expect(actual.size).to eql expected.size
|
48
|
+
actual.zip(expected).each { |a, e| expect_same_order(a, e) }
|
49
|
+
else
|
50
|
+
expect(actual).to eql expected
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abstractivator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Winton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/abstractivator/schedule.rb
|
132
132
|
- lib/abstractivator/schedule/schedule.rb
|
133
133
|
- lib/abstractivator/schedule/schedule_runner.rb
|
134
|
+
- lib/abstractivator/sort.rb
|
134
135
|
- lib/abstractivator/trees.rb
|
135
136
|
- lib/abstractivator/trees/block_collector.rb
|
136
137
|
- lib/abstractivator/trees/recursive_delete.rb
|
@@ -152,6 +153,7 @@ files:
|
|
152
153
|
- spec/lib/abstractivator/schedule/em_util.rb
|
153
154
|
- spec/lib/abstractivator/schedule/schedule_runner_spec.rb
|
154
155
|
- spec/lib/abstractivator/schedule/schedule_spec.rb
|
156
|
+
- spec/lib/abstractivator/sort_spec.rb
|
155
157
|
- spec/lib/abstractivator/trees/recursive_delete_spec.rb
|
156
158
|
- spec/lib/abstractivator/trees/tree_compare_spec.rb
|
157
159
|
- spec/lib/abstractivator/trees/tree_map_spec.rb
|
@@ -196,6 +198,7 @@ test_files:
|
|
196
198
|
- spec/lib/abstractivator/schedule/em_util.rb
|
197
199
|
- spec/lib/abstractivator/schedule/schedule_runner_spec.rb
|
198
200
|
- spec/lib/abstractivator/schedule/schedule_spec.rb
|
201
|
+
- spec/lib/abstractivator/sort_spec.rb
|
199
202
|
- spec/lib/abstractivator/trees/recursive_delete_spec.rb
|
200
203
|
- spec/lib/abstractivator/trees/tree_compare_spec.rb
|
201
204
|
- spec/lib/abstractivator/trees/tree_map_spec.rb
|