class BoxGrinder::ApplianceDefinitionHelper

Attributes

appliance_configs[R]
appliance_parser[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/boxgrinder-core/helpers/appliance-definition-helper.rb, line 25
def initialize(options = {})
  @log = options[:log] || LogHelper.new
  @appliance_configs = []
  @appliance_parser = ApplianceParser.new(:log => @log)
end

Public Instance Methods

read_definitions(definition, content_type = nil) click to toggle source

Reads definition provided as string. This string can be a YAML document. In this case definition is parsed and an ApplianceConfig object is returned. In other cases it tries to search for a file with provided name.

# File lib/boxgrinder-core/helpers/appliance-definition-helper.rb, line 37
def read_definitions(definition, content_type = nil)
  @appliance_parser.load_schemas
  if File.exists?(definition)
    definition_file_extension = File.extname(definition)

    appliance_config =
        case definition_file_extension
          when '.appl', '.yml', '.yaml'
            @appliance_parser.parse_definition(definition)
          else
            unless content_type.nil?
              case content_type
                when 'application/x-yaml', 'text/yaml'
                  @appliance_parser.parse_definition(definition)
              end
            end
        end

    return if appliance_config.nil?

    @appliance_configs << appliance_config
    appliances = []

    @appliance_configs.each { |config| appliances << config.name }

    appliance_config.appliances.reverse.each do |appliance_name|
      read_definitions("#{File.dirname(definition)}/#{appliance_name}#{definition_file_extension}") unless appliances.include?(appliance_name)
    end unless appliance_config.appliances.nil? or !appliance_config.appliances.is_a?(Array)
  else
    # Assuming that the definition is provided as string
    @appliance_configs << @appliance_parser.parse_definition(definition, false)
  end
end