module Launchy

The entry point into Launchy. This is the sole supported public API.

Launchy.open( uri, options = {} )

The currently defined global options are:

:debug        Turn on debugging output
:application  Explicitly state what application class is going to be used.
              This must be a child class of Launchy::Application
:host_os      Explicitly state what host operating system to pretend to be
:dry_run      Do nothing and print the command that would be executed on $stdout

Other options may be used, and those will be passed directly to the application class

Constants

VERSION

Public Class Methods

app_for_name(name) click to toggle source
# File lib/launchy.rb, line 60
def app_for_name(name)
  Launchy::Application.for_name(name)
rescue Launchy::ApplicationNotFoundError
  nil
end
app_for_uri(uri) click to toggle source
# File lib/launchy.rb, line 56
def app_for_uri(uri)
  Launchy::Application.handling(uri)
end
app_for_uri_string(str) click to toggle source
# File lib/launchy.rb, line 66
def app_for_uri_string(str)
  app_for_uri(string_to_uri(str))
end
application() click to toggle source
# File lib/launchy.rb, line 113
def application
  @application || ENV.fetch("LAUNCHY_APPLICATION", nil)
end
application=(app) click to toggle source
# File lib/launchy.rb, line 109
def application=(app)
  @application = app
end
bug_report_message() click to toggle source
# File lib/launchy.rb, line 133
def bug_report_message
  "Please rerun with environment variable LAUNCHY_DEBUG=true or the '-d' commandline option and file a bug at https://github.com/copiousfreetime/launchy/issues/new"
end
debug=(enabled) click to toggle source
# File lib/launchy.rb, line 99
def debug=(enabled)
  @debug = to_bool(enabled)
end
debug?() click to toggle source

we may do logging before a call to ‘open’, hence the need to check LAUNCHY_DEBUG here

# File lib/launchy.rb, line 105
def debug?
  @debug || to_bool(ENV.fetch("LAUNCHY_DEBUG", nil))
end
dry_run=(dry_run) click to toggle source
# File lib/launchy.rb, line 125
def dry_run=(dry_run)
  @dry_run = to_bool(dry_run)
end
dry_run?() click to toggle source
# File lib/launchy.rb, line 129
def dry_run?
  @dry_run || to_bool(ENV.fetch("LAUNCHY_DRY_RUN", nil))
end
extract_global_options(options) click to toggle source
# File lib/launchy.rb, line 91
def extract_global_options(options)
  leftover = options.dup
  Launchy.debug        = leftover.delete(:debug) || ENV.fetch("LAUNCHY_DEBUG", nil)
  Launchy.application  = leftover.delete(:application) || ENV.fetch("LAUNCHY_APPLICATION", nil)
  Launchy.host_os      = leftover.delete(:host_os) || ENV.fetch("LAUNCHY_HOST_OS", nil)
  Launchy.dry_run      = leftover.delete(:dry_run) || ENV.fetch("LAUNCHY_DRY_RUN", nil)
end
host_os() click to toggle source
# File lib/launchy.rb, line 121
def host_os
  @host_os || ENV.fetch("LAUNCHY_HOST_OS", nil)
end
host_os=(host_os) click to toggle source
# File lib/launchy.rb, line 117
def host_os=(host_os)
  @host_os = host_os
end
log(msg) click to toggle source
# File lib/launchy.rb, line 137
def log(msg)
  $stderr.puts "LAUNCHY_DEBUG: #{msg}" if Launchy.debug?
end
open(uri_s, options = {}) { |$ERROR_INFO| ... } click to toggle source

Launch an application for the given uri string

# File lib/launchy.rb, line 29
def open(uri_s, options = {})
  leftover = extract_global_options(options)
  uri = string_to_uri(uri_s)
  if (name = options[:application])
    app = app_for_name(name)
  end

  app = app_for_uri(uri) if app.nil?

  app.new.open(uri, leftover)
rescue Launchy::Error => e
  raise e
rescue StandardError => e
  msg = "Failure in opening uri #{uri_s.inspect} with options #{options.inspect}: #{e}"
  raise Launchy::Error, msg
ensure
  if $ERROR_INFO && block_given?
    yield $ERROR_INFO

    # explicitly return here to swallow the errors if there was an error
    # and we yielded to the block
    # rubocop:disable Lint/EnsureReturn
    return
    # rubocop:enable Lint/EnsureReturn
  end
end
path() click to toggle source
# File lib/launchy.rb, line 141
def path
  @path
end
path=(path) click to toggle source
# File lib/launchy.rb, line 145
def path=(path)
  @path = path
end
reset_global_options() click to toggle source
# File lib/launchy.rb, line 83
def reset_global_options
  Launchy.debug       = false
  Launchy.application = nil
  Launchy.host_os     = nil
  Launchy.dry_run     = false
  Launchy.path        = ENV.fetch("PATH", nil)
end
string_to_uri(str) click to toggle source
# File lib/launchy.rb, line 70
def string_to_uri(str)
  str = str.to_s
  uri = Addressable::URI.parse(str)
  Launchy.log "URI parsing pass 1 : #{str} -> #{uri.to_hash}"
  unless uri.scheme
    uri = Addressable::URI.heuristic_parse(str)
    Launchy.log "URI parsing pass 2 : #{str} -> #{uri.to_hash}"
  end
  raise Launchy::ArgumentError, "Invalid URI given: #{str.inspect}" unless uri

  uri
end

Private Class Methods

to_bool(arg) click to toggle source
# File lib/launchy.rb, line 151
def to_bool(arg)
  if arg.is_a? String
    arg == "true"
  else
    arg.is_a? TrueClass
  end
end

Internal

↑ top