Sha256: b1f0d88345b08b6102ce76443a0cd0305cb8b2eb9559ddfb8f8d037c22b36a44

Contents?: true

Size: 893 Bytes

Versions: 1

Compression:

Stored size: 893 Bytes

Contents

require 'volt/reactive/hash_dependency'

module Volt
  class ReactiveHash
    def initialize(values={})
      @hash     = values
      @deps     = HashDependency.new
      @all_deps = Dependency.new
    end

    def ==(val)
      @all_deps.depend
      @hash == val
    end

    # TODO: We should finish off this class for reactivity
    def method_missing(method_name, *args, &block)
      @all_deps.depend

      return @hash.send(method_name, *args, &block)
    end

    def [](key)
      @deps.depend(key)

      return @hash[key]
    end

    def []=(key, value)
      @deps.changed!(key)
      @all_deps.changed!

      @hash[key] = value
    end

    def delete(key)
      @deps.delete(key)
      @hash.delete(key)
    end

    def clear
      @hash.each_pair do |key, _|
        delete(key)
      end
    end

    def inspect
      "#<ReactiveHash #{@hash.inspect}>"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
volt-0.8.15 lib/volt/reactive/reactive_hash.rb