spec/support/matchers.rb (42 lines of code) (raw):
require "rspec/expectations"
# expect('/path/to/directory').to be_a_directory
RSpec::Matchers.define :be_a_directory do
match do |actual|
File.directory?(actual)
end
end
# expect('/path/to/directory').to be_a_file
RSpec::Matchers.define :be_a_file do
match do |actual|
File.file?(actual)
end
end
# expect('/path/to/file').to have_content
RSpec::Matchers.define :have_content do |content|
match do |actual|
IO.read(actual) == content
end
end
# expect('/path/to/file').to have_permissions
RSpec::Matchers.define :have_permissions do |perm|
match do |actual|
m = sprintf("%o", File.stat(actual).mode)
m == perm
end
end
# expect('/path/to/directory').to be_a_symlink
RSpec::Matchers.define :be_a_symlink do
match do |actual|
File.symlink?(actual)
end
end
# expect('/path/to/directory').to be_a_symlink_to
RSpec::Matchers.define :be_a_symlink_to do |path|
match do |actual|
File.symlink?(actual) && File.readlink(actual) == path
end
end
# expect('/path/to/file').to be_an_executable
RSpec::Matchers.define :be_an_executable do
match do |actual|
File.executable?(actual)
end
end
# expect('/path/to/file').to be_a_hardlink
RSpec::Matchers.define :be_a_hardlink do |path|
match do |actual|
File.stat(actual).nlink > 2
end
end