New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

optout

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

optout

  • 0.0.2
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

= Optout

Optout helps you write code that will call +exec+ and +system+ like functions. It allows you to map hash keys to command line arguments and define validation rules that must be met before the command line arguments are created.

== Overview

require "optout"

Create options for gem

optout = Optout.options do on :gem, "install", :required => true on :os, "--platform", %w(mswin cygwin mingw) on :version, "-v", /\A\d+(.\d+)*\z/ on :user, "--user-install" on :location, "-i", Optout::Dir.exists.under(ENV["HOME"]) end

options = { :gem => "rake", :os => "mswin", :version => "0.9.2", :user => truep }

exec "gem", *optout.argv(options)

Returns: ["install", "rake", "--platform", "mswin", "-v", "0.9.2", "--user-install"]

gem #{optout.shell(options)}

Returns: "'install' 'rake' --platform 'mswin' -v '0.9.2' --user-install"

== Install

gem install optout

== Defining Options

Inorder to turn the incoming option hash into something useful you must tell +Optout+ a bit about your options. This is done by calling Optout#on and passing it the name of a key in the option hash. The simplest case is an option with no switch:

optout = Optout.options do on :path end

optout.shell(:path => "/home/sshaw")

Returns: '/home/sshaw'

Key names can be a +Symbol+ or a +String+, +Optout+ will check for both in the option hash.

If the option has a switch it can be given after the option's key:

optout = Optout.options do on :path, "-p" end

optout.shell(:path => "/home/sshaw")

Returns: -p '/home/sshaw'

Some programs can be finicky about the space between the switch and the value, or require options in a different format. +Optout+ accepts various configuration options that can remdy this:

optout = Optout.options do on :path, "-p", :arg_separator => "" end

optout.shell(:path => "/home/sshaw")

Returns: -p'/home/sshaw'

optout = Optout.options do on :path, "--path", :arg_separator => "=", :required => true end

optout.shell(:path => "/home/sshaw")

Returns: --path='/home/sshaw'

optout.shell({})

Raises: Optout::OptionRequired

Options can be grouped into required and optional:

Optout.options :arg_separator => "=" do required do on :in, "if" on :out, "of" end

optional do 
  on :size, "size"
  on :count, "count"
end

end

optout.shell(:in => "/dev/zero", :out => "/var/log/secure")

Returns: in='/dev/zero' out='/var/log/secure'

== Validating Options

+Optout+ can validate your options too. Just specify the validation rule after the option's key or switch:

optout = Optout.options do # Must match [a-z] on :path, "-p", /[a-z]/ end

optout = Optout.options do # Must be true, false, or nil (add :required => true to allow only true or false) on :path, "-p", Optout::Boolean end

optout = Optout.options do # Must be in the given set on :path, %w(/home/sshaw /Users/gatinha /Users/fofinha) end

optout = Optout.options do # Must be a diretory under "/home" and have user read and write permissions on :path, Optout::Dir.under("/home").permissions("rw") end

optout.shell(:path => "/root")

Raises: Optout::OptionInvalid

== TODOs

  • Proper cmd.exe quoting
  • Mutually exclusive options
  • Split options i.e., :jvm => %w[A B C] would be created as -XA -XB -XC

== More Info

=== RDoc

http://rubydoc.info/github/sshaw/optout/frames (with RDoc -> YARD incompatibilities :)

=== Bugs

https://github.com/sshaw/optout/issues

== Author

Skye Shaw [sshaw AT lucas.cis.temple.edu]

== License

Copyright (c) 2011-2012 Skye Shaw

Released under the MIT License: http://www.opensource.org/licenses/MIT

FAQs

Package last updated on 04 Mar 2012

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc