Sha256: 3cea1f2c27192a423fc4fe052fdcc34914f10e6e0698d302fb35d260a0341656

Contents?: true

Size: 1.27 KB

Versions: 3

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2021-2024, by Samuel Williams.

require 'live'
require 'protocol/http/middleware'
require 'async/websocket/adapters/http'

require_relative 'pages/index'
require_relative 'hello_world'

module Lively
	class Application < Protocol::HTTP::Middleware
		def self.[](tag)
			klass = Class.new(self)
			
			klass.define_singleton_method(:resolver) do
				Live::Resolver.allow(tag)
			end
			
			klass.define_method(:body) do
				tag.new
			end
			
			return klass
		end
		
		def self.resolver
			Live::Resolver.allow(HelloWorld)
		end
		
		def initialize(delegate, resolver: self.class.resolver)
			super(delegate)
			
			@resolver = resolver
		end
		
		def live(connection)
			Live::Page.new(@resolver).run(connection)
		end
		
		def title
			self.class.name
		end
		
		def body(...)
			HelloWorld.new(...)
		end
		
		def index(...)
			Pages::Index.new(title: self.title, body: self.body(...))
		end
		
		def handle(request, ...)
			return Protocol::HTTP::Response[200, [], [self.index(...).call]]
		end
		
		def call(request)
			if request.path == '/live'
				return Async::WebSocket::Adapters::HTTP.open(request, &self.method(:live)) || Protocol::HTTP::Response[400]
			else
				return handle(request)
			end
		end
	end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lively-0.10.1 lib/lively/application.rb
lively-0.10.0 lib/lively/application.rb
lively-0.6.0 lib/lively/application.rb