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