Sha256: 1e563f158cebcf8fb69ee431d7beb3db42109fe8eebdb5cf66b979c72de02032

Contents?: true

Size: 1.55 KB

Versions: 9

Compression:

Stored size: 1.55 KB

Contents

require 'set'
module Capistrano
  class Configuration
    class Server < SSHKit::Host
      extend Forwardable
      def_delegators :properties, :roles, :fetch, :set

      def add_roles(roles)
        Array(roles).each { |role| add_role(role) }
      end
      alias roles= add_roles

      def add_role(role)
        roles.add role.to_sym
      end

      def has_role?(role)
        roles.include? role.to_sym
      end

      def matches?(host)
        hostname == Server.new(host).hostname
      end

      def primary
        self if fetch(:primary)
      end

      def with(properties)
        properties.each { |key, value| add_property(key, value) }
        self
      end

      def properties
        @properties ||= Properties.new
      end

      class Properties

        def initialize
          @properties = {}
        end

        def set(key, value)
          @properties[key] = value
        end

        def fetch(key)
          @properties[key]
        end

        def respond_to?(method)
          @properties.has_key?(method)
        end

        def roles
          @roles ||= Set.new
        end

        def method_missing(key, value=nil)
          if value
            set(lvalue(key), value)
          else
            fetch(key)
          end
        end

        private

        def lvalue(key)
          key.to_s.chomp('=').to_sym
        end

      end


      private

      def add_property(key, value)
        if respond_to?("#{key}=")
          send("#{key}=", value)
        else
          set(key, value)
        end
      end

    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
capistrano-3.0.0.pre13 lib/capistrano/configuration/server.rb
capistrano-3.0.0.pre12 lib/capistrano/configuration/server.rb
capistrano-3.0.0.pre11 lib/capistrano/configuration/server.rb
capistrano-3.0.0.pre10 lib/capistrano/configuration/server.rb
capistrano-3.0.0.pre7 lib/capistrano/configuration/server.rb
capistrano-3.0.0.pre6 lib/capistrano/configuration/server.rb
capistrano-3.0.0.pre5 lib/capistrano/configuration/server.rb
capistrano-3.0.0.pre4 lib/capistrano/configuration/server.rb
capistrano-3.0.0.pre3 lib/capistrano/configuration/server.rb