Sha256: a907847545a7150b5887906668426b187c46baf456b6b39658fa8cd5d32c4ebb

Contents?: true

Size: 1.39 KB

Versions: 5

Compression:

Stored size: 1.39 KB

Contents

require 'capistrano'

module Geordi
  class CapistranoConfig

    attr_accessor :root

    def initialize(stage)
      ENV['BUNDLE_BIN_PATH'] = 'Trick capistrano safeguard in deploy.rb into believing bundler is present by setting this variable.'

      @stage = stage
      @root = find_project_root!
      load_capistrano_config
    end

    def user
      @capistrano_config.fetch(:user)
    end

    def servers
      @capistrano_config.find_servers(:roles => [:app])
    end

    def primary_server
      @capistrano_config.find_servers(:roles => [:app], :only => { :primary => true }).first
    end

    def path
      @capistrano_config.fetch(:deploy_to) + '/current'
    end

    def env
      @capistrano_config.fetch(:rails_env, 'production')
    end

    def shell
      @capistrano_config.fetch(:default_shell, 'bash --login')
    end


    private

    def load_capistrano_config
      config = ::Capistrano::Configuration.new
      config.load('deploy')
      config.load('config/deploy')
      if @stage and @stage != ''
        config[:stage] = @stage
        config.find_and_execute_task(@stage)
      end

      @capistrano_config = config
    end

    def find_project_root!
      current = Dir.pwd
      until (File.exists? 'Capfile')
        Dir.chdir '..'
        raise 'Call me from inside a Rails project!' if current == Dir.pwd
        current = Dir.pwd
      end
      current
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
geordi-1.1.0 lib/geordi/capistrano_config.rb
geordi-1.0.3 lib/geordi/capistrano_config.rb
geordi-1.0.2 lib/geordi/capistrano_config.rb
geordi-1.0.1 lib/geordi/capistrano_config.rb
geordi-1.0.0 lib/geordi/capistrano_config.rb