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,37 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
module Exception
|
|
6
|
+
##
|
|
7
|
+
# A value failed constraints
|
|
8
|
+
class ParameterValueInvalid < ParameterException
|
|
9
|
+
attr_reader :value
|
|
10
|
+
attr_reader :object
|
|
11
|
+
|
|
12
|
+
def initialize(target_parameter, target_object, target_value)
|
|
13
|
+
@value = target_value
|
|
14
|
+
@object = target_object
|
|
15
|
+
super(
|
|
16
|
+
target_parameter,
|
|
17
|
+
message_text(target_parameter, target_object, target_value)
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def message_text(target_parameter, target_object, target_value)
|
|
24
|
+
message = "Value '(#{target_value.inspect})' violates constraints specified for " \
|
|
25
|
+
"#{target_parameter.name} (#{target_parameter.description}) in " \
|
|
26
|
+
"#{target_parameter.klass}"
|
|
27
|
+
|
|
28
|
+
unless target_object.class == target_parameter.klass
|
|
29
|
+
message += " and inherited by #{target_object.class}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
message
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
module Exception
|
|
6
|
+
##
|
|
7
|
+
# Parameter definition exception
|
|
8
|
+
#
|
|
9
|
+
# Meta-programming exception related to Parametrized DSL
|
|
10
|
+
class ParametrizedDSLError < StandardError
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
module Exception
|
|
6
|
+
##
|
|
7
|
+
# View was not found for the object
|
|
8
|
+
#
|
|
9
|
+
# View map was checked and there is no appropriate view class
|
|
10
|
+
# for the object class found in the registry.
|
|
11
|
+
class ViewNotFound < RuntimeError
|
|
12
|
+
# Instance of the object class render lookup was performed for
|
|
13
|
+
attr_reader :instance
|
|
14
|
+
|
|
15
|
+
def message
|
|
16
|
+
"Can't find any view for #{instance.inspect} of class #{instance.class}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def initialize(target_instance)
|
|
20
|
+
super()
|
|
21
|
+
@instance = target_instance
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
##
|
|
6
|
+
# Abstract help generator
|
|
7
|
+
#
|
|
8
|
+
# Implements basic functionality which is needed for programmatic help generation.
|
|
9
|
+
# Namely:
|
|
10
|
+
# * Module/entity class lookup
|
|
11
|
+
# * Final formatting
|
|
12
|
+
module Help
|
|
13
|
+
include Templates::Processor
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# Generate help for the entity
|
|
17
|
+
def process(entity, params = nil)
|
|
18
|
+
ancestors_list = entity.is_a?(::Module) ? entity.ancestors : entity.class.ancestors
|
|
19
|
+
ancestor = ancestors_list.find { |mod| handler?(mod) }
|
|
20
|
+
return unless ancestor
|
|
21
|
+
|
|
22
|
+
handler_for(ancestor).new(entity, params).provide
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# Generate help structure and format it
|
|
27
|
+
#
|
|
28
|
+
# It returns ready-to-be-displayed blob in specific format. Essentially, it processes entity
|
|
29
|
+
# and then formats the output of the processing.
|
|
30
|
+
def show(entity, params = nil)
|
|
31
|
+
format(process(entity, params), params)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
# Formatting routine
|
|
36
|
+
#
|
|
37
|
+
# Part of inversion-of-control. Must be overriden by a concrete implementation.
|
|
38
|
+
def format(_result, _params = nil)
|
|
39
|
+
raise Templates::Exception::NotImplementedError.new('The method should be overriden')
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
module Help
|
|
6
|
+
##
|
|
7
|
+
# Aggregated documentation provider
|
|
8
|
+
#
|
|
9
|
+
# A composite which generates documentation for entities which have a few documentation
|
|
10
|
+
# aspects which must be assembled in the resulting piece. Documentation aspects must have
|
|
11
|
+
# their own documentation providers. Aggregate will assemble them all according to the
|
|
12
|
+
# specified ordering.
|
|
13
|
+
class Aggregate < Provider
|
|
14
|
+
# DSL to declare aspects which should be displayed before entity-specific fragment
|
|
15
|
+
def self.before(*mods)
|
|
16
|
+
before_providers.concat(get_handlers_for(mods))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# DSL to declare aspects which should be displayed after entity-specific fragment
|
|
20
|
+
def self.after(*mods)
|
|
21
|
+
after_providers.concat(get_handlers_for(mods))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# The list of aspects to be displayed before entity-specific fragment
|
|
25
|
+
def self.before_providers
|
|
26
|
+
@before_providers ||= superclass < Aggregate ? superclass.before_providers.dup : []
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# The list of aspects to be displayed after entity-specific fragment
|
|
30
|
+
def self.after_providers
|
|
31
|
+
@after_providers ||= superclass < Aggregate ? superclass.after_providers.dup : []
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def provide
|
|
35
|
+
fragments = _process_through(self.class.before_providers)
|
|
36
|
+
.push(fragment)
|
|
37
|
+
.concat(_process_through(self.class.after_providers))
|
|
38
|
+
|
|
39
|
+
fragments.compact!
|
|
40
|
+
|
|
41
|
+
compose(fragments) unless fragments.empty?
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Get list of aspect handlers for the list of classes/modules
|
|
45
|
+
def self.get_handlers_for(mods)
|
|
46
|
+
mods.map { |mod| processor.handler_for(mod) }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# Compose documentation aspects
|
|
53
|
+
#
|
|
54
|
+
# Implements inversion-of-control to provide implementation-specific way of composing
|
|
55
|
+
# documentation fragments
|
|
56
|
+
def compose(_fragments)
|
|
57
|
+
raise Templates::Exception::NotImplementedError.new('The method should be overriden')
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
##
|
|
61
|
+
# Entity-specific fragment
|
|
62
|
+
def fragment
|
|
63
|
+
raise Templates::Exception::NotImplementedError.new('The method should be overriden')
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
|
|
68
|
+
def _process_through(providers)
|
|
69
|
+
providers.map { |p| p.new(context, parameters).provide }
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
require 'facets/string/indent'
|
|
3
|
+
|
|
4
|
+
module Aws
|
|
5
|
+
module Templates
|
|
6
|
+
module Help
|
|
7
|
+
##
|
|
8
|
+
# Help description DSL
|
|
9
|
+
#
|
|
10
|
+
# Mixin to construct inheritable help documentation which can be rendered through
|
|
11
|
+
# standard rendering framework allowing different types of output to be produced.
|
|
12
|
+
module Dsl
|
|
13
|
+
include Templates::Utils::Inheritable
|
|
14
|
+
|
|
15
|
+
instance_scope do
|
|
16
|
+
def help
|
|
17
|
+
self.class.help
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class_scope do
|
|
22
|
+
def help(str = nil)
|
|
23
|
+
return @help if str.nil?
|
|
24
|
+
@help = str.unindent
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
module Help
|
|
6
|
+
##
|
|
7
|
+
# Abstract help provider
|
|
8
|
+
class Provider < Templates::Processor::Handler
|
|
9
|
+
def provide
|
|
10
|
+
raise Templates::Exception::NotImplementedError.new('The method should be overriden')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
require 'rdoc'
|
|
3
|
+
|
|
4
|
+
module Aws
|
|
5
|
+
module Templates
|
|
6
|
+
module Help
|
|
7
|
+
##
|
|
8
|
+
# Rdoc-based help generator
|
|
9
|
+
#
|
|
10
|
+
# The generator uses RDoc utility classes internally to compose documentation blurbs.
|
|
11
|
+
# It supports all output formats as RDoc.
|
|
12
|
+
module Rdoc
|
|
13
|
+
extend Help
|
|
14
|
+
extend Texting
|
|
15
|
+
|
|
16
|
+
routing Routing
|
|
17
|
+
|
|
18
|
+
##
|
|
19
|
+
# Compose a doc fragment for scalar value
|
|
20
|
+
#
|
|
21
|
+
# Abstract documentation provider for scalar values.
|
|
22
|
+
class Scalar < Provider
|
|
23
|
+
def provide
|
|
24
|
+
sub(parameters.nil? ? text(value) : text("_#{parameters}_ #{value}"))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
def value
|
|
30
|
+
raise 'Should be overriden'
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
# Compose a doc fragment for lambda
|
|
36
|
+
class Calculable < Scalar
|
|
37
|
+
for_entity ::Proc
|
|
38
|
+
|
|
39
|
+
protected
|
|
40
|
+
|
|
41
|
+
def value
|
|
42
|
+
location = context.source_location
|
|
43
|
+
|
|
44
|
+
message = begin
|
|
45
|
+
"Calculated in #{context.binding.receiver}"
|
|
46
|
+
rescue ArgumentError
|
|
47
|
+
'Calculated'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
location.nil? ? message : "#{message} (#{location.join(':')})"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
##
|
|
55
|
+
# Default help provider
|
|
56
|
+
#
|
|
57
|
+
# Does a few preliminary check and either use insection of the target object or, if it
|
|
58
|
+
# supports recursive concept, goes recursively into it and composes resulting list tree
|
|
59
|
+
# of descriptions.
|
|
60
|
+
class DefaultProvider < Provider
|
|
61
|
+
for_entity ::Object
|
|
62
|
+
|
|
63
|
+
def provide
|
|
64
|
+
return _recursive if Utils.recursive?(context)
|
|
65
|
+
_inspection
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def _inspection
|
|
71
|
+
return '*deleted*' if context == Templates::Utils::Default.deleted
|
|
72
|
+
str = context.inspect
|
|
73
|
+
sub(parameters.nil? ? text(str) : text("_#{parameters}_ #{str}"))
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def _recursive
|
|
77
|
+
container = context
|
|
78
|
+
.keys
|
|
79
|
+
.each_with_object(list) { |key, l| l << processed_for(context[key], key) }
|
|
80
|
+
|
|
81
|
+
parameters.nil? ? sub(container) : sub(text("_#{parameters}_"), container)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def self.format(result, params = nil)
|
|
86
|
+
formatter = formatter_for(params)
|
|
87
|
+
|
|
88
|
+
formatter.start_accepting
|
|
89
|
+
|
|
90
|
+
if result
|
|
91
|
+
result = list(:LABEL, result) if result.is_a?(RDoc::Markup::ListItem)
|
|
92
|
+
result.accept(formatter)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
formatter.end_accepting
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.formatter_for(params)
|
|
99
|
+
return RDoc::Markup::ToAnsi.new unless params && params.include?(:formatter)
|
|
100
|
+
Templates::Utils.lookup_module(params[:formatter]).new
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
module Help
|
|
6
|
+
module Rdoc
|
|
7
|
+
##
|
|
8
|
+
# Artifact documentation generator
|
|
9
|
+
#
|
|
10
|
+
# Aggregate which assembled different aspects of artifact documentation such as:
|
|
11
|
+
# * help blurb
|
|
12
|
+
# * parameters description
|
|
13
|
+
# * defaults description
|
|
14
|
+
class Artifact < Help::Aggregate
|
|
15
|
+
include Rdoc::Texting
|
|
16
|
+
|
|
17
|
+
register_in Rdoc
|
|
18
|
+
for_entity Templates::Artifact
|
|
19
|
+
|
|
20
|
+
after Templates::Help::Dsl, Templates::Utils::Parametrized, Templates::Utils::Default
|
|
21
|
+
|
|
22
|
+
protected
|
|
23
|
+
|
|
24
|
+
def fragment
|
|
25
|
+
sub(
|
|
26
|
+
text("\n*#{context.name}*"),
|
|
27
|
+
text("_Parents_: #{superclasses.map(&:to_s).join('->')}")
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def compose(fragments)
|
|
32
|
+
list(:LABEL, *fragments)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def superclasses
|
|
38
|
+
Enumerator.new do |y|
|
|
39
|
+
s = context.superclass
|
|
40
|
+
while s && s <= Templates::Artifact
|
|
41
|
+
y << s
|
|
42
|
+
s = s.superclass
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
module Help
|
|
6
|
+
module Rdoc
|
|
7
|
+
##
|
|
8
|
+
# Composite documentation provider
|
|
9
|
+
#
|
|
10
|
+
# Does the same as Artifact documentation aggregate adding context filters section as an
|
|
11
|
+
# aspect
|
|
12
|
+
class Composite < Rdoc::Artifact
|
|
13
|
+
for_entity Templates::Composite
|
|
14
|
+
|
|
15
|
+
after Templates::Utils::Contextualized
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'aws/templates/utils'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Templates
|
|
5
|
+
module Help
|
|
6
|
+
module Rdoc
|
|
7
|
+
module Contextualized
|
|
8
|
+
##
|
|
9
|
+
# Context filter documentation provider
|
|
10
|
+
#
|
|
11
|
+
# Abstract filter documentation provider
|
|
12
|
+
class Filter < Rdoc::Provider
|
|
13
|
+
for_entity Templates::Utils::Contextualized::Filter
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|