Sha256: f613d3356252a48f440e11801766685e3630e151b935c961cd3ddccd6b31d82f

Contents?: true

Size: 1.58 KB

Versions: 2

Compression:

Stored size: 1.58 KB

Contents

require "cloud_runner/ssh_key"
require "cloud_runner/one_line_logger"
require "cloud_runner/digital_ocean/base"
require "cloud_runner/digital_ocean/api"
require "cloud_runner/digital_ocean/run"

module CloudRunner::DigitalOcean
  module Cli
    class Base
      attr_reader :options

      def initialize(opts={})
        @options = opts.clone.freeze

        raise "Client id must be specified" \
          unless @client_id = options[:client_id]

        raise "Api key must be specified" \
          unless @api_key = options[:api_key]

        raise "Script must be specified" \
          unless @script_path = options[:script]

        @script_path = File.realpath(@script_path)
      end

      def run_script(out, err)
        @out, @err = out, err

        set_up
        execute_script
      ensure
        clean_up
      end

      protected

      def set_up
        raise NotImplementedError
      end

      def execute_script
        step("Executing script '#{@script_path}'") do
          run.run_script(@script_path, @out, @err, {
            :ssh_logger => OneLineLogger.new(@err),
          })
        end
      end

      def clean_up
        raise NotImplementedError
      end

      def run
        @ci_run ||= Run.new(api)
      end

      def ssh_key
        raise NotImplementedError
      end

      def step(description, &action)
        @out.puts("-----> #{description}...")

        action.call.tap do |result|
          @out.puts(result)
        end if action
      end

      private

      def api
        @api ||= Api.new(@client_id, @api_key)
      end
    end

    #~
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cloud_runner-0.0.2 lib/cloud_runner/digital_ocean/cli/base.rb
cloud_runner-0.0.1 lib/cloud_runner/digital_ocean/cli/base.rb