autostacker24 1.0.26 → 1.0.27
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/autostacker24/stacker.rb +3 -1
- data/lib/autostacker24/template_preprocessor.rb +69 -0
- metadata +17 -3
- data/lib/autostacker24/stacker_tests.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb33f6ccb4d9c081991bde6bb12c79283672f8e6
|
4
|
+
data.tar.gz: 4f166b6956bde0bc0dcee63f29b988062874db8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 292dd8f06c404a9dd2173f2cec11cc350e026b5e6ede4bc9756cb38b0e6d962cde2e25837bdd0b75283ca22b7ad7636da09639116e668fc1940d8dac6a61a37e
|
7
|
+
data.tar.gz: da2e04310f05e1c8e3fd1fd9d6c13597fa593c655e320cc09179ed8c99029f5519674beff3a8a745c4c78f2238a9ab390da40408ca588a0389967a8a2ee975b9
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'aws-sdk-core'
|
2
2
|
require 'set'
|
3
3
|
|
4
|
+
require_relative 'template_preprocessor.rb'
|
5
|
+
|
4
6
|
module Stacker
|
5
7
|
|
6
8
|
attr_reader :region, :credentials
|
@@ -155,7 +157,7 @@ module Stacker
|
|
155
157
|
|
156
158
|
def template_body(template)
|
157
159
|
template = File.read(template) if File.exists?(template)
|
158
|
-
|
160
|
+
AutoStacker24::Preprocessor.preprocess(template)
|
159
161
|
end
|
160
162
|
|
161
163
|
extend self
|
@@ -0,0 +1,69 @@
|
|
1
|
+
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module AutoStacker24
|
5
|
+
|
6
|
+
module Preprocessor
|
7
|
+
|
8
|
+
def self.preprocess(template)
|
9
|
+
template = template.gsub(/(\s*\/\/.*$)|(".*")/) {|m| m[0] == '"' ? m : ''} # replace comments
|
10
|
+
preprocess_json(JSON(template)).to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.preprocess_json(json)
|
14
|
+
if json.is_a?(Hash)
|
15
|
+
json.inject({}){|m, (k, v)| m.merge(k => preprocess_json(v))}
|
16
|
+
elsif json.is_a?(Array)
|
17
|
+
json.map{|v| preprocess_json(v)}
|
18
|
+
elsif json.is_a?(String)
|
19
|
+
preprocess_string(json)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.preprocess_string(s)
|
24
|
+
parts = tokenize(s).map do |token|
|
25
|
+
case token
|
26
|
+
when '@@' then '@'
|
27
|
+
when /^@/ then {'Ref' => token[1..-1]}
|
28
|
+
else token
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# merge neighboured strings
|
33
|
+
parts = parts.reduce([])do |m, p|
|
34
|
+
if m.last.is_a?(String) && p.is_a?(String)
|
35
|
+
m[-1] += p
|
36
|
+
else
|
37
|
+
m << p
|
38
|
+
end
|
39
|
+
m
|
40
|
+
end
|
41
|
+
|
42
|
+
if parts.length == 1
|
43
|
+
parts.first
|
44
|
+
else # we need a join construct
|
45
|
+
{'Fn::Join' => ['', parts]}
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.tokenize(s)
|
51
|
+
pattern = /@@|@([^@\s]+)/
|
52
|
+
tokens = []
|
53
|
+
until s.empty?
|
54
|
+
m = pattern.match(s)
|
55
|
+
if m
|
56
|
+
tokens << m.pre_match unless m.pre_match.empty?
|
57
|
+
tokens << m.to_s
|
58
|
+
s = m.post_match
|
59
|
+
else
|
60
|
+
tokens << s
|
61
|
+
s = ''
|
62
|
+
end
|
63
|
+
end
|
64
|
+
tokens
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autostacker24
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johannes Mueller
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-02-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk-core
|
@@ -25,6 +25,20 @@ dependencies:
|
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '2'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: json
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '1.8'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.8'
|
28
42
|
description: n/a
|
29
43
|
email:
|
30
44
|
- jmueller@autoscout24.com
|
@@ -35,7 +49,7 @@ extra_rdoc_files: []
|
|
35
49
|
files:
|
36
50
|
- lib/autostacker24.rb
|
37
51
|
- lib/autostacker24/stacker.rb
|
38
|
-
- lib/autostacker24/
|
52
|
+
- lib/autostacker24/template_preprocessor.rb
|
39
53
|
homepage: https://github.com/AutoScout24/autostacker24
|
40
54
|
licenses:
|
41
55
|
- MIT
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'openssl'
|
2
|
-
require_relative 'stacker.rb'
|
3
|
-
|
4
|
-
def template_body
|
5
|
-
template = <<-EOL
|
6
|
-
bla bla //comment
|
7
|
-
bla "//no comment"
|
8
|
-
bla // still a "comment"
|
9
|
-
bla "some string" // comment
|
10
|
-
EOL
|
11
|
-
|
12
|
-
puts Stacker.template_body(template)
|
13
|
-
end
|
14
|
-
|
15
|
-
if $0 ==__FILE__ # placeholder for interactive testing
|
16
|
-
|
17
|
-
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE # Windows Hack
|
18
|
-
|
19
|
-
template_body
|
20
|
-
|
21
|
-
end
|