Sha256: dc13eb4ea0c96e3be7581045b3365361cb113c2c6213c7af5d9b7d052b560444
Contents?: true
Size: 1.26 KB
Versions: 1
Compression:
Stored size: 1.26 KB
Contents
require 'virtual_dom' require 'task' require 'bowser/http' require 'serializer' class EventLoop def initialize(root, state) @messages = [] @root = root @state = state end def push(message) puts 'adding message...' @messages << message end def render VirtualDOM.new.render(self, element(@state), @root) end def process while @messages.any? message = @messages.shift result = transition(message.first, message.last) @state = result.is_a?(Array) ? result.first : result command = result.is_a?(Array) ? result[1] : nil run_command(result[1], result[2]) if command render end end def run_command(type, payload) puts 'running command' Task.new do Bowser::HTTP.fetch('/rock/command', method: :post, data: { type: type, payload: Serializer.serialize(payload) }) .then(&:json) # JSONify the response .then { |response| puts response } .catch { |exception| warn exception.message } end end def transition(type, payload) case type when :IncrementClicked @state.merge(counter: @state[:counter] + 1) when :LoadClicked [@state, :FetchData, key_1: 1, key_2: 2] when :LoadSuccess @state.merge(content: payload[:data]) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
beryl-0.1.0 | lib/event_loop.rb |