Sha256: b5cce6130e8a09562927aad1a3974861fca775c891ffc4cce8116cfc15d90dd5

Contents?: true

Size: 633 Bytes

Versions: 36

Compression:

Stored size: 633 Bytes

Contents

module React
  class Observable
    def initialize(value, on_change = nil, &block)
      @value = value
      @on_change = on_change || block
    end

    def method_missing(method_sym, *args, &block)
      @value.send(method_sym, *args, &block).tap { |result| @on_change.call @value }
    end

    def respond_to?(method, *args)
      if [:call, :to_proc].include? method
        true
      else
        @value.respond_to? method, *args
      end
    end

    def call(new_value)
      @on_change.call new_value
      @value = new_value
    end

    def to_proc
      lambda { |arg = @value| @on_change.call arg }
    end
  end
end

Version data entries

36 entries across 36 versions & 4 rubygems

Version Path
reactrb-0.8.3 lib/react/observable.rb
reactrb-0.8.1 lib/react/observable.rb
reactrb-0.8.0 lib/react/observable.rb
reactrb-0.7.42 lib/react/observable.rb
reactive-ruby-0.7.41 lib/react/observable.rb
reactive-ruby-0.7.40 lib/react/observable.rb
reactive-ruby-0.7.39 lib/react/observable.rb
reactive-ruby-0.7.38 lib/react/observable.rb
reactive-ruby-0.7.36 lib/react/observable.rb
reactive-ruby-0.7.35 lib/react/observable.rb
reactive-ruby-0.7.34 lib/react/observable.rb
reactive-ruby-0.7.33 lib/react/observable.rb
reactive-ruby-0.7.32 lib/react/observable.rb
reactive-ruby-0.7.31 lib/react/observable.rb
reactive-ruby-0.7.30 lib/react/observable.rb
reactive-ruby-0.7.29 lib/react/observable.rb