Sha256: 42d18648c22569ec6bf6042b539a07f8ab09c89cbbed5e3bd66f1067d4272118
Contents?: true
Size: 1.83 KB
Versions: 3
Compression:
Stored size: 1.83 KB
Contents
# need to define class immediately b/c of circular requires: # - runner -> router -> route -> sanford_runner -> runner module Sanford; end class Sanford::Runner; end require 'sanford-protocol' require 'sanford/logger' require 'sanford/router' require 'sanford/template_source' module Sanford class Runner ResponseArgs = Struct.new(:status, :data) attr_reader :handler_class, :handler attr_reader :request, :params, :logger, :router, :template_source def initialize(handler_class, args = nil) @handler_class = handler_class a = args || {} @request = a[:request] @params = a[:params] || {} @logger = a[:logger] || Sanford::NullLogger.new @router = a[:router] || Sanford::Router.new @template_source = a[:template_source] || Sanford::NullTemplateSource.new @handler = @handler_class.new(self) end def run raise NotImplementedError end def render(path, locals = nil) self.template_source.render(path, self.handler, locals || {}) end # It's best to keep what `halt` and `catch_halt` return in the same format. # Currently this is a `ResponseArgs` object. This is so no matter how the # block returns (either by throwing or running normally), you get the same # thing kind of object. def halt(status, options = nil) options ||= {} message = options[:message] || options['message'] response_status = [ status, message ] response_data = options[:data] || options['data'] throw :halt, ResponseArgs.new(response_status, response_data) end private def catch_halt(&block) catch(:halt){ ResponseArgs.new(*block.call) } end def build_response(&block) args = catch_halt(&block) Sanford::Protocol::Response.new(args.status, args.data) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
sanford-0.15.1 | lib/sanford/runner.rb |
sanford-0.15.0 | lib/sanford/runner.rb |
sanford-0.14.0 | lib/sanford/runner.rb |