wurfl_device 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/wurfl_device/constants.rb +3 -0
- data/lib/wurfl_device/user_agent_matcher.rb +29 -25
- data/lib/wurfl_device/version.rb +1 -1
- metadata +23 -23
@@ -18,6 +18,8 @@ module WurflDevice
|
|
18
18
|
WURFL_USER_AGENTS = "wurfl:user_agents"
|
19
19
|
WURFL_USER_AGENTS_CACHED = "wurfl:user_agents_cached"
|
20
20
|
|
21
|
+
WORST_MATCH = 7
|
22
|
+
|
21
23
|
MOBILE_BROWSERS = [
|
22
24
|
'cldc', 'symbian', 'midp', 'j2me', 'mobile', 'wireless', 'palm', 'phone', 'pocket pc', 'pocketpc', 'netfront',
|
23
25
|
'bolt', 'iris', 'brew', 'openwave', 'windows ce', 'wap2.', 'android', 'opera mini', 'opera mobi', 'maemo', 'fennec',
|
@@ -26,5 +28,6 @@ module WurflDevice
|
|
26
28
|
|
27
29
|
ROBOTS = [ 'bot', 'crawler', 'spider', 'novarra', 'transcoder', 'yahoo! searchmonkey', 'yahoo! slurp', 'feedfetcher-google', 'toolbar', 'mowser' ]
|
28
30
|
DESKTOP_BROWSERS = [ 'slcc1', '.net clr', 'wow64', 'media center pc', 'funwebproducts', 'macintosh', 'aol 9.', 'america online browser', 'googletoolbar' ]
|
31
|
+
|
29
32
|
end
|
30
33
|
end
|
@@ -15,26 +15,25 @@ module WurflDevice
|
|
15
15
|
return self if !@device.nil? && @device.is_valid?
|
16
16
|
|
17
17
|
# ris match
|
18
|
-
user_agent = @user_agent.cleaned
|
19
18
|
if @device.nil?
|
20
|
-
index_matcher = get_index(user_agent)
|
19
|
+
index_matcher = get_index(@user_agent)
|
21
20
|
matcher = "matcher_#{index_matcher.downcase}"
|
22
21
|
if self.respond_to?(matcher)
|
23
|
-
self.send(matcher, user_agent)
|
22
|
+
self.send(matcher, @user_agent)
|
24
23
|
else
|
25
|
-
if user_agent =~ /^Mozilla/i
|
24
|
+
if @user_agent =~ /^Mozilla/i
|
26
25
|
tolerance = 5
|
27
|
-
@device = ld_match(user_agent, tolerance)
|
26
|
+
@device = ld_match(@user_agent, tolerance)
|
28
27
|
else
|
29
|
-
tolerance = user_agent.first_slash
|
30
|
-
@device = ris_match(user_agent, tolerance)
|
28
|
+
tolerance = @user_agent.first_slash
|
29
|
+
@device = ris_match(@user_agent, tolerance)
|
31
30
|
end
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
35
34
|
# last attempts
|
36
35
|
if @device.nil?
|
37
|
-
last_attempts(user_agent)
|
36
|
+
last_attempts(@user_agent)
|
38
37
|
end
|
39
38
|
|
40
39
|
WurflDevice.save_device_in_ua_cache(@user_agent, @device)
|
@@ -42,7 +41,8 @@ module WurflDevice
|
|
42
41
|
return self
|
43
42
|
end
|
44
43
|
|
45
|
-
def ris_match(user_agent, tolerance)
|
44
|
+
def ris_match(user_agent, tolerance=nil)
|
45
|
+
tolerance = WurflDevice::Constants::WORST_MATCH if tolerance.nil?
|
46
46
|
device = nil
|
47
47
|
user_agent_list = WurflDevice.get_user_agents_in_index(get_index(user_agent))
|
48
48
|
curlen = user_agent.length
|
@@ -62,7 +62,7 @@ module WurflDevice
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def ld_match(user_agent, tolerance=nil)
|
65
|
-
tolerance =
|
65
|
+
tolerance = WurflDevice::Constants::WORST_MATCH if tolerance.nil?
|
66
66
|
device = nil
|
67
67
|
user_agent_list = WurflDevice.get_user_agents_in_index(get_index(user_agent))
|
68
68
|
|
@@ -140,7 +140,7 @@ module WurflDevice
|
|
140
140
|
return 'CatchAll'
|
141
141
|
end
|
142
142
|
|
143
|
-
|
143
|
+
protected
|
144
144
|
# user agent matchers
|
145
145
|
def last_attempts(user_agent)
|
146
146
|
device_id = case
|
@@ -196,12 +196,13 @@ module WurflDevice
|
|
196
196
|
end
|
197
197
|
|
198
198
|
# mobile user agents
|
199
|
-
def
|
199
|
+
def matcher_nokia(user_agent)
|
200
200
|
tolerance = user_agent.index_of_or_length(['/', ' '], user_agent.index('Nokia'))
|
201
201
|
@device = ris_match(user_agent, tolerance)
|
202
202
|
end
|
203
203
|
|
204
204
|
def matcher_samsung(user_agent)
|
205
|
+
tolerance = 0
|
205
206
|
if user_agent.starts_with('SAMSUNG') || user_agent.starts_with('SEC-') || user_agent.starts_with('SCH-')
|
206
207
|
tolerance = user_agent.first_slash
|
207
208
|
elsif user_agent.starts_with('Samsung') || user_agent.starts_with('SPH') || user_agent.starts_with('SGH')
|
@@ -222,6 +223,7 @@ module WurflDevice
|
|
222
223
|
end
|
223
224
|
|
224
225
|
def matcher_blackberry(user_agent)
|
226
|
+
tolerance = 0
|
225
227
|
if user_agent.starts_with('BlackBerry')
|
226
228
|
tolerance = user_agent.ordinal_index_of(';', 3)
|
227
229
|
else
|
@@ -257,13 +259,13 @@ module WurflDevice
|
|
257
259
|
end
|
258
260
|
|
259
261
|
def matcher_sonyericsson(user_agent)
|
262
|
+
tolerance = 0
|
260
263
|
if user_agent.starts_with('SonyEricsson')
|
261
264
|
tolerance = user_agent.first_slash - 1
|
262
|
-
@device = ris_match(user_agent, tolerance)
|
263
265
|
else
|
264
266
|
tolerance = user_agent.second_slash
|
265
|
-
@device = ris_match(user_agent, tolerance)
|
266
267
|
end
|
268
|
+
@device = ris_match(user_agent, tolerance)
|
267
269
|
if @device.nil?
|
268
270
|
tolerance = 14
|
269
271
|
@device = ris_match(user_agent, tolerance)
|
@@ -288,11 +290,12 @@ module WurflDevice
|
|
288
290
|
end
|
289
291
|
|
290
292
|
def matcher_apple(user_agent)
|
293
|
+
tolerance = 0
|
291
294
|
if user_agent.starts_with('Apple')
|
292
|
-
tolerance = user_agent.ordinal_index_of(' ')
|
295
|
+
tolerance = user_agent.ordinal_index_of(' ', 3)
|
293
296
|
tolerance = user_agent.length if tolerance == -1
|
294
297
|
else
|
295
|
-
tolerance = user_agent.ordinal_index_of(';')
|
298
|
+
tolerance = user_agent.ordinal_index_of(';', 0)
|
296
299
|
end
|
297
300
|
@device = ris_match(user_agent, tolerance)
|
298
301
|
if @device.nil?
|
@@ -316,6 +319,7 @@ module WurflDevice
|
|
316
319
|
end
|
317
320
|
|
318
321
|
def matcher_docomo(user_agent)
|
322
|
+
tolerance = 0
|
319
323
|
if user_agent.num_slashes >= 2
|
320
324
|
tolerance = user_agent.second_slash
|
321
325
|
else
|
@@ -349,13 +353,13 @@ module WurflDevice
|
|
349
353
|
end
|
350
354
|
|
351
355
|
def matcher_kddi(user_agent)
|
356
|
+
tolerance = 0
|
352
357
|
if user_agent.starts_with('KDDI/')
|
353
358
|
tolerance = user_agent.second_slash
|
354
|
-
@device = ris_match(user_agent, tolerance)
|
355
359
|
else
|
356
360
|
tolerance = user_agent.first_slash
|
357
|
-
@device = ris_match(user_agent, tolerance)
|
358
361
|
end
|
362
|
+
@device = ris_match(user_agent, tolerance)
|
359
363
|
if @device.nil?
|
360
364
|
@device = Device.new('opwv_v62_generic')
|
361
365
|
end
|
@@ -412,13 +416,12 @@ module WurflDevice
|
|
412
416
|
end
|
413
417
|
|
414
418
|
def matcher_pantech(user_agent)
|
415
|
-
|
416
|
-
|
417
|
-
@device = ld_match(user_agent, tolerance)
|
418
|
-
else
|
419
|
+
tolerance = 5
|
420
|
+
if !user_agent.starts_with('Pantech')
|
419
421
|
tolerance = user_agent.first_slash
|
420
422
|
@device = ris_match(user_agent, tolerance)
|
421
423
|
end
|
424
|
+
@device = ris_match(user_agent, tolerance)
|
422
425
|
end
|
423
426
|
|
424
427
|
def matcher_philips(user_agent)
|
@@ -540,10 +543,11 @@ module WurflDevice
|
|
540
543
|
'msie'
|
541
544
|
end
|
542
545
|
@device = Device.new(device_id)
|
546
|
+
else
|
547
|
+
user_agent.sub!(/( \.NET CLR [\d\.]+;?| Media Center PC [\d\.]+;?| OfficeLive[a-zA-Z0-9\.\d]+;?| InfoPath[\.\d]+;?)/, '')
|
548
|
+
tolerance = user_agent.first_slash
|
549
|
+
@device = ris_match(user_agent, tolerance)
|
543
550
|
end
|
544
|
-
user_agent.sub!(/( \.NET CLR [\d\.]+;?| Media Center PC [\d\.]+;?| OfficeLive[a-zA-Z0-9\.\d]+;?| InfoPath[\.\d]+;?)/, '')
|
545
|
-
tolerance = user_agent.first_slash
|
546
|
-
@device = ris_match(user_agent, tolerance)
|
547
551
|
if @device.nil?
|
548
552
|
if user_agent.contains(['SLCC1', 'Media Center PC', '.NET CLR', 'OfficeLiveConnector'])
|
549
553
|
@device = Device.new(WurfDevice::Constants::GENERIC_WEB_BROWSER)
|
data/lib/wurfl_device/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wurfl_device
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-10-06 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
requirement: &
|
16
|
+
requirement: &254521320 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *254521320
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: nokogiri
|
27
|
-
requirement: &
|
27
|
+
requirement: &254520740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *254520740
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: redis
|
38
|
-
requirement: &
|
38
|
+
requirement: &254519960 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *254519960
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: text
|
49
|
-
requirement: &
|
49
|
+
requirement: &254519080 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *254519080
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &254518340 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.0.10
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *254518340
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
|
-
requirement: &
|
71
|
+
requirement: &254517820 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.9.2
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *254517820
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec-core
|
82
|
-
requirement: &
|
82
|
+
requirement: &254517120 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '2.0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *254517120
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rspec-expectations
|
93
|
-
requirement: &
|
93
|
+
requirement: &254516080 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '2.0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *254516080
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: rr
|
104
|
-
requirement: &
|
104
|
+
requirement: &254515280 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '1.0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *254515280
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: faker
|
115
|
-
requirement: &
|
115
|
+
requirement: &254493140 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ~>
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0.9'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *254493140
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: simplecov
|
126
|
-
requirement: &
|
126
|
+
requirement: &254492660 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ~>
|
@@ -131,7 +131,7 @@ dependencies:
|
|
131
131
|
version: 0.5.3
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *254492660
|
135
135
|
description: Ruby client library for mobile handset detection
|
136
136
|
email:
|
137
137
|
- ahutalla@gmail.com
|