tolvmxfs/lib/to_lvm_xfs/exts.rb

110 lines
2.0 KiB
Ruby

require 'pathname'
class Pathname
def +@
expand_path.to_s
end
def chdir &exe
Dir.chdir self.to_s, &exe
end
alias cd chdir
# copies content of src in self as destination
def copy src, **opts
FileUtils.copy_file src.to_s, self.to_s, **opts
end
def symlink to
File.symlink to.to_s, to_s
end
def link to
File.link to.to_s, to_s
end
def replace_i
open 'r+' do |f|
lines = yield f
f.truncate 0
f.pos = 0
f.puts lines
end
end
def sed_i **replaces, &e
open 'r+' do |f|
lines = f.each_line.flat_map {|l| yield l.chomp, replaces }
f.truncate 0
f.pos = 0
f.puts lines
replaces.each {|_,rls| f.puts rls }
end
end
end
class XPathname < Pathname
%i[/ + join].each do |meth|
define_method meth do |*n|
XPathname.new "#{super *n}"
end
end
%i[unlink read].each do |meth|
define_method meth do |*a, &e|
STDERR.puts "\e[1;36m#{meth} \e[1;35m#{self}\e[0m"
super *a, &e
end
end
%i[replace_i sed_i].each do |meth|
define_method meth do |*a, &e|
STDERR.puts "\e[1;36mpatching \e[1;35m#{self}\e[0m"
super *a, &e
end
end
%i[link rename symlink].each do |meth|
define_method meth do |*a, &e|
STDERR.puts "\e[1;36m#{meth} \e[1;35m#{self}\e[0m -> #{a.map{|x|"\e[1;35m#{x}\e[0m"}.join ', '}"
super *a, &e
end
end
%i[move copy].each do |meth|
define_method meth do |*a, &e|
STDERR.puts "\e[1;36m#{meth} \e[1;35m#{self}\e[0m <- #{a.map{|x|"\e[1;35m#{x}\e[0m"}.join ', '}"
super *a, &e
end
end
%i[make_link make_symlink].each do |meth|
name = meth.to_s.sub /\Amake_/, ''
define_method meth do |*a, &e|
STDERR.puts "\e[1;36m#{name} \e[1;35m#{self}\e[0m -> #{a.map{|x|"\e[1;35m#{x}\e[0m"}.join ', '}"
super *a, &e
end
end
%i[write].each do |meth|
define_method meth do |*a, &e|
STDERR.puts "\e[1;36m#{meth} \e[1;35m#{self}\e[0m \e[1;35m#{a[0][0...128].inspect}\e[0m"
super *a, &e
end
end
end
class Symbol
alias +@ to_s
def -@
:"-#{self}"
end
end
class File
def reset
f.truncate 0
f.pos = 0
end
end