class Geordi::CapistranoConfig

Attributes

deploy_info[RW]
root[RW]
stage[RW]

Public Class Methods

new(stage) click to toggle source
# File lib/geordi/capistrano_config.rb, line 6
def initialize(stage)
  self.stage = stage
  self.root = find_project_root!
  load_deploy_info
end

Public Instance Methods

env() click to toggle source
# File lib/geordi/capistrano_config.rb, line 32
def env
  deploy_info[/^\s*set\s*:rails_env,\s*['"](.*?)['"]/, 1]
end
primary_server() click to toggle source
# File lib/geordi/capistrano_config.rb, line 21
def primary_server
  # Actually, servers may have a :primary property. From Capistrano 3, the
  # first listed server is the primary one by default, which is a good-
  # enough default for us.
  servers.first
end
remote_root() click to toggle source
# File lib/geordi/capistrano_config.rb, line 28
def remote_root
  File.join deploy_info[/^\s*set\s*:deploy_to,\s*['"](.*?)['"]/, 1], 'current'
end
servers() click to toggle source
# File lib/geordi/capistrano_config.rb, line 17
def servers
  deploy_info.scan(/^\s*server\s*['"](.*?)['"]/).flatten
end
shell() click to toggle source
# File lib/geordi/capistrano_config.rb, line 36
def shell
  'bash --login'
end
user(server) click to toggle source
# File lib/geordi/capistrano_config.rb, line 12
def user(server)
  cap2user = deploy_info[/^\s*set\s*:user,\s*['"](.*?)['"]/, 1]
  cap2user || deploy_info[/^\s*server\s*['"]#{server}['"],.*user.{1,4}['"](.*?)['"]/, 1]
end

Private Instance Methods

find_project_root!() click to toggle source
# File lib/geordi/capistrano_config.rb, line 64
    def find_project_root!
      current = ENV['RAILS_ROOT'] || Dir.pwd

      until File.exist?(File.join(current, 'Capfile'))
        if current == '/' || current == '/home' || !File.directory?(current)
          raise <<~ERROR
            Could not locate Capfile.

            Are you calling me from within a Rails project?
            Maybe Capistrano is not installed in this project.
          ERROR
        else
          current = File.dirname(current)
        end
      end

      current
    end
load_deploy_info() click to toggle source
# File lib/geordi/capistrano_config.rb, line 44
def load_deploy_info
  lines = []
  self.deploy_info = ''

  if stage
    lines += File.readlines(File.join(root, "config/deploy/#{stage}.rb"))
  end

  lines += File.readlines(File.join(root, 'config/deploy.rb'))

  lines.each do |line|
    next if line =~ /^\s*#/ # Omit comment lines
    line.chomp! if line =~ /[\\,]\s*$/ # Join wrapped lines

    deploy_info << line
  end

  deploy_info
end