Sha256: c428b757833c3415b7a3a4ed023acb053df771697b75de83241769d27ac1db3f

Contents?: true

Size: 1.37 KB

Versions: 16

Compression:

Stored size: 1.37 KB

Contents

# Temp until https://github.com/opal/opal/pull/596
require 'set'

class Set
  def delete(o)
    @hash.delete(o)
  end

  def delete?(o)
    if include?(o)
      delete(o)
    else
      nil
    end
  end

  def delete_if
    block_given? or return enum_for(__method__)
    # @hash.delete_if should be faster, but using it breaks the order
    # of enumeration in subclasses.
    select { |o| yield o }.each { |o| @hash.delete(o) }
    self
  end

  def to_a
    @hash.keys
  end
end

module Volt
  class Dependency
    def initialize
      @dependencies = Set.new
    end

    def depend
      # If there is no @dependencies, don't depend because it has been removed
      return unless @dependencies

      current = Computation.current
      if current
        added = @dependencies.add?(current)

        if added
          # puts "Added #{self.inspect} to #{current.inspect}"
          current.on_invalidate do
            # If @dependencies is nil, this Dependency has been removed
            @dependencies.delete(current) if @dependencies
          end
        end
      end
    end

    def changed!
      deps = @dependencies

      # If no deps, dependency has been removed
      return unless deps

      @dependencies = Set.new

      deps.each(&:invalidate!)
    end

    # Called when a dependency is no longer needed
    def remove
      changed!
      @dependencies = nil
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
volt-0.8.27.beta3 lib/volt/reactive/dependency.rb
volt-0.8.27.beta2 lib/volt/reactive/dependency.rb
volt-0.8.27.beta1 lib/volt/reactive/dependency.rb
volt-0.8.26.beta1 lib/volt/reactive/dependency.rb
volt-0.8.26 lib/volt/reactive/dependency.rb
volt-0.8.24 lib/volt/reactive/dependency.rb
volt-0.8.23 lib/volt/reactive/dependency.rb
volt-0.8.22 lib/volt/reactive/dependency.rb
volt-0.8.22.beta2 lib/volt/reactive/dependency.rb
volt-0.8.22.beta1 lib/volt/reactive/dependency.rb
volt-0.8.21 lib/volt/reactive/dependency.rb
volt-0.8.20 lib/volt/reactive/dependency.rb
volt-0.8.19 lib/volt/reactive/dependency.rb
volt-0.8.18 lib/volt/reactive/dependency.rb
volt-0.8.17 lib/volt/reactive/dependency.rb
volt-0.8.16 lib/volt/reactive/dependency.rb