Sha256: 11945f0d2e8ea7d4b51fc71a0b21600f04da0fe6e2108215e01fe5873d16cd3a

Contents?: true

Size: 1.88 KB

Versions: 2

Compression:

Stored size: 1.88 KB

Contents

require 'psych'
require 'clenver'
require 'clenver/project'
require 'clenver/logging'
require 'clenver/package_manager'
require 'clenver/command_executor'

module Clenver
  class Runner
    include Logging

    attr_accessor :path, :dst, :yaml
    def initialize(path, dst)
      @path = path
      @dst = dst
      @yaml = parse_config
    end

    def parse_config
      begin
        Psych.load_file("#{path}")
      rescue Psych::SyntaxError => ex
        logger.error("#{path}: syntax error : #{ex.message}")
        exit 1
      end
    end

    def create_package_manager(type)
      PackageManger.new(type, yaml[type].join(' '))
    end

    def create_repository(uri)
      logger.debug("content:#{yaml[uri]}")
      if yaml[uri].is_a?(Hash)
        Repository.new(uri, yaml[uri])
      else
        Repository.new(uri)
      end
    end

    def create_links
      l = []
      for src, links in yaml['links']
        l << Link.new(src, links)
      end
      return l
    end

    def create_cmd_exec
      e = []
      for c in yaml['run']
        e <<  CommandExecutor.new(c)
      end
      return e
    end

    def start
      #TODO: create test and fix this place with check for empty file
      p = Project.new(File.basename("#{path}", ".yml"), yaml, dst)
      if yaml.is_a?(Hash)
        for k,v in yaml do
          logger.info("key:#{k}")
          logger.info("value:#{v}")
          if k == 'apt' or k == 'gem'
            p.pkg_mgr << create_package_manager(k)
          end
          if k.match /(http|https|git).+/
            p.repos << create_repository(k)
          end
          if k == 'links'
            p.links = create_links
          end
          if k == 'run'
            p.cmd_exec = create_cmd_exec
          end
        end
      else
        logger.error("#{path} is not a valid clenver configuration")
        exit 2
      end
      p.init
      #p.init_project
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
clenver-0.1.15 lib/clenver/runner.rb
clenver-0.1.14 lib/clenver/runner.rb