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