Sha256: 024ebe2c425cd2b32c46a4f0109d988316e6fffd8e7b5089a2563af01fb6828f

Contents?: true

Size: 1.92 KB

Versions: 22

Compression:

Stored size: 1.92 KB

Contents

module Geordi
  class CapistranoConfig

    attr_accessor :root

    def initialize(stage)
      self.stage = stage
      self.root = find_project_root!
      load_deploy_info
    end

    def user(server)
      cap2user = deploy_info[/^\s*set\s*:user,\s*['"](.*?)['"]/, 1]
      cap2user || deploy_info[/^\s*server\s*['"]#{server}['"],.*user.{1,4}['"](.*?)['"]/, 1]
    end

    def servers
      deploy_info.scan(/^\s*server\s*['"](.*?)['"]/).flatten
    end

    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

    def remote_root
      File.join deploy_info[/^\s*set\s*:deploy_to,\s*['"](.*?)['"]/, 1], 'current'
    end

    def env
      deploy_info[/^\s*set\s*:rails_env,\s*['"](.*?)['"]/, 1]
    end

    def shell
      'bash --login'
    end

    private

    attr_accessor :deploy_info, :stage

    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

    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

  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
geordi-11.2.1 lib/geordi/capistrano_config.rb
geordi-11.2.0 lib/geordi/capistrano_config.rb
geordi-11.1.0 lib/geordi/capistrano_config.rb
geordi-11.0.0 lib/geordi/capistrano_config.rb
geordi-10.1.0 lib/geordi/capistrano_config.rb
geordi-10.0.1 lib/geordi/capistrano_config.rb
geordi-10.0.0 lib/geordi/capistrano_config.rb
geordi-9.6.1 lib/geordi/capistrano_config.rb
geordi-9.6.0 lib/geordi/capistrano_config.rb
geordi-9.5.1 lib/geordi/capistrano_config.rb
geordi-9.5.0 lib/geordi/capistrano_config.rb
geordi-9.4.1 lib/geordi/capistrano_config.rb
geordi-9.4.0 lib/geordi/capistrano_config.rb
geordi-9.3.1 lib/geordi/capistrano_config.rb
geordi-9.3.0 lib/geordi/capistrano_config.rb
geordi-9.2.0 lib/geordi/capistrano_config.rb
geordi-9.1.0 lib/geordi/capistrano_config.rb
geordi-9.0.0 lib/geordi/capistrano_config.rb
geordi-8.0.0 lib/geordi/capistrano_config.rb
geordi-7.0.2 lib/geordi/capistrano_config.rb