diff options
author | Chris Bandy <bandy.chris@gmail.com> | 2014-01-10 07:04:00 +0000 |
---|---|---|
committer | Bryan McLellan <btm@getchef.com> | 2014-03-19 14:39:24 -0700 |
commit | 963e33beb327162dd03b8b4d37789a53914b8ba8 (patch) | |
tree | b83e91b9176b0e34b744a8373f50f4f6705554bc /lib/chef/util/editor.rb | |
parent | 4c5eb3eeff27f58009cc45de18f97d27d9d1355c (diff) | |
download | chef-963e33beb327162dd03b8b4d37789a53914b8ba8.tar.gz |
CHEF-3714: New object dedicated to manipulating text
Diffstat (limited to 'lib/chef/util/editor.rb')
-rw-r--r-- | lib/chef/util/editor.rb | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/chef/util/editor.rb b/lib/chef/util/editor.rb new file mode 100644 index 0000000000..973cf48e30 --- /dev/null +++ b/lib/chef/util/editor.rb @@ -0,0 +1,92 @@ +# +# Author:: Chris Bandy (<bandy.chris@gmail.com>) +# Copyright:: Copyright (c) 2014 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef + class Util + class Editor + attr_reader :lines + + def initialize(lines) + @lines = lines.to_a.clone + end + + def append_line_after(search, line_to_append) + lines = [] + + @lines.each do |line| + lines << line + lines << line_to_append if line.match(search) + end + + (lines.length - @lines.length).tap { @lines = lines } + end + + def append_line_if_missing(search, line_to_append) + count = 0 + + unless @lines.find { |line| line.match(search) } + count = 1 + @lines << line_to_append + end + + count + end + + def remove_lines(search) + count = 0 + + @lines.delete_if do |line| + count += 1 if line.match(search) + end + + count + end + + def replace(search, replace) + count = 0 + + @lines.map! do |line| + if line.match(search) + count += 1 + line.gsub!(search, replace) + else + line + end + end + + count + end + + def replace_lines(search, replace) + count = 0 + + @lines.map! do |line| + if line.match(search) + count += 1 + replace + else + line + end + end + + count + end + end + end +end + |