#!/usr/bin/env bash

rubygems_detect_ruby_lib_gem_path_from()
{
  ruby_lib_gem_path="$( __rvm_ruby_config_get ${1}prefix "$ruby_path" )"
  [[ -z "${ruby_lib_gem_path:-}" ]] ||
  {
    ruby_lib_gem_path="$( __rvm_ruby_config_get ${1}dir    "$ruby_path" )"
    ruby_lib_gem_path="${ruby_lib_gem_path%/*}"
  }
  [[ -n "${ruby_lib_gem_path:-}"    ]] || return 1
  [[ -d "${ruby_lib_gem_path}/gems" ]] || return 2
}

rubygems_detect_ruby_lib_gem_path_fallback()
{
  rubygems_detect_ruby_lib_gem_path_from "rubylib" ||
  rubygems_detect_ruby_lib_gem_path_from "lib"     ||
  return $?

  ruby_lib_gem_path+="/gems"

  typeset ruby_version
  ruby_version="$( __rvm_ruby_config_get ruby_version "$ruby_path")"
  if
    [[ -d "${ruby_lib_gem_path}/$ruby_version" ]]
  then
    ruby_lib_gem_path+="$ruby_version"
  elif
    [[ -d "${ruby_lib_gem_path}/shared" ]]
  then
    ruby_lib_gem_path+="shared"
  else
    return 3
  fi
}

rubygems_detect_ruby_lib_gem_path()
{
  typeset ruby_path="$(
    __rvm_which "${1:-ruby}" ||
    {
      echo "Missing 'ruby' in 'rubygems_detect_ruby_lib_gem_path'." >&2
      return 1
    }
  )"

  ruby_lib_gem_path="$( "$ruby_path" -rrubygems -e 'puts Gem.default_dir' 2>/dev/null )"

  [[ -n "$ruby_lib_gem_path" ]] ||
  rubygems_detect_ruby_lib_gem_path_fallback ||
  return $?
}
