Sha256: 7381db8d1ef940ea59e85ac0afccb9d69cb0270cced3a6d7390d8dbbd3b68843

Contents?: true

Size: 1.78 KB

Versions: 1

Compression:

Stored size: 1.78 KB

Contents

# * George Moschovitis  <gm@navel.gr>
# (c) 2004-2005 Navel, all rights reserved.
# $Id$

require 'nitro/request'
require 'nitro/response'
require 'nitro/render'
require 'nitro/session'
require 'nitro/output'
require 'nitro/adapters/cgi.rb'

module N
	
# Encapsulates an HTTP processing cycle context.
# Integrates the Request and the Response.

class Context
	include Request
	include Response
	include Render

	# The configuration parameters.

	attr_accessor :conf

	# The session contains variables that stay alive 
	# for the full user session. Session variables
	# should be generally avoided. This variable
	# becomes populated ONLY if needed.

	attr_reader :session

	# The dispatcher.

	attr_accessor :dispatcher

	def initialize(conf)
		@conf = conf
		@dispatcher = @conf.dispatcher
		@context = self

		# initialize response.
		
		@status = CgiUtils::STATUS_OK
		@response_headers = { 'Content-Type' => 'text/html' }

		# initialize the output buffer.

		@out = OutputBuffer.new
	end

	# Close the context, should be called at the 
	# end of the HTTP request handling code.

	def close
		@session.sync if @session
	end
	alias_method :finish, :close
	
	# Lazy lookup of the session to avoid costly cookie
	# lookup when not needed.

	def session
		@session || @session = Session.lookup(self)
	end

	# Populate an object from request parameters.
	# This is a truly dangerous method.
	
	EXCLUDED_PARAMETERS = %w{ oid name }

	def fill(obj, name = nil)
		# if an object is passed create an instance.
		obj = obj.new if obj.is_a?(Class)
	
		@params.each do |param, val|
			begin
				# gmosx: DO NOT escape by default !!!
				if not EXCLUDED_PARAMETERS.include?(param)
					obj.send("__force_#{param}", val)
				end
			rescue NameError
				next
			end
		end
		
		return obj
	end		
	alias_method :populate, :fill
end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nitro-0.11.0 lib/nitro/context.rb