soylent/device_map

View on GitHub
lib/device_map.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require 'nokogiri'

# Device detection
module DeviceMap
  autoload :Classifier, 'device_map/classifier'
  autoload :Keyword, 'device_map/keyword'
  autoload :Pattern, 'device_map/pattern'
  autoload :UserAgent, 'device_map/user_agent'
  autoload :VERSION, 'device_map/version'

  # Device data
  #
  # @api private
  module DeviceData
    autoload :Builder, 'device_map/device_data/builder'
    autoload :Device, 'device_map/device_data/device'
    autoload :Devices, 'device_map/device_data/devices'
    autoload :Patterns, 'device_map/device_data/patterns'
  end

  # Device properties
  #
  # @api private
  module Properties
    autoload :DSL, 'device_map/properties/dsl'
    autoload :Property, 'device_map/properties/property'
    autoload :Types, 'device_map/properties/types'
  end

  RESOURCES_PATH = File.expand_path('resources', __dir__)
  private_constant :RESOURCES_PATH

  # Path to the source user agent classification patterns
  BUILDER_DATA_SOURCE = File.join(RESOURCES_PATH, 'BuilderDataSource.xml')

  # Path to the source device database
  DEVICE_DATA_SOURCE = File.join(RESOURCES_PATH, 'DeviceDataSource.xml')

  # Path to serialized user agent classification patterns
  PATTERNS_DUMP = File.join(RESOURCES_PATH, 'patterns')

  # Path to serialized device database
  DEVICES_DUMP = File.join(RESOURCES_PATH, 'devices')

  # Classifies a user agent
  #
  # @param user_agent [String] user agent string
  # @return [DeviceMap::DeviceData::Device] detected device
  def self.classify(user_agent)
    classifier = Classifier.instance
    classifier.find_device(user_agent)
  end
end