class RVar
Attributes
value[R]
Public Class Methods
new(value)
click to toggle source
# File lib/bull/reactive_var.rb, line 10 def initialize value @value = value @blocks = {} @forms = Set.new end
raise_if_dirty() { || ... }
click to toggle source
# File lib/bull/reactive_var.rb, line 16 def self.raise_if_dirty @@group = Set.new @@backup = [] raised = false begin yield rescue @@backup.each do |v| v.call end raised = true raise #else # @@group.each do |blk| # blk.call # end ensure if !raised @@group.each do |blk| blk.call end end @@group = nil @@backup = [] end end
rgrouping() { || ... }
click to toggle source
# File lib/bull/reactive_var.rb, line 43 def self.rgrouping @@group = Set.new yield @@group.each {|blk| blk.call} @@group = nil @@backup = [] end
Public Instance Methods
add(block)
click to toggle source
# File lib/bull/reactive_var.rb, line 65 def add block id = @@ticket @@ticket += 1 @blocks[id] = block id end
add_form(form)
click to toggle source
# File lib/bull/reactive_var.rb, line 76 def add_form form @forms.add form end
remove(id)
click to toggle source
# File lib/bull/reactive_var.rb, line 72 def remove id @blocks.delete id end
remove_form(form)
click to toggle source
# File lib/bull/reactive_var.rb, line 80 def remove_form form @forms.delete form end
value=(value)
click to toggle source
# File lib/bull/reactive_var.rb, line 51 def value= value if value != @value if @@group.nil? @value = value @blocks.each_value {|b| b.call} else @forms.each { |form| raise Exception.new('dirty form') if form.dirty?} old_value = @value @value = value @blocks.each_value {|b| @@group.add b; @@backup << lambda{@value = old_value}} end end end