class Bundler::RubyVersion

def ==(other)

def ==(other)
  version          == other.version &&
    engine         == other.engine &&
    engine_version == other.engine_version &&
    patchlevel     == other.patchlevel
end

def diff(other)

3. engine_version
2. ruby_version
1. engine
The priority of attributes are
[diff, this, other]
Returns a tuple of thsee things:
def diff(other)
  if engine != other.engine && @input_engine
    [ :engine, engine, other.engine ]
  elsif version != other.version
    [ :version, version, other.version ]
  elsif engine_version != other.engine_version && @input_engine
    [ :engine_version, engine_version, other.engine_version ]
  elsif patchlevel != other.patchlevel && @patchlevel
    [ :patchlevel, patchlevel, other.patchlevel ]
  else
    nil
  end
end

def host

def host
  @host ||= [
    RbConfig::CONFIG["host_cpu"],
    RbConfig::CONFIG["host_vendor"],
    RbConfig::CONFIG["host_os"]
  ].join("-")
end

def initialize(version, patchlevel, engine, engine_version)

def initialize(version, patchlevel, engine, engine_version)
  # The parameters to this method must satisfy the
  # following constraints, which are verified in
  # the DSL:
  #
  # * If an engine is specified, an engine version
  #   must also be specified
  # * If an engine version is specified, an engine
  #   must also be specified
  # * If the engine is "ruby", the engine version
  #   must not be specified, or the engine version
  #   specified must match the version.
  @version        = version
  @engine         = engine || "ruby"
  # keep track of the engine specified by the user
  @input_engine   = engine
  @engine_version = engine_version || version
  @patchlevel     = patchlevel
end

def to_s

def to_s
  output = "ruby #{version}"
  output << "p#{patchlevel}" if patchlevel
  output << " (#{engine} #{engine_version})" unless engine == "ruby"
  output
end