# frozen_string_literal: true

module Gitolite

  # Very simple proxy object for checking if the proxied object was modified
  # since the last clean_up! method called. It works correctly only for objects
  # with proper hash method!

  class DirtyProxy < BasicObject

    def initialize(target)
      @target = target
      clean_up!
    end

    def method_missing(method, *args, &block)
      @target.send(method, *args, &block)
    end

    def respond_to?(symbol, include_private=false)
      super || [:dirty?, :clean_up!].include?(symbol.to_sym)
    end

    def dirty?
      @clean_hash != @target.hash
    end

    def clean_up!
      @clean_hash = @target.hash
    end

  end

end
