class PuppetfileEditor::Puppetfile
Puppetfile
implementation
Attributes
module_sections[R]
modules[R]
@!attribute [r] modules
@return [Hash<String, PuppetfileEditor::Module>]
puppetfile_path[R]
@!attribute [r] puppetfile_path
@return [String] The path to the Puppetfile
Public Class Methods
new(path = 'Puppetfile', from_stdin = false, contents = nil)
click to toggle source
@param [String] path path to Puppetfile
# File lib/puppetfile_editor/puppetfile.rb, line 19 def initialize(path = 'Puppetfile', from_stdin = false, contents = nil) @puppetfile_path = path @from_stdin = from_stdin @contents = contents @modules = {} @loaded = false @forge = nil @module_sections = { local: 'Local modules', forge: 'Modules from the Puppet Forge', hg: 'Mercurial modules', git: 'Git modules', undef: 'Other modules', } end
Public Instance Methods
add_module(name, args)
click to toggle source
compare_with(pfile, compare_across_types: false)
click to toggle source
# File lib/puppetfile_editor/puppetfile.rb, line 83 def compare_with(pfile, compare_across_types: false) diff = {} pfile.modules.each do |mod_name, mod| next unless [:git, :hg, :forge].include? mod.type mod.type == :forge ? version_key = :version : version_key = :tag unless @modules.key? mod_name diff[mod_name] = { new: mod.params[version_key], type: mod.type } if mod.params.key?(version_key) next end local_mod = @modules[mod_name] unless compare_across_types next unless mod.type == local_mod.type end next unless mod.params.key?(version_key) && local_mod.params.key?(version_key) next if mod.params[version_key] == local_mod.params[version_key] diff[mod_name] = { old: local_mod.params[version_key], new: mod.params[version_key], type: mod.type } end diff end
delete_module(name)
click to toggle source
# File lib/puppetfile_editor/puppetfile.rb, line 115 def delete_module(name) @modules.delete(name) end
dump(args = {})
click to toggle source
# File lib/puppetfile_editor/puppetfile.rb, line 73 def dump(args = {}) File.write(@puppetfile_path, generate_puppetfile(args)) if @loaded end
generate_puppetfile(args = {})
click to toggle source
# File lib/puppetfile_editor/puppetfile.rb, line 52 def generate_puppetfile(args = {}) raise StandardError, 'File is not loaded' unless @loaded contents = [] contents.push "forge '#{@forge}'\n" if @forge @module_sections.each do |module_type, module_comment| module_list = modules.select { |_, mod| mod.type == module_type } next unless module_list.any? contents.push "# #{module_comment}" module_list.values.sort_by(&:name).each do |mod| contents.push mod.dump(args) end contents.push '' end contents.join("\n") end
load()
click to toggle source
# File lib/puppetfile_editor/puppetfile.rb, line 36 def load if @from_stdin puppetfile_contents = $stdin.gets(nil).chomp elsif @contents puppetfile_contents = @contents else raise(IOError, "'#{@puppetfile_path}' is missing or unreadable") unless File.readable?(@puppetfile_path) puppetfile_contents = File.read @puppetfile_path end dsl = PuppetfileEditor::DSL.new(self) dsl.instance_eval(puppetfile_contents) @loaded = true end
update_forge_url(url)
click to toggle source
# File lib/puppetfile_editor/puppetfile.rb, line 119 def update_forge_url(url) raise StandardError, "Forge URL must be a String, but it is a #{url.class}" unless url.is_a? String @forge = url end
update_module(name, param, value)
click to toggle source
# File lib/puppetfile_editor/puppetfile.rb, line 77 def update_module(name, param, value) raise StandardError, "Module #{name} does not exist in your Puppetfile" unless @modules.key? name @modules[name].set(param, value, true) end