class DeviceDetector::Parser
Constants
- ROOT
Public Instance Methods
full_version()
click to toggle source
# File lib/device_detector/parser.rb, line 12 def full_version from_cache(['full_version', self.class.name, user_agent]) do VersionExtractor.new(user_agent, regex_meta).call end end
name()
click to toggle source
# File lib/device_detector/parser.rb, line 6 def name from_cache(['name', self.class.name, user_agent]) do NameExtractor.new(user_agent, regex_meta).call end end
Private Instance Methods
build_regex(src)
click to toggle source
# File lib/device_detector/parser.rb, line 73 def build_regex(src) Regexp.new('(?:^|[^A-Z0-9\-_]|[^A-Z0-9\-]_|sprd-)(?:' + src + ')', Regexp::IGNORECASE) end
filenames()
click to toggle source
# File lib/device_detector/parser.rb, line 34 def filenames fail NotImplementedError end
filepaths()
click to toggle source
# File lib/device_detector/parser.rb, line 38 def filepaths filenames.map do |filename| [ filename.to_sym, File.join(ROOT, 'regexes', filename) ] end end
from_cache(key) { || ... }
click to toggle source
# File lib/device_detector/parser.rb, line 77 def from_cache(key) DeviceDetector.cache.get_or_set(key) { yield } end
load_regexes(file_paths)
click to toggle source
# File lib/device_detector/parser.rb, line 50 def load_regexes(file_paths) file_paths.map { |path, full_path| [path, symbolize_keys!(YAML.load_file(full_path))] } end
matching_regex()
click to toggle source
# File lib/device_detector/parser.rb, line 24 def matching_regex from_cache([self.class.name, user_agent]) do regexes.find { |r| user_agent =~ r[:regex] } end end
parse_regexes(path, raw_regexes)
click to toggle source
# File lib/device_detector/parser.rb, line 64 def parse_regexes(path, raw_regexes) raw_regexes.map do |meta| fail "invalid device spec: #{meta.inspect}" unless meta[:regex].is_a? String meta[:regex] = build_regex(meta[:regex]) meta[:path] = path meta end end
regex_meta()
click to toggle source
# File lib/device_detector/parser.rb, line 20 def regex_meta @regex_meta ||= matching_regex || {} end
regexes()
click to toggle source
# File lib/device_detector/parser.rb, line 30 def regexes @regexes ||= regexes_for(filepaths) end
regexes_for(file_paths)
click to toggle source
# File lib/device_detector/parser.rb, line 44 def regexes_for(file_paths) from_cache(['regexes', self.class]) do load_regexes(file_paths).flat_map { |path, regex| parse_regexes(path, regex) } end end
symbolize_keys!(object)
click to toggle source
# File lib/device_detector/parser.rb, line 54 def symbolize_keys!(object) case object when Array object.map!{ |v| symbolize_keys!(v) } when Hash object.keys.each{ |k| object[k.to_sym] = symbolize_keys!(object.delete(k)) if k.is_a?(String) } end object end