sparkle_formation 3.0.14 → 3.0.16

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: fdd73df7b8e755e8e36ddd934f51b311edb77ced
4
- data.tar.gz: 3b6af23a25412aaf3bdfeb0a20554265f8f3dfdb
3
+ metadata.gz: 2ff339020395b4fde4837cc5e7deb4001b53ffae
4
+ data.tar.gz: 0dede473ebcec2f710162af551f0a88da821b8cf
5
5
  SHA512:
6
- metadata.gz: 5c97625131264bdad150586a251920c4318c71f4e13b5bddadeff70d4c0e96ba08002c3ba437e71f7adfb83b699a6e031703878305ab751a7446c2372836d4a7
7
- data.tar.gz: 6a2b667da4a2406fa10f33dad57d8e30a160ec87f5d2a024c6301340e23c620bc2d6083d15b6f37f0dbbbcf1d4a07cac3c88bacd061fdae6086607c82b1f9394
6
+ metadata.gz: a7dae3cb305e19d69618541583e6eba0bd472a69db5d0d4d0335cf8469378ac456df131d6c5be9b2b68f2ed01b2394c8aae2c4d8b9021f38cc2e323bb349463a
7
+ data.tar.gz: f6d7bea2bea0e9ae058e3d5a1769fbe286767f90627484d801111823df9d4ac2ad3b2d99d9298799e79d92693bb52ebf3280eb1dfb4c05601259071724da02f4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # v3.0.16
2
+ * Allow data structure arguments in AWS helpers
3
+ * Add AWS sub intrinsic function helper
4
+
1
5
  # v3.0.14
2
6
  * Fix resource lookup helper when using full match
3
7
 
data/README.md CHANGED
@@ -30,8 +30,9 @@ implementation:
30
30
 
