uagent 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/uagent.rb +27 -40
- data/test/parser_test.rb +9 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/lib/uagent.rb
CHANGED
@@ -4,52 +4,39 @@ module UAgent
|
|
4
4
|
|
5
5
|
class Parser
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
['SonyEricsson', :mobile],
|
31
|
-
['Telit', :mobile],
|
32
|
-
['Telit_mobile_Terminals', :mobile],
|
33
|
-
['TSM', :mobile],
|
34
|
-
['Palm', :mobile]]
|
35
|
-
@@priority = [:iphone, :blackberry, :mobile]
|
36
|
-
|
37
|
-
def initialize(*keys)
|
38
|
-
@keys = [:desktop, :mobile] + keys
|
7
|
+
attr_reader :keys, :specific_keys
|
8
|
+
|
9
|
+
@@default_database = {
|
10
|
+
:mobile => ['Mobile', 'Opera Mini', 'iPhone', 'ACER', 'Alcatel', 'AUDIOVOX',
|
11
|
+
'BlackBerry', 'CDM', 'Ericsson', 'LG', 'LGE', 'Motorola', 'MOT',
|
12
|
+
'NEC', 'Nokia', 'Panasonic', 'QCI', 'SAGEM', 'SAMSUNG', 'SEC',
|
13
|
+
'Sanyo', 'Sendo', 'SHARP', 'SonyEricsson', 'Telit',
|
14
|
+
'Telit_mobile_Terminals', 'TSM', 'Palm'],
|
15
|
+
:iphone => ['iPhone'],
|
16
|
+
:blackberry => ['BlackBerry']
|
17
|
+
}
|
18
|
+
|
19
|
+
def initialize(*specific_keys)
|
20
|
+
@specific_keys = specific_keys.clone
|
21
|
+
@keys = [:desktop, :mobile] + @specific_keys
|
22
|
+
set_database @@default_database
|
23
|
+
end
|
24
|
+
|
25
|
+
def set_database(database)
|
26
|
+
@database = database.clone
|
27
|
+
@database.each do |k,v|
|
28
|
+
@database[k] = Regexp.new( "(" + v.join("|") + ")" )
|
29
|
+
end
|
39
30
|
end
|
40
31
|
|
41
32
|
def call(env)
|
42
33
|
# Check devices in http user agent
|
43
34
|
http_user_agent = env['HTTP_USER_AGENT']
|
44
|
-
|
45
|
-
|
46
|
-
if /#{sample[0]}/ === http_user_agent
|
47
|
-
return key if sample[(1...sample.size)].include? key
|
48
|
-
end
|
49
|
-
end
|
35
|
+
(@specific_keys + [:mobile]).each do |k|
|
36
|
+
return k if @database[k] === http_user_agent
|
50
37
|
end
|
51
|
-
#
|
52
|
-
return
|
38
|
+
# Device is not found, return the default
|
39
|
+
return :desktop
|
53
40
|
end
|
54
41
|
|
55
42
|
end
|
data/test/parser_test.rb
CHANGED
@@ -56,4 +56,13 @@ describe 'UAgent::Parser' do
|
|
56
56
|
parser.call(env).should == :desktop
|
57
57
|
end
|
58
58
|
|
59
|
+
it 'allows to change the device database' do
|
60
|
+
parser = UAgent::Parser.new(:test)
|
61
|
+
parser.set_database({:test => ['Test']})
|
62
|
+
|
63
|
+
ua = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) Test"
|
64
|
+
env = { 'HTTP_USER_AGENT' => ua }
|
65
|
+
parser.call(env).should == :test
|
66
|
+
end
|
67
|
+
|
59
68
|
end
|