File: application.rb

package info (click to toggle)
ruby-launchy 2.5.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 292 kB
  • sloc: ruby: 1,285; makefile: 6
file content (62 lines) | stat: -rw-r--r-- 1,928 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
require 'set'
module Launchy
  #
  # Application is the base class of all the application types that launchy may
  # invoke. It essentially defines the public api of the launchy system.
  #
  # Every class that inherits from Application must define:
  #
  # 1. A constructor taking no parameters
  # 2. An instance method 'open' taking a string or URI as the first parameter and a
  #    hash as the second
  # 3. A class method 'handles?' that takes a String and returns true if that
  #    class can handle the input.
  class Application
    extend DescendantTracker

    class << self
      # Find the application that handles the given uri.
      #
      # returns the Class that can handle the uri
      def handling( uri )
        klass = find_child( :handles?, uri )
        return klass if klass
        raise ApplicationNotFoundError, "No application found to handle '#{uri}'"
      end

      #
      # Find the given executable in the available paths
      def find_executable( bin, *paths )
        paths = Launchy.path.split( File::PATH_SEPARATOR ) if paths.empty?
        paths.each do |path|
          file = File.join( path, bin )
          if File.executable?( file ) then
            Launchy.log "#{self.name} : found executable #{file}"
            return file
          end
        end
        Launchy.log "#{self.name} : Unable to find `#{bin}' in #{paths.join(", ")}"
        return nil
      end
    end

    attr_reader :host_os_family
    attr_reader :ruby_engine
    attr_reader :runner

    def initialize
      @host_os_family = Launchy::Detect::HostOsFamily.detect
      @ruby_engine    = Launchy::Detect::RubyEngine.detect
      @runner         = Launchy::Detect::Runner.detect
    end

    def find_executable( bin, *paths )
      Application.find_executable( bin, *paths )
    end

    def run( cmd, *args )
      runner.run( cmd, *args )
    end
  end
end
require 'launchy/applications/browser'