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 these 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]
  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