rack-smartphone_detector 0.0.4 → 0.0.5
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.
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c3d807710a9fe9027964d1393d939d4feecfe8a0
|
4
|
+
data.tar.gz: dab547033f2b45e5e20995938950f946215c70cd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 18ada9aeaf2b27a8d1bc38153cd0680349baa175a9a883b5588f9b5f30d59bec15cc51cee55fde3190fdb53e5f3bdb5e7974112603d83c99d598cad408935e38
|
7
|
+
data.tar.gz: 17cefa2d21551bcd271135d91b9e13267d37cb122c504ec066035ad8fb716a038eee802c032a58ec82fa6f6b21ba0506f2b2eeb718d902760066fd2b721db321
|
@@ -7,6 +7,10 @@ module Rack
|
|
7
7
|
!env['rack.smartphone_detector.device'].nil?
|
8
8
|
end
|
9
9
|
|
10
|
+
def smartphone_version
|
11
|
+
env['rack.smartphone_detector.device_version']
|
12
|
+
end
|
13
|
+
|
10
14
|
SMARTPHONE_IDENTIFIERS.each do |info|
|
11
15
|
name = %Q{from_#{info[:identifier].downcase.gsub(' ', '_')}?}
|
12
16
|
define_method(name) { env['rack.smartphone_detector.device'] == info[:identifier] }
|
@@ -6,12 +6,18 @@ require 'rack/smartphone_detector/railtie' if defined?(Rails::Railtie)
|
|
6
6
|
|
7
7
|
module Rack
|
8
8
|
class SmartphoneDetector
|
9
|
+
VERSION_PATTERNS = {
|
10
|
+
ios: /OS\s+([\d_]+)\s+like Mac OS X/,
|
11
|
+
android: /Android\s+([\d\.]+);/,
|
12
|
+
windows_phone: /Windows Phone OS\s+([\d\.]+);/,
|
13
|
+
}
|
14
|
+
|
9
15
|
SMARTPHONE_IDENTIFIERS = [
|
10
|
-
{ identifier: 'iPhone', regexp: /iPhone
|
11
|
-
{ identifier: 'iPad', regexp: /iPad
|
12
|
-
{ identifier: 'Android', regexp: /Android.+Mobi(le)
|
13
|
-
{ identifier: 'Android Tablet', regexp: /Android
|
14
|
-
{ identifier: 'Windows Phone', regexp: /Windows Phone
|
16
|
+
{ identifier: 'iPhone', regexp: /iPhone/, version_type: :ios },
|
17
|
+
{ identifier: 'iPad', regexp: /iPad/, version_type: :ios },
|
18
|
+
{ identifier: 'Android', regexp: /Android.+Mobi(le)?/, version_type: :android },
|
19
|
+
{ identifier: 'Android Tablet', regexp: /Android/, version_type: :android },
|
20
|
+
{ identifier: 'Windows Phone', regexp: /Windows Phone/, version_type: :windows_phone },
|
15
21
|
]
|
16
22
|
|
17
23
|
def initialize(app, options = {})
|
@@ -22,11 +28,20 @@ module Rack
|
|
22
28
|
SMARTPHONE_IDENTIFIERS.each do |i|
|
23
29
|
if env['HTTP_USER_AGENT'] =~ i[:regexp]
|
24
30
|
env['rack.smartphone_detector.device'] = i[:identifier]
|
31
|
+
detect_version(env, i[:version_type])
|
25
32
|
break
|
26
33
|
end
|
27
34
|
end
|
28
35
|
@app.call(env)
|
29
36
|
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def detect_version(env, version_type)
|
41
|
+
if env['HTTP_USER_AGENT'] =~ VERSION_PATTERNS[version_type]
|
42
|
+
env['rack.smartphone_detector.device_version'] = Regexp.last_match[1]
|
43
|
+
end
|
44
|
+
end
|
30
45
|
end
|
31
46
|
|
32
47
|
class Request
|
@@ -9,32 +9,56 @@ describe 'Rack::SmartphoneDetector' do
|
|
9
9
|
SMARTPHONES = [
|
10
10
|
{
|
11
11
|
name: 'iPhone',
|
12
|
+
version: '5_1_1',
|
13
|
+
user_agents: [
|
14
|
+
'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3',
|
15
|
+
]
|
16
|
+
},
|
17
|
+
{
|
18
|
+
name: 'iPhone',
|
19
|
+
version: '6_0',
|
12
20
|
user_agents: [
|
13
21
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25',
|
14
22
|
]
|
15
23
|
},
|
16
24
|
{
|
17
25
|
name: 'iPad',
|
26
|
+
version: '6_0',
|
18
27
|
user_agents: [
|
19
28
|
'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25'
|
20
29
|
]
|
21
30
|
},
|
22
31
|
{
|
23
32
|
name: 'Android',
|
33
|
+
version: '4.0.1',
|
24
34
|
user_agents: [
|
25
35
|
'Mozilla/5.0 (Linux; U; Android 4.0.1; ja-jp; Galaxy Nexus Build/ITL41D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
26
|
-
|
36
|
+
]
|
37
|
+
},
|
38
|
+
{
|
39
|
+
name: 'Android',
|
40
|
+
version: '4.2.1',
|
41
|
+
user_agents: [
|
27
42
|
'Opera/9.80 (Android 4.2.1; Linux; Opera Mobi/ADR-1301080958) Presto/2.11.355 Version/12.10'
|
28
43
|
]
|
29
44
|
},
|
45
|
+
{
|
46
|
+
name: 'Android',
|
47
|
+
version: nil,
|
48
|
+
user_agents: [
|
49
|
+
'Mozilla/5.0 (Android; Mobile; rv:18.0) Gecko/18.0 Firefox/18.0',
|
50
|
+
]
|
51
|
+
},
|
30
52
|
{
|
31
53
|
name: 'Android Tablet',
|
54
|
+
version: '4.1.1',
|
32
55
|
user_agents: [
|
33
56
|
'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03S) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'
|
34
57
|
]
|
35
58
|
},
|
36
59
|
{
|
37
60
|
name: 'Windows Phone',
|
61
|
+
version: '7.5',
|
38
62
|
user_agents: [
|
39
63
|
'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; FujitsuToshibaMobileCommun; IS12T; KDDI)'
|
40
64
|
]
|
@@ -84,6 +108,18 @@ describe 'Rack::SmartphoneDetector' do
|
|
84
108
|
end
|
85
109
|
end
|
86
110
|
|
111
|
+
describe '#smartphone_version' do
|
112
|
+
it 'returns version number string if it could be detected' do
|
113
|
+
SMARTPHONES.each do |info|
|
114
|
+
info[:user_agents].each do |ua|
|
115
|
+
header 'User-Agent', ua
|
116
|
+
get '/'
|
117
|
+
last_request.smartphone_version.must_equal info[:version]
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
87
123
|
describe '#from_iphone?' do
|
88
124
|
it 'returns true if the request comes from iphone' do
|
89
125
|
user_agents('iPhone').each do |ua|
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-smartphone_detector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Masahiro Ihara
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-11-08 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,49 +27,43 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: minitest
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rack-test
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
description: Simple Rack middleware which detect the request comes from smartphone
|
@@ -98,27 +89,26 @@ files:
|
|
98
89
|
- spec/rack-smartphone_detector_spec.rb
|
99
90
|
homepage: https://github.com/ihara2525/rack-smartphone_detector
|
100
91
|
licenses: []
|
92
|
+
metadata: {}
|
101
93
|
post_install_message:
|
102
94
|
rdoc_options: []
|
103
95
|
require_paths:
|
104
96
|
- lib
|
105
97
|
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
98
|
requirements:
|
108
|
-
- -
|
99
|
+
- - '>='
|
109
100
|
- !ruby/object:Gem::Version
|
110
101
|
version: '0'
|
111
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
-
none: false
|
113
103
|
requirements:
|
114
|
-
- -
|
104
|
+
- - '>='
|
115
105
|
- !ruby/object:Gem::Version
|
116
106
|
version: '0'
|
117
107
|
requirements: []
|
118
108
|
rubyforge_project:
|
119
|
-
rubygems_version: 1.
|
109
|
+
rubygems_version: 2.1.10
|
120
110
|
signing_key:
|
121
|
-
specification_version:
|
111
|
+
specification_version: 4
|
122
112
|
summary: Simple Rack middleware which detect the request comes from smartphone
|
123
113
|
test_files:
|
124
114
|
- spec/rack-smartphone_detector_spec.rb
|