launchy 2.0.0-java

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.
@@ -0,0 +1,28 @@
1
+ # vim: ft=ruby
2
+
3
+ require 'autotest/growl'
4
+
5
+ Autotest.add_hook :initialize do |at|
6
+
7
+ at.libs = "lib:spec"
8
+ at.testlib = 'minitest/autorun'
9
+
10
+ at.add_exception 'coverage.info'
11
+ at.add_exception 'coverage'
12
+ at.add_exception '.git'
13
+
14
+ at.clear_mappings
15
+
16
+ at.add_mapping(%r|^spec/.*_spec\.rb$|) do |filename, _|
17
+ filename
18
+ end
19
+
20
+ at.add_mapping(%r|^lib/(.*)\.rb$|) do |_, match|
21
+ [ "test/#{match[1]}_spec.rb" ]
22
+ end
23
+
24
+ at.add_mapping(%r|^spec/spec_helper\.rb|) do
25
+ at.files_matching( %r|^spec/.*_spec\.rb| )
26
+ end
27
+ end
28
+
@@ -0,0 +1,6 @@
1
+ *~
2
+ *.swo
3
+ *.swp
4
+ doc/
5
+ coverage/
6
+ pkg/
data/HISTORY ADDED
@@ -0,0 +1,90 @@
1
+ = Launchy Changlog
2
+
3
+ == Version 2.0.0 - 2011-07-16
4
+
5
+ * Almost a complete rewrite
6
+ * JRuby Support
7
+ * Organization is such that it will be easier to add additional applications
8
+ * Windows behavior possibly fixed, again
9
+
10
+ == Version 1.0.0 - 2011-03-17
11
+
12
+ * Add JRuby support (Stephen Judkins)
13
+ * Remove unused Paths module
14
+ * Switch to using bones
15
+ * Switch to use minitest
16
+ * NOTE, this version was never released.
17
+
18
+ == Version 0.4.0 - 2011-01-27
19
+
20
+ * Add support for file:/// schema (postmodern)
21
+
22
+ == Version 0.3.7 - 2010-07-19
23
+
24
+ * Fix launchy on windows (mikefarmer)
25
+
26
+ == Version 0.3.6 - 2010-02-22
27
+
28
+ * add a test:spec task to run tests without rcov support
29
+ * added 'testing' os family for running tests
30
+
31
+ == Version 0.3.5 - 2009-12-17
32
+
33
+ * clarify that launchy is under ISC license
34
+ * fix missing data file in released gem needed for running specs
35
+
36
+ == Version 0.3.3 - 2009-02-19
37
+
38
+ * pass command line as discrete items to system() to avoid string
39
+ interpretation by the system shell. (Suraj N. Kurapati)
40
+ * rework project layout and tasks
41
+
42
+ == Version 0.3.2 - 2008-05-21
43
+
44
+ * detect aix and mingw as known operating systems.
45
+
46
+ == Version 0.3.1 - 2007-09-08
47
+
48
+ * finalize the command line wrapper around the launchy library.
49
+ * added more tests
50
+
51
+ == Version 0.3.0 - 2007-08-30
52
+
53
+ * reorganize the code structure, removing Spawnable namespace
54
+ * removed 'do_magic' method, changed it to 'open'
55
+ * added override environment variable LAUNCHY_HOST_OS for testing
56
+ * fix broken cygwin support [Bug #13472]
57
+
58
+ == Version 0.2.1 - 2007-08-18
59
+
60
+ * fix inability to find windows executables [Bug #13132]
61
+
62
+ == Version 0.2.0 - 2007-08-11
63
+
64
+ * rework browser finding
65
+ * manual override with LAUNCHY_BROWSER environment variable
66
+ * on *nix use desktop application launcher with fallback to list of browsers
67
+ * On windows, switch to 'start' command and remove dependency on win32-process
68
+ * removed win32 gem
69
+ * Add debug output by setting LAUNCHY_DEBUG environment variable to 'true'
70
+
71
+ == Version 0.1.2 - 2007-08-11
72
+
73
+ * forked child exits without calling at_exit handlers
74
+
75
+ == Version 0.1.1
76
+
77
+ * fixed rubyforge task to release mswin32 gem also
78
+
79
+ == Version 0.1.0
80
+
81
+ * Initial public release
82
+ * switched to using fork to spawn process and require 'win32/process' if on windows
83
+
84
+ == Version 0.0.2
85
+
86
+ * First attempt at using systemu to spawn processes
87
+
88
+ == Version 0.0.1
89
+
90
+ * Initially working release
data/LICENSE ADDED
@@ -0,0 +1,16 @@
1
+ ISC LICENSE - http://opensource.org/licenses/isc-license.txt
2
+
3
+ Copyright (c) 2007-2011 Jeremy Hinegardner
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+
data/NOTES ADDED
@@ -0,0 +1 @@
1
+ * Allow for new tab/ new window for opening a browser
data/README ADDED
@@ -0,0 +1,53 @@
1
+ == launchy
2
+
3
+ * Homepage[http://www.copiousfreetime.org/projects/launchy/]
4
+ * {Github Project}[http://github.com/copiousfreetime/launchy]
5
+ * email jeremy at hinegardner dot org
6
+
7
+ == DESCRIPTION
8
+
9
+ Launchy is helper class for launching cross-platform applications in a
10
+ fire and forget manner.
11
+
12
+ There are application concepts (browser, email client, etc) that are
13
+ common across all platforms, and they may be launched differently on
14
+ each platform. Launchy is here to make a common approach to launching
15
+ external application from within ruby programs.
16
+
17
+ == FEATURES
18
+
19
+ Currently only launching a browser is supported.
20
+
21
+ == SYNOPSIS
22
+
23
+ From within your ruby code you can trust launchy to do the right thing:
24
+
25
+ Launchy.open("http://www.ruby-lang.org/")
26
+
27
+ Or, if you want to launch the application yourself:
28
+
29
+ Launchy::Browser.open("http://www.ruby-lang.org/")
30
+
31
+ OR
32
+
33
+ Launchy::Browser.new.open("http://www.ruby-lang.org/")
34
+
35
+ == ISC LICENSE
36
+
37
+ http://opensource.org/licenses/isc-license.txt
38
+
39
+ Copyright (c) 2007-2011 Jeremy Hinegardner
40
+
41
+ Permission to use, copy, modify, and/or distribute this software for any
42
+ purpose with or without fee is hereby granted, provided that the above
43
+ copyright notice
44
+ and this permission notice appear in all copies.
45
+
46
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
47
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
48
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
49
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
50
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
51
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
52
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
53
+
@@ -0,0 +1,58 @@
1
+ #--
2
+ # Copyright (c) 2007 Jeremy Hinegardner
3
+ # All rights reserved. See LICENSE and/or COPYING for details.
4
+ #++
5
+
6
+ begin
7
+ require 'bones'
8
+ rescue LoadError
9
+ abort '### Please install the "bones" gem ###'
10
+ end
11
+
12
+ task :default => 'test:run'
13
+ task 'gem:release' => 'test:run'
14
+
15
+ $:.unshift( "lib" )
16
+ require 'launchy/version'
17
+
18
+ Bones {
19
+ name "launchy"
20
+ authors "Jeremy Hinegardner"
21
+ email "jeremy@copiousfreetime.org"
22
+ url 'http://www.copiousfreetime.org/projects/launchy'
23
+ version Launchy::VERSION
24
+
25
+ ruby_opts %w[ -W0 -rubygems ]
26
+ readme_file 'README'
27
+ ignore_file '.gitignore'
28
+ history_file 'HISTORY'
29
+
30
+ rdoc.include << "README" << "HISTORY" << "LICENSE"
31
+
32
+ summary 'Launchy is helper class for launching cross-platform applications in a fire and forget manner.'
33
+ description <<_
34
+ Launchy is helper class for launching cross-platform applications in a
35
+ fire and forget manner.
36
+
37
+ There are application concepts (browser, email client, etc) that are
38
+ common across all platforms, and they may be launched differently on
39
+ each platform. Launchy is here to make a common approach to launching
40
+ external application from within ruby programs.
41
+ _
42
+
43
+ if RUBY_PLATFORM == "java" then
44
+ depend_on "spoon" , "~> 0.0.1"
45
+ gem.extras = { :platform => Gem::Platform.new( "java" ) }
46
+ end
47
+
48
+ depend_on "rake" , "~> 0.9.2", :development => true
49
+ depend_on "minitest", "~> 2.3.1", :development => true
50
+ depend_on 'bones' , "~> 3.7.0", :development => true
51
+
52
+ if defined?( RUBY_ENGINE ) and RUBY_ENGINE == "jruby" then
53
+ depend_on 'spoon' , "~> 0.0.1"
54
+ end
55
+
56
+ test.files = FileList["spec/**/*_spec.rb"]
57
+ test.opts << "-w -Ilib:spec"
58
+ }
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'launchy'
4
+ Launchy::Cli.new.run( ARGV, ENV )
@@ -0,0 +1,119 @@
1
+ require 'uri'
2
+
3
+ #
4
+ # Top level entry point into Launchy. Almost everyone will just use the single
5
+ # call:
6
+ #
7
+ # Launchy.open( uri, options = {} )
8
+ #
9
+ # The currently defined global options are:
10
+ #
11
+ # :debug Turn on debugging output
12
+ # :application Explicitly state what application class is going to be used
13
+ # :host_os Explicitly state what host operating system to pretend to be
14
+ # :ruby_engine Explicitly state what ruby engine to pretend to be under
15
+ #
16
+ # Other options may be used, and those will be passed directly to the
17
+ # application class
18
+ #
19
+ module Launchy
20
+
21
+ class << self
22
+ #
23
+ # Convenience method to launch an item
24
+ #
25
+ def open(uri, options = {} )
26
+ begin
27
+ extract_global_options( options )
28
+ uri = URI.parse( uri )
29
+ if app = Launchy::Application.for_scheme( uri ) then
30
+ app.new.open( uri, options )
31
+ else
32
+ msg = "Unable to launch #{uri} with options #{options.inspect}"
33
+ Launchy.log "#{self.name} : #{msg}"
34
+ $stderr.puts msg
35
+ end
36
+ rescue Exception => e
37
+ msg = "Failure in opening #{uri} with options #{options.inspect}: #{e}"
38
+ Launchy.log "#{self.name} : #{msg}"
39
+ e.backtrace.each do |bt|
40
+ Launchy.log bt
41
+ end
42
+ $stderr.puts msg
43
+ end
44
+ end
45
+
46
+ def reset_global_options
47
+ Launchy.debug = false
48
+ Launchy.application = nil
49
+ Launchy.host_os = nil
50
+ Launchy.ruby_engine = nil
51
+ Launchy.dry_run = false
52
+ end
53
+
54
+ def extract_global_options( options )
55
+ Launchy.debug = options.delete( :debug ) || ENV['LAUNCHY_DEBUG']
56
+ Launchy.application = options.delete( :application ) || ENV['LAUNCHY_APPLICATION']
57
+ Launchy.host_os = options.delete( :host_os ) || ENV['LAUNCHY_HOST_OS']
58
+ Launchy.ruby_engine = options.delete( :ruby_engine ) || ENV['LAUNCHY_RUBY_ENGINE']
59
+ Launchy.dry_run = options.delete( :dry_run )
60
+ end
61
+
62
+ def debug=( d )
63
+ @debug = (d == "true")
64
+ end
65
+
66
+ # we may do logging before a call to 'open', hence the need to check
67
+ # LAUNCHY_DEBUG here
68
+ def debug?
69
+ @debug || (ENV['LAUNCHY_DEBUG'] == 'true')
70
+ end
71
+
72
+ def application=( app )
73
+ @application = app
74
+ end
75
+
76
+ def application
77
+ @application || ENV['LAUNCHY_APPLICATION']
78
+ end
79
+
80
+ def host_os=( host_os )
81
+ @host_os = host_os
82
+ end
83
+
84
+ def host_os
85
+ @host_os || ENV['LAUNCHY_HOST_OS']
86
+ end
87
+
88
+ def ruby_engine=( ruby_engine )
89
+ @ruby_engine = ruby_engine
90
+ end
91
+
92
+ def ruby_engine
93
+ @ruby_engine || ENV['LAUNCHY_RUBY_ENGINE']
94
+ end
95
+
96
+ def dry_run=( dry_run )
97
+ @dry_run = dry_run
98
+ end
99
+
100
+ def dry_run?
101
+ @dry_run
102
+ end
103
+
104
+ def bug_report_message
105
+ "Please file a bug at https://github.com/copiousfreetime/launchy/issues/new"
106
+ end
107
+
108
+ def log(msg)
109
+ $stderr.puts "LAUNCHY_DEBUG: #{msg}" if Launchy.debug?
110
+ end
111
+ end
112
+ end
113
+
114
+ require 'launchy/version'
115
+ require 'launchy/cli'
116
+ require 'launchy/descendant_tracker'
117
+ require 'launchy/error'
118
+ require 'launchy/application'
119
+ require 'launchy/detect'
@@ -0,0 +1,81 @@
1
+ require 'set'
2
+ module Launchy
3
+ #
4
+ # Application is the base class of all the application types that launchy may
5
+ # invoke. It essentially defines the public api of the launchy system.
6
+ #
7
+ # Every class that inherits from Application must define:
8
+ #
9
+ # 1. A constructor taking no parameters
10
+ # 2. An instance method 'open' taking a string or URI as the first parameter and a
11
+ # hash as the second
12
+ # 3. A class method 'schemes' that returns an array of Strings containing the
13
+ # schemes that the Application will handle
14
+ class Application
15
+ extend DescendantTracker
16
+
17
+ class << self
18
+ #
19
+ # The list of all the schemes all the applications know
20
+ #
21
+ def scheme_list
22
+ children.collect { |a| a.schemes }.flatten.sort
23
+ end
24
+
25
+ #
26
+ # if this application handles the given scheme
27
+ #
28
+ def handles?( scheme )
29
+ schemes.include?( scheme )
30
+ end
31
+
32
+ #
33
+ # Find the application that handles the given scheme. May take either a
34
+ # String or something that responds_to?( :scheme )
35
+ #
36
+ def for_scheme( scheme )
37
+ if scheme.respond_to?( :scheme ) then
38
+ scheme = scheme.scheme
39
+ end
40
+
41
+ klass = find_child( :handles?, scheme )
42
+ return klass if klass
43
+
44
+ raise SchemeNotFoundError, "No application found to handle scheme '#{scheme}'. Known schemes: #{scheme_list.join(", ")}"
45
+ end
46
+
47
+ #
48
+ # Find the given executable in the available paths
49
+ def find_executable( bin, *paths )
50
+ paths = ENV['PATH'].split( File::PATH_SEPARATOR ) if paths.empty?
51
+ paths.each do |path|
52
+ file = File.join( path, bin )
53
+ if File.executable?( file ) then
54
+ Launchy.log "#{self.name} : found executable #{file}"
55
+ return file
56
+ end
57
+ end
58
+ Launchy.log "#{self.name} : Unable to find `#{bin}' in #{paths.join(", ")}"
59
+ return nil
60
+ end
61
+ end
62
+
63
+ attr_reader :host_os_family
64
+ attr_reader :ruby_engine
65
+ attr_reader :runner
66
+ def initialize
67
+ @host_os_family = Launchy::Detect::HostOsFamily.detect
68
+ @ruby_engine = Launchy::Detect::RubyEngine.detect
69
+ @runner = Launchy::Detect::Runner.detect
70
+ end
71
+
72
+ def find_executable( bin, *paths )
73
+ Application.find_executable( bin, *paths )
74
+ end
75
+
76
+ def run( cmd, *args )
77
+ runner.run( cmd, *args )
78
+ end
79
+ end
80
+ end
81
+ require 'launchy/applications/browser'