_has-ruby() { command -v ruby 2>&1 >/dev/null } _set_default_gem_home() { if _has-ruby && [[ -z "${GEM_HOME}" ]]; then RUBY_VERSION="$(ruby -e 'puts RUBY_VERSION.gsub(/\d+$/, "0")')" GEM_HOME="${HOME}/.gem/ruby/${RUBY_VERSION}" export GEM_HOME PATH="${GEM_HOME}/bin:${PATH}" export PATH fi } if ! _has-chruby && ! _has-rbenv; then _set_default_gem_home fi _auto-rubygems_gemdeps() { local check_dir=$PWD local next_check_dir=${check_dir%/*} while [ "$next_check_dir" != "" ]; do if [[ -f "$check_dir/Gemfile" ]]; then export RUBYGEMS_GEMDEPS="$check_dir/Gemfile" return fi check_dir="$next_check_dir" next_check_dir=${check_dir%/*} done unset RUBYGEMS_GEMDEPS } unpack_gem() { local gemname="${1:?argument missing}" local basename="${1%%.gem}" if [[ "${gemname}" == "${basename}" ]]; then echo "error: not a .gem: '${gemname}'" return 1 fi if [[ ! -f "${gemname}" ]]; then echo "error: not a .gem: '${gemname}'" return 1 fi mkdir -p "${basename}/data" tar -C "${basename}" -xvf "${gemname}" gunzip -f "${basename}/checksums.yaml.gz" gunzip -f "${basename}/metadata.gz" tar -C "${basename}"/data -xvzf "${basename}"/data.tar.gz && rm -f "${basename}"/data.tar.gz } pack_gem() { local dirname="${1:?argument missing}" local gemname="${2:-"${dirname}".gem}" if type shasum 2>&1 >/dev/null; then local sha256sum=( shasum -a 256 ) local sha512sum=( shasum -a 512 ) else local sha256sum=( sha256sum ) local sha512sum=( sha512sum ) fi if [[ ! -d "${dirname}/data" ]]; then echo "error: missing data: '${dirname}'" return 1 fi if [[ ! -f "${dirname}/metadata" ]]; then echo "error: missing metadata: '${dirname}'" return 1 fi tar --strip-components 2 --uid 0 --gid 0 -cvzf "${dirname}"/data.tar.gz "${dirname}"/data gzip < "${dirname}/metadata" > "${dirname}/metadata.gz" metadata_gz_sha256="$("${sha256sum[@]}" "${dirname}"/metadata.gz | sed 's/ .*//')" data_tar_gz_sha256="$("${sha256sum[@]}" "${dirname}"/data.tar.gz | sed 's/ .*//')" metadata_gz_sha512="$("${sha512sum[@]}" "${dirname}"/metadata.gz | sed 's/ .*//')" data_tar_gz_sha512="$("${sha512sum[@]}" "${dirname}"/data.tar.gz | sed 's/ .*//')" chmod u+w "${dirname}/checksums.yaml" cat < "${dirname}/checksums.yaml" --- SHA256: metadata.gz: ${metadata_gz_sha256} data.tar.gz: ${data_tar_gz_sha256} SHA512: metadata.gz: ${metadata_gz_sha512} data.tar.gz: ${data_tar_gz_sha512} CHECKSUMS gzip < "${dirname}/checksums.yaml" > "${dirname}/checksums.yaml.gz" tar --strip-components 1 --uid 0 --gid 0 -cvf "${gemname}" "${dirname}"/metadata.gz "${dirname}"/data.tar.gz "${dirname}"/checksums.yaml.gz } # vim: ft=bash