Sha256: c8b246c79b0b3d3a097bba3f6daa38971016230a3e3cce0742da6921dcddc4b4

Contents?: true

Size: 1.28 KB

Versions: 27

Compression:

Stored size: 1.28 KB

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

    def blank?
      @hash.blank?
    end

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

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

      @hash[key]
    end

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

      @hash[key] = value
    end

    def delete(key)
      @deps.delete(key)
      @all_deps.changed!
      @hash.delete(key)
    end

    def clear
      # Don't use .each_key so we get a clone here since we are
      # deleting as we go.
      @hash.keys.each do |key|
        delete(key)
      end

      @all_deps.changed!
    end

    def replace(hash)
      clear

      hash.each_pair do |key, value|
        self[key] = value
      end
    end

    def to_h
      @all_deps.depend
      @hash
    end

    def to_json
      @hash.to_json
    end

    def inspect
      @all_deps.depend
      "#<#{self.class.name} #{@hash.inspect}>"
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
volt-0.9.7.pre8 lib/volt/reactive/reactive_hash.rb
volt-0.9.7.pre7 lib/volt/reactive/reactive_hash.rb
volt-0.9.7.pre6 lib/volt/reactive/reactive_hash.rb
volt-0.9.7.pre5 lib/volt/reactive/reactive_hash.rb
volt-0.9.7.pre3 lib/volt/reactive/reactive_hash.rb
volt-0.9.7.pre2 lib/volt/reactive/reactive_hash.rb
volt-0.9.6 lib/volt/reactive/reactive_hash.rb
volt-0.9.6.pre3 lib/volt/reactive/reactive_hash.rb
volt-0.9.6.pre2 lib/volt/reactive/reactive_hash.rb
volt-0.9.6.pre1 lib/volt/reactive/reactive_hash.rb
volt-0.9.5 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre12 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre11 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre9 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre8 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre7 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre6 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre5 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre4 lib/volt/reactive/reactive_hash.rb
volt-0.9.5.pre3 lib/volt/reactive/reactive_hash.rb