Class: Utopia::Middleware::Static::FileReader

Inherits:
Object
  • Object
show all
Defined in:
lib/utopia/middleware/static.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path) ⇒ FileReader

Returns a new instance of FileReader.



49
50
51
52
# File 'lib/utopia/middleware/static.rb', line 49

def initialize(path)
	@path = path
	@etag = Digest::SHA1.hexdigest("#{File.size(@path)}#{mtime_date}")
end

Instance Attribute Details

#etagObject (readonly)

Returns the value of attribute etag.



55
56
57
# File 'lib/utopia/middleware/static.rb', line 55

def etag
  @etag
end

#pathObject (readonly)

Returns the value of attribute path.



54
55
56
# File 'lib/utopia/middleware/static.rb', line 54

def path
  @path
end

Instance Method Details

#eachObject



69
70
71
72
73
74
75
# File 'lib/utopia/middleware/static.rb', line 69

def each
	File.open(@path, "rb") do |fp|
		while part = fp.read(8192)
			yield part
		end
	end
end

#modified?(env) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/utopia/middleware/static.rb', line 77

def modified?(env)
	if modified_since = env['HTTP_IF_MODIFIED_SINCE']
		return false if File.mtime(@path) <= Time.parse(modified_since)
	end

	if etags = env['HTTP_IF_NONE_MATCH']
		etags = etags.split(/\s*,\s*/)
		return false if etags.include?(etag) || etags.include?('*')
	end

	return true
end

#mtime_dateObject



61
62
63
# File 'lib/utopia/middleware/static.rb', line 61

def mtime_date
	File.mtime(@path).httpdate
end

#sizeObject



65
66
67
# File 'lib/utopia/middleware/static.rb', line 65

def size
	File.size(@path)
end

#to_pathObject



57
58
59
# File 'lib/utopia/middleware/static.rb', line 57

def to_path
	@path
end