Module: PDK::Util
- Defined in:
- lib/pdk/util.rb,
lib/pdk/util/git.rb,
lib/pdk/util/bundler.rb,
lib/pdk/util/version.rb,
lib/pdk/util/windows.rb,
lib/pdk/util/filesystem.rb,
lib/pdk/util/ruby_version.rb,
lib/pdk/util/vendored_file.rb,
lib/pdk/util/puppet_version.rb
Defined Under Namespace
Modules: Bundler, Filesystem, Git, Version, Windows Classes: PuppetVersion, RubyVersion, VendoredFile
Constant Summary collapse
- MODULE_FOLDERS =
%w[ manifests lib tasks facts.d functions types ].freeze
Class Method Summary collapse
-
.cachedir ⇒ String
Returns the fully qualified path to a per-user PDK cachedir.
-
.canonical_path(path) ⇒ String
Return an expanded, absolute path.
- .default_template_ref ⇒ Object
- .default_template_url ⇒ Object
- .development_mode? ⇒ Boolean
-
.find_all_json_in(text) ⇒ Array<Hash>
Iterate through possible JSON documents for all valid JSON.
-
.find_first_json_in(text) ⇒ Hash?
Iterate through possible JSON documents until we find one that is valid.
-
.find_upwards(target, start_dir = nil) ⇒ String?
Searches upwards from current working directory for the given target file.
-
.find_valid_json_in(text, opts = {}) ⇒ Hash, ...
Iterate through possible JSON documents until we find one that is valid.
- .gem_install? ⇒ Boolean
-
.in_module_root? ⇒ boolean
Returns true or false depending on if any of the common directories in a module are found in the current directory.
-
.make_tmpdir_name(base) ⇒ String
Generate a name for a temporary directory.
-
.module_metadata ⇒ Object
TO-DO: Refactor replacement of lib/pdk/module/build.rb:metadata to use this function instead.
-
.module_pdk_compatible? ⇒ Boolean
TO-DO: Refactor replacement of lib/pdk/module/build.rb:module_pdk_compatible? to use this function instead.
- .module_pdk_version ⇒ Object
-
.module_root ⇒ String?
Returns path to the root of the module being worked on.
- .package_cachedir ⇒ Object
- .package_install? ⇒ Boolean
- .pdk_package_basedir ⇒ Object
- .puppetlabs_template_ref ⇒ Object
- .puppetlabs_template_url ⇒ Object
-
.targets_relative_to_pwd(targets) ⇒ Array<String>
Returns the targets’ paths relative to the working directory.
Class Method Details
.cachedir ⇒ String
Returns the fully qualified path to a per-user PDK cachedir.
99 100 101 102 103 104 105 |
# File 'lib/pdk/util.rb', line 99 def cachedir if Gem.win_platform? File.join(ENV['LOCALAPPDATA'], 'PDK', 'cache') else File.join(Dir.home, '.pdk', 'cache') end end |
.canonical_path(path) ⇒ String
Return an expanded, absolute path
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/pdk/util.rb', line 57 def canonical_path(path) if Gem.win_platform? unless File.exist?(path) raise PDK::CLI::FatalError, _("Cannot resolve a full path to '%{path}', as it does not currently exist.") % { path: path } end PDK::Util::Windows::File.get_long_pathname(path) else File.(path) end end |
.default_template_ref ⇒ Object
228 229 230 231 232 233 |
# File 'lib/pdk/util.rb', line 228 def default_template_ref # TODO: This should respect a --template-ref option if we add that return 'origin/master' if default_template_url != puppetlabs_template_url puppetlabs_template_ref end |
.default_template_url ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/pdk/util.rb', line 200 def default_template_url answer_file_url = PDK.answers['template-url'] return puppetlabs_template_url if answer_file_url.nil? # Ignore answer file template-url if the value is the old or new default. return puppetlabs_template_url if answer_file_url == 'https://github.com/puppetlabs/pdk-module-template' return puppetlabs_template_url if answer_file_url == puppetlabs_template_url unless PDK::Util::Git.repo?(answer_file_url) PDK.logger.warn(_("Unable to access the previously used template '%{template}', using the default template instead.") % { template: answer_file_url }) PDK.answers.update!('template-url' => nil) return puppetlabs_template_url end answer_file_url end |
.development_mode? ⇒ Boolean
74 75 76 |
# File 'lib/pdk/util.rb', line 74 def development_mode? (!PDK::Util::Version.git_ref.nil? || PDK::VERSION.end_with?('.pre')) end |
.find_all_json_in(text) ⇒ Array<Hash>
Iterate through possible JSON documents for all valid JSON
149 150 151 |
# File 'lib/pdk/util.rb', line 149 def find_all_json_in(text) find_valid_json_in(text, break_on_first: false) end |
.find_first_json_in(text) ⇒ Hash?
Iterate through possible JSON documents until we find one that is valid.
139 140 141 |
# File 'lib/pdk/util.rb', line 139 def find_first_json_in(text) find_valid_json_in(text) end |
.find_upwards(target, start_dir = nil) ⇒ String?
Searches upwards from current working directory for the given target file.
27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/pdk/util.rb', line 27 def find_upwards(target, start_dir = nil) previous = nil current = File.(start_dir || Dir.pwd) until !File.directory?(current) || current == previous filename = File.join(current, target) return filename if File.file?(filename) previous = current current = File.('..', current) end end |
.find_valid_json_in(text, opts = {}) ⇒ Hash, ...
Iterate through possible JSON documents until we find one that is valid.
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/pdk/util.rb', line 164 def find_valid_json_in(text, opts = {}) break_on_first = opts.key?(:break_on_first) ? opts[:break_on_first] : true json_result = break_on_first ? nil : [] text.scan(%r{\{(?:[^{}]|(?:\g<0>))*\}}x) do |str| begin if break_on_first json_result = JSON.parse(str) break else json_result.push(JSON.parse(str)) end rescue JSON::ParserError next end end json_result end |
.gem_install? ⇒ Boolean
79 80 81 |
# File 'lib/pdk/util.rb', line 79 def gem_install? !(package_install? || development_mode?) end |
.in_module_root? ⇒ boolean
Returns true or false depending on if any of the common directories in a module are found in the current directory
129 130 131 |
# File 'lib/pdk/util.rb', line 129 def in_module_root? PDK::Util::MODULE_FOLDERS.any? { |dir| File.directory?(dir) } end |
.make_tmpdir_name(base) ⇒ String
Generate a name for a temporary directory.
45 46 47 48 49 |
# File 'lib/pdk/util.rb', line 45 def make_tmpdir_name(base) t = Time.now.strftime('%Y%m%d') name = "#{base}#{t}-#{Process.pid}-#{rand(0x100000000).to_s(36)}" File.join(Dir.tmpdir, name) end |
.module_metadata ⇒ Object
TO-DO: Refactor replacement of lib/pdk/module/build.rb:metadata to use this function instead
246 247 248 |
# File 'lib/pdk/util.rb', line 246 def PDK::Module::Metadata.from_file(File.join(module_root, 'metadata.json')).data end |
.module_pdk_compatible? ⇒ Boolean
TO-DO: Refactor replacement of lib/pdk/module/build.rb:module_pdk_compatible? to use this function instead
252 253 254 |
# File 'lib/pdk/util.rb', line 252 def module_pdk_compatible? ['pdk-version', 'template-url'].any? { |key| .key?(key) } end |
.module_pdk_version ⇒ Object
257 258 259 260 261 262 263 264 265 266 267 268 |
# File 'lib/pdk/util.rb', line 257 def module_pdk_version = if .nil? || .fetch('pdk-version', nil).nil? nil else ['pdk-version'].split.first end rescue ArgumentError => e PDK.logger.error(e) nil end |
.module_root ⇒ String?
Returns path to the root of the module being worked on.
112 113 114 115 116 117 118 119 120 121 |
# File 'lib/pdk/util.rb', line 112 def module_root = find_upwards('metadata.json') if File.dirname() elsif in_module_root? Dir.pwd else nil end end |
.package_cachedir ⇒ Object
91 92 93 |
# File 'lib/pdk/util.rb', line 91 def package_cachedir File.join(pdk_package_basedir, 'share', 'cache') end |
.package_install? ⇒ Boolean
69 70 71 |
# File 'lib/pdk/util.rb', line 69 def package_install? !PDK::Util::Version.version_file.nil? end |
.pdk_package_basedir ⇒ Object
84 85 86 87 88 |
# File 'lib/pdk/util.rb', line 84 def pdk_package_basedir raise PDK::CLI::FatalError, _('Package basedir requested for non-package install.') unless package_install? File.dirname(PDK::Util::Version.version_file) end |
.puppetlabs_template_ref ⇒ Object
236 237 238 239 240 241 242 |
# File 'lib/pdk/util.rb', line 236 def puppetlabs_template_ref if PDK::Util.development_mode? 'origin/master' else PDK::TEMPLATE_REF end end |
.puppetlabs_template_url ⇒ Object
219 220 221 222 223 224 225 |
# File 'lib/pdk/util.rb', line 219 def puppetlabs_template_url if package_install? 'file://' + File.join(package_cachedir, 'pdk-templates.git') else 'https://github.com/puppetlabs/pdk-templates' end end |
.targets_relative_to_pwd(targets) ⇒ Array<String>
Returns the targets’ paths relative to the working directory
189 190 191 192 193 194 195 196 197 |
# File 'lib/pdk/util.rb', line 189 def targets_relative_to_pwd(targets) targets.map do |t| if Pathname.new(t).absolute? Pathname.new(t).relative_path_from(Pathname.pwd) else t end end end |