31
31
  * [SparkleFormation Library Documentation](http://www.sparkleformation.io/docs/sparkle_formation/)
32
32
 
33
- # Infos
33
+ # Info
34
34
  * Documentation: http://www.sparkleformation.io/docs/sparkle_formation
35
35
  * Repository: https://github.com/sparkleformation/sparkle_formation
36
36
  * Mailing List: https://groups.google.com/forum/#!forum/sparkleformation
37
37
  * IRC: [#sparkleformation @ Freenode](https://webchat.freenode.net/?channels=#sparkleformation)
38
+ * Gitter: [![Join at https://gitter.im/SparkleFormation/sparkleformation](https://badges.gitter.im/SparkleFormation/sparkleformation.svg)](https://gitter.im/SparkleFormation/sparkleformation?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
@@ -63,6 +63,9 @@ class SparkleFormation
63
63
  # @param location [Symbol] :prepend or :append (defaults to :append)
64
64
  # @return [self]
65
65
  def add_component(item, location=:append)
66
+ unless(item.is_a?(Component) || item.is_a?(Override))
67
+ raise TypeError.new("Expecting `Component` or `Override` but received `#{item.class}`")
68
+ end
66
69
  if(item.respond_to?(:key) && component_keys.include?(item.key))
67
70
  # do nothing
68
71
  else
@@ -85,6 +88,9 @@ class SparkleFormation
85
88
  # @param location [Symbol] :prepend or :append (defaults to :append)
86
89
  # @return [self]
87
90
  def add_override(item, location=:append)
91
+ unless(item.is_a?(Override))
92
+ raise TypeError.new("Expecting `Override` but received `#{item.class}`")
93
+ end
88
94
  case location
89
95
  when :append
90
96
  overrides_list.push(item)
@@ -173,7 +179,5 @@ class SparkleFormation
173
179
  end
174
180
 
175
181
  attr_reader :components_list, :overrides_list
176
-
177
182
  end
178
-
179
183
  end
@@ -268,8 +268,6 @@ class SparkleFormation
268
268
  # FunctionStruct for customized terraform functions
269
269
  class TerraformStruct < FunctionStruct
270
270
 
271
- SINGLE_ANCHOR = true
272
-
273
271
  # @return [String] start character(s) used to anchor function call
274
272
  def __anchor_start
275
273
  '${'
@@ -8,6 +8,8 @@ class SparkleFormation
8
8
  # Azure specific resources collection
9
9
  class Azure < Resources
10
10
 
11
+ # Characters to be removed from supplied key on matching
12
+ RESOURCE_TYPE_TR = '/._'
11
13
  # String to split for resource namespacing
12
14
  RESOURCE_TYPE_NAMESPACE_SPLITTER = ['.', '/']
13
15
 
@@ -8,6 +8,8 @@ class SparkleFormation
8
8
  # Google specific resources collection
9
9
  class Google < Resources
10
10
 
11
+ # Characters to be removed from supplied key on matching
12
+ RESOURCE_TYPE_TR = '._'
11
13
  # String to split for resource namespacing
12
14
  RESOURCE_TYPE_NAMESPACE_SPLITTER = ['.']
13
15
 
@@ -12,7 +12,7 @@ class SparkleFormation
12
12
  autoload :Terraform, 'sparkle_formation/resources/terraform'
13
13
 
14
14
  # Characters to be removed from supplied key on matching
15
- RESOURCE_TYPE_TR = '_'
15
+ RESOURCE_TYPE_TR = '_:'
16
16
  # String to split for resource namespacing
17
17
  RESOURCE_TYPE_NAMESPACE_SPLITTER = '::'
18
18
  # Property update conditionals
@@ -90,11 +90,14 @@ class SparkleFormation
90
90
  # @param hash [Hash] metadata information
91
91
  # @return [TrueClass]
92
92
  def register(type, hash)
93
+ unless(hash.is_a?(Hash))
94
+ raise TypeError.new("Expecting `Hash` type but received `#{hash.class}`")
95
+ end
93
96
  unless(class_variable_defined?(:@@registry))
94
97
  @@registry = AttributeStruct.hashish.new
95
98
  end
96
99
  @@registry[base_key] ||= AttributeStruct.hashish.new
97
- @@registry[base_key][type] = hash
100
+ @@registry[base_key][type.to_s] = hash
98
101
  true
99
102
  end
100
103
 
@@ -102,7 +105,7 @@ class SparkleFormation
102
105
  #
103
106
  # @param identifier [String, Symbol] resource identifier
104
107
  # @param key [String, Symbol] specific data
105
- # @return [Hashish]
108
+ # @return [Hashish, NilClass]
106
109
  def resource(identifier, key=nil)
107
110
  res = lookup(identifier)
108
111
  if(key && res)
@@ -117,10 +120,13 @@ class SparkleFormation
117
120
  # @param json_path_or_hash [String, Hashish] path to files or hash
118
121
  # @return [TrueClass]
119
122
  def load(json_path_or_hash)
120
- if(json_path_or_hash.is_a?(String))
123
+ case json_path_or_hash
124
+ when String
121
125
  content = AttributeStruct.hashish.new(MultiJson.load(File.read(json_path_or_hash)))
122
- else
126
+ when Hash
123
127
  content = json_path_or_hash
128
+ else
129
+ raise TypeError.new("Expecting `String` or `Hash` type but received `#{json_path_or_hash.class}`")
124
130
  end
125
131
  content.each do |type, hash|
126
132
  register(type, hash)
@@ -144,7 +150,7 @@ class SparkleFormation
144
150
  result = key
145
151
  else
146
152
  o_key = key
147
- key = key.to_s.tr(self.const_get(:RESOURCE_TYPE_TR), '') # rubocop:disable Style/RedundantSelf
153
+ key = key.to_s.downcase.tr(self.const_get(:RESOURCE_TYPE_TR), '') # rubocop:disable Style/RedundantSelf
148
154
  snake_parts = nil
149
155
  result = @@registry[base_key].keys.detect do |ref|
150
156
  ref = ref.downcase
@@ -27,16 +27,28 @@ class SparkleFormation
27
27
 
28
28
  # Split generator
29
29
  #
30
- # @param string [String] string to split
30
+ # @param string [String, Hash] string to split
31
31
  # @param delimiter [String] delimiter to split string
32
32
  # @return [Hash]
33
33
  def _cf_split(string, delimiter)
34
- __t_stringish(string)
35
- __t_stringish(delimiter)
34
+ __t_stringish(string) unless string.is_a?(Hash)
35
+ __t_stringish(delimiter) unless delimiter.is_a?(Hash)
36
36
  {'Fn::Split' => [delimiter, string]}
37
37
  end
38
38
  alias_method :split!, :_cf_split
39
39
 
40
+ # Sub generator
41
+ #
42
+ # @param string [String, Hash] string to apply substitution
43
+ # @param variables [Hash] key value mappings for substitution
44
+ # @return [Hash]
45
+ def _cf_sub(string, variables)
46
+ __t_hashish(variables)
47
+ {'Fn::Sub' => [string, variables]}
48
+ end
49
+ alias_method :_sub, :_cf_sub
50
+ alias_method :sub!, :_cf_sub
51
+
40
52
  # Ref generator
41
53
  #
42
54
  # @param thing [String, Symbol] reference name
@@ -51,10 +63,10 @@ class SparkleFormation
51
63
 
52
64
  # ValueImport generator
53
65
  #
54
- # @param thing [String, String] value import
66
+ # @param thing [String, Symbol, Hash] value import
55
67
  # @return [Hash]
56
68
  def _cf_value_import(thing)
57
- __t_stringish(thing)
69
+ __t_stringish(thing) unless thing.is_a?(Hash)
58
70
  {'Fn::ImportValue' => __attribute_key(thing)}
59
71
  end
60
72
  alias_method :_import_value, :_cf_value_import
@@ -51,7 +51,7 @@ class SparkleFormation
51
51
  # @param loc [String]
52
52
  # @return [Hash]
53
53
  def _get_file(loc)
54
- __t_string(loc)
54
+ __t_stringish(loc)
55
55
  {'get_file' => loc}
56
56
  end
57
57
  alias_method :_file, :_get_file
@@ -92,7 +92,7 @@ class SparkleFormation
92
92
  # @param value [String, Hash] thing to be hashed
93
93
  # @param algorithm [String] algorithm to use (defaults to 'sha512')
94
94
  def _digest(value, algorithm='sha512')
95
- __t_string(algorithm)
95
+ __t_stringish(algorithm)
96
96
  {'digest' => [algorithm, value]}
97
97
  end
98
98
  alias_method :digest!, :_digest
@@ -129,7 +129,7 @@ class SparkleFormation
129
129
  # @param idx [Numeric]
130
130
  # @return [Hash]
131
131
  def _str_split(splitter, string, idx=nil)
132
- __t_string(splitter)
132
+ __t_stringish(splitter) unless splitter.is_a?(Hash)
133
133
  {'str_split' => [splitter, string, idx].compact}
134
134
  end
135
135
  alias_method :_split, :_str_split
@@ -400,22 +400,29 @@ class SparkleFormation
400
400
  @component_paths = []
401
401
  if(options[:sparkle_collection])
402
402
  @sparkle = options[:sparkle_collection]
403
+ if(options[:sparkle])
404
+ @sparkle.add_sparkle(options[:sparkle])
405
+ end
403
406
  else
404
407
  @sparkle = SparkleCollection.new
405
- @sparkle.set_root(
406
- Sparkle.new(
407
- Smash.new.tap{|h|
408
- s_path = options.fetch(:sparkle_path,
409
- self.class.custom_paths[:sparkle_path]
410
- )
411
- if(s_path)
412
- h[:root] = s_path
413
- else
414
- h[:root] = :none
415
- end
416
- }
408
+ if(options[:sparkle])
409
+ @sparkle.set_root(options[:sparkle])
410
+ else
411
+ @sparkle.set_root(
412
+ Sparkle.new(
413
+ Smash.new.tap{|h|
414
+ s_path = options.fetch(:sparkle_path,
415
+ self.class.custom_paths[:sparkle_path]
416
+ )
417
+ if(s_path)
418
+ h[:root] = s_path
419
+ else
420
+ h[:root] = :none
421
+ end
422
+ }
423
+ )
417
424
  )
418
- )
425
+ end
419
426
  end
420
427
  self.provider = options.fetch(:provider, @parent ? @parent.provider : :aws)
421
428
  if(provider == :aws || !options[:disable_aws_builtins])
@@ -687,10 +694,8 @@ class SparkleFormation
687
694
  seed_self
688
695
 
689
696
  set_compile_time_parameters!
690
- if(provider && SparkleAttribute.const_defined?(camel(provider)))
691
- const = SparkleAttribute.const_get(camel(provider))
692
- struct_class = Class.new(SparkleStruct)
693
- struct_class.include(const)
697
+ if(provider && SparkleStruct.const_defined?(camel(provider)))
698
+ struct_class = SparkleStruct.const_get(camel(provider))
694
699
  struct_name = [SparkleStruct.name, camel(provider)].join('::')
695
700
  struct_class.define_singleton_method(:name){ struct_name }
696
701
  struct_class.define_singleton_method(:to_s){ struct_name }
@@ -6,6 +6,37 @@ class SparkleFormation
6
6
  # SparkleFormation customized AttributeStruct
7
7
  class SparkleStruct < AttributeStruct
8
8
 
9
+ # AWS specific struct
10
+ class Aws < SparkleStruct
11
+ include SparkleAttribute
12
+ include SparkleAttribute::Aws
13
+ end
14
+ # Azure specific struct
15
+ class Azure < SparkleStruct
16
+ include SparkleAttribute
17
+ include SparkleAttribute::Azure
18
+ end
19
+ # Google specific struct
20
+ class Google < SparkleStruct
21
+ include SparkleAttribute
22
+ include SparkleAttribute::Google
23
+ end
24
+ # Heat specific struct
25
+ class Heat < SparkleStruct
26
+ include SparkleAttribute
27
+ include SparkleAttribute::Heat
28
+ end
29
+ # Rackspace specific struct
30
+ class Rackspace < SparkleStruct
31
+ include SparkleAttribute
32
+ include SparkleAttribute::Rackspace
33
+ end
34
+ # Terraform specific struct
35
+ class Terraform < SparkleStruct
36
+ include SparkleAttribute
37
+ include SparkleAttribute::Terraform
38
+ end
39
+
9
40
  include ::SparkleFormation::SparkleAttribute
10
41
  # @!parse include ::SparkleFormation::SparkleAttribute
11
42
  include ::SparkleFormation::Utils::TypeCheckers
@@ -1,5 +1,5 @@
1
1
  # Unicorns and rainbows
2
2
  class SparkleFormation
3
3
  # Current library version
4
- VERSION = Gem::Version.new('3.0.14')
4
+ VERSION = Gem::Version.new('3.0.16')
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sparkle_formation
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.14
4
+ version: 3.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-17 00:00:00.000000000 Z
11
+ date: 2017-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: attribute_struct