wurfl_device 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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