rubycfn 0.3.9 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: caf023ccb4bd77b29645fbfc9b06a717b9fe1871
4
- data.tar.gz: e7e0a042adec2d4918c8caf7b570e2851e8bf120
3
+ metadata.gz: d733dda0a2fd9505dc4e84d6d65670f3acbe1322
4
+ data.tar.gz: 782fc35dc9375763e592671ab952fa18679f80a6
5
5
  SHA512:
6
- metadata.gz: e9375683b9dfb35db23b9f87dade39f5a65caa72ce214470a36d11cbe15f383eee8acc662192409fd43cd8c0cfcba9a0e2ea89db187feb98cd8ed84bea0d7583
7
- data.tar.gz: 1a7d944789d61a10b3dca153677b5927de0f891d2ad858d26587652073c6028341b595bce0709fc2ac8e29dca9a8acf24abb1a3ad7c12372c65f57b5696657ac
6
+ metadata.gz: 68087c6444b29e2d5f26871dcdf8e805b3996481066c93f4a444cbe161d85d8372caccf980ad6b01496e360fc0d69fa9f5266c3ba22a6efa6bdff5809c3ad17b
7
+ data.tar.gz: 2d3780fb60ca99005a14248dced1e4f9041fda32efd2541a4ab921f14116e183c07bd0ef0cd346b561c697d2851f7bbd12594fa9b857c645b6d9e313c6e21ec6
data/.rubocop.yml CHANGED
@@ -51,7 +51,7 @@ Metrics/ModuleLength:
51
51
  Max: 500
52
52
 
53
53
  Metrics/MethodLength:
54
- Max: 40
54
+ Max: 100
55
55
 
56
56
  Metrics/BlockLength:
57
57
  Max: 500
@@ -59,6 +59,9 @@ Metrics/BlockLength:
59
59
  Performance/Casecmp:
60
60
  Enabled: false
61
61
 
62
+ Style/RedundantSelf:
63
+ Enabled: false
64
+
62
65
  Style/DoubleNegation:
63
66
  Enabled: false
64
67
 
data/CHANGELOG.md CHANGED
@@ -2,7 +2,12 @@
2
2
  All notable changes to Rubycfn will be documented in this file.
