Sha256: f4a8249085279ec9f9b4ca149388fe957475020928061943d8d22c108cdc339a

Contents?: true

Size: 1.86 KB

Versions: 10

Compression:

Stored size: 1.86 KB

Contents

require 'escape'
require 'json'

module EY
  module Serverside
    class Adapter
      class Command
        def initialize(bin_path, *task)
          @task = task
          @arguments = []
          @binary = bin_path.join('engineyard-serverside').to_s
        end

        def to_s
          Escape.shell_command [@binary, "_#{ENGINEYARD_SERVERSIDE_VERSION}_"] + @task + @arguments.sort_by { |x| x.first }.flatten
        end

        def array_argument(switch, values)
          compacted = values.compact.sort
          if compacted.any?
            @arguments << [switch, compacted]
          end
        end

        def boolean_argument(switch, value)
          if value
            @arguments << [switch]
          end
        end

        def hash_argument(switch, pairs)
          if pairs.any? {|k,v| !v.nil?}
            @arguments << [switch, pairs.reject { |k,v| v.nil? }.map { |pair| pair.join(':') }.sort]
          end
        end

        def instances_argument(_, instances)
          role_pairs = instances.inject({}) do |roles, instance|
            roles.merge(instance[:hostname] => instance[:roles].join(','))
          end
          hash_argument('--instance-roles', role_pairs)

          role_pairs = instances.inject({}) do |roles, instance|
            roles.merge(instance[:hostname] => instance[:name])
          end
          hash_argument('--instance-names', role_pairs)

          array_argument('--instances', instances.map{|i| i[:hostname]})
        end

        def json_argument(switch, value)
          if value
            string_argument(switch, value.to_json)
          end
        end

        def string_argument(switch, value)
          if !value
            @arguments << [switch.sub(/^--/,'--no-')] # specifically for no-migrate
          elsif !value.to_s.empty?
            @arguments << [switch, value]
          end
        end

      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
engineyard-serverside-adapter-2.0.1 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-2.0.0 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-2.0.0.rc1 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-2.0.0.pre5 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-2.0.0.pre4 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-2.0.0.pre3 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-2.0.0.pre2 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-2.0.0.pre1 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-1.7.0.pre2 lib/engineyard-serverside-adapter/command.rb
engineyard-serverside-adapter-1.7.0.pre lib/engineyard-serverside-adapter/command.rb