mobvious 0.1.0.pre → 0.1.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,4 +2,5 @@
2
2
  /.yardoc
3
3
  /doc
4
4
  /Gemfile.lock
5
+ /pkg
5
6
  /vendor/ruby
@@ -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 `set_device_type_cookie` method to set the device type and the strategy will then
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
- set_device_type_cookie(response, request_cookie)
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 set_device_type_cookie(response, device_type)
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.accept)
38
+ mobileesp = MobileESP::UserAgentInfo.new(request.user_agent, request.env['HTTP_ACCEPT'])
39
39
  @detection_procedure.call(mobileesp)
40
40
  end
41
41
  end
@@ -1,3 +1,3 @@
1
1
  module Mobvious
2
- VERSION = "0.1.0.pre"
2
+ VERSION = "0.1.0.pre2"
3
3
  end
@@ -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.set_device_type_cookie(@response, :tablet)
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.set_device_type_cookie(@response, :mobile)
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
- @request.stubs(:accept).returns('text/html')
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
- @request.stubs(:accept).returns('text/html')
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.pre
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-14 00:00:00.000000000 Z
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: &12623500 !ruby/object:Gem::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: *12623500
24
+ version_requirements: *6086160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mobileesp
27
- requirement: &12623000 !ruby/object:Gem::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: *12623000
35
+ version_requirements: *6085520
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: pry
38
- requirement: &12622080 !ruby/object:Gem::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: *12622080
46
+ version_requirements: *6084760
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: minitest
49
- requirement: &12621480 !ruby/object:Gem::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: *12621480
57
+ version_requirements: *6084100
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mocha
60
- requirement: &12620840 !ruby/object:Gem::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: *12620840
68
+ version_requirements: *6083480
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rack-test
71
- requirement: &12619900 !ruby/object:Gem::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: *12619900
79
+ version_requirements: *6082580
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: guard
82
- requirement: &12619220 !ruby/object:Gem::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: *12619220
90
+ version_requirements: *6081920
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: guard-minitest
93
- requirement: &12618320 !ruby/object:Gem::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: *12618320
101
+ version_requirements: *6080900
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rb-inotify
104
- requirement: &12617600 !ruby/object:Gem::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: *12617600
112
+ version_requirements: *6080320
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: libnotify
115
- requirement: &12616840 !ruby/object:Gem::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: *12616840
123
+ version_requirements: *6079480
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: turn
126
- requirement: &12616080 !ruby/object:Gem::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: *12616080
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: 816301950663841186
176
+ hash: -3375320021797169924
176
177
  required_rubygems_version: !ruby/object:Gem::Requirement
177
178
  none: false
178
179
  requirements: