diff options
author | Adam Jacob <adam@hjksolutions.com> | 2009-04-24 17:44:02 -0700 |
---|---|---|
committer | Adam Jacob <adam@hjksolutions.com> | 2009-04-24 17:44:02 -0700 |
commit | b00c38b7bd59c68a2900bbf5b49dc98a9620dda4 (patch) | |
tree | 1495f2ac359be36c2c25b6ff1848e30edb54a1ea | |
parent | ccdc688d4e68769010e19c8df60b7d1cd3437c64 (diff) | |
download | chef-b00c38b7bd59c68a2900bbf5b49dc98a9620dda4.tar.gz |
Fixing the file name for CamelCase, moving the spec to the right directory, ensuring the header is correct
-rw-r--r-- | chef/lib/chef/util/file_edit.rb | 125 | ||||
-rw-r--r-- | chef/lib/chef/util/fileedit.rb | 121 | ||||
-rw-r--r-- | chef/spec/spec_helper.rb | 28 | ||||
-rw-r--r-- | chef/spec/unit/util/file_edit_spec.rb (renamed from chef/spec/unit/fileedit_spec.rb) | 53 |
4 files changed, 174 insertions, 153 deletions
diff --git a/chef/lib/chef/util/file_edit.rb b/chef/lib/chef/util/file_edit.rb new file mode 100644 index 0000000000..c09e427741 --- /dev/null +++ b/chef/lib/chef/util/file_edit.rb @@ -0,0 +1,125 @@ +# +# Author:: Nuo Yan (<nuo@opscode.com>) +# Copyright:: Copyright (c) 2009 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. + +require 'ftools' +require 'fileutils' +require 'tempfile' + +class Chef + class Util + class FileEdit + + private + + attr_accessor :original_pathname, :contents, :file_edited + + public + + def initialize(filepath) + @original_pathname = filepath + @file_edited = false + + raise ArgumentError, "File doesn't exist" unless File.exist? @original_pathname + raise ArgumentError, "File is blank" unless (@contents = File.new(@original_pathname).readlines).length > 0 + end + + #search the file line by line and match each line with the given regex + #if matched, replace the whole line with newline. + def search_file_replace_line(regex, newline) + search_match(regex, newline, 'r', 1) + end + + #search the file line by line and match each line with the given regex + #if matched, replace the match (all occurances) with the replace parameter + def search_file_replace(regex, replace) + search_match(regex, replace, 'r', 2) + end + + #search the file line by line and match each line with the given regex + #if matched, delete the line + def search_file_delete_line(regex) + search_match(regex, " ", 'd', 1) + end + + #search the file line by line and match each line with the given regex + #if matched, delete the match (all occurances) from the line + def search_file_delete(regex) + search_match(regex, " ", 'd', 2) + end + + #search the file line by line and match each line with the given regex + #if matched, insert newline after each matching line + def insert_line_after_match(regex, newline) + search_match(regex, newline, 'i', 0) + end + + #Make a copy of old_file and write new file out (only if file changed) + def write_file + + # file_edited is false when there was no match in the whole file and thus no contents have changed. + if file_edited + backup_pathname = original_pathname + ".old" + File.copy(original_pathname, backup_pathname) + Tempfile.open("w") do |newfile| + contents.each do |line| + newfile.puts(line) + end + newfile.flush + FileUtils.mv(newfile.path, original_pathname) + end + end + self.file_edited = false + + end + + private + + #helper method to do the match, replace, delete, and insert operations + #command is the switch of delete, replace, and insert ('d', 'r', 'i') + #method is to control operation on whole line or only the match (1 for line, 2 for match) + def search_match(regex, replace, command, method) + + #convert regex to a Regexp object (if not already is one) and store it in exp. + exp = Regexp.new(regex) + + #loop through contents and do the appropriate operation depending on 'command' and 'method' + new_contents = [] + + contents.each do |line| + if line.match(exp) + self.file_edited = true + case + when command == 'r' + new_contents << ((method == 1) ? replace : line.gsub!(exp, replace)) + when command == 'd' + if method == 2 + new_contents << line.gsub!(exp, "") + end + when command == 'i' + new_contents << line + new_contents << replace + end + else + new_contents << line + end + end + + self.contents = new_contents + end + end + end +end diff --git a/chef/lib/chef/util/fileedit.rb b/chef/lib/chef/util/fileedit.rb deleted file mode 100644 index a6ac99352b..0000000000 --- a/chef/lib/chef/util/fileedit.rb +++ /dev/null @@ -1,121 +0,0 @@ -# -# Author:: Nuo Yan (<nuo@opscode.com>) -# Copyright:: Copyright (c) 2009 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. - -require 'ftools' -require 'fileutils' -require 'tempfile' - -class FileEdit - - private - - attr_accessor :original_pathname, :contents, :file_edited - - public - - def initialize(filepath) - @original_pathname = filepath - @file_edited = false - - raise ArgumentError, "File doesn't exist" unless File.exist? @original_pathname - raise ArgumentError, "File is blank" unless (@contents = File.new(@original_pathname).readlines).length > 0 - end - - #search the file line by line and match each line with the given regex - #if matched, replace the whole line with newline. - def search_file_replace_line(regex, newline) - search_match(regex, newline, 'r', 1) - end - - #search the file line by line and match each line with the given regex - #if matched, replace the match (all occurances) with the replace parameter - def search_file_replace(regex, replace) - search_match(regex, replace, 'r', 2) - end - - #search the file line by line and match each line with the given regex - #if matched, delete the line - def search_file_delete_line(regex) - search_match(regex, " ", 'd', 1) - end - - #search the file line by line and match each line with the given regex - #if matched, delete the match (all occurances) from the line - def search_file_delete(regex) - search_match(regex, " ", 'd', 2) - end - - #search the file line by line and match each line with the given regex - #if matched, insert newline after each matching line - def insert_line_after_match(regex, newline) - search_match(regex, newline, 'i', 0) - end - - #Make a copy of old_file and write new file out (only if file changed) - def write_file - - # file_edited is false when there was no match in the whole file and thus no contents have changed. - if file_edited - backup_pathname = original_pathname + ".old" - File.copy(original_pathname, backup_pathname) - Tempfile.open("w") do |newfile| - contents.each do |line| - newfile.puts(line) - end - newfile.flush - FileUtils.mv(newfile.path, original_pathname) - end - end - self.file_edited = false - - end - - private - - #helper method to do the match, replace, delete, and insert operations - #command is the switch of delete, replace, and insert ('d', 'r', 'i') - #method is to control operation on whole line or only the match (1 for line, 2 for match) - def search_match(regex, replace, command, method) - - #convert regex to a Regexp object (if not already is one) and store it in exp. - exp = Regexp.new(regex) - - #loop through contents and do the appropriate operation depending on 'command' and 'method' - new_contents = [] - - contents.each do |line| - if line.match(exp) - self.file_edited = true - case - when command == 'r' - new_contents << ((method == 1) ? replace : line.gsub!(exp, replace)) - when command == 'd' - if method == 2 - new_contents << line.gsub!(exp, "") - end - when command == 'i' - new_contents << line - new_contents << replace - end - else - new_contents << line - end - end - - self.contents = new_contents - end -end diff --git a/chef/spec/spec_helper.rb b/chef/spec/spec_helper.rb index 499bf49e02..0dd5b202cb 100644 --- a/chef/spec/spec_helper.rb +++ b/chef/spec/spec_helper.rb @@ -1,26 +1,24 @@ +# # Author:: Adam Jacob (<adam@opscode.com>) # Copyright:: Copyright (c) 2008 Opscode, Inc. -# License:: GNU General Public License version 2 or later +# 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 # -# This program and entire repository is free software; you can -# redistribute it and/or modify it under the terms of the GNU -# General Public License as published by the Free Software -# Foundation; either version 2 of the License, or any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# 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. +# $:.unshift(File.join(File.dirname(__FILE__), "..", "lib")) require 'chef' -require File.join(File.dirname(__FILE__), "/../lib/chef/util/fileedit") chef_lib_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')) Dir[ diff --git a/chef/spec/unit/fileedit_spec.rb b/chef/spec/unit/util/file_edit_spec.rb index dfed65fc6b..24d6503fc2 100644 --- a/chef/spec/unit/fileedit_spec.rb +++ b/chef/spec/unit/util/file_edit_spec.rb @@ -1,21 +1,40 @@ -require File.join(File.dirname(__FILE__), "/../spec_helper") - -describe FileEdit, "initialiize" do - it "should create a new FileEdit object" do - FileEdit.new("./spec/data/fileedit/hosts").should be_kind_of(FileEdit) +# +# Author:: Nuo Yan (<nuo@opscode.com>) +# Copyright:: Copyright (c) 2008 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. +# + + +require File.join(File.dirname(__FILE__), '..', '..', "spec_helper") + +describe Chef::Util::FileEdit, "initialiize" do + it "should create a new Chef::Util::FileEdit object" do + Chef::Util::FileEdit.new("./spec/data/fileedit/hosts").should be_kind_of(Chef::Util::FileEdit) end it "should throw an exception if the input file does not exist" do - lambda{FileEdit.new("nonexistfile")}.should raise_error + lambda{Chef::Util::FileEdit.new("nonexistfile")}.should raise_error end it "should throw an exception if the input file is blank" do - lambda{FileEdit.new("./spec/data/fileedit/blank")}.should raise_error + lambda{Chef::Util::FileEdit.new("./spec/data/fileedit/blank")}.should raise_error end end -describe FileEdit, "search_file_replace" do +describe Chef::Util::FileEdit, "search_file_replace" do it "should accept regex passed in as a string (not Regexp object) and replace the match if there is one" do helper_method("./spec/data/fileedit/hosts", "localhost", true) @@ -33,7 +52,7 @@ describe FileEdit, "search_file_replace" do def helper_method(filename, regex, value) - fedit = FileEdit.new(filename) + fedit = Chef::Util::FileEdit.new(filename) fedit.search_file_replace(regex, "replacement") fedit.write_file (File.exist? filename+".old").should be(value) @@ -47,10 +66,10 @@ describe FileEdit, "search_file_replace" do end -describe FileEdit, "search_file_replace_line" do +describe Chef::Util::FileEdit, "search_file_replace_line" do it "should search for match and replace the whole line" do - fedit = FileEdit.new("./spec/data/fileedit/hosts") + fedit = Chef::Util::FileEdit.new("./spec/data/fileedit/hosts") fedit.search_file_replace_line(/localhost/, "replacement line") fedit.write_file newfile = File.new("./spec/data/fileedit/hosts").readlines @@ -62,9 +81,9 @@ describe FileEdit, "search_file_replace_line" do end -describe FileEdit, "search_file_delete" do +describe Chef::Util::FileEdit, "search_file_delete" do it "should search for match and delete the match" do - fedit = FileEdit.new("./spec/data/fileedit/hosts") + fedit = Chef::Util::FileEdit.new("./spec/data/fileedit/hosts") fedit.search_file_delete(/localhost/) fedit.write_file newfile = File.new("./spec/data/fileedit/hosts").readlines @@ -75,9 +94,9 @@ describe FileEdit, "search_file_delete" do end end -describe FileEdit, "search_file_delete_line" do +describe Chef::Util::FileEdit, "search_file_delete_line" do it "should search for match and delete the matching line" do - fedit = FileEdit.new("./spec/data/fileedit/hosts") + fedit = Chef::Util::FileEdit.new("./spec/data/fileedit/hosts") fedit.search_file_delete_line(/localhost/) fedit.write_file newfile = File.new("./spec/data/fileedit/hosts").readlines @@ -88,9 +107,9 @@ describe FileEdit, "search_file_delete_line" do end end -describe FileEdit, "insert_line_after_match" do +describe Chef::Util::FileEdit, "insert_line_after_match" do it "should search for match and insert the given line after the matching line" do - fedit = FileEdit.new("./spec/data/fileedit/hosts") + fedit = Chef::Util::FileEdit.new("./spec/data/fileedit/hosts") fedit.insert_line_after_match(/localhost/, "new line inserted") fedit.write_file newfile = File.new("./spec/data/fileedit/hosts").readlines |