diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2013-08-29 16:27:27 -0700 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2013-08-29 16:27:27 -0700 |
commit | 948be0bb99374c699d79eb11c00366a6e2d2f977 (patch) | |
tree | 546d9cdf7c0abe256587742d59f17ed3005fcb27 /lib | |
parent | 221277e8522b42bf170fded6ea23dfc526703b07 (diff) |
(maint) Improve the tests and readability of file_line
Without this patch the implementation of the file_line provider is a bit
convoluted with respect to the newly introduced "after" parameter.
This patch addresses the problem by separating out the concerns of each
case into their own methods of handling the behavior with the match
parameter, handling the behavior with the after parameter, or simply
appending the line.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/provider/file_line/ruby.rb | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/lib/puppet/provider/file_line/ruby.rb b/lib/puppet/provider/file_line/ruby.rb index 7ddb39f..94e7fac 100644 --- a/lib/puppet/provider/file_line/ruby.rb +++ b/lib/puppet/provider/file_line/ruby.rb @@ -1,5 +1,4 @@ Puppet::Type.type(:file_line).provide(:ruby) do - def exists? lines.find do |line| line.chomp == resource[:line].chomp @@ -8,9 +7,11 @@ Puppet::Type.type(:file_line).provide(:ruby) do def create if resource[:match] - handle_create_with_match() + handle_create_with_match + elsif resource[:after] + handle_create_with_after else - handle_create_without_match() + append_line end end @@ -48,22 +49,13 @@ Puppet::Type.type(:file_line).provide(:ruby) do end end - def handle_create_without_match - - regex = resource[:after] ? Regexp.new(resource[:after]) : nil - after_count = File.exists?(resource[:path]) ? lines.select { |l| regex.match(l) }.size : 0 - if after_count > 1 then - raise Puppet::Error, "More than one line in file '#{resource[:path]}' matches after pattern '#{resource[:after]}'" - end - - if (after_count == 0) - - File.open(resource[:path], 'a') do |fh| - fh.puts resource[:line] - end + def handle_create_with_after + regex = Regexp.new(resource[:after]) - else + count = lines.count {|l| l.match(regex)} + case count + when 1 # find the line to put our line after File.open(resource[:path], 'w') do |fh| lines.each do |l| fh.puts(l) @@ -72,9 +64,20 @@ Puppet::Type.type(:file_line).provide(:ruby) do end end end - + when 0 # append the line to the end of the file + append_line + else + raise Puppet::Error, "#{count} lines match pattern '#{resource[:after]}' in file '#{resource[:path]}'. One or no line must match the pattern." end - end + ## + # append the line to the file. + # + # @api private + def append_line + File.open(resource[:path], 'a') do |fh| + fh.puts resource[:line] + end + end end |