cloud-templates 0.2.0 → 0.3.0

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.
Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +4 -0
  3. data/.rubocop.yml +1 -0
  4. data/Rakefile +1 -1
  5. data/bin/cloud-templates-runner.rb +5 -0
  6. data/cloud-templates.gemspec +9 -4
  7. data/examples/lib/user_directory.rb +0 -10
  8. data/examples/lib/user_directory/artifacts.rb +8 -0
  9. data/examples/lib/user_directory/artifacts/catalogized.rb +8 -7
  10. data/examples/lib/user_directory/artifacts/group.rb +27 -30
  11. data/examples/lib/user_directory/artifacts/ided.rb +8 -7
  12. data/examples/lib/user_directory/artifacts/organization.rb +10 -11
  13. data/examples/lib/user_directory/artifacts/pathed.rb +17 -17
  14. data/examples/lib/user_directory/artifacts/person.rb +20 -15
  15. data/examples/lib/user_directory/artifacts/team.rb +26 -21
  16. data/examples/lib/user_directory/artifacts/unit.rb +15 -17
  17. data/examples/lib/user_directory/artifacts/user.rb +26 -23
  18. data/examples/lib/user_directory/render.rb +8 -0
  19. data/examples/lib/user_directory/render/etc.rb +2 -0
  20. data/examples/lib/user_directory/render/etc/artifact_view.rb +2 -2
  21. data/examples/lib/user_directory/render/etc/composite_view.rb +1 -2
  22. data/examples/lib/user_directory/render/etc/group_view.rb +3 -3
  23. data/examples/lib/user_directory/render/etc/person_view.rb +2 -2
  24. data/examples/lib/user_directory/render/etc/registry.rb +4 -6
  25. data/examples/lib/user_directory/render/etc/user_view.rb +2 -3
  26. data/examples/lib/user_directory/render/ldap.rb +2 -0
  27. data/examples/lib/user_directory/render/ldap/artifact_view.rb +3 -4
  28. data/examples/lib/user_directory/render/ldap/composite_view.rb +3 -4
  29. data/examples/lib/user_directory/render/ldap/group_view.rb +3 -4
  30. data/examples/lib/user_directory/render/ldap/organization_view.rb +3 -4
  31. data/examples/lib/user_directory/render/ldap/person_view.rb +3 -4
  32. data/examples/lib/user_directory/render/ldap/registry.rb +3 -4
  33. data/examples/lib/user_directory/render/ldap/unit_view.rb +3 -4
  34. data/examples/lib/user_directory/render/ldap/user_view.rb +3 -4
  35. data/examples/lib/user_directory/utils.rb +1 -1
  36. data/examples/spec/user_directory_spec.rb +24 -25
  37. data/lib/aws/templates.rb +0 -8
  38. data/lib/aws/templates/artifact.rb +20 -12
  39. data/lib/aws/templates/cli.rb +14 -0
  40. data/lib/aws/templates/cli/formatter.rb +21 -0
  41. data/lib/aws/templates/cli/formatter/json.rb +20 -0
  42. data/lib/aws/templates/cli/interface.rb +92 -0
  43. data/lib/aws/templates/composite.rb +6 -9
  44. data/lib/aws/templates/exception.rb +8 -0
  45. data/lib/aws/templates/exception/nested_parameter_exception.rb +19 -0
  46. data/lib/aws/templates/exception/option_error.rb +14 -0
  47. data/lib/aws/templates/exception/option_scalar_on_the_way.rb +26 -0
  48. data/lib/aws/templates/exception/option_should_be_recursive.rb +20 -0
  49. data/lib/aws/templates/exception/option_value_deleted.rb +22 -0
  50. data/lib/aws/templates/exception/parameter_already_exist.rb +26 -0
  51. data/lib/aws/templates/exception/parameter_exception.rb +26 -0
  52. data/lib/aws/templates/exception/parameter_getter_is_not_defined.rb +23 -0
  53. data/lib/aws/templates/exception/parameter_method_name_conflict.rb +26 -0
  54. data/lib/aws/templates/exception/parameter_specification_is_invalid.rb +30 -0
  55. data/lib/aws/templates/exception/parameter_value_invalid.rb +37 -0
  56. data/lib/aws/templates/exception/parametrized_dsl_error.rb +14 -0
  57. data/lib/aws/templates/exception/view_not_found.rb +26 -0
  58. data/lib/aws/templates/help.rb +43 -0
  59. data/lib/aws/templates/help/aggregate.rb +74 -0
  60. data/lib/aws/templates/help/dsl.rb +30 -0
  61. data/lib/aws/templates/help/provider.rb +15 -0
  62. data/lib/aws/templates/help/rdoc.rb +105 -0
  63. data/lib/aws/templates/help/rdoc/artifact.rb +50 -0
  64. data/lib/aws/templates/help/rdoc/composite.rb +20 -0
  65. data/lib/aws/templates/help/rdoc/contextualized.rb +12 -0
  66. data/lib/aws/templates/help/rdoc/contextualized/filter.rb +19 -0
  67. data/lib/aws/templates/help/rdoc/contextualized/filters.rb +14 -0
  68. data/lib/aws/templates/help/rdoc/contextualized/filters/add.rb +21 -0
  69. data/lib/aws/templates/help/rdoc/contextualized/filters/chain.rb +33 -0
  70. data/lib/aws/templates/help/rdoc/contextualized/filters/copy.rb +23 -0
  71. data/lib/aws/templates/help/rdoc/contextualized/filters/identity.rb +23 -0
  72. data/lib/aws/templates/help/rdoc/contextualized/filters/override.rb +29 -0
  73. data/lib/aws/templates/help/rdoc/contextualized/filters/proxy.rb +28 -0
  74. data/lib/aws/templates/help/rdoc/contextualized/filters/recursive_schema_filter.rb +28 -0
  75. data/lib/aws/templates/help/rdoc/contextualized/filters/remove.rb +21 -0
  76. data/lib/aws/templates/help/rdoc/contextualized/filters/scoped.rb +29 -0
  77. data/lib/aws/templates/help/rdoc/contextualized/provider.rb +28 -0
  78. data/lib/aws/templates/help/rdoc/default.rb +12 -0
  79. data/lib/aws/templates/help/rdoc/default/definition.rb +89 -0
  80. data/lib/aws/templates/help/rdoc/default/provider.rb +25 -0
  81. data/lib/aws/templates/help/rdoc/dsl.rb +20 -0
  82. data/lib/aws/templates/help/rdoc/inheritable.rb +48 -0
  83. data/lib/aws/templates/help/rdoc/parametrized.rb +12 -0
  84. data/lib/aws/templates/help/rdoc/parametrized/constraint.rb +31 -0
  85. data/lib/aws/templates/help/rdoc/parametrized/constraints.rb +14 -0
  86. data/lib/aws/templates/help/rdoc/parametrized/constraints/all_of.rb +39 -0
  87. data/lib/aws/templates/help/rdoc/parametrized/constraints/condition.rb +44 -0
  88. data/lib/aws/templates/help/rdoc/parametrized/constraints/depends_on_value.rb +41 -0
  89. data/lib/aws/templates/help/rdoc/parametrized/constraints/enum.rb +33 -0
  90. data/lib/aws/templates/help/rdoc/parametrized/constraints/matches.rb +27 -0
  91. data/lib/aws/templates/help/rdoc/parametrized/constraints/not_nil.rb +27 -0
  92. data/lib/aws/templates/help/rdoc/parametrized/constraints/requires.rb +33 -0
  93. data/lib/aws/templates/help/rdoc/parametrized/constraints/satisfies_condition.rb +28 -0
  94. data/lib/aws/templates/help/rdoc/parametrized/getter.rb +17 -0
  95. data/lib/aws/templates/help/rdoc/parametrized/getters.rb +14 -0
  96. data/lib/aws/templates/help/rdoc/parametrized/nested.rb +32 -0
  97. data/lib/aws/templates/help/rdoc/parametrized/parameter.rb +55 -0
  98. data/lib/aws/templates/help/rdoc/parametrized/provider.rb +32 -0
  99. data/lib/aws/templates/help/rdoc/parametrized/transformation.rb +17 -0
  100. data/lib/aws/templates/help/rdoc/parametrized/transformations.rb +14 -0
  101. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_boolean.rb +25 -0
  102. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_chain.rb +34 -0
  103. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_hash.rb +40 -0
  104. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_integer.rb +26 -0
  105. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_list.rb +32 -0
  106. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_module.rb +25 -0
  107. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_object.rb +32 -0
  108. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_rendered.rb +28 -0
  109. data/lib/aws/templates/help/rdoc/parametrized/transformations/as_string.rb +25 -0
  110. data/lib/aws/templates/help/rdoc/provider.rb +20 -0
  111. data/lib/aws/templates/help/rdoc/routing.rb +104 -0
  112. data/lib/aws/templates/help/rdoc/texting.rb +42 -0
  113. data/lib/aws/templates/processor.rb +53 -0
  114. data/lib/aws/templates/processor/handler.rb +104 -0
  115. data/lib/aws/templates/processor/registry.rb +74 -0
  116. data/lib/aws/templates/processor/routing.rb +27 -0
  117. data/lib/aws/templates/render.rb +27 -25
  118. data/lib/aws/templates/render/basic_view.rb +47 -0
  119. data/lib/aws/templates/render/utils.rb +14 -0
  120. data/lib/aws/templates/render/utils/base_type_views.rb +12 -19
  121. data/lib/aws/templates/render/utils/inspect.rb +2 -4
  122. data/lib/aws/templates/render/utils/stringify.rb +2 -5
  123. data/lib/aws/templates/render/view.rb +3 -100
  124. data/lib/aws/templates/utils.rb +39 -15
  125. data/lib/aws/templates/utils/artifact_storage.rb +2 -3
  126. data/lib/aws/templates/utils/{named.rb → as_named.rb} +2 -3
  127. data/lib/aws/templates/utils/autoload.rb +224 -0
  128. data/lib/aws/templates/utils/contextualized.rb +8 -17
  129. data/lib/aws/templates/utils/contextualized/filter.rb +62 -0
  130. data/lib/aws/templates/utils/contextualized/filter/add.rb +67 -0
  131. data/lib/aws/templates/utils/contextualized/filter/chain.rb +56 -0
  132. data/lib/aws/templates/utils/contextualized/filter/copy.rb +38 -0
  133. data/lib/aws/templates/utils/contextualized/filter/dsl.rb +50 -0
  134. data/lib/aws/templates/utils/contextualized/filter/identity.rb +45 -0
  135. data/lib/aws/templates/utils/contextualized/filter/override.rb +62 -0
  136. data/lib/aws/templates/utils/contextualized/filter/proxy.rb +29 -0
  137. data/lib/aws/templates/utils/contextualized/filter/recursive_schema_filter.rb +46 -0
  138. data/lib/aws/templates/utils/contextualized/filter/remove.rb +66 -0
  139. data/lib/aws/templates/utils/contextualized/filter/scoped.rb +42 -0
  140. data/lib/aws/templates/utils/contextualized/refinements.rb +51 -0
  141. data/lib/aws/templates/utils/default.rb +258 -50
  142. data/lib/aws/templates/utils/dependency.rb +7 -6
  143. data/lib/aws/templates/utils/dependency/refinements.rb +80 -0
  144. data/lib/aws/templates/utils/dependent.rb +6 -3
  145. data/lib/aws/templates/utils/guarded.rb +30 -0
  146. data/lib/aws/templates/utils/inheritable.rb +21 -16
  147. data/lib/aws/templates/utils/inspectable.rb +4 -4
  148. data/lib/aws/templates/utils/late_bound.rb +2 -2
  149. data/lib/aws/templates/utils/memoized.rb +2 -0
  150. data/lib/aws/templates/utils/options.rb +49 -35
  151. data/lib/aws/templates/utils/parametrized.rb +32 -25
  152. data/lib/aws/templates/utils/parametrized/constraint.rb +95 -0
  153. data/lib/aws/templates/utils/parametrized/constraint/all_of.rb +51 -0
  154. data/lib/aws/templates/utils/parametrized/constraint/condition.rb +93 -0
  155. data/lib/aws/templates/utils/parametrized/constraint/depends_on_value.rb +60 -0
  156. data/lib/aws/templates/utils/parametrized/constraint/dsl.rb +86 -0
  157. data/lib/aws/templates/utils/parametrized/constraint/enum.rb +45 -0
  158. data/lib/aws/templates/utils/parametrized/constraint/matches.rb +44 -0
  159. data/lib/aws/templates/utils/parametrized/constraint/not_nil.rb +38 -0
  160. data/lib/aws/templates/utils/parametrized/constraint/requires.rb +54 -0
  161. data/lib/aws/templates/utils/parametrized/constraint/satisfies_condition.rb +55 -0
  162. data/lib/aws/templates/utils/parametrized/getter.rb +67 -0
  163. data/lib/aws/templates/utils/parametrized/getter/as_instance_variable.rb +41 -0
  164. data/lib/aws/templates/utils/parametrized/getter/as_is.rb +37 -0
  165. data/lib/aws/templates/utils/parametrized/getter/dsl.rb +62 -0
  166. data/lib/aws/templates/utils/parametrized/getter/one_of.rb +48 -0
  167. data/lib/aws/templates/utils/parametrized/getter/path.rb +53 -0
  168. data/lib/aws/templates/utils/parametrized/getter/value.rb +50 -0
  169. data/lib/aws/templates/utils/parametrized/nested.rb +9 -16
  170. data/lib/aws/templates/utils/parametrized/transformation.rb +74 -0
  171. data/lib/aws/templates/utils/parametrized/transformation/as_boolean.rb +42 -0
  172. data/lib/aws/templates/utils/parametrized/transformation/as_chain.rb +57 -0
  173. data/lib/aws/templates/utils/parametrized/transformation/as_hash.rb +89 -0
  174. data/lib/aws/templates/utils/parametrized/transformation/as_integer.rb +39 -0
  175. data/lib/aws/templates/utils/parametrized/transformation/as_list.rb +97 -0
  176. data/lib/aws/templates/utils/parametrized/transformation/as_module.rb +42 -0
  177. data/lib/aws/templates/utils/parametrized/transformation/as_object.rb +76 -0
  178. data/lib/aws/templates/utils/parametrized/transformation/as_rendered.rb +100 -0
  179. data/lib/aws/templates/utils/parametrized/transformation/as_string.rb +39 -0
  180. data/lib/aws/templates/utils/parametrized/transformation/dsl.rb +94 -0
  181. data/lib/aws/templates/utils/recursive.rb +22 -0
  182. data/spec/aws/templates/artifact_spec.rb +10 -10
  183. data/spec/aws/templates/cli_spec.rb +83 -0
  184. data/spec/aws/templates/composite_spec.rb +6 -4
  185. data/spec/aws/templates/help/rdoc/artifact_spec.rb +94 -0
  186. data/spec/aws/templates/help/rdoc/composite_spec.rb +53 -0
  187. data/spec/aws/templates/help/rdoc/parametrized/constraints/all_of_spec.rb +17 -0
  188. data/spec/aws/templates/help/rdoc/parametrized/constraints/depends_on_value_spec.rb +21 -0
  189. data/spec/aws/templates/help/rdoc/parametrized/constraints/enum_spec.rb +17 -0
  190. data/spec/aws/templates/help/rdoc/parametrized/constraints/matches_spec.rb +17 -0
  191. data/spec/aws/templates/help/rdoc/parametrized/constraints/satisfies_condition_spec.rb +17 -0
  192. data/spec/aws/templates/help/rdoc/parametrized/transformations/as_boolean_spec.rb +17 -0
  193. data/spec/aws/templates/help/rdoc/parametrized/transformations/as_chain_spec.rb +17 -0
  194. data/spec/aws/templates/help/rdoc/parametrized/transformations/as_hash_spec.rb +72 -0
  195. data/spec/aws/templates/help/rdoc/parametrized/transformations/as_integer_spec.rb +17 -0
  196. data/spec/aws/templates/help/rdoc/parametrized/transformations/as_list_spec.rb +39 -0
  197. data/spec/aws/templates/help/rdoc/parametrized/transformations/as_module_spec.rb +17 -0
  198. data/spec/aws/templates/help/rdoc/parametrized/transformations/as_object_spec.rb +38 -0
  199. data/spec/aws/templates/help/rdoc/parametrized/transformations/as_rendered_spec.rb +17 -0
  200. data/spec/aws/templates/render/utils/base_type_views_spec.rb +9 -11
  201. data/spec/aws/templates/render_spec.rb +1 -1
  202. data/spec/aws/templates/utils/as_named_spec.rb +0 -2
  203. data/spec/aws/templates/utils/autoload_spec.rb +14 -0
  204. data/spec/aws/templates/utils/contextualized_spec.rb +5 -5
  205. data/spec/aws/templates/utils/late_bound_spec.rb +2 -2
  206. data/spec/aws/templates/utils/parametrized/constraint_spec.rb +8 -10
  207. data/spec/aws/templates/utils/parametrized/getters_spec.rb +6 -7
  208. data/spec/aws/templates/utils/parametrized/transformation_spec.rb +3 -6
  209. data/spec/aws/templates/utils/parametrized_spec.rb +9 -10
  210. data/spec/aws/templates/utils_spec.rb +18 -0
  211. data/spec/test_empty/stuff.rb +4 -0
  212. data/spec/test_empty/stuff/here/test.rb +9 -0
  213. metadata +235 -19
  214. data/lib/aws/templates/exceptions.rb +0 -221
  215. data/lib/aws/templates/render/registry.rb +0 -60
  216. data/lib/aws/templates/utils/contextualized/filters.rb +0 -437
  217. data/lib/aws/templates/utils/contextualized/hash.rb +0 -13
  218. data/lib/aws/templates/utils/contextualized/nil.rb +0 -13
  219. data/lib/aws/templates/utils/contextualized/proc.rb +0 -13
  220. data/lib/aws/templates/utils/dependency/enumerable.rb +0 -13
  221. data/lib/aws/templates/utils/dependency/object.rb +0 -46
  222. data/lib/aws/templates/utils/parametrized/constraints.rb +0 -423
  223. data/lib/aws/templates/utils/parametrized/getters.rb +0 -293
  224. data/lib/aws/templates/utils/parametrized/guarded.rb +0 -32
  225. data/lib/aws/templates/utils/parametrized/transformations.rb +0 -652
