Sha256: 936de61127fed27a9f96b97b1b861bd17cb0a12f025251330e4e751dc8bc8464
Contents?: true
Size: 827 Bytes
Versions: 1
Compression:
Stored size: 827 Bytes
Contents
class Spreadshit::Cell attr_reader :raw def initialize(raw = "", &expression) @raw = raw @observers = Set.new @observed = [] update(&expression) if block_given? end def value if @@caller @observers << @@caller @@caller.observed << self end @value end def update(value = raw || "", &expression) @raw = value @expression = expression compute @value end protected attr_reader :observers, :observed def compute @observed.each { |observed| observed.observers.delete(self) } @observed = [] @@caller = self new_value = @expression.call @@caller = nil if new_value != @value @value = new_value observers = @observers @observers = Set.new observers.each { |observer| observer.compute } end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
spreadshit-0.1.1 | lib/spreadshit/cell.rb |