class Specinfra::HostInventory::ParserFactory

Public Class Methods

instance() click to toggle source
# File lib/koma/ext/specinfra/host_inventory/parser_factory.rb, line 4
def self.instance
  self.new(os)
end
new(os_info) click to toggle source
# File lib/koma/ext/specinfra/host_inventory/parser_factory.rb, line 8
def initialize(os_info)
  @os_info = os_info
end

Public Instance Methods

get(resource_type) click to toggle source
# File lib/koma/ext/specinfra/host_inventory/parser_factory.rb, line 12
def get(resource_type)
  create_parser_class(resource_type)
end

Private Instance Methods

create_parser_class(resource_type) click to toggle source
# File lib/koma/ext/specinfra/host_inventory/parser_factory.rb, line 18
def create_parser_class(resource_type)
  family = @os_info[:family]
  version = @os_info[:release] ? "V#{@os_info[:release].to_i}" : nil
  common_class = Specinfra::HostInventory::Parser
  base_class = common_class.const_get('Base')
  begin
    os_class = family.nil? ? base_class : common_class.const_get(family.capitalize)
  rescue
    parser_class = base_class.const_get(resource_type.to_camel_case)
    return parser_class.create(Specinfra.backend)
  end

  if family && version
    begin
      version_class = os_class.const_get(version)
    rescue
      version_class = os_class.const_get('Base')
    end
  elsif family.nil?
    version_class = os_class
  elsif family != 'base' && version.nil?
    version_class = os_class.const_get('Base')
  end

  begin
    parser_class = version_class.const_get(resource_type.to_camel_case)
  rescue
    version_class = os_class.const_get('Base')
    parser_class = version_class.const_get(resource_type.to_camel_case)
  end

  parser_class.create(Specinfra.backend)
end