Navigation Menu

Skip to content

Commit

Permalink
refactor - move responsibility for generating rack env to Message#to_…
Browse files Browse the repository at this point in the history
…rack_env
  • Loading branch information
jakesgordon committed Aug 23, 2014
1 parent 25cb984 commit 4f74a01
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 56 deletions.
21 changes: 1 addition & 20 deletions lib/rack-rabbit/handler.rb
@@ -1,5 +1,3 @@
require 'stringio'

require 'rack-rabbit/response'
require 'rack-rabbit/adapter'

Expand Down Expand Up @@ -58,7 +56,7 @@ def log(message, response, timing)

def handle(message)

env = build_env(message)
env = message.to_rack_env(config.rack_env)

status, headers, body_chunks = app.call(env)

Expand Down Expand Up @@ -91,23 +89,6 @@ def handle(message)

#--------------------------------------------------------------------------

def build_env(message)

config.rack_env.merge({
'rabbit.message' => message,
'rack.input' => StringIO.new(message.body || ""),
'REQUEST_METHOD' => message.method,
'REQUEST_PATH' => message.uri,
'PATH_INFO' => message.path,
'QUERY_STRING' => message.query,
'CONTENT_TYPE' => message.content_type,
'CONTENT_LENGTH' => message.content_length
}).merge(message.headers)

end

#--------------------------------------------------------------------------

def response_properties(message, response)
return {
:app_id => config.app_id,
Expand Down
21 changes: 21 additions & 0 deletions lib/rack-rabbit/message.rb
@@ -1,3 +1,5 @@
require 'stringio'

module RackRabbit
class Message

Expand All @@ -23,6 +25,25 @@ def initialize(delivery_tag, properties, body)
@content_length = body.nil? ? 0 : body.length
end

#--------------------------------------------------------------------------

def to_rack_env(defaults = {})

defaults.merge({
'rabbit.message' => self,
'rack.input' => StringIO.new(body || ""),
'REQUEST_METHOD' => method,
'REQUEST_PATH' => uri,
'PATH_INFO' => path,
'QUERY_STRING' => query,
'CONTENT_TYPE' => content_type,
'CONTENT_LENGTH' => content_length
}).merge(headers)

end

#--------------------------------------------------------------------------

def should_reply?
!reply_to.nil?
end
Expand Down
36 changes: 0 additions & 36 deletions test/unit/test_handler.rb
Expand Up @@ -153,42 +153,6 @@ def test_failed_message_is_rejected

#--------------------------------------------------------------------------

def test_rack_environment_is_generated_correctly_from_incoming_message

handler = build_handler(:rack_file => DEFAULT_RACK_APP, :app_id => APP_ID)
config = handler.config

message = build_message({
:content_type => CONTENT_TYPE,
:content_encoding => CONTENT_ENCODING,
:method => :GET,
:path => URI,
:body => BODY
})

env = handler.build_env(message)

assert_equal(message, env['rabbit.message'])
assert_equal(BODY, env['rack.input'].read)
assert_equal(:GET, env['REQUEST_METHOD'])
assert_equal(URI, env['REQUEST_PATH'])
assert_equal(PATH, env['PATH_INFO'])
assert_equal(QUERY, env['QUERY_STRING'])
assert_equal(CONTENT_TYPE, env['CONTENT_TYPE'])
assert_equal(BODY.length, env['CONTENT_LENGTH'])
assert_equal(Rack::VERSION, env['rack.version'])
assert_equal(config.logger, env['rack.logger'])
assert_equal($stderr, env['rack.errors'])
assert_equal(false, env['rack.multithread'])
assert_equal(true, env['rack.multiprocess'])
assert_equal(false, env['rack.run_once'])
assert_equal('http', env['rack.url_scheme'])
assert_equal(APP_ID, env['SERVER_NAME'])

end

#--------------------------------------------------------------------------

def test_rabbit_response_is_generated_correctly_from_rack_response

handler = build_handler(:rack_file => DEFAULT_RACK_APP, :app_id => APP_ID)
Expand Down
35 changes: 35 additions & 0 deletions test/unit/test_message.rb
Expand Up @@ -68,6 +68,41 @@ def test_populated_message

#--------------------------------------------------------------------------

def test_convert_message_to_rack_environment

config = build_config(:app_id => APP_ID)

message = build_message({
:content_type => CONTENT_TYPE,
:content_encoding => CONTENT_ENCODING,
:method => :GET,
:path => URI,
:body => BODY
})

env = message.to_rack_env(config.rack_env)

assert_equal(message, env['rabbit.message'])
assert_equal(BODY, env['rack.input'].read)
assert_equal(:GET, env['REQUEST_METHOD'])
assert_equal(URI, env['REQUEST_PATH'])
assert_equal(PATH, env['PATH_INFO'])
assert_equal(QUERY, env['QUERY_STRING'])
assert_equal(CONTENT_TYPE, env['CONTENT_TYPE'])
assert_equal(BODY.length, env['CONTENT_LENGTH'])
assert_equal(Rack::VERSION, env['rack.version'])
assert_equal(config.logger, env['rack.logger'])
assert_equal($stderr, env['rack.errors'])
assert_equal(false, env['rack.multithread'])
assert_equal(true, env['rack.multiprocess'])
assert_equal(false, env['rack.run_once'])
assert_equal('http', env['rack.url_scheme'])
assert_equal(APP_ID, env['SERVER_NAME'])

end

#--------------------------------------------------------------------------

def test_should_reply?
m1 = build_message(:reply_to => nil)
m2 = build_message(:reply_to => REPLY_TO)
Expand Down

0 comments on commit 4f74a01

Please sign in to comment.