3
3
  This project uses [Semantic Versioning](http://semver.org/).
4
4
 
5
- ## 0.3.10 (Next Release)
5
+ ## 0.4.1 (Next Release)
6
+
7
+ ## 0.4.0
8
+
9
+ * Added resource elements `update_policy`, `update_replace_policy`, `metadata`, `depends_on`, `deletion_policy` and `creation_policy`.
10
+ * This release breaks the `r.meta` property. -- [@dennisvink][@dennisvink]
6
11
 
7
12
  ## 0.3.9
8
13
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubycfn (0.3.9)
4
+ rubycfn (0.4.0)
5
5
  activesupport (~> 5.1.5)
6
6
  dotenv (~> 2.4.0)
7
7
  json (~> 2.1.0)
@@ -16,20 +16,20 @@ GEM
16
16
  i18n (>= 0.7, < 2)
17
17
  minitest (~> 5.1)
18
18
  tzinfo (~> 1.1)
19
- addressable (2.6.0)
20
- public_suffix (>= 2.0.2, < 4.0)
19
+ addressable (2.7.0)
20
+ public_suffix (>= 2.0.2, < 5.0)
21
21
  awesome_print (1.8.0)
22
22
  coderay (1.1.2)
23
23
  concurrent-ruby (1.1.5)
24
24
  diff-lcs (1.3)
25
- docile (1.3.1)
25
+ docile (1.3.2)
26
26
  dotenv (2.4.0)
27
27
  equatable (0.6.1)
28
- ffi (1.10.0)
28
+ ffi (1.11.1)
29
29
  formatador (0.2.5)
30
30
  given_core (3.8.0)
31
31
  sorcerer (>= 0.3.7)
32
- guard (2.15.0)
32
+ guard (2.15.1)
33
33
  formatador (>= 0.2.4)
34
34
  listen (>= 2.7, < 4.0)
35
35
  lumberjack (>= 1.0.12, < 2.0)
@@ -58,7 +58,7 @@ GEM
58
58
  neatjson (0.8.4)
59
59
  necromancer (0.4.0)
60
60
  nenv (0.3.0)
61
- notiffany (0.1.1)
61
+ notiffany (0.1.3)
62
62
  nenv (~> 0.1)
63
63
  shellany (~> 0.0)
64
64
  pastel (0.7.3)
@@ -67,7 +67,7 @@ GEM
67
67
  pry (0.12.2)
68
68
  coderay (~> 1.1.0)
69
69
  method_source (~> 0.9.0)
70
- public_suffix (3.0.3)
70
+ public_suffix (4.0.1)
71
71
  rake (10.5.0)
72
72
  rb-fsevent (0.10.3)
73
73
  rb-inotify (0.10.0)
@@ -76,9 +76,9 @@ GEM
76
76
  rspec-core (~> 3.8.0)
77
77
  rspec-expectations (~> 3.8.0)
78
78
  rspec-mocks (~> 3.8.0)
79
- rspec-core (3.8.0)
79
+ rspec-core (3.8.2)
80
80
  rspec-support (~> 3.8.0)
81
- rspec-expectations (3.8.2)
81
+ rspec-expectations (3.8.4)
82
82
  diff-lcs (>= 1.2.0, < 2.0)
83
83
  rspec-support (~> 3.8.0)
84
84
  rspec-given (3.8.0)
@@ -87,15 +87,15 @@ GEM
87
87
  rspec-its (1.3.0)
88
88
  rspec-core (>= 3.0.0)
89
89
  rspec-expectations (>= 3.0.0)
90
- rspec-mocks (3.8.0)
90
+ rspec-mocks (3.8.1)
91
91
  diff-lcs (>= 1.2.0, < 2.0)
92
92
  rspec-support (~> 3.8.0)
93
- rspec-support (3.8.0)
93
+ rspec-support (3.8.2)
94
94
  rspec_junit_formatter (0.4.1)
95
95
  rspec-core (>= 2, < 4, != 2.12.0)
96
96
  ruby_dep (1.5.0)
97
97
  shellany (0.0.1)
98
- simplecov (0.16.1)
98
+ simplecov (0.17.1)
99
99
  docile (~> 1.1)
100
100
  json (>= 1.8, < 3)
101
101
  simplecov-html (~> 0.10.0)
data/README.md CHANGED
@@ -61,7 +61,7 @@ __________ ____ __________________.___._________ _____________________
61
61
  | _/ | /| | _// | |/ \ \/ | __) | | _/
62
62
  | | \ | / | | \\____ |\ \____| \ | | \
63
63
  |____|_ /______/ |______ // ______| \______ /\___ / |______ /
64
- \/ \/ \/ \/ \/ \/ [v0.3.9]
64
+ \/ \/ \/ \/ \/ \/ [v0.4.0]
65
65
  Project name? example
66
66
  Account ID? 1234567890
67
67
  Select region EU (Frankfurt)
@@ -1,4 +1,4 @@
1
1
  # Rubycfn version
2
2
  module Rubycfn
3
- VERSION = "0.3.9".freeze
3
+ VERSION = "0.4.0".freeze
4
4
  end
data/lib/rubycfn.rb CHANGED
@@ -4,13 +4,11 @@ require "json"
4
4
  require "neatjson"
5
5
  require "rubycfn/version"
6
6
 
7
- @depends_on = []
8
7
  @description = ""
9
8
  @transform = ""
10
9
  @outputs = {}
11
10
  @parameters = {}
12
11
  @properties = {}
13
- @metadata = {}
14
12
  @mappings = {}
15
13
  @conditions = {}
16
14
  @aws_resources = {}
@@ -21,6 +19,11 @@ require "rubycfn/version"
21
19
 
22
20
  # Monkey patching
23
21
  class Symbol
22
+ def cfnize
23
+ return self.to_s if self.to_s !~ /_/ && self.to_s =~ /[A-Z]+.*/
24
+ to_s.split("_").map(&:capitalize).join
25
+ end
26
+
24
27
  def ref(attr = nil)
25
28
  unless attr
26
29
  return { Ref: to_s.split("_").map(&:capitalize).join }
@@ -192,14 +195,12 @@ class Array
192
195
  end
193
196
 
194
197
  class ::Hash
195
- # rubocop:disable Style/RedundantSelf
196
198
  # rubocop:disable Style/CaseEquality
197
199
  # rubocop:disable Lint/UnusedBlockArgument
198
200
  def deep_merge(second)
199
201
  merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : Array === v1 && Array === v2 ? v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
200
202
  self.merge(second.to_h, &merger)
201
203
  end
202
- # rubocop:enable Style/RedundantSelf
203
204
  # rubocop:enable Style/CaseEquality
204
205
  # rubocop:enable Lint/UnusedBlockArgument
205
206
 
@@ -366,12 +367,6 @@ module Rubycfn
366
367
  end
367
368
  # rubocop:enable Lint/UnusedMethodArgument
368
369
 
369
- def self.meta(name, _index = 0, &block)
370
- name = name.class == Symbol ? TOPLEVEL_BINDING.eval("'#{name}'.cfnize") : TOPLEVEL_BINDING.eval("'#{name}'")
371
- res = { "#{name}": yield(block) }
372
- TOPLEVEL_BINDING.eval("@metadata = @metadata.deep_merge(#{res})")
373
- end
374
-
375
370
  def self.property(name, _index = 0, &block)
376
371
  name = name.class == Symbol ? TOPLEVEL_BINDING.eval("'#{name}'.cfnize") : TOPLEVEL_BINDING.eval("'#{name}'")
377
372
  res = { "#{name}": yield(block) }
@@ -403,21 +398,48 @@ module Rubycfn
403
398
  TOPLEVEL_BINDING.eval("@resource_name = ''")
404
399
  end
405
400
 
401
+ # Transform depends_on based on input class
402
+ unless arguments[:depends_on].nil? && TOPLEVEL_BINDING.eval("@depends_on").nil?
403
+
404
+ # Initialize arguments[:depends_on] if it is nil
405
+ arguments[:depends_on] = arguments[:depends_on].nil? && [] || arguments[:depends_on]
406
+
407
+ # If the argument is a string, create an array out of it with a single element
408
+ arguments[:depends_on] = arguments[:depends_on].class == Array && arguments[:depends_on] || [arguments[:depends_on]]
409
+
410
+ # `r.depends_on` is used to amend depends_on with resources with dynamic names
411
+ # Here we add them to arguments[:depends_on]
412
+ to_amend = TOPLEVEL_BINDING.eval("@depends_on")
413
+ unless to_amend.nil?
414
+ to_amend = to_amend.class == String && [to_amend] || to_amend
415
+ to_amend.each do |amend|
416
+ arguments[:depends_on].push(amend)
417
+ end
418
+ end
419
+ TOPLEVEL_BINDING.eval("@depends_on = []")
420
+
421
+ # Finally, we render the DependsOn array
422
+ arguments[:depends_on].map! { |resource| resource.class == String && resource.to_s || resource.to_s.split("_").map(&:capitalize).join }
423
+ end
424
+
406
425
  res = {
407
426
  "#{name.to_s}#{i.zero? ? "" : resource_postpend}": {
408
- DependsOn: TOPLEVEL_BINDING.eval("@depends_on"),
409
- Metadata: TOPLEVEL_BINDING.eval("@metadata"),
410
427
  Properties: TOPLEVEL_BINDING.eval("@properties"),
411
428
  Type: arguments[:type],
412
429
  Condition: arguments[:condition],
413
- UpdatePolicy: arguments[:update_policy]
430
+ UpdatePolicy: arguments[:update_policy],
431
+ UpdateReplacePolicy: arguments[:update_replace_policy],
432
+ Metadata: arguments[:metadata],
433
+ DependsOn: arguments[:depends_on],
434
+ DeletionPolicy: arguments[:deletion_policy],
435
+ CreationPolicy: arguments[:creation_policy]
414
436
  }
415
437
  }
438
+ arguments[:depends_on] = []
416
439
  TOPLEVEL_BINDING.eval("@aws_resources = @aws_resources.deep_merge(#{res})")
417
440
  end
418
441
  TOPLEVEL_BINDING.eval("@depends_on = []")
419
442
  TOPLEVEL_BINDING.eval("@properties = {}")
420
- TOPLEVEL_BINDING.eval("@metadata = {}")
421
443
  end
422
444
  end
423
445
 
@@ -439,7 +461,7 @@ module Rubycfn
439
461
  skeleton[:Conditions] = sort_json(TOPLEVEL_BINDING.eval("@conditions"))
440
462
  skeleton[:Resources] = sort_json(TOPLEVEL_BINDING.eval("@aws_resources"))
441
463
  skeleton[:Outputs] = sort_json(TOPLEVEL_BINDING.eval("@outputs"))
442
- TOPLEVEL_BINDING.eval("@variables = @aws_resources = @outputs = @metadata = @properties = @mappings = @parameters = {}")
464
+ TOPLEVEL_BINDING.eval("@variables = @aws_resources = @outputs = @properties = @mappings = @parameters = {}")
443
465
  TOPLEVEL_BINDING.eval("@depends_on = []")
444
466
  TOPLEVEL_BINDING.eval("@description = ''")
445
467
  TOPLEVEL_BINDING.eval("@transform = ''")
@@ -13,6 +13,7 @@ describe Rubycfn do
13
13
  description "RSpec Test Stack"
14
14
 
15
15
  resource :rspec_resource_name,
16
+ depends_on: [:foo_bar,"fooBar"],
16
17
  type: "Rspec::Test",
17
18
  update_policy: {
18
19
  "AutoScalingReplacingUpdate": {
@@ -20,6 +21,7 @@ describe Rubycfn do
20
21
  }
21
22
  },
22
23
  amount: 2 do |r|
24
+ r.depends_on [ "barFoo", :bar_foo ]
23
25
  r.property(:name) { "RSpec" }
24
26
  end
25
27
  end
@@ -57,10 +59,18 @@ describe Rubycfn do
57
59
  let(:resource) { resources["RspecResourceName"] }
58
60
  subject { resource }
59
61
 
62
+ it { should have_key "DependsOn" }
60
63
  it { should have_key "Type" }
61
64
  it { should have_key "Properties" }
62
65
  it { should have_key "UpdatePolicy"}
63
66
 
67
+ context "depends_on is rendered correctly" do
68
+ let(:depends_on) { resource["DependsOn"] }
69
+ subject { depends_on }
70
+
71
+ it { should eq ["FooBar", "fooBar", "barFoo", "BarFoo"] }
72
+ end
73
+
64
74
  context "resource type is correct" do
65
75
  let(:type) { resource["Type"] }
66
76
  subject { type }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubycfn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis Vink
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-16 00:00:00.000000000 Z
11
+ date: 2019-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: neatjson