@@ -0,0 +1,48 @@
1
+ require 'aws/templates/utils'
2
+
3
+ module Aws
4
+ module Templates
5
+ module Utils
6
+ module Parametrized
7
+ class Getter
8
+ ##
9
+ # Pick one of non-nil values returned by nested getters
10
+ #
11
+ # In general it plays the same role as || operator in Ruby. It
12
+ # just picks first non-nil value returned by a list of getters
13
+ #
14
+ # === Example
15
+ #
16
+ # class Piece
17
+ # include Aws::Templates::Utils::Parametrized
18
+ #
19
+ # parameter :param1, :getter => one_of(
20
+ # path(:a, :b),
21
+ # path(:b, :c)
22
+ # )
23
+ # end
24
+ #
25
+ # i = Piece.new( :a => { :b => 3 } )
26
+ # i.param1 # => 3
27
+ # i = Piece.new( :b => { :c => 4 } )
28
+ # i.param1 # => 4
29
+ class OneOf < self
30
+ attr_reader :getters
31
+
32
+ def initialize(getters)
33
+ @getters = getters
34
+ end
35
+
36
+ protected
37
+
38
+ def get(parameter, instance)
39
+ getters.lazy
40
+ .map { |g| instance.instance_exec(parameter, &g) }
41
+ .find { |v| !v.nil? }
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,53 @@
1
+ require 'aws/templates/utils'
2
+
3
+ module Aws
4
+ module Templates
5
+ module Utils
6
+ module Parametrized
7
+ class Getter
8
+ ##
9
+ # Lookup value in options by path
10
+ #
11
+ # Looks up value from options attribute by specified path. The path
12
+ # can be either statically specified or a block can be provided.
13
+ # The block shouldn't have parameters and should return an array
14
+ # containing path. The block will be executed in the instance context.
15
+ #
16
+ # === Example
17
+ #
18
+ # class Piece
19
+ # include Aws::Templates::Utils::Parametrized
20
+ #
21
+ # parameter :param1, :getter => path(:a, :b)
22
+ # end
23
+ #
24
+ # i = Piece.new(:a => { :b => 3 })
25
+ # i.param1 # => 3
26
+ class Path < self
27
+ attr_reader :path
28
+
29
+ def initialize(path)
30
+ unless path.respond_to?(:to_proc) || path.respond_to?(:to_a)
31
+ raise ArgumentError.new(
32
+ "Path can be either array or Proc: #{path.inspect}"
33
+ )
34
+ end
35
+
36
+ @path = path
37
+ end
38
+
39
+ protected
40
+
41
+ def get(_, instance)
42
+ if path.respond_to?(:to_proc)
43
+ instance.options[*instance.instance_eval(&path)]
44
+ elsif path.respond_to?(:to_a)
45
+ instance.options[*path]
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,50 @@
1
+ require 'aws/templates/utils'
2
+
3
+ module Aws
4
+ module Templates
5
+ module Utils
6
+ module Parametrized
7
+ class Getter
8
+ ##
9
+ # Calculate value
10
+ #
11
+ # If a block is specified, it will be executed in the instance
12
+ # context and return will be used as parameter value. If a value
13
+ # specified then it will be used as parameter value instead.
14
+ #
15
+ # === Example
16
+ #
17
+ # class Piece
18
+ # include Aws::Templates::Utils::Parametrized
19
+ #
20
+ # parameter :param1, :getter => value(1)
21
+ # parameter :param2, :getter => value { options[:z] + 1 }
22
+ # end
23
+ #
24
+ # i = Piece.new(:z => 3)
25
+ # i.param2 # => 4
26
+ # i.param1 # => 1
27
+ class Value < self
28
+ attr_reader :calculation
29
+
30
+ def initialize(calculation)
31
+ @calculation = calculation
32
+ end
33
+
34
+ protected
35
+
36
+ def get(_, instance)
37
+ if calculation.respond_to?(:to_hash)
38
+ calculation
39
+ elsif calculation.respond_to?(:to_proc)
40
+ instance.instance_eval(&calculation)
41
+ else
42
+ calculation
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,9 +1,4 @@
1
- require 'set'
2
- require 'aws/templates/utils/default'
3
- require 'aws/templates/utils/parametrized'
4
- require 'aws/templates/utils/parametrized/getters'
5
- require 'aws/templates/utils/dependent'
6
- require 'aws/templates/utils/options'
1
+ require 'aws/templates/utils'
7
2
 
