lib/beryl/backend.rb in beryl-0.2.5 vs lib/beryl/backend.rb in beryl-0.3.0

- old
+ new

@@ -1,18 +1,33 @@ require 'command_handler' require 'json' require 'serializer' +require 'beryl/routing/router' +require 'beryl/html_renderer' +require 'beryl/backend_runtime' module Beryl class Backend + def initialize(view) + @view = view + initial_state = eval(File.read('app/initial_state.rb')) + @state = initial_state.clone + end + def call(env) req = Rack::Request.new(env) case req.path_info when '/command' [200, { 'Content-Type' => 'application/json; charset=utf-8' }, [handle_command(req)]] else - [200, { 'Content-Type' => 'text/html; charset=utf-8' }, [response]] + router = Beryl::Routing::Router.new + route = router.match(req.path_info) + @state[:route] = route[0] + @state[:params] = route[1] + puts "STATE = #{@state}" + code = (route[0] != :not_found ? 200 : 404) + [code, { 'Content-Type' => 'text/html; charset=utf-8' }, [response]] end end private @@ -21,22 +36,30 @@ result = CommandHandler.new.handle(json['type'].to_sym, json['payload']) Serializer.serialize(result) end def hydrate_state - Serializer.serialize(eval(File.read('app/initial_state.rb'))).gsub('"', '&quot;') + Serializer.serialize(@state).gsub('"', '&quot;') end + def render + runtime = Beryl::BackendRuntime.new(@state, @view) + runtime.process_all_messages + @view.state = runtime.state + virtual_dom = VirtualDOM.new(@view.render) + HTMLRenderer.new.render(virtual_dom.dom.first) + end + def response <<~HEREDOC <!DOCTYPE html> <html> <head> <script src="build/app.js"></script> <link rel="stylesheet" type="text/css" href="build/style.css"> </head> <body> - <div id="beryl" data-beryl="#{hydrate_state}" class="bg-color-255-255-255-255 font-color-0-0-0-255 font-size-20 font-open-sanshelveticaverdanasans-serif s e ui s e"></div> + <div id="beryl" data-beryl="#{hydrate_state}" class="bg-color-255-255-255-255 font-color-0-0-0-255 font-size-20 font-open-sanshelveticaverdanasans-serif s e ui s e">#{render}</div> </body> </html> HEREDOC end end \ No newline at end of file