> [...]
> 
> Now, I'd probably write it like this :
> 
>    def get_server_index(server)
>      if self.servers.include?(server)
>        self.servers.index(server)
>      else
>        -1
>      end
>    end

This starts to be off topic, but

def get_server_index(server)
  servers.fetch(server, -1)
end

should do the same. To say something more
on topic, return is a method call (or sort
of) and not using it (if you don't need)
is faster - or at least it was last time
I checked.

cheers

Simon