mobylette 1.6.0 → 2.0
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/README.rdoc +35 -22
- data/Rakefile +0 -19
- data/lib/mobylette.rb +1 -4
- data/lib/mobylette/helmet.rb +0 -2
- data/lib/mobylette/railtie.rb +0 -6
- data/lib/mobylette/respond_to_mobile_requests.rb +135 -0
- data/lib/mobylette/version.rb +1 -1
- data/spec/controllers/application_controller_spec.rb +37 -0
- data/spec/dummy/app/controllers/application_controller.rb +0 -1
- data/spec/dummy/log/development.log +116 -0
- data/spec/dummy/log/test.log +21 -585
- data/spec/dummy/tmp/cache/assets/C82/3E0/sprockets%2F48eb4ac616538f8f36870451073315da +14 -0
- data/spec/dummy/tmp/cache/assets/CE4/1C0/sprockets%2F18d93e1533d585b2f64ec90b33176ac9 +0 -0
- data/spec/dummy/tmp/cache/assets/CED/A70/sprockets%2F621683d8791730a9cc7ce45e17a7e46d +0 -0
- data/spec/dummy/tmp/cache/assets/CFC/200/sprockets%2F716f89d85d4855706b8a9abec1969c62 +16 -0
- data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +16 -0
- data/spec/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +14 -0
- data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/lib/respond_to_mobile_requests_spec.rb +253 -0
- data/spec/spec_helper.rb +3 -0
- metadata +45 -107
- data/lib/mobylette/controllers/helpers.rb +0 -53
- data/lib/mobylette/controllers/respond_to_mobile_requests.rb +0 -125
- data/lib/mobylette/helmet/faker.rb +0 -19
- data/lib/mobylette/helmet/helpers.rb +0 -36
- data/spec/controllers/actioncontroller_base_spec.rb +0 -24
- data/spec/controllers/default_fallback_controller_spec.rb +0 -37
- data/spec/controllers/desktop_only_controller_spec.rb +0 -18
- data/spec/controllers/force_fallback_controller_spec.rb +0 -46
- data/spec/controllers/home_controller_spec.rb +0 -145
- data/spec/controllers/no_fallback_controller_spec.rb +0 -58
- data/spec/controllers/skip_xhr_request_controller_spec.rb +0 -19
- data/spec/dummy/app/controllers/default_fallback_controller.rb +0 -13
- data/spec/dummy/app/controllers/desktop_only_controller.rb +0 -2
- data/spec/dummy/app/controllers/fallbacks_controller.rb +0 -7
- data/spec/dummy/app/controllers/force_fallback_controller.rb +0 -13
- data/spec/dummy/app/controllers/home_controller.rb +0 -20
- data/spec/dummy/app/controllers/no_fallback_controller.rb +0 -13
- data/spec/dummy/app/controllers/skip_xhr_request_controller.rb +0 -7
- data/spec/dummy/app/controllers/testing_controller.rb +0 -9
- data/spec/dummy/app/views/default_fallback/index.html.erb +0 -1
- data/spec/dummy/app/views/default_fallback/index.js.erb +0 -1
- data/spec/dummy/app/views/default_fallback/index.mobile.erb +0 -1
- data/spec/dummy/app/views/default_fallback/test.html.erb +0 -1
- data/spec/dummy/app/views/default_fallback/test.js.erb +0 -1
- data/spec/dummy/app/views/fallbacks/index.html.erb +0 -2
- data/spec/dummy/app/views/fallbacks/index.js.erb +0 -1
- data/spec/dummy/app/views/fallbacks/index.mobile.erb +0 -0
- data/spec/dummy/app/views/fallbacks/index.xml.erb +0 -0
- data/spec/dummy/app/views/fallbacks/no_mobile.html.erb +0 -0
- data/spec/dummy/app/views/force_fallback/index.html.erb +0 -1
- data/spec/dummy/app/views/force_fallback/index.js.erb +0 -1
- data/spec/dummy/app/views/force_fallback/index.mobile.erb +0 -1
- data/spec/dummy/app/views/force_fallback/test.html.erb +0 -1
- data/spec/dummy/app/views/force_fallback/test.js.erb +0 -1
- data/spec/dummy/app/views/home/desktop.html.erb +0 -3
- data/spec/dummy/app/views/home/index.html.erb +0 -9
- data/spec/dummy/app/views/home/index.js.erb +0 -1
- data/spec/dummy/app/views/home/index.mobile.erb +0 -9
- data/spec/dummy/app/views/home/mobile.mobile.erb +0 -3
- data/spec/dummy/app/views/home/no_mobile_view.html.erb +0 -3
- data/spec/dummy/app/views/ignore_mobile_path/index.mobile.erb +0 -1
- data/spec/dummy/app/views/no_fallback/index.html.erb +0 -1
- data/spec/dummy/app/views/no_fallback/index.js.erb +0 -1
- data/spec/dummy/app/views/no_fallback/index.mobile.erb +0 -1
- data/spec/dummy/app/views/no_fallback/test.html.erb +0 -1
- data/spec/dummy/app/views/no_fallback/test.js.erb +0 -1
- data/spec/dummy/app/views/skip_xhr_request/index.html.erb +0 -9
- data/spec/dummy/app/views/skip_xhr_request/index.js.erb +0 -1
- data/spec/dummy/app/views/skip_xhr_request/index.mobile.erb +0 -9
- data/spec/dummy/app/views/view_path/index.mobile.erb +0 -1
- data/spec/helpers/mobylette_helpers_spec.rb +0 -59
@@ -1,53 +0,0 @@
|
|
1
|
-
module Mobylette
|
2
|
-
module Controllers
|
3
|
-
|
4
|
-
# Mobylette::Controllers::Helpers include few methods to
|
5
|
-
# include different css/js files for the mobile and for
|
6
|
-
# the normal version of your layout
|
7
|
-
#
|
8
|
-
# Personal notes:
|
9
|
-
# * I'm rethinking and I guess that, since you
|
10
|
-
# may have (and probably will) a different layout file for the
|
11
|
-
# "normal" and mobile version, you probably wont use this at all.
|
12
|
-
# * Also I'm not sure it's the case of using 'is_mobile_request?'
|
13
|
-
# or 'is_mobile_view?' check here.'
|
14
|
-
module Helpers
|
15
|
-
extend ActiveSupport::Concern
|
16
|
-
|
17
|
-
# Adds a "_mobile" sulfix to the files you include (when the request is mobile)
|
18
|
-
def mobylette_stylesheet_link_tag(*sources)
|
19
|
-
options = sources.extract_options!
|
20
|
-
if is_mobile_request?
|
21
|
-
stylesheet_link_tag(*sulfix_mobile_assets(sources, :css).insert(-1, options))
|
22
|
-
else
|
23
|
-
stylesheet_link_tag(*sources.insert(-1, options))
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Adds a "_mobile" sulfix to the files you include (when the request is mobile)
|
28
|
-
def mobylette_javascript_include_tag(*sources)
|
29
|
-
options = sources.extract_options!
|
30
|
-
if is_mobile_request?
|
31
|
-
javascript_include_tag(*sulfix_mobile_assets(sources, :js).insert(-1, options))
|
32
|
-
else
|
33
|
-
javascript_include_tag(*sources.insert(-1, options))
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
# Anex the "_mobile" sulfix to each string in the array,
|
40
|
-
# before the .#{extension}, if it exists
|
41
|
-
def sulfix_mobile_assets(sources, extension)
|
42
|
-
sources.map do |source|
|
43
|
-
if source =~ /.#{extension}/
|
44
|
-
"#{source.split(/.#{extension}$/)[0]}_mobile.#{extension}"
|
45
|
-
else
|
46
|
-
"#{source}_mobile"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
module Mobylette
|
2
|
-
module Controllers
|
3
|
-
|
4
|
-
# Mobylette::Controllers::RespondToMobileRequests includes the respond_to_mobile_requests
|
5
|
-
# to your ActionController::Base.
|
6
|
-
#
|
7
|
-
# The respond_to_mobile_requests method enables the controller mobile handling
|
8
|
-
module RespondToMobileRequests
|
9
|
-
extend ActiveSupport::Concern
|
10
|
-
|
11
|
-
included do
|
12
|
-
helper_method :is_mobile_request?
|
13
|
-
helper_method :is_mobile_view?
|
14
|
-
|
15
|
-
# List of mobile agents, from mobile_fu (https://github.com/brendanlim/mobile-fu)
|
16
|
-
MOBILE_USER_AGENTS = 'palm|blackberry|nokia|phone|midp|mobi|symbian|chtml|ericsson|minimo|' +
|
17
|
-
'audiovox|motorola|samsung|telit|upg1|windows ce|ucweb|astel|plucker|' +
|
18
|
-
'x320|x240|j2me|sgh|portable|sprint|docomo|kddi|softbank|android|mmp|' +
|
19
|
-
'pdxgw|netfront|xiino|vodafone|portalmmm|sagem|mot-|sie-|ipod|up\\.b|' +
|
20
|
-
'webos|amoi|novarra|cdm|alcatel|pocket|iphone|mobileexplorer|mobile'
|
21
|
-
end
|
22
|
-
|
23
|
-
module ClassMethods
|
24
|
-
|
25
|
-
# This method enables the controller do handle mobile requests
|
26
|
-
#
|
27
|
-
# You must add this to every controller you want to respond differently to mobile devices,
|
28
|
-
# or make it application wide calling it from the ApplicationController
|
29
|
-
#
|
30
|
-
# Options:
|
31
|
-
# * fall_back: :html
|
32
|
-
# You may pass a fall_back option to the method, it will force the render
|
33
|
-
# to look for that other format, in case there is not a .mobile file for the view.
|
34
|
-
# By default, it will fall back to the format of the original request.
|
35
|
-
# If you don't want fall back at all, pass fall_back: false
|
36
|
-
# * skip_xhr_requests: true/false
|
37
|
-
# By default this is set to true. When a xhr request enters in, it will skip the
|
38
|
-
# mobile verification. This will let your ajax calls to work as intended.
|
39
|
-
# You may disable this (actually you will have to) if you are using JQuery Mobile, or
|
40
|
-
# other js framework that uses ajax. To disable, set skip_xhr_requests: false
|
41
|
-
def respond_to_mobile_requests(options = {})
|
42
|
-
return if self.included_modules.include?(Mobylette::Controllers::RespondToMobileRequestsMethods)
|
43
|
-
|
44
|
-
options.reverse_merge!({
|
45
|
-
skip_xhr_requests: true
|
46
|
-
})
|
47
|
-
|
48
|
-
cattr_accessor :mobylette_options
|
49
|
-
# works on 1.9, but not on 1.8
|
50
|
-
#valid_options = [:fall_back, :skip_xhr_requests]
|
51
|
-
#self.mobylette_options = options.reject {|option| !valid_options.include?(option)}
|
52
|
-
self.mobylette_options = options
|
53
|
-
|
54
|
-
self.send(:include, Mobylette::Controllers::RespondToMobileRequestsMethods)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
# :doc:
|
61
|
-
# This helper returns exclusively if the request's user_aget is from a mobile
|
62
|
-
# device or not.
|
63
|
-
def is_mobile_request?
|
64
|
-
request.user_agent.to_s.downcase =~ /#{MOBILE_USER_AGENTS}/
|
65
|
-
end
|
66
|
-
|
67
|
-
# :doc:
|
68
|
-
# This helper returns exclusively if the current format is mobile or not
|
69
|
-
def is_mobile_view?
|
70
|
-
true if (request.format.to_s == "mobile") or (params[:format] == "mobile")
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# RespondToMobileRequestsMethods is included by respond_to_mobile_requests
|
75
|
-
#
|
76
|
-
# This will check if the request is from a mobile device and change
|
77
|
-
# the request format to :mobile
|
78
|
-
module RespondToMobileRequestsMethods
|
79
|
-
extend ActiveSupport::Concern
|
80
|
-
|
81
|
-
included do
|
82
|
-
before_filter :handle_mobile
|
83
|
-
end
|
84
|
-
|
85
|
-
private
|
86
|
-
|
87
|
-
# Returns true if this request should be treated as a mobile request
|
88
|
-
def respond_as_mobile?
|
89
|
-
processing_xhr_requests? and skip_mobile_param_not_present? and (force_mobile_by_session? or is_mobile_request? or (params[:format] == 'mobile'))
|
90
|
-
end
|
91
|
-
|
92
|
-
# Returns true if the visitor has de force_mobile session
|
93
|
-
def force_mobile_by_session?
|
94
|
-
session[:mobylette_override] == :force_mobile
|
95
|
-
end
|
96
|
-
|
97
|
-
# Returns true when ?skip_mobile=true is not passed to the request
|
98
|
-
def skip_mobile_param_not_present?
|
99
|
-
params[:skip_mobile] != 'true'
|
100
|
-
end
|
101
|
-
|
102
|
-
# Returns true only if treating XHR requests (when skip_xhr_requests are set to false) or
|
103
|
-
# or when this is a non xhr request
|
104
|
-
def processing_xhr_requests?
|
105
|
-
not self.mobylette_options[:skip_xhr_requests] && request.xhr?
|
106
|
-
end
|
107
|
-
|
108
|
-
# :doc:
|
109
|
-
# Changes the request.form to :mobile, when the request is from
|
110
|
-
# a mobile device
|
111
|
-
def handle_mobile
|
112
|
-
return if session[:mobylette_override] == :ignore_mobile
|
113
|
-
if respond_as_mobile?
|
114
|
-
|
115
|
-
original_format = request.format.to_sym
|
116
|
-
request.format = :mobile
|
117
|
-
if self.mobylette_options[:fall_back] != false
|
118
|
-
request.formats << Mime::Type.new(self.mobylette_options[:fall_back] || original_format)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Mobylette
|
2
|
-
module Helmet
|
3
|
-
|
4
|
-
# Forces the helper to think that all requests come
|
5
|
-
# from a mobile device
|
6
|
-
module Faker
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
|
9
|
-
included do
|
10
|
-
cattr_accessor :is_mobile_request
|
11
|
-
end
|
12
|
-
|
13
|
-
def is_mobile_request?
|
14
|
-
is_mobile_request
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module Mobylette
|
2
|
-
module Helmet
|
3
|
-
# This module is only for testing the view's helpers of the module
|
4
|
-
# it simulates the Helmet helpers and the controller methods
|
5
|
-
# that are necessary for the tests
|
6
|
-
module Helpers
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
|
9
|
-
included do
|
10
|
-
cattr_accessor :user_agent
|
11
|
-
end
|
12
|
-
|
13
|
-
# Force the request to be a mobile request
|
14
|
-
def force_mobile_request_agent
|
15
|
-
insert_faker
|
16
|
-
ActionController::Base.is_mobile_request = true
|
17
|
-
end
|
18
|
-
|
19
|
-
# Reset the request mobile agent of the request
|
20
|
-
def reset_test_request_agent
|
21
|
-
insert_faker
|
22
|
-
ActionController::Base.is_mobile_request = false
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
# includes the faker module for faking mobile requests
|
28
|
-
def insert_faker
|
29
|
-
return if ActionController::Base.included_modules.include?(Mobylette::Helmet::Faker)
|
30
|
-
ActionController::Base.send(:include, Mobylette::Helmet::Faker)
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActionController::Base do
|
4
|
-
|
5
|
-
it "ActionController::Base class should respond to the respond_to_mobile_requests" do
|
6
|
-
ActionController::Base.respond_to?(:respond_to_mobile_requests).should be_true
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should have the :is_mobile_request? method" do
|
10
|
-
# works on ruby 1.9.2, but not on 1.8.7:
|
11
|
-
#@controller.private_methods.include?(:is_mobile_request?).should be_true
|
12
|
-
|
13
|
-
@controller.send(:is_mobile_request?).should be_nil
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should have the :is_mobile_request? method" do
|
17
|
-
# works on ruby 1.9.2, but not on 1.8.7:
|
18
|
-
#@controller.private_methods.include?(:is_mobile_request?).should be_true
|
19
|
-
|
20
|
-
@controller.send(:is_mobile_view?).should be_nil
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DefaultFallbackController do
|
4
|
-
# This controller calls respond_to_mobile_requests with no params
|
5
|
-
# Index action has views for html, js and mobile
|
6
|
-
# Test action has only html and js
|
7
|
-
|
8
|
-
render_views
|
9
|
-
|
10
|
-
it "should find the correct view when it exists" do
|
11
|
-
force_mobile_request_agent
|
12
|
-
get :index
|
13
|
-
response.should render_template(:index)
|
14
|
-
response.body.should contain("MOBILE VIEW")
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should find the correct view when it exists" do
|
18
|
-
reset_test_request_agent
|
19
|
-
get :index
|
20
|
-
response.should render_template(:index)
|
21
|
-
response.body.should contain("HTML VIEW")
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should fall back to the default request format when it doesnt" do
|
25
|
-
force_mobile_request_agent
|
26
|
-
get :test
|
27
|
-
response.should render_template(:test)
|
28
|
-
response.body.should contain("HTML VIEW")
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should fall back to the default request format when it doesnt (js)" do
|
32
|
-
force_mobile_request_agent
|
33
|
-
get :test, :format => :js
|
34
|
-
response.should render_template(:test)
|
35
|
-
response.body.should contain("JS VIEW")
|
36
|
-
end
|
37
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DesktopOnlyController do
|
4
|
-
# this controller has no actions
|
5
|
-
# and do not call respond_to_mobile_requests
|
6
|
-
|
7
|
-
it "should not have the :handle_mobile method" do
|
8
|
-
@controller.private_methods.include?(:handle_mobile).should_not be_true
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should have the :is_mobile_request? method" do
|
12
|
-
# Works on ruby 1.9.2 but not on 1.8.7:
|
13
|
-
#@controller.private_methods.include?(:is_mobile_request?).should be_true
|
14
|
-
|
15
|
-
@controller.send(:is_mobile_request?).should be_nil
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ForceFallbackController do
|
4
|
-
# this controller calls respond_to_mobile_requests :fall_back => :js
|
5
|
-
# forcing fallback to be javascript
|
6
|
-
# index action has html, js and mobile views
|
7
|
-
# test action has html and js only
|
8
|
-
|
9
|
-
render_views
|
10
|
-
|
11
|
-
it "should find the correct view (mobile) when it exists" do
|
12
|
-
force_mobile_request_agent
|
13
|
-
get :index
|
14
|
-
response.should render_template(:index)
|
15
|
-
response.body.should contain("MOBILE VIEW")
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should find the correct view (html) when it exists" do
|
19
|
-
reset_test_request_agent
|
20
|
-
get :index
|
21
|
-
response.should render_template(:index)
|
22
|
-
response.body.should contain("HTML VIEW")
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should fall back to the JS format when it doesnt have mobile" do
|
26
|
-
force_mobile_request_agent
|
27
|
-
get :test
|
28
|
-
response.should render_template(:test)
|
29
|
-
response.body.should contain("JS VIEW")
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should fall back to the JS format when it doesnt have mobile" do
|
33
|
-
force_mobile_request_agent
|
34
|
-
get :test, :format => :html
|
35
|
-
response.should render_template(:test)
|
36
|
-
response.body.should contain("JS VIEW")
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should fall back to the JS format when it doesnt (js)" do
|
40
|
-
force_mobile_request_agent
|
41
|
-
get :test, :format => :js
|
42
|
-
response.should render_template(:test)
|
43
|
-
response.body.should contain("JS VIEW")
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
@@ -1,145 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe HomeController do
|
4
|
-
# This controller calls respond_to_mobile_requests with no params
|
5
|
-
# no_mobile_view action has only html
|
6
|
-
# mobile action has only mobile
|
7
|
-
# index action has html, js and mobile
|
8
|
-
# desktop action has only html
|
9
|
-
render_views
|
10
|
-
|
11
|
-
it "should have the :handle_mobile method" do
|
12
|
-
# Works on ruby 1.9.2 but not on 1.8.7
|
13
|
-
# @controller.private_methods.include?(:handle_mobile).should be_true
|
14
|
-
# this is a hack, not perfect, but if it didnt have the method it would
|
15
|
-
# throw an error, and the test would fail
|
16
|
-
@controller.send(:handle_mobile).should be_nil
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should render the index view" do
|
20
|
-
get :index
|
21
|
-
response.should render_template(:index)
|
22
|
-
response.body.should contain("this is the html view")
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "is_mobile_request? and force_mobile_request_agent/reset_test_request_agent" do
|
26
|
-
it "should have the Rails Testing request type by default" do
|
27
|
-
get :index
|
28
|
-
request.user_agent.should == "Rails Testing"
|
29
|
-
@controller.send(:is_mobile_request?).should be_false
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should, on a mobile request, have 'is_mobile_request?' == true" do
|
33
|
-
force_mobile_request_agent("Android")
|
34
|
-
get :index
|
35
|
-
request.user_agent.should == "Android"
|
36
|
-
@controller.send(:is_mobile_request?).should be_true
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should, on a mobile request, render the mobile type of view" do
|
40
|
-
force_mobile_request_agent
|
41
|
-
get :index
|
42
|
-
@controller.send(:is_mobile_request?).should be_true
|
43
|
-
response.body.should contain("this is the mobile view")
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should, on reset_test_request_agent call, reset the user_agent to default (Rails Testing)" do
|
47
|
-
force_mobile_request_agent("Iphone")
|
48
|
-
reset_test_request_agent
|
49
|
-
get :index
|
50
|
-
@controller.send(:is_mobile_request?).should be_false
|
51
|
-
request.user_agent.should == "Rails Testing"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "Output Rendering" do
|
56
|
-
it "should display THIS A MOBILE DEVICE on index from mobile" do
|
57
|
-
force_mobile_request_agent("Android")
|
58
|
-
get :index
|
59
|
-
response.body.should contain("THIS A MOBILE DEVICE")
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should not display THIS IS NOT A MOBILE DEVICE on index from mobile" do
|
63
|
-
force_mobile_request_agent("Android")
|
64
|
-
get :index
|
65
|
-
response.body.should_not contain("THIS IS NOT A MOBILE DEVICE")
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should not display THIS A MOBILE DEVICE on index from non mobile" do
|
69
|
-
reset_test_request_agent
|
70
|
-
get :index
|
71
|
-
response.body.should_not contain("THIS A MOBILE DEVICE")
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should display THIS IS NOT A MOBILE DEVICE on index from non mobile" do
|
75
|
-
reset_test_request_agent
|
76
|
-
get :index
|
77
|
-
response.body.should contain("THIS IS NOT A MOBILE DEVICE")
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
describe "respond_to with different views for different request types" do
|
82
|
-
it "should render desktop view on non mobile request" do
|
83
|
-
reset_test_request_agent
|
84
|
-
get :respond_to_test
|
85
|
-
response.should render_template(:desktop)
|
86
|
-
end
|
87
|
-
|
88
|
-
it "should render mobile view on mobile request" do
|
89
|
-
force_mobile_request_agent("Android")
|
90
|
-
get :respond_to_test
|
91
|
-
response.should render_template(:mobile)
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should render mobile view when format => 'mobile' is passed" do
|
95
|
-
get :respond_to_test, :format => "mobile"
|
96
|
-
response.should render_template(:mobile)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
#######################################################
|
101
|
-
# Testing XHR requests
|
102
|
-
describe "XHR Requests" do
|
103
|
-
it "should not use mobile format for xhr requests by default" do
|
104
|
-
force_mobile_request_agent("Android")
|
105
|
-
xhr :get, :index
|
106
|
-
response.should render_template(:index)
|
107
|
-
response.body.should contain("AJAX VIEW")
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
#######################################################
|
112
|
-
# Testing Session Override
|
113
|
-
describe "Session Override" do
|
114
|
-
it "should force mobile view if session says it so" do
|
115
|
-
reset_test_request_agent
|
116
|
-
set_session_override(:force_mobile)
|
117
|
-
get :index
|
118
|
-
response.should render_template(:index)
|
119
|
-
response.should contain("this is the mobile view")
|
120
|
-
response.should contain("THIS IS NOT A MOBILE DEVICE")
|
121
|
-
end
|
122
|
-
|
123
|
-
it "should ignore mobile view processing if session says it so" do
|
124
|
-
force_mobile_request_agent("Android")
|
125
|
-
set_session_override(:ignore_mobile)
|
126
|
-
get :index
|
127
|
-
response.should render_template(:index)
|
128
|
-
response.should contain("this is the html view")
|
129
|
-
response.should contain("THIS A MOBILE DEVICE")
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
###################################################
|
134
|
-
# Param forcing
|
135
|
-
describe "Forcing to skip mobile by param" do
|
136
|
-
it "should not render mobile view if skip_mobile param is present and set to true" do
|
137
|
-
force_mobile_request_agent
|
138
|
-
get :index, :skip_mobile => 'true'
|
139
|
-
response.should render_template(:index)
|
140
|
-
response.should contain("this is the html view")
|
141
|
-
response.should contain("THIS A MOBILE DEVICE")
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
end
|