8
3
  module Aws
9
4
  module Templates
@@ -14,14 +9,17 @@ module Aws
14
9
  #
15
10
  # Wraps hash or object into "parametrized" instance. Used for nested parameter definitions.
16
11
  class Nested
12
+ using Utils::Recursive
13
+ using Utils::Dependency::Refinements
14
+
17
15
  include Parametrized
18
- include Default
19
- include Dependent
16
+ include Utils::Default
17
+ include Utils::Dependent
20
18
 
21
19
  attr_reader :options
22
20
 
23
21
  def self.getter
24
- as_is
22
+ Parametrized::Getter::AsIs.instance
25
23
  end
26
24
 
27
25
  def self.create_class(scope)
@@ -58,20 +56,15 @@ module Aws
58
56
  attr_reader :parent
59
57
 
60
58
  def dependencies
61
- @dependencies ||= Set.new
59
+ @dependencies ||= ::Set.new
62
60
  end
63
61
 
64
62
  protected
65
63
 
66
64
  def initialize(parent, obj)
67
- unless obj.respond_to?(:to_recursive)
68
- raise "Value #{obj} can't be transformed " \
69
- 'into a recursive container'
70
- end
71
-
72
65
  @parent = parent
73
66
  depends_on(obj) if obj.dependency?
74
- @options = Options.new(defaults, obj.to_recursive)
67
+ @options = Utils::Options.new(defaults, obj.to_recursive)
75
68
  end
