launchy 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +5 -0
- data/bin/launchy +1 -1
- data/lib/launchy.rb +20 -5
- data/lib/launchy/application.rb +13 -12
- data/lib/launchy/browser.rb +13 -8
- data/lib/launchy/command_line.rb +48 -0
- data/lib/launchy/version.rb +1 -1
- data/spec/application_spec.rb +22 -1
- data/spec/browser_spec.rb +33 -6
- data/spec/launchy_spec.rb +18 -0
- metadata +5 -2
data/CHANGES
CHANGED
data/bin/launchy
CHANGED
data/lib/launchy.rb
CHANGED
@@ -22,11 +22,19 @@ module Launchy
|
|
22
22
|
|
23
23
|
class << self
|
24
24
|
def open(*params)
|
25
|
-
|
26
|
-
|
27
|
-
klass
|
28
|
-
|
29
|
-
|
25
|
+
begin
|
26
|
+
klass = Launchy::Application.find_application_class_for(*params)
|
27
|
+
if klass then
|
28
|
+
klass.run(*params)
|
29
|
+
else
|
30
|
+
msg = "Unable to launch #{params.join(' ')}"
|
31
|
+
Launchy.log "#{self.name} : #{msg}"
|
32
|
+
$stderr.puts msg
|
33
|
+
end
|
34
|
+
rescue Exception => e
|
35
|
+
msg = "Failure in opening #{params.join(' ')} : #{e}"
|
36
|
+
Launchy.log "#{self.name} : #{msg}"
|
37
|
+
$stderr.puts msg
|
30
38
|
end
|
31
39
|
end
|
32
40
|
|
@@ -37,7 +45,14 @@ module Launchy
|
|
37
45
|
$stderr.puts "LAUNCHY_DEBUG: #{msg}"
|
38
46
|
end
|
39
47
|
end
|
48
|
+
|
49
|
+
# Create an instance of the commandline application of launchy
|
50
|
+
def command_line
|
51
|
+
Launchy::CommandLine.new
|
52
|
+
end
|
40
53
|
end
|
54
|
+
|
55
|
+
|
41
56
|
end
|
42
57
|
|
43
58
|
Launchy.require_all_libs_relative_to(__FILE__)
|
data/lib/launchy/application.rb
CHANGED
@@ -14,10 +14,10 @@ module Launchy
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def find_application_class_for(*args)
|
17
|
-
Launchy.log "finding application classes for [#{args.join(' ')}]"
|
17
|
+
Launchy.log "#{self.name} : finding application classes for [#{args.join(' ')}]"
|
18
18
|
application_classes.find do |klass|
|
19
|
+
Launchy.log "#{self.name} : Trying #{klass.name}"
|
19
20
|
if klass.handle?(*args) then
|
20
|
-
Launchy.log " #{klass.name}"
|
21
21
|
true
|
22
22
|
else
|
23
23
|
false
|
@@ -32,18 +32,18 @@ module Launchy
|
|
32
32
|
paths.each do |path|
|
33
33
|
file = File.join(path,bin)
|
34
34
|
if File.executable?(file) then
|
35
|
-
Launchy.log "found executable #{file}"
|
35
|
+
Launchy.log "#{self.name} : found executable #{file}"
|
36
36
|
return file
|
37
37
|
end
|
38
38
|
end
|
39
|
-
Launchy.log "Unable to find `#{bin}' in
|
39
|
+
Launchy.log "#{self.name} : Unable to find `#{bin}' in #{paths.join(', ')}"
|
40
40
|
return nil
|
41
41
|
end
|
42
42
|
|
43
43
|
# return the current 'host_os' string from ruby's configuration
|
44
44
|
def my_os
|
45
45
|
if ENV['LAUNCHY_HOST_OS'] then
|
46
|
-
Launchy.log "Using LAUNCHY_HOST_OS override of '#{ENV['LAUNCHY_HOST_OS']}'"
|
46
|
+
Launchy.log "#{self.name} : Using LAUNCHY_HOST_OS override of '#{ENV['LAUNCHY_HOST_OS']}'"
|
47
47
|
return ENV['LAUNCHY_HOST_OS']
|
48
48
|
else
|
49
49
|
::Config::CONFIG['host_os']
|
@@ -92,7 +92,7 @@ module Launchy
|
|
92
92
|
@nix_desktop_environment = :xfce
|
93
93
|
end
|
94
94
|
end
|
95
|
-
Launchy.log "nix_desktop_environment => #{@
|
95
|
+
Launchy.log "#{self.class.name} : nix_desktop_environment => '#{@nix_desktop_environment}'"
|
96
96
|
end
|
97
97
|
return @nix_desktop_environment
|
98
98
|
end
|
@@ -118,22 +118,22 @@ module Launchy
|
|
118
118
|
def app_list
|
119
119
|
@app_list ||= self.send("#{my_os_family}_app_list")
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
# On darwin a good general default is the 'open' executable.
|
123
123
|
def darwin_app_list
|
124
|
-
Launchy.log "Using 'open' application on darwin."
|
124
|
+
Launchy.log "#{self.class.name} : Using 'open' application on darwin."
|
125
125
|
[ find_executable('open') ]
|
126
126
|
end
|
127
127
|
|
128
128
|
# On windows a good general default is the 'start' Command Shell command
|
129
129
|
def windows_app_list
|
130
|
-
Launchy.log "Using 'start' command on windows."
|
130
|
+
Launchy.log "#{self.class.name} : Using 'start' command on windows."
|
131
131
|
%w[ start ]
|
132
132
|
end
|
133
133
|
|
134
134
|
# Cygwin uses the windows start but through an explicit execution of the cmd shell
|
135
135
|
def cygwin_app_list
|
136
|
-
Launchy.log "Using 'cmd /C start' on windows."
|
136
|
+
Launchy.log "#{self.class.name} : Using 'cmd /C start' on windows."
|
137
137
|
[ "cmd /C start" ]
|
138
138
|
end
|
139
139
|
|
@@ -141,11 +141,12 @@ module Launchy
|
|
141
141
|
def run(cmd,*args)
|
142
142
|
args.unshift(cmd)
|
143
143
|
cmd_line = args.join(' ')
|
144
|
-
Launchy.log "Spawning on #{my_os_family} : #{cmd_line}"
|
144
|
+
Launchy.log "#{self.class.name} : Spawning on #{my_os_family} : #{cmd_line}"
|
145
|
+
|
145
146
|
if my_os_family == :windows then
|
146
147
|
system cmd_line
|
147
148
|
else
|
148
|
-
# fork and the child process should NOT run any exit handlers
|
149
|
+
# fork, and the child process should NOT run any exit handlers
|
149
150
|
child_pid = fork do
|
150
151
|
cmd_line += " > /dev/null 2>&1"
|
151
152
|
system cmd_line
|
data/lib/launchy/browser.rb
CHANGED
@@ -21,9 +21,12 @@ module Launchy
|
|
21
21
|
# return true if this class can handle the given parameter(s)
|
22
22
|
def handle?(*args)
|
23
23
|
begin
|
24
|
+
Launchy.log "#{self.name} : testing if [#{args[0]}] (#{args[0].class}) is a url."
|
24
25
|
uri = URI.parse(args[0])
|
25
|
-
|
26
|
-
rescue Exception
|
26
|
+
result = [URI::HTTP, URI::HTTPS, URI::FTP].include?(uri.class)
|
27
|
+
rescue Exception => e
|
28
|
+
# hmm... why does rcov not see that this is executed ?
|
29
|
+
Launchy.log "#{self.name} : not a url, #{e}"
|
27
30
|
return false
|
28
31
|
end
|
29
32
|
end
|
@@ -46,9 +49,9 @@ module Launchy
|
|
46
49
|
browser_cmds << FALLBACK_BROWSERS
|
47
50
|
browser_cmds.flatten!
|
48
51
|
browser_cmds.delete_if { |b| b.nil? || (b.strip.size == 0) }
|
49
|
-
Launchy.log "Initial *Nix Browser List: #{browser_cmds.join(', ')}"
|
52
|
+
Launchy.log "#{self.class.name} : Initial *Nix Browser List: #{browser_cmds.join(', ')}"
|
50
53
|
@nix_app_list = browser_cmds.collect { |bin| find_executable(bin) }.find_all { |x| not x.nil? }
|
51
|
-
Launchy.log "Filtered *Nix Browser List: #{@nix_app_list.join(', ')}"
|
54
|
+
Launchy.log "#{self.class.name} : Filtered *Nix Browser List: #{@nix_app_list.join(', ')}"
|
52
55
|
end
|
53
56
|
@nix_app_list
|
54
57
|
end
|
@@ -57,16 +60,18 @@ module Launchy
|
|
57
60
|
def browser
|
58
61
|
if not @browser then
|
59
62
|
if ENV['LAUNCHY_BROWSER'] and File.exists?(ENV['LAUNCHY_BROWSER']) then
|
60
|
-
Launchy.log "Using LAUNCHY_BROWSER environment variable : #{ENV['LAUNCHY_BROWSER']}"
|
63
|
+
Launchy.log "#{self.class.name} : Using LAUNCHY_BROWSER environment variable : #{ENV['LAUNCHY_BROWSER']}"
|
61
64
|
@browser = ENV['LAUNCHY_BROWSER']
|
62
65
|
elsif ENV['BROWSER'] and File.exists?(ENV['BROWSER']) then
|
63
|
-
Launchy.log "Using BROWSER environment variable : #{ENV['BROWSER']}"
|
66
|
+
Launchy.log "#{self.class.name} : Using BROWSER environment variable : #{ENV['BROWSER']}"
|
64
67
|
@browser = ENV['BROWSER']
|
65
68
|
elsif app_list.size > 0 then
|
66
69
|
@browser = app_list.first
|
67
|
-
Launchy.log "Using application list : #{@browser}"
|
70
|
+
Launchy.log "#{self.class.name} : Using application list : #{@browser}"
|
68
71
|
else
|
69
|
-
|
72
|
+
msg = "Unable to launch. No Browser application found."
|
73
|
+
Launchy.log "#{self.class.name} : #{msg}"
|
74
|
+
$stderr.puts msg
|
70
75
|
end
|
71
76
|
end
|
72
77
|
return @browser
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Launchy
|
4
|
+
class CommandLine
|
5
|
+
|
6
|
+
def parser
|
7
|
+
@parser ||= OptionParser.new do |op|
|
8
|
+
op.banner = "Usage: launchy [options] url"
|
9
|
+
op.separator ""
|
10
|
+
op.on("-d", "--debug", "Force debug, output lots of information.",
|
11
|
+
"This sets the LAUNCHY_DEBUG environment variable to 'true'.") do |d|
|
12
|
+
ENV["LAUNCHY_DEBUG"] = 'true'
|
13
|
+
end
|
14
|
+
|
15
|
+
op.on("-h", "--help", "Print this message") do |h|
|
16
|
+
puts op.to_s
|
17
|
+
exit 0
|
18
|
+
end
|
19
|
+
|
20
|
+
op.on("-v", "--version", "Output the version of Launchy") do |v|
|
21
|
+
puts "Launchy version #{Launchy::VERSION}"
|
22
|
+
exit 0
|
23
|
+
end
|
24
|
+
|
25
|
+
op.on("-o", "--host-os HOST_OS","Force the behavior of a particular host os.",
|
26
|
+
"This sets the LAUNCHY_HOST_OS environment variable.") do |os|
|
27
|
+
ENV["LAUNCHY_HOST_OS"] = os
|
28
|
+
end
|
29
|
+
|
30
|
+
op.on("-b", "--browser BROWSER", "Force launchy to use a particular browser.",
|
31
|
+
"This sets the LAUNCHY_BROWSER environment variable.") do |browser|
|
32
|
+
ENV["LAUNCHY_BROWSER"] = browser
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def run(argv = ARGV)
|
38
|
+
begin
|
39
|
+
parser.parse!(argv)
|
40
|
+
Launchy.open(*argv)
|
41
|
+
rescue ::OptionParser::ParseError => pe
|
42
|
+
$stderr.puts "#{parser.programn_name}: #{pe}"
|
43
|
+
$stderr.puts "Try `#{parser.program_name} --help' for more information."
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/launchy/version.rb
CHANGED
data/spec/application_spec.rb
CHANGED
@@ -6,7 +6,6 @@ describe Launchy::Application do
|
|
6
6
|
yml = YAML::load(IO.read(File.join(File.dirname(__FILE__),"tattle-host-os.yml")))
|
7
7
|
@host_os = yml['host_os']
|
8
8
|
@app = Launchy::Application.new
|
9
|
-
|
10
9
|
end
|
11
10
|
|
12
11
|
it "should find all tattled os" do
|
@@ -35,4 +34,26 @@ describe Launchy::Application do
|
|
35
34
|
it "should find the correct class to launch an ftp url" do
|
36
35
|
Launchy::Application.find_application_class_for("ftp://ftp.ruby-lang.org/pub/ruby/").should == Launchy::Browser
|
37
36
|
end
|
37
|
+
|
38
|
+
it "knows when it cannot find an application class" do
|
39
|
+
Launchy::Application.find_application_class_for("xyzzy:stuff,things").should == nil
|
40
|
+
end
|
41
|
+
|
42
|
+
it "allows for environmental override of host_os" do
|
43
|
+
ENV["LAUNCHY_HOST_OS"] = "hal-9000"
|
44
|
+
Launchy::Application.my_os.should == "hal-9000"
|
45
|
+
ENV["LAUNCHY_HOST_OS"] = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
it "can detect the desktop environment of a *nix machien" do
|
49
|
+
@app.nix_desktop_environment.should == :generic
|
50
|
+
|
51
|
+
{ "KDE_FULL_SESSION" => :kde,
|
52
|
+
"KDE_SESSION_UID" => :kde,
|
53
|
+
"GNOME_DESKTOP_SESSION_ID" => :gnome }.each_pair do |k,v|
|
54
|
+
ENV[k] = "launchy-test"
|
55
|
+
Launchy::Application.new.nix_desktop_environment.should == v
|
56
|
+
ENV[k] = nil
|
57
|
+
end
|
58
|
+
end
|
38
59
|
end
|
data/spec/browser_spec.rb
CHANGED
@@ -1,23 +1,50 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__),"spec_helper.rb")
|
2
|
-
|
2
|
+
require 'stringio'
|
3
3
|
describe Launchy::Browser do
|
4
4
|
it "should find a path to a executable" do
|
5
5
|
File.executable?(Launchy::Browser.new.browser).should == true
|
6
6
|
end
|
7
7
|
|
8
8
|
it "should handle an http url" do
|
9
|
-
Launchy::Browser.handle?("http://www.example.com") == true
|
9
|
+
Launchy::Browser.handle?("http://www.example.com").should == true
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should handle an https url" do
|
13
|
-
Launchy::Browser.handle?("https://www.example.com") == true
|
13
|
+
Launchy::Browser.handle?("https://www.example.com").should == true
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should handle an ftp url" do
|
17
|
-
Launchy::Browser.handle?("ftp://download.example.com") == true
|
17
|
+
Launchy::Browser.handle?("ftp://download.example.com").should == true
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should not handle a mailto url" do
|
21
|
-
Launchy::Browser.handle?("mailto:jeremy@example.com") == false
|
21
|
+
Launchy::Browser.handle?("mailto:jeremy@example.com").should == false
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
|
+
it "creates a default unix application list" do
|
25
|
+
Launchy::Browser.new.nix_app_list.class.should == Array
|
26
|
+
end
|
27
|
+
|
28
|
+
it "can use environmental variable overrides for the browser" do
|
29
|
+
{ "BROWSER" => "/usr/bin/true",
|
30
|
+
"LAUNCHY_BROWSER" => "/usr/bin/true"}.each_pair do |e,v|
|
31
|
+
ENV[e] = v
|
32
|
+
Launchy::Browser.new.browser.should == v
|
33
|
+
ENV[e] = nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "reports when it cannot find an browser" do
|
38
|
+
old_error = $stderr
|
39
|
+
$stderr = StringIO.new
|
40
|
+
ENV["LAUNCHY_HOST_OS"] = "linux"
|
41
|
+
begin
|
42
|
+
browser = Launchy::Browser.new
|
43
|
+
rescue => e
|
44
|
+
e.message.should =~ /Unable to find browser to launch for os family/m
|
45
|
+
end
|
46
|
+
ENV["LAUNCHY_HOST_OS"] = nil
|
47
|
+
$stderr.string.should =~ /Unable to launch. No Browser application found./m
|
48
|
+
$stderr = old_error
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),"spec_helper.rb")
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
describe Launchy do
|
5
|
+
it "instantiates an insteadn of Launchy::CommandLine for commandline" do
|
6
|
+
Launchy.command_line.class.should == Launchy::CommandLine
|
7
|
+
end
|
8
|
+
|
9
|
+
it "logs to stderr when LAUNCHY_DEBUG environment variable is set" do
|
10
|
+
ENV["LAUNCHY_DEBUG"] = 'true'
|
11
|
+
old_stderr = $stderr
|
12
|
+
$stderr = StringIO.new
|
13
|
+
Launchy.log "This is a test log message"
|
14
|
+
$stderr.string.strip.should == "LAUNCHY_DEBUG: This is a test log message"
|
15
|
+
$stderr = old_stderr
|
16
|
+
ENV["LAUNCHY_DEBUG"] = nil
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: launchy
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.3.
|
7
|
-
date: 2007-08
|
6
|
+
version: 0.3.1
|
7
|
+
date: 2007-09-08 00:00:00 -06:00
|
8
8
|
summary: A helper to launch apps from within ruby programs.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -31,6 +31,7 @@ authors:
|
|
31
31
|
files:
|
32
32
|
- spec/application_spec.rb
|
33
33
|
- spec/browser_spec.rb
|
34
|
+
- spec/launchy_spec.rb
|
34
35
|
- spec/spec_helper.rb
|
35
36
|
- spec/version_spec.rb
|
36
37
|
- CHANGES
|
@@ -38,6 +39,7 @@ files:
|
|
38
39
|
- README
|
39
40
|
- lib/launchy/application.rb
|
40
41
|
- lib/launchy/browser.rb
|
42
|
+
- lib/launchy/command_line.rb
|
41
43
|
- lib/launchy/gemspec.rb
|
42
44
|
- lib/launchy/specification.rb
|
43
45
|
- lib/launchy/version.rb
|
@@ -46,6 +48,7 @@ files:
|
|
46
48
|
test_files:
|
47
49
|
- spec/application_spec.rb
|
48
50
|
- spec/browser_spec.rb
|
51
|
+
- spec/launchy_spec.rb
|
49
52
|
- spec/spec_helper.rb
|
50
53
|
- spec/version_spec.rb
|
51
54
|
rdoc_options:
|