ecs_compose 0.1.0.pre28 → 0.1.0.pre29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ecs_compose/compare.rb +47 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57302424cdae84d0c6fae6f1cf6d1253bef38c96
|
4
|
+
data.tar.gz: 2695f370bd65f84d9cd89c28a1f6b32f4fd7f7fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b091ab6dcd83216f5975bcac26434ae06dc89508c6b77ab2e6168855a6e036b7d3f2151ef1b8e33967e827ba202d2a5d35f140581688aeefda8b9cd9c87397a
|
7
|
+
data.tar.gz: 17104e01a5490a75ddb6e37248f882a55a83f48162f9d32b72cbf9b73a97058f5f942ddc99106142de941ddaf312f4b2fd17fd671d032d27ab1b1bf126698972
|
data/lib/ecs_compose/compare.rb
CHANGED
@@ -2,22 +2,59 @@ module EcsCompose
|
|
2
2
|
# Utilities for comparing ECS task definition JSON, which we need to do
|
3
3
|
# to determine whether or not a running service needs to be deployed.
|
4
4
|
module Compare
|
5
|
+
# :nodoc: An internal table providing a sort order for data types.
|
6
|
+
CLASS_ORDINAL = {
|
7
|
+
String => 1,
|
8
|
+
# These can all be compared against each other.
|
9
|
+
Fixnum => 2, Float => 2, Bignum => 2,
|
10
|
+
Hash => 3,
|
11
|
+
Array => 4,
|
12
|
+
FalseClass => 5,
|
13
|
+
TrueClass => 6,
|
14
|
+
NilClass => 7,
|
15
|
+
}
|
16
|
+
|
17
|
+
# Compare two legal JSON values, and do our best to always return a
|
18
|
+
# result.
|
19
|
+
def self.compare_any(a, b)
|
20
|
+
# First sort by type.
|
21
|
+
class_order =
|
22
|
+
CLASS_ORDINAL.fetch(a.class) <=> CLASS_ORDINAL.fetch(b.class)
|
23
|
+
return class_order unless class_order == 0
|
24
|
+
|
25
|
+
# Then sort by value.
|
26
|
+
case a
|
27
|
+
when Hash
|
28
|
+
# Convert the hashes to arrays, sort them to normalize hash key
|
29
|
+
# order, and compare them.
|
30
|
+
compare_any(a.to_a.sort {|a1, b1| compare_any(a1, b1) },
|
31
|
+
b.to_a.sort {|a1, b1| compare_any(a1, b1) })
|
32
|
+
when Array
|
33
|
+
# Do a full array comparison so that we can slip in our comparison
|
34
|
+
# function.
|
35
|
+
for i in 0...([a.length, b.length].max)
|
36
|
+
if i >= a.length
|
37
|
+
return -1
|
38
|
+
elsif i >= b.length
|
39
|
+
return 1
|
40
|
+
else
|
41
|
+
elem_order = compare_any(a[i], b[i])
|
42
|
+
return elem_order unless elem_order == 0
|
43
|
+
end
|
44
|
+
end
|
45
|
+
0
|
46
|
+
else
|
47
|
+
a <=> b
|
48
|
+
end
|
49
|
+
end
|
5
50
|
|
6
51
|
# Recursively sort all arrays contained in `val`, in order to normalize
|
7
52
|
# things like environment variables in different orders.
|
8
53
|
def self.sort_recursively(val)
|
9
54
|
case val
|
10
55
|
when Array
|
11
|
-
val.
|
12
|
-
|
13
|
-
item.to_a.sort
|
14
|
-
elsif item.instance_of?(Array)
|
15
|
-
# for an array of arrays, just return 1
|
16
|
-
1
|
17
|
-
else
|
18
|
-
item
|
19
|
-
end
|
20
|
-
end.map {|item| sort_recursively(item) }
|
56
|
+
val.map {|item| sort_recursively(item) }
|
57
|
+
.sort {|a1, b1| compare_any(a1, b1) }
|
21
58
|
when Hash
|
22
59
|
newval = {}
|
23
60
|
val.each do |k, v|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecs_compose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.pre29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Kidd
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docopt
|