summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJeff McCune <jeff@puppetlabs.com>2013-08-29 16:27:27 -0700
committerJeff McCune <jeff@puppetlabs.com>2013-08-29 16:27:27 -0700
commit948be0bb99374c699d79eb11c00366a6e2d2f977 (patch)
tree546d9cdf7c0abe256587742d59f17ed3005fcb27 /lib
parent221277e8522b42bf170fded6ea23dfc526703b07 (diff)
downloadpuppet-stdlib-948be0bb99374c699d79eb11c00366a6e2d2f977.tar.gz
puppet-stdlib-948be0bb99374c699d79eb11c00366a6e2d2f977.tar.bz2
(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.rb41
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