class EY::Serverside::Adapter::Arguments

A mutable arguments receiver that fails fast when bad values are given.

Attributes

clean[RW]
config[RW]
ignore_existing[RW]
instance_names[R]
instance_roles[R]
instances[R]
migrate[RW]
serverside_version[RW]
verbose[RW]

Public Class Methods

nonempty_attr_accessor(*names) click to toggle source
# File lib/engineyard-serverside-adapter/arguments.rb, line 8
def self.nonempty_attr_accessor(*names)
  attr_reader *names

  names.each do |name|
    define_method(:"#{name}=") do |value|
      if value.nil? || value.to_s.empty?
        raise ArgumentError, "Value for '#{name}' must be non-empty."
      end
      instance_variable_set("@#{name}", value)
    end
  end
end

Public Instance Methods

[](key) click to toggle source
# File lib/engineyard-serverside-adapter/arguments.rb, line 29
def [](key)
  send(key)
end
instances=(instances) click to toggle source

This is a special setter for setting all instance information at the same time. It sets @instance_roles, @instance_names and @instances.

# File lib/engineyard-serverside-adapter/arguments.rb, line 35
def instances=(instances)
  unless instances.respond_to?(:each)
    raise ArgumentError, "Value for 'instances' must look like an enumerable."
  end

  if instances.empty?
    raise ArgumentError, "Value for 'instances' must not be empty."
  end

  @instance_roles = instances.inject({}) do |roles, instance|
    unless instance.respond_to?(:[]) && instance[:hostname] && instance[:roles]
      raise ArgumentError, "Malformed instance #{instance.inspect}; it must have both [:hostname] and [:roles]"
    end

    roles.merge(instance[:hostname] => instance[:roles].join(','))
  end

  @instance_names = instances.inject({}) do |names, instance|
    names.merge(instance[:hostname] => instance[:name])
  end

  @instances = instances.map{|i| i[:hostname]}
end
serverside_version=(value) click to toggle source

Uses Gem::Version to validate the version arg.

# File lib/engineyard-serverside-adapter/arguments.rb, line 60
def serverside_version=(value)
  if value.nil? || value.to_s.empty?
    raise ArgumentError, "Value for 'serverside_version' must be non-empty."
  end
  @serverside_version = Gem::Version.create(value.dup) # dup b/c Gem::Version sometimes modifies its argument :(
end