wurfl_device 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 = 7 if tolerance.nil?
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
- private
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 match_nokia(user_agent)
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
- if user_agent.starts_with('Pantech')
416
- tolerance = 5
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)
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  module WurflDevice
4
- VERSION = "0.1.1".freeze
4
+ VERSION = "0.1.2".freeze
5
5
  end
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.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: &227601480 !ruby/object:Gem::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: *227601480
24
+ version_requirements: *254521320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &227600920 !ruby/object:Gem::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: *227600920
35
+ version_requirements: *254520740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: redis
38
- requirement: &227600120 !ruby/object:Gem::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: *227600120
46
+ version_requirements: *254519960
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: text
49
- requirement: &227599260 !ruby/object:Gem::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: *227599260
57
+ version_requirements: *254519080
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &227598520 !ruby/object:Gem::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: *227598520
68
+ version_requirements: *254518340
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
- requirement: &227598000 !ruby/object:Gem::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: *227598000
79
+ version_requirements: *254517820
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec-core
82
- requirement: &227597340 !ruby/object:Gem::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: *227597340
90
+ version_requirements: *254517120
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rspec-expectations
93
- requirement: &227596080 !ruby/object:Gem::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: *227596080
101
+ version_requirements: *254516080
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rr
104
- requirement: &227595120 !ruby/object:Gem::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: *227595120
112
+ version_requirements: *254515280
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: faker
115
- requirement: &227573320 !ruby/object:Gem::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: *227573320
123
+ version_requirements: *254493140
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: simplecov
126
- requirement: &227572860 !ruby/object:Gem::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: *227572860
134
+ version_requirements: *254492660
135
135
  description: Ruby client library for mobile handset detection
136
136
  email:
137
137
  - ahutalla@gmail.com