Sha256: 7bedbb7316ed1d86081896d3594dc5bf2b0ed26a1eadb8ffebcc40c8983b5017

Contents?: true

Size: 1.17 KB

Versions: 7

Compression:

Stored size: 1.17 KB

Contents

module Stevenson
  module Deployer
    autoload :S3, 'stevenson/deployers/s3'

    module Base
      attr_reader :options

      def self.included(deployer)
        deployer.extend ClassMethods

        Stevenson.deployers[deployer.deployer_name] = deployer
      end

      module ClassMethods
        def deployer_name
          name.gsub(/^.*::/, '').downcase.to_sym
        end
      end

      def initialize(options)
        @options = options
      end

      def deploy!(directory)
        raise NotImplementedError
      end
    end

    class << self
      def deploy(directory, options)
        deployers_for(options).each do |deployer|
          deployer.new(options).deploy!(directory)
        end
      end

      private

      def deployers_for(options)
        [].tap do |deployers|
          deployers << deployer_for(:s3) if options.keys.include?("s3")
        end
      end

      def deployer_for(type)
        Stevenson.deployers.fetch(type, nil) || const_get(type.to_s.capitalize)
      rescue NameError
        raise InvalidDeployerException.new "Type '#{type}' is not a valid deployer."
      end
    end

    class InvalidDeployerException < Stevenson::Error; end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
stevenson-2.5.1 lib/stevenson/deployer.rb
stevenson-2.5.0 lib/stevenson/deployer.rb
stevenson-2.3.3 lib/stevenson/deployer.rb
stevenson-2.3.2 lib/stevenson/deployer.rb
stevenson-2.3.1 lib/stevenson/deployer.rb
stevenson-2.2.2 lib/stevenson/deployer.rb
stevenson-2.2.1 lib/stevenson/deployer.rb