21 lines
548 B
Ruby
21 lines
548 B
Ruby
|
|
class ApiVersion
|
||
|
|
attr_reader :version, :default
|
||
|
|
|
||
|
|
def initialize(version, default = false)
|
||
|
|
@version = version
|
||
|
|
@default = default
|
||
|
|
end
|
||
|
|
|
||
|
|
# check whether version is specified or is default
|
||
|
|
def matches?(request)
|
||
|
|
check_headers(request.headers) || default
|
||
|
|
end
|
||
|
|
|
||
|
|
private
|
||
|
|
|
||
|
|
def check_headers(headers)
|
||
|
|
# check version from Accept headers; expect custom media type `todos`
|
||
|
|
accept = headers[:accept]
|
||
|
|
accept && accept.include?("application/vnd.rails.#{version}+json") # header Accept: application/vnd.rails.v#+json
|
||
|
|
end
|
||
|
|
end
|