76
69
  end
77
70
  end
@@ -0,0 +1,74 @@
1
+ require 'aws/templates/utils'
2
+
3
+ module Aws
4
+ module Templates
5
+ module Utils
6
+ module Parametrized
7
+ ##
8
+ # Transformation functor class
9
+ #
10
+ # A transformation is a Proc accepting input value and providing output
11
+ # value which is expected to be a transformation of the input.
12
+ # The proc is executed in instance context so instance methods can
13
+ # be used for calculation.
14
+ #
15
+ # The class implements functor pattern through to_proc method and
16
+ # closure. Essentially, all transformations can be used everywhere where
17
+ # a block is expected.
18
+ #
19
+ # It provides protected method transform which should be overriden in
20
+ # all concrete transformation classes.
21
+ class Transformation
22
+ ##
23
+ # Creates closure with transformation invocation
24
+ #
25
+ # It's an interface method required for Transformation to expose
26
+ # functor properties. It encloses invocation of Transformation
27
+ # transform_wrapper method into a closure. The closure itself is
28
+ # executed in the context of Parametrized instance which provides
29
+ # proper set "self" variable.
30
+ #
31
+ # The closure itself accepts 2 parameters:
32
+ # * +parameter+ - the Parameter object which the transformation
33
+ # will be performed for
34
+ # * +value+ - parameter value to be transformed
35
+ # ...where instance is assumed from self
36
+ def to_proc
37
+ transform = self
38
+
39
+ lambda do |parameter, value|
40
+ transform.transform_wrapper(parameter, value, self)
41
+ end
42
+ end
43
+
44
+ ##
45
+ # Wraps transformation-dependent method
46
+ #
47
+ # It wraps constraint-dependent "transform" method into a rescue block
48
+ # to standardize exception type and information provided by failed
49
+ # transformation calculation
50
+ # * +parameter+ - the Parameter object which the transformation will
51
+ # be performed for
52
+ # * +value+ - parameter value to be transformed
53
+ # * +instance+ - the instance value is transform
54
+ def transform_wrapper(parameter, value, instance)
55
+ transform(parameter, value, instance)
56
+ rescue StandardError
57
+ raise Templates::Exception::NestedParameterException.new(parameter)
58
+ end
59
+
60
+ protected
61
+
62
+ ##
63
+ # Transform method
64
+ #
65
+ # * +parameter+ - the Parameter object which the transformation is
66
+ # performed for
67
+ # * +value+ - parameter value to be transformed
68
+ # * +instance+ - the instance value is transform
69
+ def transform(parameter, value, instance); end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,42 @@
1
+ require 'aws/templates/utils'
2
+
3
+ module Aws
4
+ module Templates
5
+ module Utils
6
+ module Parametrized
7
+ class Transformation
8
+ ##
9
+ # Convert input into boolean
10
+ #
11
+ # Input value can be anything implementing :to_s method. Value considered false if it is:
12
+ # * +'false' as a string+
13
+ # * +FalseClass+
14
+ # Otherwise, value is true. If value is nil, it won't be replaced by "false"
15
+ #
16
+ # === Example
17
+ #
18
+ # class Piece
19
+ # include Aws::Templates::Utils::Parametrized
20
+ #
21
+ # parameter :param, :transform => as_boolean
22
+ # end
23
+ #
24
+ # i = Piece.new
25
+ # i.param # => false
26
+ # i = Piece.new(:param => 0)
27
+ # i.param # => true
28
+ class AsBoolean < self
29
+ include ::Singleton
30
+
31
+ protected
32
+
33
+ def transform(_, value, _)
34
+ return if value.nil?
35
+ !value.to_s.casecmp('false').zero?
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,57 @@
1
+ require 'aws/templates/utils'
2
+
3
+ module Aws
4
+ module Templates
5
+ module Utils
6
+ module Parametrized
7
+ class Transformation
8
+ ##
9
+ # Apply several transformation sequentially
10
+ #
11
+ # Useful when a few transformations need to be applied to a single value to get
12
+ # the final result
13
+ #
14
+ # === Example
15
+ #
16
+ # class Piece
17
+ # include Aws::Templates::Utils::Parametrized
18
+ #
19
+ # parameter :param,
20
+ # transform: as_chain(
21
+ # as_hash,
22
+ # as_object(Aws::Templates::Utils::AsNamed)
23
+ # )
24
+ # end
25
+ #
26
+ # i = Piece.new(param: [:name, 'Rex'])
27
+ # i.param.name # => 'Rex'
28
+ class AsChain < self
29
+ attr_reader :components
30
+
31
+ def initialize(components)
32
+ @components = _check_components(components)
33
+ end
34
+
35
+ protected
36
+
37
+ def transform(parameter, value, instance)
38
+ return if value.nil?
39
+ components.inject(value) { |acc, elem| instance.instance_exec(parameter, acc, &elem) }
40
+ end
41
+
42
+ private
43
+
44
+ def _check_components(components)
45
+ result = components.to_a
46
+
47
+ invalid_components = result.reject { |component| component.respond_to?(:to_proc) }
48
+ raise "Invalid components: #{invalid_components}" unless invalid_components.empty?
49
+
50
+ result
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,89 @@
1
+ require 'aws/templates/utils'
2
+
3
+ module Aws
4
+ module Templates
5
+ module Utils
6
+ module Parametrized
7
+ class Transformation
8
+ ##
9
+ # Convert input into hash
10
+ #
11
+ # Input value can be anything implementing :to_hash method.
12
+ #
13
+ # === Example
14
+ #
15
+ # class Piece
16
+ # include Aws::Templates::Utils::Parametrized
17
+ #
18
+ # parameter :param, :transform => as_hash
19
+ # parameter :param2,
20
+ # transform: as_hash {
21
+ # value name: :number,
22
+ # description: 'Number',
23
+ # constraint: not_nil,
24
+ # transform: as_integer
25
+ # }
26
+ # end
27
+ #
28
+ # i = Piece.new
29
+ # i.param # => nil
30
+ # i = Piece.new(:param => [[1,2]])
31
+ # i.param # => {1=>2}
32
+ # i = Piece.new(:param2 => [[1,'3']])
33
+ # i.param # => {1=>3}
34
+ class AsHash < self
35
+ include Parametrized::ClassScope
36
+
37
+ attr_reader :key_parameter
38
+ attr_reader :value_parameter
39
+
40
+ def key(opts)
41
+ @key_parameter = _create_parameter(opts)
42
+ end
43
+
44
+ def value(opts)
45
+ @value_parameter = _create_parameter(opts)
46
+ end
47
+
48
+ def initialize(klass = nil, &blk)
49
+ @klass = klass
50
+ instance_eval(&blk) if blk
51
+ end
52
+
53
+ protected
54
+
55
+ def transform(_, value, instance)
56
+ return if value.nil?
57
+
58
+ Hash[
59
+ Hash[value].map do |k, v|
60
+ [
61
+ _process_value(@key_parameter, instance, k),
62
+ _process_value(@value_parameter, instance, v)
63
+ ]
64
+ end
65
+ ]
66
+ end
67
+
68
+ def _process_value(parameter, instance, value)
69
+ return value if parameter.nil?
70
+ parameter.process_value(instance, value)
71
+ end
72
+
73
+ private
74
+
75
+ def _create_parameter(opts)
76
+ Parametrized::Parameter.new(
77
+ opts[:name],
78
+ @klass,
79
+ description: opts[:description],
80
+ transform: opts[:transform],
81
+ constraint: opts[:constraint]
82
+ )
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end