Module: Maid::Tools
- Included in:
- Maid
- Defined in:
- lib/maid/tools.rb
Overview
Collection of utility methods included in Maid::Maid (and thus available in the rules DSL).
In general, all paths are automatically expanded (e.g. ‘~/Downloads/foo.zip’ becomes ‘/home/username/Downloads/foo.zip’).
Some methods are not available on all platforms. An ArgumentError
is raised when a command is not available. See tags: [Mac OS X]
Instance Method Summary collapse
-
#dir(glob) ⇒ Object
Give all files matching the given glob.
-
#disk_usage(path) ⇒ Object
Calculate disk usage of a given path.
-
#downloaded_from(path) ⇒ Object
- Mac OS X
-
Use Spotlight metadata to determine the site from which a file was downloaded.
-
#duration_s(path) ⇒ Object
- Mac OS X
-
Use Spotlight metadata to determine audio length.
-
#find(path, &block) ⇒ Object
Find matching files, akin to the Unix utility
find
. -
#git_piston(path) ⇒ Object
Pulls and pushes the given git repository.
-
#last_accessed(path) ⇒ Object
In Unix speak, “atime”.
-
#locate(name) ⇒ Object
- Mac OS X
-
Use Spotlight to locate all files matching the given filename.
-
#move(from, to) ⇒ Object
Move from
from
toto
. -
#trash(path) ⇒ Object
Move the given path to the trash (as set by
trash_path
). -
#zipfile_contents(path) ⇒ Object
Inspect the contents of a .zip file.
Instance Method Details
#dir(glob) ⇒ Object
Give all files matching the given glob.
Delgates to Dir.
dir('~/Downloads/*.zip')
52 53 54 |
# File 'lib/maid/tools.rb', line 52 def dir(glob) Dir[File.(glob)] end |
#disk_usage(path) ⇒ Object
Calculate disk usage of a given path.
disk_usage('foo.zip') # => 136
103 104 105 106 |
# File 'lib/maid/tools.rb', line 103 def disk_usage(path) raw = cmd("du -s #{path.inspect}") raw.split(/\s+/).first.to_i end |
#downloaded_from(path) ⇒ Object
- Mac OS X
-
Use Spotlight metadata to determine the site from which a file was downloaded.
downloaded_from('foo.zip') # => ['http://www.site.com/foo.zip', 'http://www.site.com/']
79 80 81 82 83 |
# File 'lib/maid/tools.rb', line 79 def downloaded_from(path) raw = cmd("mdls -raw -name kMDItemWhereFroms #{path.inspect}") clean = raw[1, raw.length - 2] clean.split(/,\s+/).map { |s| t = s.strip; t[1, t.length - 2] } end |
#duration_s(path) ⇒ Object
- Mac OS X
-
Use Spotlight metadata to determine audio length.
duration_s('foo.mp3') # => 235.705
88 89 90 |
# File 'lib/maid/tools.rb', line 88 def duration_s(path) cmd("mdls -raw -name kMDItemDurationSeconds #{path.inspect}").to_f end |
#find(path, &block) ⇒ Object
Find matching files, akin to the Unix utility find
.
Delegates to Find.find.
find '~/Downloads/' do |path|
# ...
end
63 64 65 |
# File 'lib/maid/tools.rb', line 63 def find(path, &block) Find.find(File.(path), &block) end |
#git_piston(path) ⇒ Object
Pulls and pushes the given git repository.
git_piston('~/code/projectname')
118 119 120 121 122 |
# File 'lib/maid/tools.rb', line 118 def git_piston(path) full_path = File.(path) stdout = cmd("cd #{full_path.inspect} && git pull && git push 2>&1") @logger.info "Fired git piston on #{full_path.inspect}. STDOUT:\n\n#{stdout}" end |
#last_accessed(path) ⇒ Object
In Unix speak, “atime”.
last_accessed('foo.zip') # => Sat Apr 09 10:50:01 -0400 2011
111 112 113 |
# File 'lib/maid/tools.rb', line 111 def last_accessed(path) File.atime(File.(path)) end |
#locate(name) ⇒ Object
- Mac OS X
-
Use Spotlight to locate all files matching the given filename.
locate('foo.zip') # => ['/a/foo.zip', '/b/foo.zip']
– TODO use ‘locate` elsewhere – it isn’t available by default on OS X starting with OS X Leopard.
72 73 74 |
# File 'lib/maid/tools.rb', line 72 def locate(name) cmd("mdfind -name #{name.inspect}").split("\n") end |
#move(from, to) ⇒ Object
Move from from
to to
.
The path is not moved if a file already exists at the destination with the same name. A warning is logged instead.
This method delegates to FileUtils. The instance-level file_options
hash is passed to control the :noop
option.
move('~/Downloads/foo.zip', '~/Archive/Software/Mac OS X/')
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/maid/tools.rb', line 18 def move(from, to) from = File.(from) to = File.(to) target = File.join(to, File.basename(from)) unless File.exist?(target) @logger.info "mv #{from.inspect} #{to.inspect}" FileUtils.mv(from, to, @file_options) else @logger.warn "skipping #{from.inspect} because #{target.inspect} already exists" end end |
#trash(path) ⇒ Object
Move the given path to the trash (as set by trash_path
).
The path is moved if a file already exists in the trash with the same name. However, the current date and time is appended to the filename.
trash('~/Downloads/foo.zip')
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/maid/tools.rb', line 36 def trash(path) target = File.join(@trash_path, File.basename(path)) safe_trash_path = File.join(@trash_path, "#{File.basename(path)} #{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}") if File.exist?(target) move(path, safe_trash_path) else move(path, @trash_path) end end |
#zipfile_contents(path) ⇒ Object
Inspect the contents of a .zip file.
zipfile_contents('foo.zip') # => ['foo/foo.exe', 'foo/README.txt']
95 96 97 98 |
# File 'lib/maid/tools.rb', line 95 def zipfile_contents(path) raw = cmd("unzip -Z1 #{path.inspect}") raw.split("\n") end |