lib/sugar-high/file.rb in sugar-high-0.1.5 vs lib/sugar-high/file.rb in sugar-high-0.1.6
- old
+ new
@@ -1,17 +1,74 @@
-require 'sugar-high/string'
+require 'sugar-high/blank'
class File
def self.blank? file_name
raise ArgumentError, "Filename argument must not be blank" if file_name.blank?
raise ArgumentError, "There is no file at: #{file_name}" if !File.file?(file_name)
File.zero?(file_name)
end
def blank?
File.zero?(self.path)
+ end
+
+ def self.overwrite path, content=nil, &block
+ File.open(path, 'w') do |f|
+ f.puts content ||= yield
+ end
end
+
+ def self.append path, content=nil, &block
+ File.open(path, 'w+') do |f|
+ f.puts content ||= yield
+ end
+ end
+
+ # replaces content found at replacement_expr with content resulting from yielding block
+ # File.replace_content_from 'myfile.txt', where => /HelloWorld/, with => 'GoodBye'
+ def self.replace_content_from file_name, options = {}, &block
+ replacement_expr = options[:where]
+ new_content = options[:with]
+
+ replacement_expr = case replacement_expr
+ when Regexp
+ replacement_expr
+ when String
+ /#{Regexp.escape(replacement_expr)}/
+ else
+ raise ArgumentError, "Content to be replaced must be specified as either a String or Regexp in a :where option"
+ end
+
+ # get existing file content
+ content = File.read file_name
+
+ # return nil if no mathing replacement found
+ return nil if !(content =~ replacement_expr)
+
+ new_content ||= yield if block
+
+ raise ArgumentError, "Content to be replaced with must be specified as a :with option or as a block" if !new_content
+
+ # remove content that matches expr, by replacing with empty
+ mutated_content = content.gsub replacement_expr, new_content
+
+ # write mutated content as new file
+ File.overwrite file_name, mutated_content
+
+ true # signal success!
+ end
+
+ # TODO: Needs spec
+ def self.remove_content_from file_name, options = {}, &block
+ replace_content_from file_name, options.merge(:with => ''), &block
+ end
end
+
+class Array
+ def file_names ext = '*'
+ self.map{|a| a.gsub( /(.*)\//, '').gsub(/\.#{Regexp.escape(ext)}/, '')}
+ end
+end
class String
def path
self.extend PathString
end
\ No newline at end of file