lib/deas/runner.rb in deas-0.43.3 vs lib/deas/runner.rb in deas-0.43.4

- old
+ new

@@ -12,26 +12,26 @@ DEFAULT_CHARSET = 'utf-8'.freeze DEFAULT_STATUS = 200.freeze DEFAULT_BODY = [].freeze attr_reader :handler_class, :handler + attr_reader :request, :route_path, :params attr_reader :logger, :router, :template_source - attr_reader :request, :params, :route_path def initialize(handler_class, args = nil) @status, @headers, @body = nil, Rack::Utils::HeaderHash.new, nil + @handler_class = handler_class + @handler = @handler_class.new(self) + args ||= {} + @request = args[:request] + @route_path = args[:route_path].to_s + @params = args[:params] || {} @logger = args[:logger] || Deas::NullLogger.new @router = args[:router] || Deas::Router.new @template_source = args[:template_source] || Deas::NullTemplateSource.new - @request = args[:request] - @params = args[:params] || {} - @route_path = args[:route_path].to_s - - @handler_class = handler_class - @handler = @handler_class.new(self) end def splat @splat ||= parse_splat_value end @@ -54,17 +54,27 @@ @headers end def body(value = nil) if !value.nil? + # http://www.rubydoc.info/github/rack/rack/master/file/SPEC#The_Body + # "The Body must respond to each and must only yield String values" # String#each is a thing in 1.8.7, so account for it here - @body = !value.respond_to?(:each) || value.kind_of?(String) ? [*value] : value + @body = !value.respond_to?(:each) || value.kind_of?(String) ? [*value.to_s] : value end @body end def content_type(extname, params = nil) self.headers['Content-Type'] = get_content_type(extname, params) + end + + def set_cookie(name, value, opts = nil) + Rack::Utils.set_cookie_header!( + self.headers, + name, + (opts || {}).merge(:value => value) + ) end def halt(*args) self.status(args.shift) if args.first.instance_of?(::Fixnum) self.headers(args.shift) if args.first.kind_of?(::Hash)