pdk 2.3.0 → 2.4.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 (153) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1329 -1321
  3. data/LICENSE +201 -201
  4. data/README.md +163 -163
  5. data/exe/pdk +10 -10
  6. data/lib/pdk/analytics/client/google_analytics.rb +143 -143
  7. data/lib/pdk/analytics/client/noop.rb +25 -25
  8. data/lib/pdk/analytics/util.rb +19 -19
  9. data/lib/pdk/analytics.rb +30 -30
  10. data/lib/pdk/answer_file.rb +12 -12
  11. data/lib/pdk/bolt.rb +19 -19
  12. data/lib/pdk/cli/build.rb +82 -82
  13. data/lib/pdk/cli/bundle.rb +48 -48
  14. data/lib/pdk/cli/config/get.rb +26 -26
  15. data/lib/pdk/cli/config.rb +22 -22
  16. data/lib/pdk/cli/console.rb +148 -148
  17. data/lib/pdk/cli/convert.rb +52 -52
  18. data/lib/pdk/cli/env.rb +52 -52
  19. data/lib/pdk/cli/errors.rb +25 -25
  20. data/lib/pdk/cli/exec/command.rb +293 -293
  21. data/lib/pdk/cli/exec/interactive_command.rb +114 -114
  22. data/lib/pdk/cli/exec.rb +84 -84
  23. data/lib/pdk/cli/exec_group.rb +104 -104
  24. data/lib/pdk/cli/get/config.rb +24 -24
  25. data/lib/pdk/cli/get.rb +20 -20
  26. data/lib/pdk/cli/module/build.rb +12 -12
  27. data/lib/pdk/cli/module/generate.rb +47 -47
  28. data/lib/pdk/cli/module.rb +14 -14
  29. data/lib/pdk/cli/new/class.rb +32 -32
  30. data/lib/pdk/cli/new/defined_type.rb +32 -32
  31. data/lib/pdk/cli/new/fact.rb +29 -29
  32. data/lib/pdk/cli/new/function.rb +29 -29
  33. data/lib/pdk/cli/new/module.rb +53 -53
  34. data/lib/pdk/cli/new/provider.rb +29 -29
  35. data/lib/pdk/cli/new/task.rb +34 -34
  36. data/lib/pdk/cli/new/test.rb +52 -52
  37. data/lib/pdk/cli/new/transport.rb +27 -27
  38. data/lib/pdk/cli/new.rb +21 -21
  39. data/lib/pdk/cli/release/prep.rb +39 -39
  40. data/lib/pdk/cli/release/publish.rb +50 -50
  41. data/lib/pdk/cli/release.rb +194 -194
  42. data/lib/pdk/cli/remove/config.rb +80 -80
  43. data/lib/pdk/cli/remove.rb +20 -20
  44. data/lib/pdk/cli/set/config.rb +119 -119
  45. data/lib/pdk/cli/set.rb +20 -20
  46. data/lib/pdk/cli/test/unit.rb +90 -90
  47. data/lib/pdk/cli/test.rb +11 -11
  48. data/lib/pdk/cli/update.rb +64 -64
  49. data/lib/pdk/cli/util/command_redirector.rb +27 -27
  50. data/lib/pdk/cli/util/interview.rb +72 -72
  51. data/lib/pdk/cli/util/option_normalizer.rb +55 -55
  52. data/lib/pdk/cli/util/option_validator.rb +68 -68
  53. data/lib/pdk/cli/util/spinner.rb +13 -13
  54. data/lib/pdk/cli/util/update_manager_printer.rb +82 -82
  55. data/lib/pdk/cli/util.rb +305 -305
  56. data/lib/pdk/cli/validate.rb +116 -116
  57. data/lib/pdk/cli.rb +175 -175
  58. data/lib/pdk/config/analytics_schema.json +26 -26
  59. data/lib/pdk/config/errors.rb +5 -5
  60. data/lib/pdk/config/ini_file.rb +183 -183
  61. data/lib/pdk/config/ini_file_setting.rb +39 -39
  62. data/lib/pdk/config/json.rb +34 -34
  63. data/lib/pdk/config/json_schema_namespace.rb +142 -142
  64. data/lib/pdk/config/json_schema_setting.rb +53 -53
  65. data/lib/pdk/config/json_with_schema.rb +49 -49
  66. data/lib/pdk/config/namespace.rb +354 -354
  67. data/lib/pdk/config/setting.rb +135 -135
  68. data/lib/pdk/config/validator.rb +31 -31
  69. data/lib/pdk/config/yaml.rb +46 -46
  70. data/lib/pdk/config/yaml_with_schema.rb +59 -59
  71. data/lib/pdk/config.rb +390 -390
  72. data/lib/pdk/context/control_repo.rb +60 -60
  73. data/lib/pdk/context/module.rb +28 -28
  74. data/lib/pdk/context/none.rb +22 -22
  75. data/lib/pdk/context.rb +99 -99
  76. data/lib/pdk/control_repo.rb +90 -90
  77. data/lib/pdk/generate/defined_type.rb +43 -43
  78. data/lib/pdk/generate/fact.rb +25 -25
  79. data/lib/pdk/generate/function.rb +48 -48
  80. data/lib/pdk/generate/module.rb +352 -352
  81. data/lib/pdk/generate/provider.rb +28 -28
  82. data/lib/pdk/generate/puppet_class.rb +43 -43
  83. data/lib/pdk/generate/puppet_object.rb +232 -232
  84. data/lib/pdk/generate/task.rb +68 -68
  85. data/lib/pdk/generate/transport.rb +33 -33
  86. data/lib/pdk/generate.rb +24 -24
  87. data/lib/pdk/i18n.rb +4 -4
  88. data/lib/pdk/logger.rb +45 -45
  89. data/lib/pdk/module/build.rb +322 -322
  90. data/lib/pdk/module/convert.rb +296 -296
  91. data/lib/pdk/module/metadata.rb +202 -202
  92. data/lib/pdk/module/release.rb +260 -260
  93. data/lib/pdk/module/update.rb +131 -131
  94. data/lib/pdk/module/update_manager.rb +227 -227
  95. data/lib/pdk/module.rb +30 -30
  96. data/lib/pdk/report/event.rb +370 -370
  97. data/lib/pdk/report.rb +121 -121
  98. data/lib/pdk/template/fetcher/git.rb +85 -85
  99. data/lib/pdk/template/fetcher/local.rb +28 -28
  100. data/lib/pdk/template/fetcher.rb +98 -98
  101. data/lib/pdk/template/renderer/v1/legacy_template_dir.rb +116 -116
  102. data/lib/pdk/template/renderer/v1/renderer.rb +132 -132
  103. data/lib/pdk/template/renderer/v1/template_file.rb +102 -102
  104. data/lib/pdk/template/renderer/v1.rb +25 -25
  105. data/lib/pdk/template/renderer.rb +96 -96
  106. data/lib/pdk/template/template_dir.rb +67 -67
  107. data/lib/pdk/template.rb +59 -59
  108. data/lib/pdk/tests/unit.rb +252 -252
  109. data/lib/pdk/util/bundler.rb +259 -259
  110. data/lib/pdk/util/changelog_generator.rb +137 -137
  111. data/lib/pdk/util/env.rb +47 -47
  112. data/lib/pdk/util/filesystem.rb +138 -138
  113. data/lib/pdk/util/git.rb +179 -179
  114. data/lib/pdk/util/json_finder.rb +85 -85
  115. data/lib/pdk/util/puppet_strings.rb +125 -125
  116. data/lib/pdk/util/puppet_version.rb +266 -266
  117. data/lib/pdk/util/ruby_version.rb +179 -179
  118. data/lib/pdk/util/template_uri.rb +295 -295
  119. data/lib/pdk/util/vendored_file.rb +93 -93
  120. data/lib/pdk/util/version.rb +43 -43
  121. data/lib/pdk/util/windows/api_types.rb +82 -82
  122. data/lib/pdk/util/windows/file.rb +36 -36
  123. data/lib/pdk/util/windows/process.rb +79 -79
  124. data/lib/pdk/util/windows/string.rb +16 -16
  125. data/lib/pdk/util/windows.rb +15 -15
  126. data/lib/pdk/util.rb +278 -277
  127. data/lib/pdk/validate/control_repo/control_repo_validator_group.rb +23 -23
  128. data/lib/pdk/validate/control_repo/environment_conf_validator.rb +98 -98
  129. data/lib/pdk/validate/external_command_validator.rb +208 -208
  130. data/lib/pdk/validate/internal_ruby_validator.rb +100 -100
  131. data/lib/pdk/validate/invokable_validator.rb +228 -228
  132. data/lib/pdk/validate/metadata/metadata_json_lint_validator.rb +86 -86
  133. data/lib/pdk/validate/metadata/metadata_syntax_validator.rb +78 -78
  134. data/lib/pdk/validate/metadata/metadata_validator_group.rb +20 -20
  135. data/lib/pdk/validate/puppet/puppet_epp_validator.rb +133 -133
  136. data/lib/pdk/validate/puppet/puppet_lint_validator.rb +66 -66
  137. data/lib/pdk/validate/puppet/puppet_syntax_validator.rb +137 -137
  138. data/lib/pdk/validate/puppet/puppet_validator_group.rb +21 -21
  139. data/lib/pdk/validate/ruby/ruby_rubocop_validator.rb +80 -80
  140. data/lib/pdk/validate/ruby/ruby_validator_group.rb +19 -19
  141. data/lib/pdk/validate/tasks/tasks_metadata_lint_validator.rb +88 -88
  142. data/lib/pdk/validate/tasks/tasks_name_validator.rb +50 -50
  143. data/lib/pdk/validate/tasks/tasks_validator_group.rb +20 -20
  144. data/lib/pdk/validate/validator.rb +118 -118
  145. data/lib/pdk/validate/validator_group.rb +104 -104
  146. data/lib/pdk/validate/yaml/yaml_syntax_validator.rb +95 -95
  147. data/lib/pdk/validate/yaml/yaml_validator_group.rb +19 -19
  148. data/lib/pdk/validate.rb +94 -94
  149. data/lib/pdk/version.rb +4 -4
  150. data/lib/pdk.rb +76 -76
  151. data/locales/config.yaml +21 -21
  152. data/locales/pdk.pot +2094 -2094
  153. metadata +5 -6
