wurfl_device 0.1.3 → 0.1.4

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 ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.2
data/README.md CHANGED
@@ -1,3 +1,22 @@
1
1
  # WurflDevice
2
2
  Ruby client library for mobile handset detection
3
3
 
4
+
5
+ requirements
6
+ ------------
7
+ * [redis server](http://redis.io/)
8
+
9
+
10
+ usage
11
+ -----
12
+
13
+ require 'wurfl_device'
14
+
15
+ user_agent = 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95_8GB/20.0.016; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413'
16
+
17
+ device = WurflDevice.get_device_from_ua(user_agent)
18
+
19
+ # see device capabilities list for names
20
+ puts device.id
21
+
22
+
@@ -0,0 +1,15 @@
1
+ require 'raindrops'
2
+ $stats ||= Raindrops::Middleware::Stats.new
3
+
4
+ app_env = ENV['RACK_ENV'] || 'development'
5
+ app_root = ::File.expand_path('../..', __FILE__)
6
+
7
+ timeout 60
8
+ worker_processes (app_env != 'development' ? 4 : 2)
9
+ listen "/tmp/wurfl_device/webservice.sock", :backlog => 64
10
+ pid "/tmp/wurfl_device/webservice.pid"
11
+ working_directory "#{app_root}"
12
+ stderr_path "/tmp/wurfl_device/webservice.log"
13
+ stdout_path "/tmp/wurfl_device/webservice.log"
14
+
15
+ preload_app false
data/config.ru ADDED
@@ -0,0 +1,5 @@
1
+ use Raindrops::Middleware, :stats => $stats, :path => '/_stats'
2
+
3
+ require ::File.expand_path('../lib/wurfl_device/web_service', __FILE__)
4
+
5
+ run WurflDevice::WebService.new
@@ -1,4 +1,5 @@
1
1
  require 'thor'
2
+ require 'yaml'
2
3
  require 'wurfl_device'
3
4
 
4
5
  module WurflDevice
@@ -24,6 +25,51 @@ module WurflDevice
24
25
  super
25
26
  end
26
27
 
28
+ desc "server [start|stop|restart|status]", "start a wurfl_device server"
29
+ method_option :host, :type => :string, :banner => "set webservice host", :aliases => "-h", :default => WurflDevice::Constants::WEBSERVICE_HOST
30
+ method_option :port, :type => :numeric, :banner => "set webservice port", :aliases => "-p", :default => WurflDevice::Constants::WEBSERVICE_PORT
31
+ def server(action=nil)
32
+ opts = options.dup
33
+
34
+ action ||= 'status'
35
+
36
+ tmp_dir = WurflDevice.tmp_dir
37
+ FileUtils.cd(File.expand_path('../../', File.dirname(__FILE__)))
38
+ if action == 'start'
39
+ WurflDevice.ui.info "starting webservice at #{opts.host}:#{opts.port}"
40
+ args = [
41
+ File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name']),
42
+ '-S',
43
+ 'bundle', 'exec', 'unicorn',
44
+ '-o',
45
+ opts.host,
46
+ '-p',
47
+ opts.port,
48
+ '-c',
49
+ File.expand_path('../../config/unicorn.conf.rb', File.dirname(__FILE__)),
50
+ '-E',
51
+ 'production',
52
+ '-D'
53
+ ].join(' ')
54
+
55
+ system(args)
56
+ elsif action == 'stop'
57
+ WurflDevice.ui.info "stopping webservice..."
58
+ args = [
59
+ 'kill',
60
+ '-QUIT',
61
+ "`cat #{tmp_dir}/webservice.pid`",
62
+ ].join(' ')
63
+
64
+ system(args)
65
+ elsif action == 'restart'
66
+ server('stop')
67
+ server('start')
68
+ else
69
+ #status
70
+ end
71
+ end
72
+
27
73
  desc "dump DEVICE_ID|USER_AGENT", "display capabilities DEVICE_ID|USER_AGENT"
28
74
  method_option :json, :type => :boolean, :banner => "show the dump in json format", :aliases => "-j"
29
75
  method_option :yaml, :type => :boolean, :banner => "show the dump in yaml format", :aliases => "-y"
@@ -5,6 +5,9 @@ module WurflDevice
5
5
  LOCK_EXPIRE = 10
6
6
  LOCK_SLEEP = 0.1
7
7
 
8
+ WEBSERVICE_HOST = '127.0.0.1'
9
+ WEBSERVICE_PORT = 8090
10
+
8
11
  DB_INDEX = "7".freeze
9
12
  GENERIC = 'generic'
10
13
  GENERIC_XHTML = 'generic_xhtml'
@@ -40,6 +40,10 @@ module WurflDevice
40
40
  return second
41
41
  end
42
42
 
43
+ def num_slashes
44
+ self.count('/')
45
+ end
46
+
43
47
  def first_space
44
48
  pos = self.index(' ')
45
49
  return self.length if pos.nil?
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  module WurflDevice
4
- VERSION = "0.1.3".freeze
4
+ VERSION = "0.1.4".freeze
5
5
  end
@@ -0,0 +1,61 @@
1
+ require 'yaml'
2
+ require 'wurfl_device'
3
+ require 'sinatra/base'
4
+
5
+ module WurflDevice
6
+ class WebService < Sinatra::Base
7
+ get '/' do
8
+ user_agent = request.env['HTTP_USER_AGENT'] || '-'
9
+ device = WurflDevice.get_device_from_ua(user_agent)
10
+ return device.capabilities.to_yaml unless device.nil?
11
+ {}.to_yaml
12
+ end
13
+
14
+ get '/:capa' do
15
+ user_agent = request.env['HTTP_USER_AGENT'] || '-'
16
+ device = WurflDevice.get_device_from_ua(user_agent)
17
+ return device.send(params[:capa]).to_yaml unless device.nil?
18
+ {}.to_yaml
19
+ end
20
+
21
+ get '/device/:id' do
22
+ device = WurflDevice.get_device_from_id(params[:id])
23
+ capabilities = {}
24
+ capabilities = device.capabilities unless device.nil?
25
+ capabilities.to_yaml
26
+ end
27
+
28
+ get '/device/:id/:capa' do
29
+ device = WurflDevice.get_device_from_id(params[:id])
30
+ capability = {}
31
+ capability = device.send(params[:capa]) unless device.nil?
32
+ capability.to_yaml
33
+ end
34
+
35
+ get '/actual_device/:id' do
36
+ capabilities = WurflDevice.get_actual_device(params[:id])
37
+ capabilities.to_yaml
38
+ end
39
+
40
+ get '/actual_device/:id/:capa' do
41
+ capabilities = WurflDevice.get_actual_device(params[:id])
42
+ get_capa(params[:capa], capabilities).to_yaml
43
+ end
44
+
45
+ protected
46
+ def get_capa(capa, capabilities)
47
+ capability = nil
48
+ if capabilities.has_key?(capa)
49
+ capability = capabilities.send(capa)
50
+ else
51
+ capabilities.each_pair do |key, value|
52
+ if value.is_a?(Hash)
53
+ capability = value.send(capa)
54
+ break
55
+ end
56
+ end
57
+ end
58
+ return capability
59
+ end
60
+ end
61
+ end
data/lib/wurfl_device.rb CHANGED
@@ -34,7 +34,9 @@ module WurflDevice
34
34
  end
35
35
 
36
36
  def tmp_dir
37
- File.join(Etc.systmpdir, 'wurfl_device')
37
+ tmp_loc = File.join(Etc.systmpdir, 'wurfl_device')
38
+ FileUtils.mkdir_p(tmp_loc)
39
+ return tmp_loc
38
40
  end
39
41
 
40
42
  def get_actual_device(device_id)
data/wurfl_device.gemspec CHANGED
@@ -14,10 +14,14 @@ Gem::Specification.new do |s|
14
14
  s.summary = %q{Ruby client library for mobile handset detection}
15
15
  s.description = %q{Ruby client library for mobile handset detection}
16
16
 
17
+ s.rubyforge_project = 'wurfl_device'
18
+
17
19
  s.add_dependency 'thor'
18
20
  s.add_dependency 'nokogiri'
19
21
  s.add_dependency 'redis'
20
22
  s.add_dependency 'text'
23
+ s.add_dependency 'sinatra'
24
+ s.add_dependency 'unicorn'
21
25
 
22
26
  s.add_development_dependency 'bundler', '>= 1.0.10'
23
27
  s.add_development_dependency 'rake', '>= 0.9.2'
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.3
4
+ version: 0.1.4
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-10-07 00:00:00.000000000 Z
12
+ date: 2011-10-21 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &34130760 !ruby/object:Gem::Requirement
16
+ requirement: &253572180 !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: *34130760
24
+ version_requirements: *253572180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &34130320 !ruby/object:Gem::Requirement
27
+ requirement: &253571740 !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: *34130320
35
+ version_requirements: *253571740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: redis
38
- requirement: &34129900 !ruby/object:Gem::Requirement
38
+ requirement: &253571320 !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: *34129900
46
+ version_requirements: *253571320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: text
49
- requirement: &34129480 !ruby/object:Gem::Requirement
49
+ requirement: &253570900 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,32 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *34129480
57
+ version_requirements: *253570900
58
+ - !ruby/object:Gem::Dependency
59
+ name: sinatra
60
+ requirement: &253570480 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *253570480
69
+ - !ruby/object:Gem::Dependency
70
+ name: unicorn
71
+ requirement: &253570060 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *253570060
58
80
  - !ruby/object:Gem::Dependency
59
81
  name: bundler
60
- requirement: &34128980 !ruby/object:Gem::Requirement
82
+ requirement: &253569560 !ruby/object:Gem::Requirement
61
83
  none: false
62
84
  requirements:
63
85
  - - ! '>='
@@ -65,10 +87,10 @@ dependencies:
65
87
  version: 1.0.10
66
88
  type: :development
67
89
  prerelease: false
68
- version_requirements: *34128980
90
+ version_requirements: *253569560
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: rake
71
- requirement: &34128480 !ruby/object:Gem::Requirement
93
+ requirement: &253569040 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
@@ -76,10 +98,10 @@ dependencies:
76
98
  version: 0.9.2
77
99
  type: :development
78
100
  prerelease: false
79
- version_requirements: *34128480
101
+ version_requirements: *253569040
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: rspec-core
82
- requirement: &34128020 !ruby/object:Gem::Requirement
104
+ requirement: &253568540 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ~>
@@ -87,10 +109,10 @@ dependencies:
87
109
  version: '2.0'
88
110
  type: :development
89
111
  prerelease: false
90
- version_requirements: *34128020
112
+ version_requirements: *253568540
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: rspec-expectations
93
- requirement: &34127560 !ruby/object:Gem::Requirement
115
+ requirement: &253568000 !ruby/object:Gem::Requirement
94
116
  none: false
95
117
  requirements:
96
118
  - - ~>
@@ -98,10 +120,10 @@ dependencies:
98
120
  version: '2.0'
99
121
  type: :development
100
122
  prerelease: false
101
- version_requirements: *34127560
123
+ version_requirements: *253568000
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: rr
104
- requirement: &34127100 !ruby/object:Gem::Requirement
126
+ requirement: &253567460 !ruby/object:Gem::Requirement
105
127
  none: false
106
128
  requirements:
107
129
  - - ~>
@@ -109,10 +131,10 @@ dependencies:
109
131
  version: '1.0'
110
132
  type: :development
111
133
  prerelease: false
112
- version_requirements: *34127100
134
+ version_requirements: *253567460
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: faker
115
- requirement: &34126640 !ruby/object:Gem::Requirement
137
+ requirement: &253566760 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ~>
@@ -120,10 +142,10 @@ dependencies:
120
142
  version: '0.9'
121
143
  type: :development
122
144
  prerelease: false
123
- version_requirements: *34126640
145
+ version_requirements: *253566760
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: simplecov
126
- requirement: &34126180 !ruby/object:Gem::Requirement
148
+ requirement: &253547780 !ruby/object:Gem::Requirement
127
149
  none: false
128
150
  requirements:
129
151
  - - ~>
@@ -131,7 +153,7 @@ dependencies:
131
153
  version: 0.5.3
132
154
  type: :development
133
155
  prerelease: false
134
- version_requirements: *34126180
156
+ version_requirements: *253547780
135
157
  description: Ruby client library for mobile handset detection
136
158
  email:
137
159
  - ahutalla@gmail.com
@@ -143,11 +165,14 @@ extra_rdoc_files:
143
165
  - README.md
144
166
  files:
145
167
  - .gitignore
168
+ - .rvmrc
146
169
  - Gemfile
147
170
  - LICENSE
148
171
  - README.md
149
172
  - Rakefile
150
173
  - bin/wurfldevice
174
+ - config.ru
175
+ - config/unicorn.conf.rb
151
176
  - lib/wurfl_device.rb
152
177
  - lib/wurfl_device/capability.rb
153
178
  - lib/wurfl_device/cli.rb
@@ -157,6 +182,7 @@ files:
157
182
  - lib/wurfl_device/user_agent.rb
158
183
  - lib/wurfl_device/user_agent_matcher.rb
159
184
  - lib/wurfl_device/version.rb
185
+ - lib/wurfl_device/web_service.rb
160
186
  - lib/wurfl_device/xml_loader.rb
161
187
  - spec/cache/device_spec.rb
162
188
  - spec/spec_helper.rb
@@ -180,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
206
  - !ruby/object:Gem::Version
181
207
  version: '0'
182
208
  requirements: []
183
- rubyforge_project:
209
+ rubyforge_project: wurfl_device
184
210
  rubygems_version: 1.8.10
185
211
  signing_key:
186
212
  specification_version: 3