Sha256: 4c3171a933254ec4f6f3163b7e4f7518ae84b72829aabd8e634d1557d256c4ed

Contents?: true

Size: 1.41 KB

Versions: 25

Compression:

Stored size: 1.41 KB

Contents

require 'linux_admin/etc_issue'

module LinuxAdmin
  module Distros
    def self.generic
      @generic ||= Distro.new(:generic)
    end

    def self.rhel
      @rhel ||= Distro.new(:rhel, '/etc/redhat-release', ['red hat', 'centos'], LinuxAdmin::Rpm)
    end

    def self.fedora
      @fedora ||= Distro.new(:fedora, "/etc/fedora-release", ['Fedora'], LinuxAdmin::Rpm)
    end

    def self.ubuntu
      @ubuntu ||= Distro.new(:ubuntu, nil, ['ubuntu'], LinuxAdmin::Deb)
    end

    def self.all
      @distros ||= [rhel, fedora, ubuntu, generic]
    end

    def self.local
      @local ||= begin
        Distros.all.detect(&:detected?) || Distros.generic
      end
    end

    class Distro
      attr_accessor :release_file, :etc_issue_keywords, :info_class

      def initialize(id, release_file = nil, etc_issue_keywords = [], info_class = nil)
        @id                 = id
        @release_file       = release_file
        @etc_issue_keywords = etc_issue_keywords
        @info_class         = info_class
      end

      def detected?
        detected_by_etc_issue? || detected_by_etc_release?
      end

      def detected_by_etc_issue?
        etc_issue_keywords && etc_issue_keywords.any? { |k| EtcIssue.instance.include?(k) }
      end

      def detected_by_etc_release?
        release_file && File.exist?(release_file)
      end

      def info(pkg)
        info_class ? info_class.info(pkg) : nil
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
linux_admin-4.0.0 lib/linux_admin/distro.rb
linux_admin-3.0.0 lib/linux_admin/distro.rb
linux_admin-2.0.2 lib/linux_admin/distro.rb
linux_admin-2.0.1 lib/linux_admin/distro.rb
linux_admin-2.0.0 lib/linux_admin/distro.rb
linux_admin-1.2.4 lib/linux_admin/distro.rb
linux_admin-1.2.3 lib/linux_admin/distro.rb
linux_admin-1.2.2 lib/linux_admin/distro.rb
linux_admin-1.2.1 lib/linux_admin/distro.rb
linux_admin-1.0.1 lib/linux_admin/distro.rb
linux_admin-1.2.0 lib/linux_admin/distro.rb
linux_admin-1.1.0 lib/linux_admin/distro.rb
linux_admin-1.0.0 lib/linux_admin/distro.rb
linux_admin-0.20.2 lib/linux_admin/distro.rb
linux_admin-0.20.1 lib/linux_admin/distro.rb
linux_admin-0.20.0 lib/linux_admin/distro.rb
linux_admin-0.19.0 lib/linux_admin/distro.rb
linux_admin-0.18.0 lib/linux_admin/distro.rb
linux_admin-0.17.0 lib/linux_admin/distro.rb
linux_admin-0.16.0 lib/linux_admin/distro.rb