@@ -1,102 +1,102 @@
1
- require 'pdk'
2
- require 'ostruct'
3
-
4
- module PDK
5
- module Template
6
- module Renderer
7
- module V1
8
- class TemplateFile < OpenStruct
9
- # Initialises the TemplateFile object with the path to the template file
10
- # and the data to be used when rendering the template.
11
- #
12
- # @param template_file [String] The path on disk to the template file.
13
- # @param data [Hash{Symbol => Object}] The data that should be provided to
14
- # the template when rendering.
15
- # @option data [Object] :configs The value of this key will be provided to
16
- # the template as an instance variable `@configs` in order to maintain
17
- # compatibility with modulesync.
18
- #
19
- # @api public
20
- def initialize(template_file, data = {})
21
- @template_file = template_file
22
-
23
- if data.key?(:configs)
24
- @configs = data[:configs]
25
- end
26
-
27
- super(data)
28
- end
29
-
30
- # Renders the template by calling the appropriate engine based on the file
31
- # extension.
32
- #
33
- # If the template has an `.erb` extension, the content of the template
34
- # file will be treated as an ERB template. All other extensions are treated
35
- # as plain text.
36
- #
37
- # @return [String] The rendered template
38
- #
39
- # @raise (see #template_content)
40
- #
41
- # @api public
42
- def render
43
- case File.extname(@template_file)
44
- when '.erb'
45
- render_erb
46
- else
47
- render_plain
48
- end
49
- end
50
-
51
- def config_for(path)
52
- return unless respond_to?(:template_dir)
53
-
54
- template_dir.config_for(path)
55
- end
56
-
57
- private
58
-
59
- # Reads the content of the template file into memory.
60
- #
61
- # @return [String] The content of the template file.
62
- #
63
- # @raise [ArgumentError] If the template file does not exist or can not be
64
- # read.
65
- #
66
- # @api private
67
- def template_content
68
- if PDK::Util::Filesystem.file?(@template_file) && PDK::Util::Filesystem.readable?(@template_file)
69
- return PDK::Util::Filesystem.read_file(@template_file)
70
- end
71
-
72
- raise ArgumentError, _("'%{template}' is not a readable file") % { template: @template_file }
73
- end
74
-
75
- # Renders the content of the template file as an ERB template.
76
- #
77
- # @return [String] The rendered template.
78
- #
79
- # @raise (see #template_content)
80
- #
81
- # @api private
82
- def render_erb
83
- renderer = ERB.new(template_content, nil, '-')
84
- renderer.filename = @template_file
85
- renderer.result(binding)
86
- end
87
-
88
- # Renders the content of the template file as plain text.
89
- #
90
- # @return [String] The rendered template.
91
- #
92
- # @raise (see #template_content)
93
- #
94
- # @api private
95
- def render_plain
96
- template_content
97
- end
98
- end
99
- end
100
- end
101
- end
102
- end
1
+ require 'pdk'
2
+ require 'ostruct'
3
+
4
+ module PDK
5
+ module Template
6
+ module Renderer
7
+ module V1
8
+ class TemplateFile < OpenStruct
9
+ # Initialises the TemplateFile object with the path to the template file
10
+ # and the data to be used when rendering the template.
11
+ #
12
+ # @param template_file [String] The path on disk to the template file.
13
+ # @param data [Hash{Symbol => Object}] The data that should be provided to
14
+ # the template when rendering.
15
+ # @option data [Object] :configs The value of this key will be provided to
16
+ # the template as an instance variable `@configs` in order to maintain
17
+ # compatibility with modulesync.
18
+ #
19
+ # @api public
20
+ def initialize(template_file, data = {})
21
+ @template_file = template_file
22
+
23
+ if data.key?(:configs)
24
+ @configs = data[:configs]
25
+ end
26
+
27
+ super(data)
28
+ end
29
+
30
+ # Renders the template by calling the appropriate engine based on the file
31
+ # extension.
32
+ #
33
+ # If the template has an `.erb` extension, the content of the template
34
+ # file will be treated as an ERB template. All other extensions are treated
35
+ # as plain text.
36
+ #
37
+ # @return [String] The rendered template
38
+ #
39
+ # @raise (see #template_content)
40
+ #
41
+ # @api public
42
+ def render
43
+ case File.extname(@template_file)
44
+ when '.erb'
45
+ render_erb
46
+ else
47
+ render_plain
48
+ end
49
+ end
50
+
51
+ def config_for(path)
52
+ return unless respond_to?(:template_dir)
53
+
54
+ template_dir.config_for(path)
55
+ end
56
+
57
+ private
58
+
59
+ # Reads the content of the template file into memory.
60
+ #
61
+ # @return [String] The content of the template file.
62
+ #
63
+ # @raise [ArgumentError] If the template file does not exist or can not be
64
+ # read.
65
+ #
66
+ # @api private
67
+ def template_content
68
+ if PDK::Util::Filesystem.file?(@template_file) && PDK::Util::Filesystem.readable?(@template_file)
69
+ return PDK::Util::Filesystem.read_file(@template_file)
70
+ end
71
+
72
+ raise ArgumentError, _("'%{template}' is not a readable file") % { template: @template_file }
73
+ end
74
+
75
+ # Renders the content of the template file as an ERB template.
76
+ #
77
+ # @return [String] The rendered template.
78
+ #
79
+ # @raise (see #template_content)
80
+ #
81
+ # @api private
82
+ def render_erb
83
+ renderer = ERB.new(template_content, nil, '-')
84
+ renderer.filename = @template_file
85
+ renderer.result(binding)
86
+ end
87
+
88
+ # Renders the content of the template file as plain text.
89
+ #
90
+ # @return [String] The rendered template.
91
+ #
92
+ # @raise (see #template_content)
93
+ #
94
+ # @api private
95
+ def render_plain
96
+ template_content
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -1,25 +1,25 @@
1
- require 'pdk'
2
-
3
- module PDK
4
- module Template
5
- module Renderer
6
- module V1
7
- autoload :LegacyTemplateDir, 'pdk/template/renderer/v1/legacy_template_dir'
8
- autoload :Renderer, 'pdk/template/renderer/v1/renderer'
9
- autoload :TemplateFile, 'pdk/template/renderer/v1/template_file'
10
-
11
- # Whether the template directory and context are valid for the V1 renderer
12
- # @see PDK::Template::Renderer.instance
13
- def self.compatible?(template_root, _context)
14
- %w[moduleroot moduleroot_init].all? { |dir| PDK::Util::Filesystem.directory?(File.join(template_root, dir)) }
15
- end
16
-
17
- # Creates an instance of the V1 Renderer
18
- # @see PDK::Template::Renderer.instance
19
- def self.instance(template_root, template_uri, context)
20
- PDK::Template::Renderer::V1::Renderer.new(template_root, template_uri, context)
21
- end
22
- end
23
- end
24
- end
25
- end
1
+ require 'pdk'
2
+
3
+ module PDK
4
+ module Template
5
+ module Renderer
6
+ module V1
7
+ autoload :LegacyTemplateDir, 'pdk/template/renderer/v1/legacy_template_dir'
8
+ autoload :Renderer, 'pdk/template/renderer/v1/renderer'
9
+ autoload :TemplateFile, 'pdk/template/renderer/v1/template_file'
10
+
11
+ # Whether the template directory and context are valid for the V1 renderer
12
+ # @see PDK::Template::Renderer.instance
13
+ def self.compatible?(template_root, _context)
14
+ %w[moduleroot moduleroot_init].all? { |dir| PDK::Util::Filesystem.directory?(File.join(template_root, dir)) }
15
+ end
16
+
17
+ # Creates an instance of the V1 Renderer
18
+ # @see PDK::Template::Renderer.instance
19
+ def self.instance(template_root, template_uri, context)
20
+ PDK::Template::Renderer::V1::Renderer.new(template_root, template_uri, context)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,96 +1,96 @@
1
- require 'pdk'
2
-
3
- module PDK
4
- module Template
5
- module Renderer
6
- autoload :V1, 'pdk/template/renderer/v1'
7
-
8
- # Returns the most appropriate renderer for the given Template Directory and Context
9
- #
10
- # @param template_root [String] The path to where the template exists on disk
11
- # @param template_uri [PDK::Util::TemplateUri] A URI which points to the source location of the Template
12
- # @param context [PDK::Context] The context in which the redering will occur in
13
- #
14
- # @return [AbstractRenderer, nil] An instance of an AbstractRenderer subclass. Returns nil if no renderer could be found
15
- def self.instance(template_uri, template_root, context)
16
- return V1.instance(template_root, template_uri, context) if V1.compatible?(template_root, context)
17
- nil
18
- end
19
-
20
- # An abstract class which all Template Renderers should subclass and implement. This class is responsible for
21
- # rendering a template or a single item within a template directory
22
- #
23
- # To implement a new renderer:
24
- # 1. Create a new class which subclasses AbstractRenderer and implements the public methods (has_single_item?, render and render_single_item)
25
- # 2. Add class methods .compatible? and .instance which are used to detect if a template is compatible with the new renderer
26
- # and create an instance of the new renderer respectively
27
- # 3. Update the PDK::Template::Renderer.instance method to detect and create an instance of the new renderer (using the .compatible? and .instance methods
28
- # created in step 2).
29
- #
30
- # See the PDK::Template::Renderer::V1 module and classes for an example on how to to this.
31
- #
32
- # @api private
33
- # @abstract
34
- class AbstractRenderer
35
- # @return [String] The path to where the template exists on disk
36
- attr_reader :template_root
37
-
38
- # @return [PDK::Util::TemplateURI] The URI which points to the source location of the Template
39
- attr_reader :template_uri
40
-
41
- # @return context [PDK::Context] The context in which the redering will occur in
42
- attr_reader :context
43
-
44
- # @param template_root [String] The path to where the template exists on disk
45
- # @param template_uri [PDK::Util::TemplateUri] A URI which points to the source location of the Template
46
- # @param context [PDK::Context] The context in which the redering will occur in
47
- def initialize(template_root, template_uri, context)
48
- @template_root = template_root
49
- @template_uri = template_uri
50
- @context = context
51
- end
52
-
53
- # Whether the renderer supports rendering the a single item called 'item_path'. This is used when rendering things like a new Task or a new Puppet Classes.
54
- # Rendering a single item is different than redering an entire project, like a entire Puppet Module or Control Repo.
55
- #
56
- # @param item_path [String] The path to the item to check
57
- #
58
- # @return [Boolean] Whether the renderer can render the item
59
- # @abstract
60
- def has_single_item?(_item_path) # rubocop:disable Naming/PredicateName Changing the method name to `single_item?` will convey the wrong intent
61
- false
62
- end
63
-
64
- # Loop through the files in the template type, yielding each rendered file to the supplied block.
65
- #
66
- # @param template_type [PDK::Template::*_TEMPLATE_TYPE] The type of template to render
67
- # @param name [String] The name to use in the rendering process
68
- # @param options [Hash{Object => Object}] A list of options to pass through to the renderer. See PDK::Template::TemplateDir helper methods for other options
69
- # @option options [Boolean] :include_first_time Whether to include "first time" items when rendering the project. While it is up to the renderer to implement this
70
- # the expected behavior is that if the item already exists, it will not be rendererd again. Unlike normal items which
71
- # are always rendered to keep them in-sync
72
- #
73
- # @yieldparam dest_path [String] The path of the destination file, relative to the root of the context.
74
- # @yieldparam dest_content [String] The rendered content of the destination file.
75
- # @yieldparam dest_status [Symbol] :unmanage, :delete, :init, :manage
76
- #
77
- # @see PDK::Template::TemplateDir.render
78
- #
79
- # @return [void]
80
- # @abstract
81
- def render(template_type, name, options = {}); end
82
-
83
- # Render a single item and return the resulting string. This is used when rendering things like a new Task or a new Puppet Classes.
84
- # Rendering a single item is different than redering an entire project, like a entire Puppet Module or Control Repo. This method is
85
- # used in conjunction with .has_single_item?
86
- #
87
- # @param item_path [String] The path of the single item to render
88
- # @param template_data_hash [Hash{Object => Object}] A hash of information which will be used in the rendering process
89
- #
90
- # @return [String, Nil] The rendered content, or nil of the file could not be rendered
91
- # @abstract
92
- def render_single_item(item_path, template_data_hash = {}); end
93
- end
94
- end
95
- end
96
- end
1
+ require 'pdk'
2
+
3
+ module PDK
4
+ module Template
5
+ module Renderer
6
+ autoload :V1, 'pdk/template/renderer/v1'
7
+
8
+ # Returns the most appropriate renderer for the given Template Directory and Context
9
+ #
10
+ # @param template_root [String] The path to where the template exists on disk
11
+ # @param template_uri [PDK::Util::TemplateUri] A URI which points to the source location of the Template
12
+ # @param context [PDK::Context] The context in which the redering will occur in
13
+ #
14
+ # @return [AbstractRenderer, nil] An instance of an AbstractRenderer subclass. Returns nil if no renderer could be found
15
+ def self.instance(template_uri, template_root, context)
16
+ return V1.instance(template_root, template_uri, context) if V1.compatible?(template_root, context)
17
+ nil
18
+ end
19
+
20
+ # An abstract class which all Template Renderers should subclass and implement. This class is responsible for
21
+ # rendering a template or a single item within a template directory
22
+ #
23
+ # To implement a new renderer:
24
+ # 1. Create a new class which subclasses AbstractRenderer and implements the public methods (has_single_item?, render and render_single_item)
25
+ # 2. Add class methods .compatible? and .instance which are used to detect if a template is compatible with the new renderer
26
+ # and create an instance of the new renderer respectively
27
+ # 3. Update the PDK::Template::Renderer.instance method to detect and create an instance of the new renderer (using the .compatible? and .instance methods
28
+ # created in step 2).
29
+ #
30
+ # See the PDK::Template::Renderer::V1 module and classes for an example on how to to this.
31
+ #
32
+ # @api private
33
+ # @abstract
34
+ class AbstractRenderer
35
+ # @return [String] The path to where the template exists on disk
36
+ attr_reader :template_root
37
+
38
+ # @return [PDK::Util::TemplateURI] The URI which points to the source location of the Template
39
+ attr_reader :template_uri
40
+
41
+ # @return context [PDK::Context] The context in which the redering will occur in
42
+ attr_reader :context
43
+
44
+ # @param template_root [String] The path to where the template exists on disk
45
+ # @param template_uri [PDK::Util::TemplateUri] A URI which points to the source location of the Template
46
+ # @param context [PDK::Context] The context in which the redering will occur in
47
+ def initialize(template_root, template_uri, context)
48
+ @template_root = template_root
49
+ @template_uri = template_uri
50
+ @context = context
51
+ end
52
+
53
+ # Whether the renderer supports rendering the a single item called 'item_path'. This is used when rendering things like a new Task or a new Puppet Classes.
54
+ # Rendering a single item is different than redering an entire project, like a entire Puppet Module or Control Repo.
55
+ #
56
+ # @param item_path [String] The path to the item to check
57
+ #
58
+ # @return [Boolean] Whether the renderer can render the item
59
+ # @abstract
60
+ def has_single_item?(_item_path) # rubocop:disable Naming/PredicateName Changing the method name to `single_item?` will convey the wrong intent
61
+ false
62
+ end
63
+
64
+ # Loop through the files in the template type, yielding each rendered file to the supplied block.
65
+ #
66
+ # @param template_type [PDK::Template::*_TEMPLATE_TYPE] The type of template to render
67
+ # @param name [String] The name to use in the rendering process
68
+ # @param options [Hash{Object => Object}] A list of options to pass through to the renderer. See PDK::Template::TemplateDir helper methods for other options
69
+ # @option options [Boolean] :include_first_time Whether to include "first time" items when rendering the project. While it is up to the renderer to implement this
70
+ # the expected behavior is that if the item already exists, it will not be rendererd again. Unlike normal items which
71
+ # are always rendered to keep them in-sync
72
+ #
73
+ # @yieldparam dest_path [String] The path of the destination file, relative to the root of the context.
74
+ # @yieldparam dest_content [String] The rendered content of the destination file.
75
+ # @yieldparam dest_status [Symbol] :unmanage, :delete, :init, :manage
76
+ #
77
+ # @see PDK::Template::TemplateDir.render
78
+ #
79
+ # @return [void]
80
+ # @abstract
81
+ def render(template_type, name, options = {}); end
82
+
83
+ # Render a single item and return the resulting string. This is used when rendering things like a new Task or a new Puppet Classes.
84
+ # Rendering a single item is different than redering an entire project, like a entire Puppet Module or Control Repo. This method is
85
+ # used in conjunction with .has_single_item?
86
+ #
87
+ # @param item_path [String] The path of the single item to render
88
+ # @param template_data_hash [Hash{Object => Object}] A hash of information which will be used in the rendering process
89
+ #
90
+ # @return [String, Nil] The rendered content, or nil of the file could not be rendered
91
+ # @abstract
92
+ def render_single_item(item_path, template_data_hash = {}); end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -1,67 +1,67 @@
1
- require 'pdk'
2
- require 'forwardable'
3
-
4
- module PDK
5
- module Template
6
- # A helper class representing an already fetched template on disk, with an appropriate renderer instance.
7
- # @see PDK::Template.with
8
- class TemplateDir
9
- # Creates an instance of TemplateDir object
10
- # @see TemplateDir.new
11
- def self.instance(uri, path, context, renderer = nil)
12
- new(uri, path, context, renderer)
13
- end
14
-
15
- extend Forwardable
16
-
17
- # Helper methods for rendering
18
- def_delegators :@renderer, :render, :render_single_item, :has_single_item?
19
-
20
- # @return [PDK::Util::TemplateURI] The URI which points to the source location of the Template
21
- attr_accessor :uri
22
-
23
- # @return [String] The path to where the template exists on disk
24
- attr_accessor :path
25
-
26
- # @return [Hash{String => String}] A hash of information about the template
27
- attr_accessor :metadata
28
-
29
- # @param template_uri [PDK::Util::TemplateUri] A URI which points to the source location of the Template
30
- # @param path [String] The path to where the template exists on disk
31
- # @param context [PDK::Context] The context in which the redering will occur in
32
- # @param renderer [PDK::Template::Renderer::AbstractRenderer] The an instance of a rendering class. If nil, a renderer will be created that's appropriate for the template and context
33
- def initialize(uri, path, context, renderer = nil)
34
- @uri = uri
35
- @path = path
36
- @metadata = {}
37
-
38
- @renderer = renderer.nil? ? Renderer.instance(uri, path, context) : renderer
39
- raise _('Could not find a compatible template renderer for %{path}') % { path: path } if @renderer.nil?
40
- end
41
-
42
- # Later additions may include Control Repo rendering, for example
43
- #
44
- # def render_control_repo(name, options = {})
45
- # render(CONTROL_REPO_TEMPLATE_TYPE, name, options.merge(include_first_time: false)) { |*args| yield(*args) }
46
- # end
47
- #
48
- # def render_new_control_repo(name, repo_metadata = {}, options = {})
49
- # render(CONTROL_REPO_TEMPLATE_TYPE, name, options.merge(include_first_time: true, control_repo_metadata: repo_metadata)) { |*args| yield(*args) }
50
- # end
51
- #:nocov: These are just helper methods and are tested elsewhere.
52
-
53
- # Render an existing module
54
- # @see PDK::Template::Renderer::AbstractRenderer.render
55
- def render_module(module_name, options = {})
56
- @renderer.render(MODULE_TEMPLATE_TYPE, module_name, options.merge(include_first_time: false)) { |*args| yield(*args) }
57
- end
58
-
59
- # Render a new module
60
- # @see PDK::Template::Renderer::AbstractRenderer.render
61
- def render_new_module(module_name, module_metadata = {}, options = {})
62
- @renderer.render(MODULE_TEMPLATE_TYPE, module_name, options.merge(include_first_time: true, module_metadata: module_metadata)) { |*args| yield(*args) }
63
- end
64
- #:nocov:
65
- end
66
- end
67
- end
1
+ require 'pdk'
2
+ require 'forwardable'
3
+
4
+ module PDK
5
+ module Template
6
+ # A helper class representing an already fetched template on disk, with an appropriate renderer instance.
7
+ # @see PDK::Template.with
8
+ class TemplateDir
9
+ # Creates an instance of TemplateDir object
10
+ # @see TemplateDir.new
11
+ def self.instance(uri, path, context, renderer = nil)
12
+ new(uri, path, context, renderer)
13
+ end
14
+
15
+ extend Forwardable
16
+
17
+ # Helper methods for rendering
18
+ def_delegators :@renderer, :render, :render_single_item, :has_single_item?
19
+
20
+ # @return [PDK::Util::TemplateURI] The URI which points to the source location of the Template
21
+ attr_accessor :uri
22
+
23
+ # @return [String] The path to where the template exists on disk
24
+ attr_accessor :path
25
+
26
+ # @return [Hash{String => String}] A hash of information about the template
27
+ attr_accessor :metadata
28
+
29
+ # @param template_uri [PDK::Util::TemplateUri] A URI which points to the source location of the Template
30
+ # @param path [String] The path to where the template exists on disk
31
+ # @param context [PDK::Context] The context in which the redering will occur in
32
+ # @param renderer [PDK::Template::Renderer::AbstractRenderer] The an instance of a rendering class. If nil, a renderer will be created that's appropriate for the template and context
33
+ def initialize(uri, path, context, renderer = nil)
34
+ @uri = uri
35
+ @path = path
36
+ @metadata = {}
37
+
38
+ @renderer = renderer.nil? ? Renderer.instance(uri, path, context) : renderer
39
+ raise _('Could not find a compatible template renderer for %{path}') % { path: path } if @renderer.nil?
40
+ end
41
+
42
+ # Later additions may include Control Repo rendering, for example
43
+ #
44
+ # def render_control_repo(name, options = {})
45
+ # render(CONTROL_REPO_TEMPLATE_TYPE, name, options.merge(include_first_time: false)) { |*args| yield(*args) }
46
+ # end
47
+ #
48
+ # def render_new_control_repo(name, repo_metadata = {}, options = {})
49
+ # render(CONTROL_REPO_TEMPLATE_TYPE, name, options.merge(include_first_time: true, control_repo_metadata: repo_metadata)) { |*args| yield(*args) }
50
+ # end
51
+ #:nocov: These are just helper methods and are tested elsewhere.
52
+
53
+ # Render an existing module
54
+ # @see PDK::Template::Renderer::AbstractRenderer.render
55
+ def render_module(module_name, options = {})
56
+ @renderer.render(MODULE_TEMPLATE_TYPE, module_name, options.merge(include_first_time: false)) { |*args| yield(*args) }
57
+ end
58
+
59
+ # Render a new module
60
+ # @see PDK::Template::Renderer::AbstractRenderer.render
61
+ def render_new_module(module_name, module_metadata = {}, options = {})
62
+ @renderer.render(MODULE_TEMPLATE_TYPE, module_name, options.merge(include_first_time: true, module_metadata: module_metadata)) { |*args| yield(*args) }
63
+ end
64
+ #:nocov:
65
+ end
66
+ end
67
+ end