Sha256: 15d82f3b0113ac083169a257b542f0f1a48d9fa3756348497075a3f90cf3bb0c

Contents?: true

Size: 1.26 KB

Versions: 2

Compression:

Stored size: 1.26 KB

Contents

# encoding: utf-8
require 'open3'

module Cliver
  # The interface for Cliver::Detector classes.
  # @see Cliver::Detector::Default for reference implementation
  module Detector
    # Forward to default implementation
    def self.new(*args, &block)
      Default.new(*args, &block)
    end

    # @param executable [String] the executable to test
    # @return [Array<String>]
    def version_command(executable)
      raise NotImplementedError unless defined? super
      super
    end

    # @return [Regexp] - the pattern used against the output
    #                    of the #version_command, which should
    #                    typically be Gem::Version-parsable.
    def version_pattern
      raise NotImplementedError unless defined? super
      super
    end

    # @param executable [String] - the path to the executable to test
    # @return [String] - should be Gem::Version-parsable.
    def detect_version(executable)
      output, _ = Open3.capture2e(*version_command(executable))
      ver = output.scan(version_pattern)
      ver && ver.first
    end

    # This is the interface that any detector must have.
    # @see #detect_version for the returned proc's method signature.
    # @return [Proc]
    def to_proc
      method(:detect_version).to_proc
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cliver-0.1.1 lib/cliver/detector.rb
cliver-0.1.0 lib/cliver/detector.rb