Sha256: ea18e9133abfbf6c797f8b4e3610f530e76a53f7efd5ae7f8cc9abd149cba780

Contents?: true

Size: 1.48 KB

Versions: 6

Compression:

Stored size: 1.48 KB

Contents

# frozen_string_literal: true

require 'rbconfig'

class OsDetector
  include Singleton

  attr_reader :identifier, :version, :hierarchy

  def initialize(*_args)
    @identifier = detect
    @hierarchy = create_hierarchy(@identifier)
  end

  def detect
    host_os = RbConfig::CONFIG['host_os']
    @identifier = case host_os
                  when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
                    :windows
                  when /darwin|mac os/
                    :macosx
                  when /linux/
                    detect_distro
                  when /solaris|bsd/
                    :solaris
                  when /aix/
                    :aix
                  else
                    raise "unknown os: #{host_os.inspect}"
                  end
  end

  private

  def detect_distro
    [Facter::Resolvers::OsRelease,
     Facter::Resolvers::RedHatRelease,
     Facter::Resolvers::SuseRelease].each do |resolver|
      @identifier = resolver.resolve(:identifier)
      @version = resolver.resolve(:version)
      break if @identifier
    end

    @identifier
  end

  def create_hierarchy(operating_system) # rubocop:disable Metrics/CyclomaticComplexity:
    return [] unless operating_system

    case operating_system.to_sym
    when :ubuntu
      %w[Debian]
    when :fedora
      %w[El]
    when :amzn
      %w[El]
    when :rhel
      %w[El]
    when :centos
      %w[El]
    when :opensuse
      %w[Sles]
    else
      [operating_system.to_s.capitalize]
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
facter-4.0.12 lib/framework/detector/os_detector.rb
facter-4.0.11 lib/framework/detector/os_detector.rb
facter-4.0.10.pre lib/framework/detector/os_detector.rb
facter-4.0.9.pre lib/framework/detector/os_detector.rb
facter-4.0.8.pre lib/framework/detector/os_detector.rb
facter-4.0.7.pre lib/framework/detector/os_detector.rb