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