common/lib/dependabot/git_ref.rb
# typed: strong
# frozen_string_literal: true

require "sorbet-runtime"

module Dependabot
  class GitRef
    extend T::Sig

    sig { returns(String) }
    attr_accessor :name

    sig { returns(String) }
    attr_accessor :commit_sha

    sig { returns(T.nilable(String)) }
    attr_reader :tag_sha

    sig { returns(T.nilable(String)) }
    attr_reader :ref_sha

    sig { returns(T.nilable(RefType)) }
    attr_reader :ref_type

    sig do
      params(
        name: String,
        commit_sha: String,
        tag_sha: T.nilable(String),
        ref_sha: T.nilable(String),
        ref_type: T.nilable(RefType)
      )
        .void
    end
    def initialize(name:, commit_sha:, tag_sha: nil, ref_sha: nil, ref_type: nil)
      @name = name
      @commit_sha = commit_sha
      @ref_sha = ref_sha
      @tag_sha = tag_sha
      @ref_type = ref_type
    end

    sig { params(other: BasicObject).returns(T::Boolean) }
    def ==(other)
      case other
      when GitRef
        to_h == other.to_h
      else
        false
      end
    end

    sig { returns(T::Hash[Symbol, T.nilable(String)]) }
    def to_h
      {
        name: name,
        commit_sha: commit_sha,
        tag_sha: tag_sha,
        ref_sha: ref_sha,
        ref_type: ref_type
      }.compact
    end
  end

  class RefType < T::Enum
    enums do
      Tag = new
      Head = new
    end
  end
end
