Sha256: 8635dce60099e78914fbb5080ce867b9692748d6d33a706108213f53dc30a4b3

Contents?: true

Size: 1.83 KB

Versions: 2

Compression:

Stored size: 1.83 KB

Contents

class Bard::CLI < Thor
  class Config
    def initialize project_name, path
      @project_name = project_name
      @servers = {
        local: Server.new(
          project_name,
          :local,
          false,
          "./",
          false,
        ),
        gubs: Server.new(
          project_name,
          :gubs,
          "gubito@gubs.pagekite.me",
          "Sites/#{project_name}",
          false,
        ),
        ci: Server.new(
          project_name,
          :ci,
          "jenkins@ci.botandrose.com:22022",
          "jobs/#{project_name}/workspace",
          false,
        ),
        staging: Server.new(
          project_name,
          :staging,
          "www@#{project_name}.botandrose.com:22022",
        ),
      }
      load_local_config! path
    end

    attr_reader :servers

    def server key, &block
      @servers[key] ||= Server.new(@project_name, key)
      @servers[key].instance_eval &block if block_given?
      @servers[key]
    end

    def data *paths
      if paths.length == 0
        Array(@data)
      else
        @data = paths
      end
    end

    private

    def load_local_config! path
      instance_eval File.read(File.expand_path(path)) if File.exist?(path)
    end

    class Server < Struct.new(:project_name, :key, :ssh, :path, :ping, :gateway)
      def self.setting *fields
        fields.each do |field|
          define_method field do |*args|
            if args.length == 1
              send :"#{field}=", args.first
            elsif args.length == 0
              super()
            else
              raise ArgumentError
            end
          end
        end
      end

      setting :ssh, :path, :ping, :gateway

      def default_ping
        uri = URI.parse("ssh://#{ssh}")
        "http://#{uri.host}"
      end

      def path
        super || project_name
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bard-0.43.0 lib/bard/config.rb
bard-0.42.0 lib/bard/config.rb