class BrowserslistUseragent::Match

Checks matching of browserslist queies array to the user agent string

Attributes

queries[R]
user_agent_string[R]

Public Class Methods

new(queries, user_agent_string) click to toggle source
# File lib/browserslist_useragent/match.rb, line 10
def initialize(queries, user_agent_string)
  @user_agent_string = user_agent_string
  @queries = queries.each_with_object({}) do |query, hash|
    query = BrowserslistUseragent::QueryNormalizer.new(query).call
    family = query[:family].downcase
    hash[family] ||= []
    hash[family].push(query[:version])
  end
end

Public Instance Methods

browser?() click to toggle source
# File lib/browserslist_useragent/match.rb, line 30
def browser?
  target_browser = user_agent[:family].downcase
  queries.key?(target_browser)
end
version?(allow_higher: false) click to toggle source
# File lib/browserslist_useragent/match.rb, line 20
def version?(allow_higher: false)
  return false unless browser?

  user_agent_version = user_agent[:version]
  return false if user_agent_version.nil? || user_agent_version == ''

  semantic = Semantic::Version.new(user_agent[:version])
  match_semantic_version(semantic, allow_higher: allow_higher)
end

Private Instance Methods

match_higher_version?(semantic, query_version) click to toggle source
# File lib/browserslist_useragent/match.rb, line 60
def match_higher_version?(semantic, query_version)
  low_version = query_version.split('-', 2).first
  semantic.satisfies?(">= #{low_version}")
end
match_semantic_version(semantic, allow_higher:) click to toggle source
# File lib/browserslist_useragent/match.rb, line 41
def match_semantic_version(semantic, allow_higher:)
  queries[user_agent[:family].downcase].any? do |version|
    if allow_higher
      match_higher_version?(semantic, version)
    else
      match_version?(semantic, version)
    end
  end
end
match_version?(semantic, query_version) click to toggle source
# File lib/browserslist_useragent/match.rb, line 51
def match_version?(semantic, query_version)
  if query_version.include?('-')
    low_version, high_version = query_version.split('-', 2)
    semantic.satisfied_by?([">= #{low_version}", "<= #{high_version}"])
  else
    semantic.satisfies?(query_version)
  end
end
user_agent() click to toggle source
# File lib/browserslist_useragent/match.rb, line 37
def user_agent
  Resolver.new(user_agent_string).call
end