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.
- checksums.yaml +4 -4
- data/.rspec +4 -0
- data/.rubocop.yml +1 -0
- data/Rakefile +1 -1
- data/bin/cloud-templates-runner.rb +5 -0
- data/cloud-templates.gemspec +9 -4
- data/examples/lib/user_directory.rb +0 -10
- data/examples/lib/user_directory/artifacts.rb +8 -0
- data/examples/lib/user_directory/artifacts/catalogized.rb +8 -7
- data/examples/lib/user_directory/artifacts/group.rb +27 -30
- data/examples/lib/user_directory/artifacts/ided.rb +8 -7
- data/examples/lib/user_directory/artifacts/organization.rb +10 -11
- data/examples/lib/user_directory/artifacts/pathed.rb +17 -17
- data/examples/lib/user_directory/artifacts/person.rb +20 -15
- data/examples/lib/user_directory/artifacts/team.rb +26 -21
- data/examples/lib/user_directory/artifacts/unit.rb +15 -17
- data/examples/lib/user_directory/artifacts/user.rb +26 -23
- data/examples/lib/user_directory/render.rb +8 -0
- data/examples/lib/user_directory/render/etc.rb +2 -0
- data/examples/lib/user_directory/render/etc/artifact_view.rb +2 -2
- data/examples/lib/user_directory/render/etc/composite_view.rb +1 -2
- data/examples/lib/user_directory/render/etc/group_view.rb +3 -3
- data/examples/lib/user_directory/render/etc/person_view.rb +2 -2
- data/examples/lib/user_directory/render/etc/registry.rb +4 -6
- data/examples/lib/user_directory/render/etc/user_view.rb +2 -3
- data/examples/lib/user_directory/render/ldap.rb +2 -0
- data/examples/lib/user_directory/render/ldap/artifact_view.rb +3 -4
- data/examples/lib/user_directory/render/ldap/composite_view.rb +3 -4
- data/examples/lib/user_directory/render/ldap/group_view.rb +3 -4
- data/examples/lib/user_directory/render/ldap/organization_view.rb +3 -4
- data/examples/lib/user_directory/render/ldap/person_view.rb +3 -4
- data/examples/lib/user_directory/render/ldap/registry.rb +3 -4
- data/examples/lib/user_directory/render/ldap/unit_view.rb +3 -4
- data/examples/lib/user_directory/render/ldap/user_view.rb +3 -4
- data/examples/lib/user_directory/utils.rb +1 -1
- data/examples/spec/user_directory_spec.rb +24 -25
- data/lib/aws/templates.rb +0 -8
- data/lib/aws/templates/artifact.rb +20 -12
- data/lib/aws/templates/cli.rb +14 -0
- data/lib/aws/templates/cli/formatter.rb +21 -0
- data/lib/aws/templates/cli/formatter/json.rb +20 -0
- data/lib/aws/templates/cli/interface.rb +92 -0
- data/lib/aws/templates/composite.rb +6 -9
- data/lib/aws/templates/exception.rb +8 -0
- data/lib/aws/templates/exception/nested_parameter_exception.rb +19 -0
- data/lib/aws/templates/exception/option_error.rb +14 -0
- data/lib/aws/templates/exception/option_scalar_on_the_way.rb +26 -0
- data/lib/aws/templates/exception/option_should_be_recursive.rb +20 -0
- data/lib/aws/templates/exception/option_value_deleted.rb +22 -0
- data/lib/aws/templates/exception/parameter_already_exist.rb +26 -0
- data/lib/aws/templates/exception/parameter_exception.rb +26 -0
- data/lib/aws/templates/exception/parameter_getter_is_not_defined.rb +23 -0
- data/lib/aws/templates/exception/parameter_method_name_conflict.rb +26 -0
- data/lib/aws/templates/exception/parameter_specification_is_invalid.rb +30 -0
- data/lib/aws/templates/exception/parameter_value_invalid.rb +37 -0
- data/lib/aws/templates/exception/parametrized_dsl_error.rb +14 -0
- data/lib/aws/templates/exception/view_not_found.rb +26 -0
- data/lib/aws/templates/help.rb +43 -0
- data/lib/aws/templates/help/aggregate.rb +74 -0
- data/lib/aws/templates/help/dsl.rb +30 -0
- data/lib/aws/templates/help/provider.rb +15 -0
- data/lib/aws/templates/help/rdoc.rb +105 -0
- data/lib/aws/templates/help/rdoc/artifact.rb +50 -0
- data/lib/aws/templates/help/rdoc/composite.rb +20 -0
- data/lib/aws/templates/help/rdoc/contextualized.rb +12 -0
- data/lib/aws/templates/help/rdoc/contextualized/filter.rb +19 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters.rb +14 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/add.rb +21 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/chain.rb +33 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/copy.rb +23 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/identity.rb +23 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/override.rb +29 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/proxy.rb +28 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/recursive_schema_filter.rb +28 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/remove.rb +21 -0
- data/lib/aws/templates/help/rdoc/contextualized/filters/scoped.rb +29 -0
- data/lib/aws/templates/help/rdoc/contextualized/provider.rb +28 -0
- data/lib/aws/templates/help/rdoc/default.rb +12 -0
- data/lib/aws/templates/help/rdoc/default/definition.rb +89 -0
- data/lib/aws/templates/help/rdoc/default/provider.rb +25 -0
- data/lib/aws/templates/help/rdoc/dsl.rb +20 -0
- data/lib/aws/templates/help/rdoc/inheritable.rb +48 -0
- data/lib/aws/templates/help/rdoc/parametrized.rb +12 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraint.rb +31 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints.rb +14 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints/all_of.rb +39 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints/condition.rb +44 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints/depends_on_value.rb +41 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints/enum.rb +33 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints/matches.rb +27 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints/not_nil.rb +27 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints/requires.rb +33 -0
- data/lib/aws/templates/help/rdoc/parametrized/constraints/satisfies_condition.rb +28 -0
- data/lib/aws/templates/help/rdoc/parametrized/getter.rb +17 -0
- data/lib/aws/templates/help/rdoc/parametrized/getters.rb +14 -0
- data/lib/aws/templates/help/rdoc/parametrized/nested.rb +32 -0
- data/lib/aws/templates/help/rdoc/parametrized/parameter.rb +55 -0
- data/lib/aws/templates/help/rdoc/parametrized/provider.rb +32 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformation.rb +17 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations.rb +14 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_boolean.rb +25 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_chain.rb +34 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_hash.rb +40 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_integer.rb +26 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_list.rb +32 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_module.rb +25 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_object.rb +32 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_rendered.rb +28 -0
- data/lib/aws/templates/help/rdoc/parametrized/transformations/as_string.rb +25 -0
- data/lib/aws/templates/help/rdoc/provider.rb +20 -0
- data/lib/aws/templates/help/rdoc/routing.rb +104 -0
- data/lib/aws/templates/help/rdoc/texting.rb +42 -0
- data/lib/aws/templates/processor.rb +53 -0
- data/lib/aws/templates/processor/handler.rb +104 -0
- data/lib/aws/templates/processor/registry.rb +74 -0
- data/lib/aws/templates/processor/routing.rb +27 -0
- data/lib/aws/templates/render.rb +27 -25
- data/lib/aws/templates/render/basic_view.rb +47 -0
- data/lib/aws/templates/render/utils.rb +14 -0
- data/lib/aws/templates/render/utils/base_type_views.rb +12 -19
- data/lib/aws/templates/render/utils/inspect.rb +2 -4
- data/lib/aws/templates/render/utils/stringify.rb +2 -5
- data/lib/aws/templates/render/view.rb +3 -100
- data/lib/aws/templates/utils.rb +39 -15
- data/lib/aws/templates/utils/artifact_storage.rb +2 -3
- data/lib/aws/templates/utils/{named.rb → as_named.rb} +2 -3
- data/lib/aws/templates/utils/autoload.rb +224 -0
- data/lib/aws/templates/utils/contextualized.rb +8 -17
- data/lib/aws/templates/utils/contextualized/filter.rb +62 -0
- data/lib/aws/templates/utils/contextualized/filter/add.rb +67 -0
- data/lib/aws/templates/utils/contextualized/filter/chain.rb +56 -0
- data/lib/aws/templates/utils/contextualized/filter/copy.rb +38 -0
- data/lib/aws/templates/utils/contextualized/filter/dsl.rb +50 -0
- data/lib/aws/templates/utils/contextualized/filter/identity.rb +45 -0
- data/lib/aws/templates/utils/contextualized/filter/override.rb +62 -0
- data/lib/aws/templates/utils/contextualized/filter/proxy.rb +29 -0
- data/lib/aws/templates/utils/contextualized/filter/recursive_schema_filter.rb +46 -0
- data/lib/aws/templates/utils/contextualized/filter/remove.rb +66 -0
- data/lib/aws/templates/utils/contextualized/filter/scoped.rb +42 -0
- data/lib/aws/templates/utils/contextualized/refinements.rb +51 -0
- data/lib/aws/templates/utils/default.rb +258 -50
- data/lib/aws/templates/utils/dependency.rb +7 -6
- data/lib/aws/templates/utils/dependency/refinements.rb +80 -0
- data/lib/aws/templates/utils/dependent.rb +6 -3
- data/lib/aws/templates/utils/guarded.rb +30 -0
- data/lib/aws/templates/utils/inheritable.rb +21 -16
- data/lib/aws/templates/utils/inspectable.rb +4 -4
- data/lib/aws/templates/utils/late_bound.rb +2 -2
- data/lib/aws/templates/utils/memoized.rb +2 -0
- data/lib/aws/templates/utils/options.rb +49 -35
- data/lib/aws/templates/utils/parametrized.rb +32 -25
- data/lib/aws/templates/utils/parametrized/constraint.rb +95 -0
- data/lib/aws/templates/utils/parametrized/constraint/all_of.rb +51 -0
- data/lib/aws/templates/utils/parametrized/constraint/condition.rb +93 -0
- data/lib/aws/templates/utils/parametrized/constraint/depends_on_value.rb +60 -0
- data/lib/aws/templates/utils/parametrized/constraint/dsl.rb +86 -0
- data/lib/aws/templates/utils/parametrized/constraint/enum.rb +45 -0
- data/lib/aws/templates/utils/parametrized/constraint/matches.rb +44 -0
- data/lib/aws/templates/utils/parametrized/constraint/not_nil.rb +38 -0
- data/lib/aws/templates/utils/parametrized/constraint/requires.rb +54 -0
- data/lib/aws/templates/utils/parametrized/constraint/satisfies_condition.rb +55 -0
- data/lib/aws/templates/utils/parametrized/getter.rb +67 -0
- data/lib/aws/templates/utils/parametrized/getter/as_instance_variable.rb +41 -0
- data/lib/aws/templates/utils/parametrized/getter/as_is.rb +37 -0
- data/lib/aws/templates/utils/parametrized/getter/dsl.rb +62 -0
- data/lib/aws/templates/utils/parametrized/getter/one_of.rb +48 -0
- data/lib/aws/templates/utils/parametrized/getter/path.rb +53 -0
- data/lib/aws/templates/utils/parametrized/getter/value.rb +50 -0
- data/lib/aws/templates/utils/parametrized/nested.rb +9 -16
- data/lib/aws/templates/utils/parametrized/transformation.rb +74 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_boolean.rb +42 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_chain.rb +57 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_hash.rb +89 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_integer.rb +39 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_list.rb +97 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_module.rb +42 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_object.rb +76 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_rendered.rb +100 -0
- data/lib/aws/templates/utils/parametrized/transformation/as_string.rb +39 -0
- data/lib/aws/templates/utils/parametrized/transformation/dsl.rb +94 -0
- data/lib/aws/templates/utils/recursive.rb +22 -0
- data/spec/aws/templates/artifact_spec.rb +10 -10
- data/spec/aws/templates/cli_spec.rb +83 -0
- data/spec/aws/templates/composite_spec.rb +6 -4
- data/spec/aws/templates/help/rdoc/artifact_spec.rb +94 -0
- data/spec/aws/templates/help/rdoc/composite_spec.rb +53 -0
- data/spec/aws/templates/help/rdoc/parametrized/constraints/all_of_spec.rb +17 -0
- data/spec/aws/templates/help/rdoc/parametrized/constraints/depends_on_value_spec.rb +21 -0
- data/spec/aws/templates/help/rdoc/parametrized/constraints/enum_spec.rb +17 -0
- data/spec/aws/templates/help/rdoc/parametrized/constraints/matches_spec.rb +17 -0
- data/spec/aws/templates/help/rdoc/parametrized/constraints/satisfies_condition_spec.rb +17 -0
- data/spec/aws/templates/help/rdoc/parametrized/transformations/as_boolean_spec.rb +17 -0
- data/spec/aws/templates/help/rdoc/parametrized/transformations/as_chain_spec.rb +17 -0
- data/spec/aws/templates/help/rdoc/parametrized/transformations/as_hash_spec.rb +72 -0
- data/spec/aws/templates/help/rdoc/parametrized/transformations/as_integer_spec.rb +17 -0
- data/spec/aws/templates/help/rdoc/parametrized/transformations/as_list_spec.rb +39 -0
- data/spec/aws/templates/help/rdoc/parametrized/transformations/as_module_spec.rb +17 -0
- data/spec/aws/templates/help/rdoc/parametrized/transformations/as_object_spec.rb +38 -0
- data/spec/aws/templates/help/rdoc/parametrized/transformations/as_rendered_spec.rb +17 -0
- data/spec/aws/templates/render/utils/base_type_views_spec.rb +9 -11
- data/spec/aws/templates/render_spec.rb +1 -1
- data/spec/aws/templates/utils/as_named_spec.rb +0 -2
- data/spec/aws/templates/utils/autoload_spec.rb +14 -0
- data/spec/aws/templates/utils/contextualized_spec.rb +5 -5
- data/spec/aws/templates/utils/late_bound_spec.rb +2 -2
- data/spec/aws/templates/utils/parametrized/constraint_spec.rb +8 -10
- data/spec/aws/templates/utils/parametrized/getters_spec.rb +6 -7
- data/spec/aws/templates/utils/parametrized/transformation_spec.rb +3 -6
- data/spec/aws/templates/utils/parametrized_spec.rb +9 -10
- data/spec/aws/templates/utils_spec.rb +18 -0
- data/spec/test_empty/stuff.rb +4 -0
- data/spec/test_empty/stuff/here/test.rb +9 -0
- metadata +235 -19
- data/lib/aws/templates/exceptions.rb +0 -221
- data/lib/aws/templates/render/registry.rb +0 -60
- data/lib/aws/templates/utils/contextualized/filters.rb +0 -437
- data/lib/aws/templates/utils/contextualized/hash.rb +0 -13
- data/lib/aws/templates/utils/contextualized/nil.rb +0 -13
- data/lib/aws/templates/utils/contextualized/proc.rb +0 -13
- data/lib/aws/templates/utils/dependency/enumerable.rb +0 -13
- data/lib/aws/templates/utils/dependency/object.rb +0 -46
- data/lib/aws/templates/utils/parametrized/constraints.rb +0 -423
- data/lib/aws/templates/utils/parametrized/getters.rb +0 -293
- data/lib/aws/templates/utils/parametrized/guarded.rb +0 -32
- 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 '
|
|
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
|
-
|
|
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
|