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