module Resolver

Resolves localized resources from immutable request preferences.

Definitions

def resolve_localized(request)

Resolve a response by trying each preferred locale in order.

Implementation

def resolve_localized(request)
	if localization = request.localization
		localization.preferred_locales.each do |locale|
			selected = localization.with(locale: locale)
			
			if response = yield(selected)
				return localized_response(request, response, selected)
			end
		end
	else
		return yield(nil)
	end
	
	return nil
end

def localized_response(request, response, localization)

Describe the selected localized representation in its response metadata.

Implementation

def localized_response(request, response, localization)
	response = Response.wrap(response)
	
	if locale = localization.locale
		response.headers[CONTENT_LANGUAGE] = locale
		response.headers[CONTENT_LOCATION] = localization.localized_path(request.url.path.encoded)
	end
	
	return response
end