Class: Protocol::HTTP::Header::ETags

Inherits:
Split
  • Object
show all
Defined in:
lib/protocol/http/header/etags.rb

Overview

The etags header represents a list of entity tags (ETags) for resources.

The etags header is used for conditional requests to compare the current version of a resource with previously stored versions. It supports both strong and weak validators, as well as the wildcard character (‘*`) to indicate a match for any resource.

Constant Summary

Constants inherited from Split

Split::COMMA

Instance Method Summary collapse

Methods inherited from Split

#<<, coerce, #initialize, parse, #to_s, trailer?

Constructor Details

This class inherits a constructor from Protocol::HTTP::Header::Split

Instance Method Details

#match?(etag) ⇒ Boolean

Checks if the specified ETag matches the etags header.

This method returns true if the wildcard is present or if the exact ETag is found in the list. Note that this implementation is not strictly compliant with the RFC-specified format.

Returns:

  • (Boolean)


31
32
33
# File 'lib/protocol/http/header/etags.rb', line 31

def match?(etag)
	wildcard? || self.include?(etag)
end

#strong_match?(etag) ⇒ Boolean

Checks for a strong match with the specified ETag, useful with the if-match header.

A strong match requires that the ETag in the header list matches the specified ETag and that neither is a weak validator.

Returns:

  • (Boolean)


41
42
43
# File 'lib/protocol/http/header/etags.rb', line 41

def strong_match?(etag)
	wildcard? || (!weak_tag?(etag) && self.include?(etag))
end

#weak_match?(etag) ⇒ Boolean

Checks for a weak match with the specified ETag, useful with the if-none-match header.

A weak match allows for semantically equivalent content, including weak validators and their strong counterparts.

Returns:

  • (Boolean)


51
52
53
# File 'lib/protocol/http/header/etags.rb', line 51

def weak_match?(etag)
	wildcard? || self.include?(etag) || self.include?(opposite_tag(etag))
end

#wildcard?Boolean

Checks if the etags header contains the wildcard (‘*`) character.

The wildcard character matches any resource version, regardless of its actual value.

Returns:

  • (Boolean)


21
22
23
# File 'lib/protocol/http/header/etags.rb', line 21

def wildcard?
	self.include?("*")
end