Class: Grape::Util::MediaType

Inherits:
Object
  • Object
show all
Defined in:
lib/grape/util/media_type.rb

Constant Summary collapse

VENDOR_VERSION_HEADER_REGEX =

based on the HTTP Accept header with the pattern: application/vnd.:vendor-:version+:format

Matched against a down-cased media type: they are case-insensitive (RFC 9110 §8.3.1), while a vendor and version are declared in the DSL in the case they will be compared in.

/\Avnd\.(?<vendor>[a-z0-9.\-_!^]+?)(?:-(?<version>[a-z0-9*.]+))?(?:\+(?<format>[a-z0-9*\-.]+))?\z/

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type:, subtype:) ⇒ MediaType

Returns a new instance of MediaType.



16
17
18
19
20
21
22
23
24
# File 'lib/grape/util/media_type.rb', line 16

def initialize(type:, subtype:)
  @type = type
  @subtype = subtype
  VENDOR_VERSION_HEADER_REGEX.match(subtype) do |m|
    @vendor = m[:vendor]
    @version = m[:version]
    @format = m[:format]
  end
end

Instance Attribute Details

#formatObject (readonly)

Returns the value of attribute format.



6
7
8
# File 'lib/grape/util/media_type.rb', line 6

def format
  @format
end

#subtypeObject (readonly)

Returns the value of attribute subtype.



6
7
8
# File 'lib/grape/util/media_type.rb', line 6

def subtype
  @subtype
end

#typeObject (readonly)

Returns the value of attribute type.



6
7
8
# File 'lib/grape/util/media_type.rb', line 6

def type
  @type
end

#vendorObject (readonly)

Returns the value of attribute vendor.



6
7
8
# File 'lib/grape/util/media_type.rb', line 6

def vendor
  @vendor
end

#versionObject (readonly)

Returns the value of attribute version.



6
7
8
# File 'lib/grape/util/media_type.rb', line 6

def version
  @version
end

Class Method Details

.best_quality(header, available_media_types) ⇒ Object



41
42
43
# File 'lib/grape/util/media_type.rb', line 41

def best_quality(header, available_media_types)
  parse(best_quality_media_type(header, available_media_types))
end

.match?(media_type) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
57
58
59
60
61
# File 'lib/grape/util/media_type.rb', line 54

def match?(media_type)
  return false if media_type.blank?

  subtype = media_type.downcase.split('/', 2).last
  return false if subtype.blank?

  VENDOR_VERSION_HEADER_REGEX.match?(subtype)
end

.parse(media_type) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/grape/util/media_type.rb', line 45

def parse(media_type)
  return if media_type.blank?

  type, subtype = media_type.downcase.split('/', 2)
  return if type.blank? || subtype.blank?

  new(type:, subtype:)
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



26
27
28
29
30
31
32
33
# File 'lib/grape/util/media_type.rb', line 26

def ==(other)
  self.class == other.class &&
    other.type == type &&
    other.subtype == subtype &&
    other.vendor == vendor &&
    other.version == version &&
    other.format == format
end

#hashObject



36
37
38
# File 'lib/grape/util/media_type.rb', line 36

def hash
  [self.class, type, subtype, vendor, version, format].hash
end