Module: Browscapper

Defined in:
lib/browscapper.rb,
lib/browscapper/reader.rb,
lib/browscapper/version.rb,
lib/browscapper/user_agent.rb,
lib/browscapper/reader/csv_reader.rb,
lib/browscapper/reader/ini_reader.rb,
lib/browscapper/reader/yaml_reader.rb,
lib/browscapper/reader/marshal_reader.rb

Defined Under Namespace

Modules: CSVReader, INIReader, MarshalReader, Reader, YAMLReader Classes: Error, NotLoadedError, UserAgent

Constant Summary collapse

MATCH_CACHE =
Hash.new
VERSION =
"0.3.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.entriesObject (readonly)

Returns the value of attribute entries.



23
24
25
# File 'lib/browscapper.rb', line 23

def entries
  @entries
end

.fileObject (readonly)

Returns the value of attribute file.



23
24
25
# File 'lib/browscapper.rb', line 23

def file
  @file
end

Class Method Details

.browscap_formatObject



97
98
99
100
101
102
103
# File 'lib/browscapper.rb', line 97

def browscap_format
  raise Browscapper::NotLoadedError.new if entries.nil?

  if entries[:browscap_version] && entries[:browscap_version][:format]
    entries[:browscap_version][:format]
  end
end

.browscap_releasedObject



89
90
91
92
93
94
95
# File 'lib/browscapper.rb', line 89

def browscap_released
  raise Browscapper::NotLoadedError.new if entries.nil?

  if entries[:browscap_version] && entries[:browscap_version][:released]
    Date.parse(entries[:browscap_version][:released])
  end
end

.browscap_typeObject



105
106
107
108
109
110
111
# File 'lib/browscapper.rb', line 105

def browscap_type
  raise Browscapper::NotLoadedError.new if entries.nil?

  if entries[:browscap_version] && entries[:browscap_version][:type]
    entries[:browscap_version][:type]
  end
end

.browscap_versionObject



81
82
83
84
85
86
87
# File 'lib/browscapper.rb', line 81

def browscap_version
  raise Browscapper::NotLoadedError.new if entries.nil?

  if entries[:browscap_version] && entries[:browscap_version][:version]
    entries[:browscap_version][:version]
  end
end

.clear_cacheObject



48
49
50
# File 'lib/browscapper.rb', line 48

def clear_cache
  MATCH_CACHE.clear
end

.load(file = File.join(%w{ . browscap.ini })) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/browscapper.rb', line 26

def load(file = File.join(%w{ . browscap.ini }))
  if !File.exists?(file)
    raise ArgumentError.new("File #{file} not found.")
  end

  reader = case file.downcase
    when /\.csv$/
      CSVReader
    when /\.ya?ml$/
      YAMLReader
    when /\.ini$/
      INIReader
    else
      MarshalReader
  end

  @file = file
  @entries = reader.load(file)
  clear_cache
  self
end

.match(ua) ⇒ Object Also known as: query



69
70
71
72
73
74
75
76
77
78
# File 'lib/browscapper.rb', line 69

def match(ua)
  return nil if ua_empty?(ua)

  if MATCH_CACHE[ua] && !MATCH_CACHE[ua].empty?
    MATCH_CACHE[ua].first
  else
    m = self.matches(ua)
    m.first if !m.empty?
  end
end

.matches(ua) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/browscapper.rb', line 52

def matches(ua)
  return nil if ua_empty?(ua)

  @entries or self.load

  ua_str = ua.to_s.downcase
  ua_len = ua_str.length

  MATCH_CACHE[ua] ||= @entries.select { |k, v|
    v[:pattern] =~ ua_str if v && v[:pattern]
  }.sort_by { |(k, v)|
    ua_len - v[:user_agent].gsub(/[?*]/, '').length
  }.collect { |(k, v)|
    v
  }
end