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.



38
39
40
41
# File 'lib/utopia/middleware/static.rb', line 38

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.



44
45
46
# File 'lib/utopia/middleware/static.rb', line 44

def etag
  @etag
end

#pathObject (readonly)

Returns the value of attribute path.



43
44
45
# File 'lib/utopia/middleware/static.rb', line 43

def path
  @path
end

Instance Method Details

#eachObject



58
59
60
61
62
63
64
# File 'lib/utopia/middleware/static.rb', line 58

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

#modified?(env) ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/utopia/middleware/static.rb', line 66

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



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

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

#sizeObject



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

def size
	File.size(@path)
end

#to_pathObject



46
47
48
# File 'lib/utopia/middleware/static.rb', line 46

def to_path
	@path
end