Sha256: 8b07da8b03174252befac99b22251452f19fb9c922e6b134defce853e4626f8d

Contents?: true

Size: 1.37 KB

Versions: 10

Compression:

Stored size: 1.37 KB

Contents

require 'rubygems/platform'

module Revealing
  class Prerequisite
    attr_reader :command
    alias :to_s :command

    def initialize(command, details = nil)
      @command = command

      case details
      when NilClass
        @package_info = same_as_command(command)
      when String
        @package_info = different_but_same_on_all_platforms(details)
      when Hash
        @package_info = different_for_each_platform(details)
      when Proc
        @package_info = callable(details)
      else
        raise "Don't know how to interpret '#{package_info.inspect}' as package info."
      end
    end

    def available?
      system("sh -c 'command -v #{command} > /dev/null'")
    end

    def install_hint
      @package_info[Gem::Platform.local.os.to_sym]
    end

    private

    def same_as_command(command)
      {
        darwin: "brew install #{command}",
        linux: "apt install #{command}",
      }
    end

    def different_but_same_on_all_platforms(details)
      {
        darwin: "brew install #{details}",
        linux: "apt install #{details}",
      }
    end

    def different_for_each_platform(details)
      {
        darwin: "brew install #{details[:darwin]}",
        linux: "apt install #{details[:linux]}",
      }
    end

    def callable(details)
      {
        darwin: details.call(:darwin),
        linux: details.call(:linux),
      }
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
revealing-1.8.0 lib/revealing/prerequisite.rb
revealing-1.7.1 lib/revealing/prerequisite.rb
revealing-1.7.0 lib/revealing/prerequisite.rb
revealing-1.6.0 lib/revealing/prerequisite.rb
revealing-1.5.0 lib/revealing/prerequisite.rb
revealing-1.4.0 lib/revealing/prerequisite.rb
revealing-1.2.0 lib/revealing/prerequisite.rb
revealing-1.1.0 lib/revealing/prerequisite.rb
revealing-1.0.8 lib/revealing/prerequisite.rb
revealing-1.0.7 lib/revealing/prerequisite.rb