Class: Mongrel2::Response

Inherits:
Object
  • Object
show all
Extended by:
Loggability
Defined in:
lib/mongrel2/response.rb

Overview

The Mongrel2 Response base class.

Direct Known Subclasses

HTTPResponse

Constant Summary collapse

DEFAULT_CHUNKSIZE =

The default number of bytes of the response body to send to the mongrel2 server at a time.

1024 * 512

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sender_id, conn_id, body = '') ⇒ Response

Create a new Response object for the specified sender_id, conn_id, and body.



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/mongrel2/response.rb', line 34

def initialize( sender_id, conn_id, body='' )
	body = StringIO.new( body, 'a+' ) unless body.respond_to?( :read )

	@sender_id             = sender_id
	@conn_id               = conn_id
	@body                  = body
	@request               = nil
	@chunksize             = DEFAULT_CHUNKSIZE
	@extended_reply_filter = nil
	@extended_reply_data   = []
end

Instance Attribute Details

#bodyObject

The body of the response as an IO (or IOish) object



60
61
62
# File 'lib/mongrel2/response.rb', line 60

def body
  @body
end

#chunksizeObject

The number of bytes to write to Mongrel in a single “chunk”



66
67
68
# File 'lib/mongrel2/response.rb', line 66

def chunksize
  @chunksize
end

#conn_idObject

The response’s connection ID; this corresponds to the identifier of the connection the response will be routed to by the mongrel2 server



57
58
59
# File 'lib/mongrel2/response.rb', line 57

def conn_id
  @conn_id
end

#extended_reply_dataObject (readonly)

The Array of data to include with the extended reply



73
74
75
# File 'lib/mongrel2/response.rb', line 73

def extended_reply_data
  @extended_reply_data
end

#extended_reply_filterObject (readonly)

The name of the extended reply filter to use in the reply. If this is set the response will be send back to Mongrel as an extended reply.



70
71
72
# File 'lib/mongrel2/response.rb', line 70

def extended_reply_filter
  @extended_reply_filter
end

#requestObject

The request that this response is for, if there is one



63
64
65
# File 'lib/mongrel2/response.rb', line 63

def request
  @request
end

#sender_idObject

The response’s UUID; this corresponds to the mongrel2 server the response will be routed to by the Connection.



53
54
55
# File 'lib/mongrel2/response.rb', line 53

def sender_id
  @sender_id
end

Class Method Details

.from_request(request) ⇒ Object

Create a response to the specified request and return it.



24
25
26
27
28
29
30
# File 'lib/mongrel2/response.rb', line 24

def self::from_request( request )
	self.log.debug "Creating a %p to request %p" % [ self, request ]
	response = new( request.sender_id, request.conn_id )
	response.request = request

	return response
end

Instance Method Details

#<<(object) ⇒ Object

Append the given object to the response body. Returns the response for chaining.



86
87
88
89
# File 'lib/mongrel2/response.rb', line 86

def <<( object )
	self.body << object
	return self
end

#each_chunkObject

Yield chunks of the response to the caller’s block. By default, just yields the result of calling #to_s on the response.



125
126
127
128
129
130
131
# File 'lib/mongrel2/response.rb', line 125

def each_chunk
	if block_given?
		yield( self.to_s )
	else
		return [ self.to_s ].to_enum
	end
end

#extend_reply_with(filter) ⇒ Object Also known as: extended_reply_with

Set up the response to send an extended reply to Mongrel2, invoking the given filter. The body of the response will be passed to the filter after being serialized to a tnetstring.



101
102
103
# File 'lib/mongrel2/response.rb', line 101

def extend_reply_with( filter )
	@extended_reply_filter = filter
end

#extended_reply?Boolean

Returns true if the response has been set to use an extended reply.

Returns:

  • (Boolean)


108
109
110
# File 'lib/mongrel2/response.rb', line 108

def extended_reply?
	return @extended_reply_filter ? true : false
end

#inspectObject

Returns a string containing a human-readable representation of the Response, suitable for debugging.



136
137
138
139
140
141
142
143
144
# File 'lib/mongrel2/response.rb', line 136

def inspect
	return "#<%p:0x%016x %s (%s/%d)>" % [
		self.class,
		self.object_id * 2,
		self.inspect_details,
		self.sender_id,
		self.conn_id
	]
end

#puts(*objects) ⇒ Object

Write the given objects to the response body, calling #to_s on each one.



93
94
95
# File 'lib/mongrel2/response.rb', line 93

def puts( *objects )
	self.body.puts( *objects )
end

#to_sObject

Stringify the response, which just returns its body.



114
115
116
117
118
119
120
# File 'lib/mongrel2/response.rb', line 114

def to_s
	pos = self.body.pos
	self.body.pos = 0
	return self.body.read
ensure
	self.body.pos = pos
end