mobvious 0.1.0.pre → 0.1.0.pre2
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/.gitignore +1 -0
- data/lib/mobvious.rb +15 -0
- data/lib/mobvious/strategies/cookie.rb +3 -3
- data/lib/mobvious/strategies/mobileesp.rb +1 -1
- data/lib/mobvious/version.rb +1 -1
- data/spec/mobvious/mobvious_spec.rb +29 -0
- data/spec/mobvious/strategies/cookie_spec.rb +2 -2
- data/spec/mobvious/strategies/mobileesp_spec.rb +8 -2
- metadata +26 -25
data/.gitignore
CHANGED
data/lib/mobvious.rb
CHANGED
@@ -18,4 +18,19 @@ module Mobvious
|
|
18
18
|
def self.config
|
19
19
|
@config ||= Mobvious::Config.new
|
20
20
|
end
|
21
|
+
|
22
|
+
# An accessor for getting an instance of a strategy that is currently in use.
|
23
|
+
# (Must be present in current `Mobvious.config.strategies`.)
|
24
|
+
# @param class_name [String] a class name of the wanted strategy object
|
25
|
+
def self.strategy(class_name)
|
26
|
+
matching_strategies = self.config.strategies.select do
|
27
|
+
|strategy| strategy.class.name.split('::').last == class_name
|
28
|
+
end
|
29
|
+
|
30
|
+
if matching_strategies.size == 1
|
31
|
+
matching_strategies.first
|
32
|
+
else
|
33
|
+
matching_strategies
|
34
|
+
end
|
35
|
+
end
|
21
36
|
end
|
@@ -8,7 +8,7 @@ module Mobvious
|
|
8
8
|
# interface versions performed by user). Also make sure to use this strategy with high
|
9
9
|
# priority, (e.g. put it before user-agent based detection) so it does not get overriden.
|
10
10
|
#
|
11
|
-
# Use
|
11
|
+
# Use {Cookie#set_device_type} method to set the device type and the strategy will then
|
12
12
|
# recognize it on subsequent requests.
|
13
13
|
class Cookie
|
14
14
|
# Creates a new Cookie strategy instance.
|
@@ -38,7 +38,7 @@ module Mobvious
|
|
38
38
|
|
39
39
|
# re-set the cookie to renew the expiration date
|
40
40
|
if request_cookie && !response_cookie_already_set
|
41
|
-
|
41
|
+
set_device_type(response, request_cookie)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -46,7 +46,7 @@ module Mobvious
|
|
46
46
|
#
|
47
47
|
# @param response [Rack::Response]
|
48
48
|
# @param device_type [Symbol] A device type symbol (or string).
|
49
|
-
def
|
49
|
+
def set_device_type(response, device_type)
|
50
50
|
response.set_cookie('mobvious.device_type',
|
51
51
|
{ value: device_type.to_s, path: '/', expires: Time.now + @cookie_expires })
|
52
52
|
end
|
@@ -35,7 +35,7 @@ module Mobvious
|
|
35
35
|
# @param request [Rack::Request]
|
36
36
|
# @return [Symbol] device type or nil
|
37
37
|
def get_device_type(request)
|
38
|
-
mobileesp = MobileESP::UserAgentInfo.new(request.user_agent, request.
|
38
|
+
mobileesp = MobileESP::UserAgentInfo.new(request.user_agent, request.env['HTTP_ACCEPT'])
|
39
39
|
@detection_procedure.call(mobileesp)
|
40
40
|
end
|
41
41
|
end
|
data/lib/mobvious/version.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MobviousSpec < MiniTest::Spec
|
4
|
+
describe Mobvious do
|
5
|
+
describe "having real strategies" do
|
6
|
+
before do
|
7
|
+
require 'mobvious/strategies/cookie'
|
8
|
+
require 'mobvious/strategies/mobileesp'
|
9
|
+
@cookie = Mobvious::Strategies::Cookie.new
|
10
|
+
@cookie2 = Mobvious::Strategies::Cookie.new
|
11
|
+
@mobileesp = Mobvious::Strategies::Mobileesp.new
|
12
|
+
Mobvious.config.strategies = [
|
13
|
+
@cookie,
|
14
|
+
@cookie2,
|
15
|
+
@mobileesp
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "gets the right strategy by class name" do
|
20
|
+
Mobvious.strategy('Mobileesp').must_equal @mobileesp
|
21
|
+
end
|
22
|
+
|
23
|
+
it "gets an array of strategies if there is more with the same name" do
|
24
|
+
Mobvious.strategy('Cookie')[0].must_equal @cookie
|
25
|
+
Mobvious.strategy('Cookie')[1].must_equal @cookie2
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -28,7 +28,7 @@ class CookieSpec < MiniTest::Spec
|
|
28
28
|
it "sets the cookie on response" do
|
29
29
|
@app.expects(:call).returns([@response.status, @response.headers, @response.body])
|
30
30
|
.with do |env|
|
31
|
-
@strategy.
|
31
|
+
@strategy.set_device_type(@response, :tablet)
|
32
32
|
true
|
33
33
|
end
|
34
34
|
@mock_session.request @uri, @env
|
@@ -66,7 +66,7 @@ class CookieSpec < MiniTest::Spec
|
|
66
66
|
it "sets the response cookie to the new value, not the old one" do
|
67
67
|
@app.expects(:call).returns([@response.status, @response.headers, @response.body])
|
68
68
|
.with do |env|
|
69
|
-
@strategy.
|
69
|
+
@strategy.set_device_type(@response, :mobile)
|
70
70
|
true
|
71
71
|
end
|
72
72
|
@mock_session.request @uri, @env
|
@@ -8,7 +8,10 @@ module Mobvious::Strategies
|
|
8
8
|
before do
|
9
9
|
@strategy = Mobvious::Strategies::Mobileesp.new
|
10
10
|
@request = mock 'request'
|
11
|
-
@
|
11
|
+
@env = mock 'env'
|
12
|
+
|
13
|
+
@request.stubs(:env).returns(@env)
|
14
|
+
@env.stubs('[]').with('HTTP_ACCEPT').returns('text/html')
|
12
15
|
end
|
13
16
|
|
14
17
|
it "categorizes iPhone as :mobile" do
|
@@ -32,7 +35,10 @@ module Mobvious::Strategies
|
|
32
35
|
@strategy = Mobvious::Strategies::Mobileesp.new(
|
33
36
|
Mobvious::Strategies::Mobileesp::DEVICE_TYPES_MOBILE_TABLET_DESKTOP)
|
34
37
|
@request = mock 'request'
|
35
|
-
@
|
38
|
+
@env = mock 'env'
|
39
|
+
|
40
|
+
@request.stubs(:env).returns(@env)
|
41
|
+
@env.stubs('[]').with('HTTP_ACCEPT').returns('text/html')
|
36
42
|
end
|
37
43
|
|
38
44
|
it "categorizes iPhone as :mobile" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobvious
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.pre2
|
5
5
|
prerelease: 6
|
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: 2012-02-
|
12
|
+
date: 2012-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement: &
|
16
|
+
requirement: &6086160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *6086160
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mobileesp
|
27
|
-
requirement: &
|
27
|
+
requirement: &6085520 !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: *
|
35
|
+
version_requirements: *6085520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: pry
|
38
|
-
requirement: &
|
38
|
+
requirement: &6084760 !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: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *6084760
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: minitest
|
49
|
-
requirement: &
|
49
|
+
requirement: &6084100 !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: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *6084100
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mocha
|
60
|
-
requirement: &
|
60
|
+
requirement: &6083480 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *6083480
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rack-test
|
71
|
-
requirement: &
|
71
|
+
requirement: &6082580 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *6082580
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: guard
|
82
|
-
requirement: &
|
82
|
+
requirement: &6081920 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *6081920
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: guard-minitest
|
93
|
-
requirement: &
|
93
|
+
requirement: &6080900 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *6080900
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: rb-inotify
|
104
|
-
requirement: &
|
104
|
+
requirement: &6080320 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *6080320
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: libnotify
|
115
|
-
requirement: &
|
115
|
+
requirement: &6079480 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *6079480
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: turn
|
126
|
-
requirement: &
|
126
|
+
requirement: &6078780 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,7 +131,7 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *6078780
|
135
135
|
description: Rack middleware for choosing a version of an interface to render for
|
136
136
|
given request
|
137
137
|
email:
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- lib/mobvious/version.rb
|
155
155
|
- mobvious.gemspec
|
156
156
|
- spec/mobvious/manager_spec.rb
|
157
|
+
- spec/mobvious/mobvious_spec.rb
|
157
158
|
- spec/mobvious/strategies/cookie_spec.rb
|
158
159
|
- spec/mobvious/strategies/mobileesp_spec.rb
|
159
160
|
- spec/mobvious/strategies/url_spec.rb
|
@@ -172,7 +173,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
173
|
version: '0'
|
173
174
|
segments:
|
174
175
|
- 0
|
175
|
-
hash:
|
176
|
+
hash: -3375320021797169924
|
176
177
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
178
|
none: false
|
178
179
|
requirements:
|