wurfl_device 0.1.5 → 0.1.6
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/.rvmrc +2 -2
- data/README.md +31 -7
- data/config/unicorn.conf.rb +13 -7
- data/lib/wurfl_device/cache.rb +215 -0
- data/lib/wurfl_device/capability.rb +5 -1
- data/lib/wurfl_device/cli.rb +59 -67
- data/lib/wurfl_device/settings.rb +595 -0
- data/lib/wurfl_device/ui.rb +1 -0
- data/lib/wurfl_device/user_agent.rb +75 -8
- data/lib/wurfl_device/user_agent_matcher.rb +153 -191
- data/lib/wurfl_device/version.rb +1 -1
- data/lib/wurfl_device/web_service.rb +10 -44
- data/lib/wurfl_device/xml_loader.rb +44 -37
- data/lib/wurfl_device.rb +41 -236
- data/spec/cache/device_spec.rb +7 -31
- data/spec/cache/user_agents_spec.rb +27 -0
- data/spec/spec_helper.rb +6 -1
- data/wurfl_device.gemspec +6 -3
- metadata +52 -38
- data/lib/wurfl_device/constants.rb +0 -43
- data/lib/wurfl_device/device.rb +0 -83
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.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: hiredis
|
16
|
+
requirement: &264315840 !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: *264315840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement: &
|
26
|
+
name: redis
|
27
|
+
requirement: &264313640 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,21 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *264313640
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement: &
|
37
|
+
name: thor
|
38
|
+
requirement: &264312400 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *264312400
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: ox
|
49
|
+
requirement: &264311620 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
@@ -43,10 +54,10 @@ dependencies:
|
|
43
54
|
version: '0'
|
44
55
|
type: :runtime
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *264311620
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: text
|
49
|
-
requirement: &
|
60
|
+
requirement: &264309700 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :runtime
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *264309700
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: sinatra
|
60
|
-
requirement: &
|
71
|
+
requirement: &264233040 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :runtime
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *264233040
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: unicorn
|
71
|
-
requirement: &
|
82
|
+
requirement: &264232040 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ! '>='
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: '0'
|
77
88
|
type: :runtime
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *264232040
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: bundler
|
82
|
-
requirement: &
|
93
|
+
requirement: &264230720 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ! '>='
|
@@ -87,10 +98,10 @@ dependencies:
|
|
87
98
|
version: 1.0.10
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *264230720
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: rake
|
93
|
-
requirement: &
|
104
|
+
requirement: &264229320 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
107
|
- - ! '>='
|
@@ -98,10 +109,10 @@ dependencies:
|
|
98
109
|
version: 0.9.2
|
99
110
|
type: :development
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *264229320
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: rspec-core
|
104
|
-
requirement: &
|
115
|
+
requirement: &264227060 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ~>
|
@@ -109,10 +120,10 @@ dependencies:
|
|
109
120
|
version: '2.0'
|
110
121
|
type: :development
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *264227060
|
113
124
|
- !ruby/object:Gem::Dependency
|
114
125
|
name: rspec-expectations
|
115
|
-
requirement: &
|
126
|
+
requirement: &263847780 !ruby/object:Gem::Requirement
|
116
127
|
none: false
|
117
128
|
requirements:
|
118
129
|
- - ~>
|
@@ -120,10 +131,10 @@ dependencies:
|
|
120
131
|
version: '2.0'
|
121
132
|
type: :development
|
122
133
|
prerelease: false
|
123
|
-
version_requirements: *
|
134
|
+
version_requirements: *263847780
|
124
135
|
- !ruby/object:Gem::Dependency
|
125
136
|
name: rr
|
126
|
-
requirement: &
|
137
|
+
requirement: &263847080 !ruby/object:Gem::Requirement
|
127
138
|
none: false
|
128
139
|
requirements:
|
129
140
|
- - ~>
|
@@ -131,29 +142,29 @@ dependencies:
|
|
131
142
|
version: '1.0'
|
132
143
|
type: :development
|
133
144
|
prerelease: false
|
134
|
-
version_requirements: *
|
145
|
+
version_requirements: *263847080
|
135
146
|
- !ruby/object:Gem::Dependency
|
136
|
-
name:
|
137
|
-
requirement: &
|
147
|
+
name: simplecov
|
148
|
+
requirement: &263846340 !ruby/object:Gem::Requirement
|
138
149
|
none: false
|
139
150
|
requirements:
|
140
151
|
- - ~>
|
141
152
|
- !ruby/object:Gem::Version
|
142
|
-
version:
|
153
|
+
version: 0.5.3
|
143
154
|
type: :development
|
144
155
|
prerelease: false
|
145
|
-
version_requirements: *
|
156
|
+
version_requirements: *263846340
|
146
157
|
- !ruby/object:Gem::Dependency
|
147
|
-
name:
|
148
|
-
requirement: &
|
158
|
+
name: fakeredis
|
159
|
+
requirement: &263845620 !ruby/object:Gem::Requirement
|
149
160
|
none: false
|
150
161
|
requirements:
|
151
162
|
- - ~>
|
152
163
|
- !ruby/object:Gem::Version
|
153
|
-
version: 0.
|
164
|
+
version: 0.2.2
|
154
165
|
type: :development
|
155
166
|
prerelease: false
|
156
|
-
version_requirements: *
|
167
|
+
version_requirements: *263845620
|
157
168
|
description: Ruby client library for mobile handset detection
|
158
169
|
email:
|
159
170
|
- ahutalla@gmail.com
|
@@ -174,10 +185,10 @@ files:
|
|
174
185
|
- config.ru
|
175
186
|
- config/unicorn.conf.rb
|
176
187
|
- lib/wurfl_device.rb
|
188
|
+
- lib/wurfl_device/cache.rb
|
177
189
|
- lib/wurfl_device/capability.rb
|
178
190
|
- lib/wurfl_device/cli.rb
|
179
|
-
- lib/wurfl_device/
|
180
|
-
- lib/wurfl_device/device.rb
|
191
|
+
- lib/wurfl_device/settings.rb
|
181
192
|
- lib/wurfl_device/ui.rb
|
182
193
|
- lib/wurfl_device/user_agent.rb
|
183
194
|
- lib/wurfl_device/user_agent_matcher.rb
|
@@ -185,6 +196,7 @@ files:
|
|
185
196
|
- lib/wurfl_device/web_service.rb
|
186
197
|
- lib/wurfl_device/xml_loader.rb
|
187
198
|
- spec/cache/device_spec.rb
|
199
|
+
- spec/cache/user_agents_spec.rb
|
188
200
|
- spec/spec_helper.rb
|
189
201
|
- wurfl_device.gemspec
|
190
202
|
homepage: http://github.com/aputs/wurfl_device
|
@@ -205,7 +217,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
217
|
- - ! '>='
|
206
218
|
- !ruby/object:Gem::Version
|
207
219
|
version: '0'
|
208
|
-
requirements:
|
220
|
+
requirements:
|
221
|
+
- redis server
|
209
222
|
rubyforge_project: wurfl_device
|
210
223
|
rubygems_version: 1.8.10
|
211
224
|
signing_key:
|
@@ -213,4 +226,5 @@ specification_version: 3
|
|
213
226
|
summary: Ruby client library for mobile handset detection
|
214
227
|
test_files:
|
215
228
|
- spec/cache/device_spec.rb
|
229
|
+
- spec/cache/user_agents_spec.rb
|
216
230
|
- spec/spec_helper.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
require 'etc'
|
3
|
-
|
4
|
-
module WurflDevice
|
5
|
-
class Constants
|
6
|
-
LOCK_TIMEOUT = 3
|
7
|
-
LOCK_EXPIRE = 10
|
8
|
-
LOCK_SLEEP = 0.1
|
9
|
-
|
10
|
-
WEBSERVICE_HOST = '127.0.0.1'
|
11
|
-
WEBSERVICE_PORT = 8090
|
12
|
-
WEBSERVICE_ROOT = File.join(File.expand_path('~'), '.wurfl_device')
|
13
|
-
WEBSERVICE_PID = 'webservice.pid'
|
14
|
-
WEBSERVICE_LOG = 'webservice.log'
|
15
|
-
WEBSERVICE_SOCKET = 'webservice.sock'
|
16
|
-
WEBSERVICE_WORKER = 4
|
17
|
-
|
18
|
-
DB_INDEX = "7".freeze
|
19
|
-
GENERIC = 'generic'
|
20
|
-
GENERIC_XHTML = 'generic_xhtml'
|
21
|
-
GENERIC_WEB_BROWSER = 'generic_web_browser'
|
22
|
-
WURFL = "wurfl:"
|
23
|
-
WURFL_INFO = "wurfl:info"
|
24
|
-
WURFL_DEVICES = "wurfl:devices:"
|
25
|
-
WURFL_DEVICES_INDEX = "wurfl:index:"
|
26
|
-
WURFL_INITIALIZED = "wurfl:is_initialized"
|
27
|
-
WURFL_INITIALIZING = "wurfl:is_initializing"
|
28
|
-
WURFL_USER_AGENTS = "wurfl:user_agents"
|
29
|
-
WURFL_USER_AGENTS_CACHED = "wurfl:user_agents_cached"
|
30
|
-
|
31
|
-
WORST_MATCH = 7
|
32
|
-
|
33
|
-
MOBILE_BROWSERS = [
|
34
|
-
'cldc', 'symbian', 'midp', 'j2me', 'mobile', 'wireless', 'palm', 'phone', 'pocket pc', 'pocketpc', 'netfront',
|
35
|
-
'bolt', 'iris', 'brew', 'openwave', 'windows ce', 'wap2.', 'android', 'opera mini', 'opera mobi', 'maemo', 'fennec',
|
36
|
-
'blazer', 'vodafone', 'wp7', 'armv'
|
37
|
-
]
|
38
|
-
|
39
|
-
ROBOTS = [ 'bot', 'crawler', 'spider', 'novarra', 'transcoder', 'yahoo! searchmonkey', 'yahoo! slurp', 'feedfetcher-google', 'toolbar', 'mowser' ]
|
40
|
-
DESKTOP_BROWSERS = [ 'slcc1', '.net clr', 'wow64', 'media center pc', 'funwebproducts', 'macintosh', 'aol 9.', 'america online browser', 'googletoolbar' ]
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
data/lib/wurfl_device/device.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
require 'redis'
|
3
|
-
|
4
|
-
module WurflDevice
|
5
|
-
class Device
|
6
|
-
attr_accessor :capabilities
|
7
|
-
|
8
|
-
def initialize(device_id=nil)
|
9
|
-
raise WurflDevice::CacheError, "wurfl cache is not initialized" unless WurflDevice.is_initialized?
|
10
|
-
if device_id.nil?
|
11
|
-
@capabilities = WurflDevice.get_actual_device(WurflDevice::Constants::GENERIC)
|
12
|
-
else
|
13
|
-
@capabilities = build_device(device_id)
|
14
|
-
end
|
15
|
-
@capabilities['actual_device_root'] ||= ((@capabilities['user_agent'] !~ /^DO_NOT_MATCH/i) ? true : false)
|
16
|
-
end
|
17
|
-
|
18
|
-
def is_valid?
|
19
|
-
return false if @capabilities.nil?
|
20
|
-
return false if @capabilities.id.nil?
|
21
|
-
return false if @capabilities.id.empty?
|
22
|
-
return true
|
23
|
-
end
|
24
|
-
|
25
|
-
def is_generic?
|
26
|
-
is_valid? && @capabilities.id !~ Regexp.new(WurflDevice::Constants::GENERIC, Regexp::IGNORECASE)
|
27
|
-
end
|
28
|
-
|
29
|
-
def build_device(device_id)
|
30
|
-
capabilities = Capability.new
|
31
|
-
device = WurflDevice.get_actual_device_raw(device_id)
|
32
|
-
return nil if device.nil?
|
33
|
-
|
34
|
-
capabilities['fall_back_tree'] ||= Array.new
|
35
|
-
|
36
|
-
if !device['fall_back'].nil? && !device['fall_back'].empty? && device['fall_back'] != 'root'
|
37
|
-
fall_back = build_device(device['fall_back'])
|
38
|
-
unless fall_back.nil?
|
39
|
-
capabilities['fall_back_tree'].unshift(fall_back['id'])
|
40
|
-
fall_back.each_pair do |key, value|
|
41
|
-
if value.kind_of?(Hash)
|
42
|
-
capabilities[key] ||= Capability.new
|
43
|
-
value.each_pair do |k, v|
|
44
|
-
capabilities[key][k] = v
|
45
|
-
end
|
46
|
-
elsif value.is_a?(Array)
|
47
|
-
capabilities[key] ||= Array.new
|
48
|
-
capabilities[key] |= value
|
49
|
-
else
|
50
|
-
capabilities[key] = value
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
device.each_pair do |key, value|
|
57
|
-
if key =~ /^(.+)\:(.+)$/i
|
58
|
-
capabilities[$1] ||= Capability.new
|
59
|
-
capabilities[$1][$2] = WurflDevice.parse_string_value(value)
|
60
|
-
else
|
61
|
-
capabilities[key] = WurflDevice.parse_string_value(value)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
capabilities
|
66
|
-
end
|
67
|
-
|
68
|
-
# Magic predicates
|
69
|
-
# slower than going directly to capabilities
|
70
|
-
def method_missing(method, *args, &block)
|
71
|
-
return nil if @capabilities.nil?
|
72
|
-
meth = method.to_s
|
73
|
-
meth.gsub!(/\?/, '')
|
74
|
-
return @capabilities.send(method, args, block) if @capabilities.has_key?(meth)
|
75
|
-
@capabilities.each_pair do |key, value|
|
76
|
-
if value.is_a?(Hash)
|
77
|
-
return value.send(method, args, block) if value.has_key?(meth)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
return nil
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|