Skip to content

Ergonomic shell wrapper for Ruby.

License

Notifications You must be signed in to change notification settings

fetlife/scallop

Repository files navigation

Gem Version CircleCI Maintainability Test Coverage

Scallop

Ergonomic shell wrapper.

Features:

  • Easy access to command's output (stdout & stderr)
  • Failure handling
  • Parameterization
  • Measuring execution time
  • Built-in string escaping
  • No dependencies

Installation

Add this line to your application's Gemfile:

gem 'scallop'

And then execute:

$ bundle

Or install it yourself as:

$ gem install scallop

Usage

To run sudo -u chuck grep -R /home/chuck

result = Scallop.sudo(:chuck).cmd(:grep, '-R', '/home/chuck').run

You can then check whether command succeeded

result.success?

See its output

result.stdout
result.stderr
result.output # STDOUT and STDERR combined

You can also access information about command execution time

result.timing.real # Elapsed real time
result.timing.stime # System CPU time
result.timing.utime # User CPU time
result.timing.total # Total time, that is utime + stime + cutime + cstime

Handling failures with exceptions

If you replace run with run!, exception will be raised in case command fails

begin
  Scallop.cmd(some_command).run!
rescue Scallop::Errors::CommandFailed => error
  # you can access result right on the error itself
  error.result.stderr
end

Piping

To run cat /some/file | grep something

command = Scallop.cmd(:cat, '/some/file') | Scallop.cmd(:grep, 'something')
command.run

Parameterization

stored_command = Scallop.cmd(:rm, '-rf', Scallop::Param[:path])

stored_command.set(path: '/foo').run # rm -rf /foo
stored_command.set(path: '/bar').run # rm -rf /bar

You can also check specs for examples.

About

Ergonomic shell wrapper for Ruby.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •