Sha256: 59371b316ce8c47a16df744e33f5cb7d6a1beb30e0874475a87081f87c06c08c

Contents?: true

Size: 1.16 KB

Versions: 374

Compression:

Stored size: 1.16 KB

Contents

module Rake

  # InvocationChain tracks the chain of task invocations to detect
  # circular dependencies.
  class InvocationChain < LinkedList

    # Is the invocation already in the chain?
    def member?(invocation)
      head == invocation || tail.member?(invocation)
    end

    # Append an invocation to the chain of invocations. It is an error
    # if the invocation already listed.
    def append(invocation)
      if member?(invocation)
        fail RuntimeError, "Circular dependency detected: #{to_s} => #{invocation}"
      end
      conj(invocation)
    end

    # Convert to string, ie: TOP => invocation => invocation
    def to_s
      "#{prefix}#{head}"
    end

    # Class level append.
    def self.append(invocation, chain)
      chain.append(invocation)
    end

    private

    def prefix
      "#{tail} => "
    end

    # Null object for an empty chain.
    class EmptyInvocationChain < LinkedList::EmptyLinkedList
      @parent = InvocationChain

      def member?(obj)
        false
      end

      def append(invocation)
        conj(invocation)
      end

      def to_s
        "TOP"
      end
    end

    EMPTY = EmptyInvocationChain.new
  end
end

Version data entries

374 entries across 317 versions & 82 rubygems

Version Path
mercadopago-custom-checkout-0.2.0 .gs/gems/rake-10.5.0/lib/rake/invocation_chain.rb
cloudsmith-api-1.30.0 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.57.1 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
video_chat_get-0.1.9 vendor/bundle/ruby/2.5.0/gems/rake-10.5.0/lib/rake/invocation_chain.rb
video_chat_get-0.1.6 vendor/bundle/ruby/2.5.0/gems/rake-10.5.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.54.15 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.53.79 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
lotrd-0.1.9 vendor/cache/ruby/2.6.0/gems/rake-10.5.0/lib/rake/invocation_chain.rb
lotrd-0.1.8 vendor/cache/ruby/2.6.0/gems/rake-10.5.0/lib/rake/invocation_chain.rb
lotrd-0.1.6 vendor/cache/ruby/2.6.0/gems/rake-10.5.0/lib/rake/invocation_chain.rb
lotrd-0.1.5 vendor/cache/ruby/2.6.0/gems/rake-10.5.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.53.17 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.53.3 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
vagrant-unbundled-2.2.10.0 vendor/bundle/ruby/2.7.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.53.1 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.52.121 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.52.92 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
logstash-filter-csharp-0.2.1 vendor/bundle/jruby/2.3.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
logstash-filter-csharp-0.2.0 vendor/bundle/jruby/2.3.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb
cloudsmith-api-0.52.79 vendor/bundle/ruby/2.6.0/gems/rake-12.0.0/lib/rake/invocation_chain.rb