Class: Lively::Assets

Inherits:
Protocol::HTTP::Middleware
  • Object
show all
Defined in:
lib/lively/assets.rb

Constant Summary collapse

DEFAULT_CACHE_CONTROL =
'public, max-age=3600'
DEFAULT_CONTENT_TYPES =
{
	".html" => "text/html",
	".css" => "text/css",
	".js" => "application/javascript",
	".png" => "image/png",
	".jpeg" => "image/jpeg",
	".gif" => "image/gif",
}

Instance Method Summary collapse

Constructor Details

#initialize(delegate, root: Dir.pwd, content_types: DEFAULT_CONTENT_TYPES, cache_control: DEFAULT_CACHE_CONTROL) ⇒ Assets

Returns a new instance of Assets.



36
37
38
39
40
41
42
43
# File 'lib/lively/assets.rb', line 36

def initialize(delegate, root: Dir.pwd, content_types: DEFAULT_CONTENT_TYPES, cache_control: DEFAULT_CACHE_CONTROL)
	super(delegate)
	
	@root = root
	
	@content_types = content_types
	@cache_control = cache_control
end

Instance Method Details

#call(request) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/lively/assets.rb', line 70

def call(request)
	if path = expand_path(request.path)
		extension = File.extname(path)
		content_type = @content_types[extension]
		
		if path.start_with?(@root) && File.exist?(path) && content_type
			return response_for(path, content_type)
		end
	end
	
	super
end

#expand_path(path) ⇒ Object



64
65
66
67
68
# File 'lib/lively/assets.rb', line 64

def expand_path(path)
	File.realpath(File.join(@root, path))
rescue Errno::ENOENT
	nil
end

#freezeObject



45
46
47
48
49
50
51
52
53
# File 'lib/lively/assets.rb', line 45

def freeze
	return self if frozen?
	
	@root.freeze
	@content_types.freeze
	@cache_control.freeze
	
	super
end

#response_for(path, content_type) ⇒ Object



55
56
57
58
59
60
61
62
# File 'lib/lively/assets.rb', line 55

def response_for(path, content_type)
	headers = [
		['content-type', content_type],
		['cache-control', @cache_control],
	]
	
	return Protocol::HTTP::Response[200, headers, Protocol::HTTP::Body::File.open(path)]
end