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,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,12 @@
1
+ module Aws
2
+ module Templates
3
+ module Help
4
+ module Rdoc
5
+ ##
6
+ # Contextualized namespace
7
+ module Contextualized
8
+ end
9
+ end
10
+ end
11
+ end
12
+ 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