2018-04-25 16:49:07 +02:00
|
|
|
require 'pathname'
|
|
|
|
|
|
|
|
class Pathname
|
2019-10-26 12:28:17 +02:00
|
|
|
def +@
|
|
|
|
expand_path.to_s
|
|
|
|
end
|
2018-04-25 16:49:07 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2019-10-26 12:28:17 +02:00
|
|
|
def symlink to
|
|
|
|
File.symlink to.to_s, to_s
|
|
|
|
end
|
|
|
|
|
|
|
|
def link to
|
|
|
|
File.link to.to_s, to_s
|
|
|
|
end
|
|
|
|
|
2018-04-25 16:49:07 +02:00
|
|
|
def replace_i
|
|
|
|
open 'r+' do |f|
|
|
|
|
lines = yield f
|
|
|
|
f.truncate 0
|
|
|
|
f.pos = 0
|
|
|
|
f.puts lines
|
|
|
|
end
|
|
|
|
end
|
2019-10-26 12:28:17 +02:00
|
|
|
|
|
|
|
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
|
2018-04-25 16:49:07 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
class Symbol
|
|
|
|
alias +@ to_s
|
|
|
|
def -@
|
|
|
|
:"-#{self}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class File
|
|
|
|
def reset
|
|
|
|
f.truncate 0
|
|
|
|
f.pos = 0
|
|
|
|
end
|
|
|
|
end
|