mobylette 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. data/README.rdoc +33 -9
  2. data/Rakefile +5 -0
  3. data/lib/mobylette.rb +5 -0
  4. data/lib/mobylette/controllers/helpers.rb +6 -5
  5. data/lib/mobylette/controllers/respond_to_mobile_requests.rb +14 -5
  6. data/lib/mobylette/helmet.rb +11 -0
  7. data/lib/mobylette/version.rb +1 -1
  8. data/spec/controllers/actioncontroller_base_spec.rb +8 -0
  9. data/spec/controllers/home_controller_spec.rb +30 -0
  10. data/spec/dummy/app/views/home/desktop.html.erb +3 -1
  11. data/spec/dummy/app/views/home/index.html.erb +3 -1
  12. data/spec/dummy/app/views/home/index.js.erb +1 -0
  13. data/spec/dummy/app/views/home/index.mobile.erb +3 -1
  14. data/spec/dummy/app/views/home/mobile.mobile.erb +3 -1
  15. data/spec/dummy/app/views/home/no_mobile_view.html.erb +3 -1
  16. metadata +44 -89
  17. data/spec/dummy/db/development.sqlite3 +0 -0
  18. data/spec/dummy/db/test.sqlite3 +0 -0
  19. data/spec/dummy/log/development.log +0 -32
  20. data/spec/dummy/log/test.log +0 -1537
  21. data/spec/dummy/tmp/cache/assets/C82/3E0/sprockets%2F48eb4ac616538f8f36870451073315da +0 -0
  22. data/spec/dummy/tmp/cache/assets/CE4/1C0/sprockets%2F18d93e1533d585b2f64ec90b33176ac9 +0 -0
  23. data/spec/dummy/tmp/cache/assets/CED/A70/sprockets%2F621683d8791730a9cc7ce45e17a7e46d +0 -0
  24. data/spec/dummy/tmp/cache/assets/CFC/200/sprockets%2F716f89d85d4855706b8a9abec1969c62 +0 -0
  25. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  26. data/spec/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +0 -0
  27. data/spec/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
  28. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  29. data/spec/dummy/tmp/pids/server.pid +0 -1
@@ -1,4 +1,4 @@
1
- http://fd.img.v4.skyrock.net/fd6/mantaur/pics/206915407_small.jpg
1
+ http://tscolari.github.com/mobylette/mobylette_images/mobylette.jpg
2
2
 
3
3
  = Mobylette http://travis-ci.org/tscolari/mobylette.png
4
4
 
@@ -22,7 +22,7 @@ By adding "respond_to_mobile_requests" in your application_controller (or any ot
22
22
 
23
23
  Add the gem to your gemfile:
24
24
 
25
- gem 'mobylette', :git => "git://github.com/tscolari/mobylette.git"
25
+ gem 'mobylette'
26
26
 
27
27
  And add to your ApplicationController.rb (for enabling it to all your controllers) or to the controllers you want this functionality on:
28
28
 
@@ -32,17 +32,25 @@ After that, you may start adding your .mobile. views.
32
32
 
33
33
  == Helpers
34
34
 
35
- ==== is_mobile_request?
35
+ * ==== is_mobile_request?
36
36
 
37
- This helper returns true if the request comes from a mobile device, false if it does not.
37
+ This helper returns true if the request comes from a mobile device, false if it does not.
38
38
 
39
- ==== mobylette_stylesheet_link_tag(*sources)
39
+ * ==== is_mobile_view?
40
40
 
41
- This works like the stylesheet_link_tag helper, but when the request comes from a mobile device, it adds "_mobile" to the stylesheets before calling stylesheet_link_tag
41
+ Returns if the current format is :mobile or not.
42
42
 
43
- ==== mobylette_javascript_include_tag(*soruces)
43
+ There is a difference between is_mobile_view? and is_mobile_request?. You may have a user requesting from a mobile device (is_mobile_request? == true) and at the same time, you may use the sesssion override to render de default format aways (is_mobile_view? == false). There are a lot of other combinations where these 2 functions will return different results.
44
+ * is_mobile_request? -> Exclusively checks for the device from where the request were made
45
+ * is_mobile_view? -> Exclusively checks for the view format been rendered
44
46
 
45
- Same as mobylette_stylesheet_link_tag, but for javascript files and javascript_include_tag
47
+ * ==== mobylette_stylesheet_link_tag(*sources)
48
+
49
+ This works like the stylesheet_link_tag helper, but when the request comes from a mobile device, it adds "_mobile" to the stylesheets before calling stylesheet_link_tag
50
+
51
+ * ==== mobylette_javascript_include_tag(*soruces)
52
+
53
+ Same as mobylette_stylesheet_link_tag, but for javascript files and javascript_include_tag
46
54
 
47
55
  == Fall Backs
48
56
 
@@ -54,9 +62,25 @@ This would force all views (mobile) to fall back to the html views. You may also
54
62
 
55
63
  respond_to_mobile_requests :fall_back => false
56
64
 
65
+ == Forcing/Ignoring Mobile Requests
66
+
67
+ You may force your user to aways render the mobile format, or to aways render the default request format (when the request comes from a mobile device). You can use the session var :mobylette_override for doing it:
68
+
69
+ session[:mobylette_override] = :ignore_mobile
70
+
71
+ This will skip the code that would force the mobile format. By doing this, your user will aways render the 'original' version of your app.
72
+
73
+ session[:mobylette_override] = :force_mobile
74
+
75
+ This will force the mobile format rendering, no matter from where the user is requesting it (unless it's a xhr request).
76
+
77
+ session[:mobylette_override] = nil
78
+
79
+ This will disable any override (default).
80
+
57
81
  == Testing
58
82
 
59
- http://image.tin247.com/kenh14/080918143137-689-665.jpg
83
+ http://tscolari.github.com/mobylette/mobylette_images/helmet.jpg
60
84
 
61
85
  Don't drive your mobylette without your Helmet! It's always safer do tests!
62
86
 
data/Rakefile CHANGED
@@ -33,5 +33,10 @@ Rake::TestTask.new(:test) do |t|
33
33
  t.verbose = false
34
34
  end
35
35
 
36
+ require 'metric_fu'
37
+ MetricFu::Configuration.run do |config|
38
+ config.rcov[:test_files] = ['spec/**/*_spec.rb']
39
+ config.rcov[:rcov_opts] << "-Ispec" # Needed to find spec_helper
40
+ end
36
41
 
37
42
  task :default => :test
@@ -1,12 +1,17 @@
1
+ #
2
+ # Rails automatic mobile request support
1
3
  module Mobylette
2
4
  module Controllers
3
5
  autoload "RespondToMobileRequests", "mobylette/controllers/respond_to_mobile_requests"
4
6
  autoload "Helpers" , "mobylette/controllers/helpers"
5
7
  end
6
8
 
9
+ # TestHelpers
7
10
  autoload "Helmet" , "mobylette/helmet"
11
+
8
12
  require 'mobylette/railtie'
9
13
  end
10
14
 
15
+ # Creating the :mobile format alias
11
16
  require 'action_controller'
12
17
  Mime::Type.register_alias "text/html", :mobile
@@ -1,14 +1,16 @@
1
1
  module Mobylette
2
2
  module Controllers
3
3
 
4
- #
5
4
  # Mobylette::Controllers::Helpers include few methods to
6
5
  # include different css/js files for the mobile and for
7
6
  # the normal version of your layout
8
7
  #
9
- # Personal note: 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
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.'
12
14
  module Helpers
13
15
  extend ActiveSupport::Concern
14
16
 
@@ -34,7 +36,6 @@ module Mobylette
34
36
 
35
37
  private
36
38
 
37
- #
38
39
  # Anex the "_mobile" sulfix to each string in the array,
39
40
  # before the .#{extension}, if it exists
40
41
  def sulfix_mobile_assets(sources, extension)
@@ -10,19 +10,20 @@ module Mobylette
10
10
 
11
11
  included do
12
12
  helper_method :is_mobile_request?
13
+ helper_method :is_mobile_view?
13
14
 
14
15
  # List of mobile agents, from mobile_fu (https://github.com/brendanlim/mobile-fu)
15
16
  MOBILE_USER_AGENTS = 'palm|blackberry|nokia|phone|midp|mobi|symbian|chtml|ericsson|minimo|' +
16
17
  'audiovox|motorola|samsung|telit|upg1|windows ce|ucweb|astel|plucker|' +
17
18
  'x320|x240|j2me|sgh|portable|sprint|docomo|kddi|softbank|android|mmp|' +
18
19
  'pdxgw|netfront|xiino|vodafone|portalmmm|sagem|mot-|sie-|ipod|up\\.b|' +
19
- 'webos|amoi|novarra|cdm|alcatel|pocket|ipad|iphone|mobileexplorer|' +
20
- 'mobile'
20
+ 'webos|amoi|novarra|cdm|alcatel|pocket|iphone|mobileexplorer|mobile'
21
21
  end
22
22
 
23
23
  module ClassMethods
24
24
 
25
25
  # This method enables the controller do handle mobile requests
26
+ #
26
27
  # You must add this to every controller you want to respond differently to mobile devices,
27
28
  # or make it application wide calling it from the ApplicationController
28
29
  #
@@ -47,16 +48,23 @@ module Mobylette
47
48
 
48
49
  private
49
50
 
50
- # helper method to check if the current request if from a mobile device or not
51
+ # This helper returns exclusively if the request's user_aget is from a mobile
52
+ # device or not.
51
53
  def is_mobile_request?
52
- return true if (request.format.to_s == "mobile") or (params[:format] == "mobile")
53
54
  request.user_agent.to_s.downcase =~ /#{MOBILE_USER_AGENTS}/
54
55
  end
56
+
57
+ # This helper returns exclusively if the current format is mobile or not
58
+ def is_mobile_view?
59
+ true if (request.format.to_s == "mobile") or (params[:format] == "mobile")
60
+ end
61
+
55
62
  end
56
63
 
57
64
  end
58
65
 
59
66
  # RespondToMobileRequestsMethods is included by respond_to_mobile_requests
67
+ #
60
68
  # This will check if the request is from a mobile device and change
61
69
  # the request format to :mobile
62
70
  module RespondToMobileRequestsMethods
@@ -72,7 +80,8 @@ module Mobylette
72
80
  # Changes the request.form to :mobile, when the request is from
73
81
  # a mobile device
74
82
  def handle_mobile
75
- if is_mobile_request?
83
+ return if session[:mobylette_override] == :ignore_mobile
84
+ if not request.xhr? and ((session[:mobylette_override] == :force_mobile) or (is_mobile_request?))
76
85
  original_format = request.format.to_sym
77
86
  request.format = :mobile
78
87
  if self.fall_back_format != false
@@ -10,6 +10,7 @@ module Mobylette
10
10
  autoload "Faker" , "mobylette/helmet/faker"
11
11
 
12
12
  # Force the request for the user_agent
13
+ #
13
14
  # Remember to add it BEFORE the request
14
15
  #
15
16
  # Example:
@@ -24,6 +25,7 @@ module Mobylette
24
25
  end
25
26
 
26
27
  # Reset the user_aget to the default ("Rails Testing")
28
+ #
27
29
  # Remember to add it BEFORE the request
28
30
  #
29
31
  # Example:
@@ -37,5 +39,14 @@ module Mobylette
37
39
  request.user_agent = "Rails Testing"
38
40
  end
39
41
 
42
+ # set_session_override will set the 'value' to the session override control
43
+ # value may be:
44
+ # * :ignore_mobile -> This will disable mobile checking, and the original format will be rendered
45
+ # * :force_mobile -> This will force to all requests for this session be mobile (except xhr)
46
+ # * nil -> This will disable session override
47
+ def set_session_override(value)
48
+ session[:mobylette_override] = value
49
+ end
50
+
40
51
  end
41
52
  end
@@ -1,3 +1,3 @@
1
1
  module Mobylette
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -13,4 +13,12 @@ describe ActionController::Base do
13
13
  @controller.send(:is_mobile_request?).should be_nil
14
14
  end
15
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
+
16
24
  end
@@ -86,4 +86,34 @@ describe HomeController do
86
86
  response.body.should contain("THIS IS NOT A MOBILE DEVICE")
87
87
  end
88
88
 
89
+ #######################################################
90
+ # Testing XHR requests
91
+ it "should not use mobile format for xhr requests" do
92
+ force_mobile_request_agent("Android")
93
+ xhr :get, :index
94
+ response.should render_template(:index)
95
+ response.body.should contain("AJAX VIEW")
96
+ end
97
+
98
+ #######################################################
99
+ # Testing Session Override
100
+
101
+ it "should force mobile view if session says it so" do
102
+ reset_test_request_agent
103
+ set_session_override(:force_mobile)
104
+ get :index
105
+ response.should render_template(:index)
106
+ response.should contain("this is the mobile view")
107
+ response.should contain("THIS IS NOT A MOBILE DEVICE")
108
+ end
109
+
110
+ it "should ignore mobile view processing if session says it so" do
111
+ force_mobile_request_agent("Android")
112
+ set_session_override(:ignore_mobile)
113
+ get :index
114
+ response.should render_template(:index)
115
+ response.should contain("this is the html view")
116
+ response.should contain("THIS A MOBILE DEVICE")
117
+ end
118
+
89
119
  end
@@ -1 +1,3 @@
1
- this is a desktop html mime type
1
+ <% unless is_mobile_view? %>
2
+ this is a desktop html mime type
3
+ <% end %>
@@ -1,4 +1,6 @@
1
- this is the html view
1
+ <% unless is_mobile_view? %>
2
+ this is the html view
3
+ <% end %>
2
4
 
3
5
  <% if is_mobile_request? %>
4
6
  THIS A MOBILE DEVICE
@@ -0,0 +1 @@
1
+ AJAX VIEW
@@ -1,4 +1,6 @@
1
- this is the mobile view
1
+ <% if is_mobile_view? %>
2
+ this is the mobile view
3
+ <% end %>
2
4
 
3
5
  <% if is_mobile_request? %>
4
6
  THIS A MOBILE DEVICE
@@ -1 +1,3 @@
1
- this is a mobile mobile view
1
+ <% if is_mobile_view? %>
2
+ this is a mobile mobile view
3
+ <% end %>
@@ -1 +1,3 @@
1
- This is the only view, and it's html
1
+ <% unless is_mobile_view? %>
2
+ This is the only view, and it's html
3
+ <% end %>
metadata CHANGED
@@ -1,62 +1,45 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mobylette
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 0
10
- version: 1.0.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Tiago Scolari
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-09-03 00:00:00 -03:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2011-09-04 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: &2151944860 !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
18
+ requirements:
25
19
  - - ~>
26
- - !ruby/object:Gem::Version
27
- hash: 5
28
- segments:
29
- - 3
30
- - 1
31
- version: "3.1"
32
- version_requirements: *id001
33
- name: rails
34
- prerelease: false
20
+ - !ruby/object:Gem::Version
21
+ version: '3.1'
35
22
  type: :runtime
36
- - !ruby/object:Gem::Dependency
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
46
- version_requirements: *id002
47
- name: rspec
48
23
  prerelease: false
24
+ version_requirements: *2151944860
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2151943960 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
49
33
  type: :development
34
+ prerelease: false
35
+ version_requirements: *2151943960
50
36
  description: Adds the mobile format for rendering views for mobile device.
51
- email:
37
+ email:
52
38
  - tscolari@gmail.com
53
39
  executables: []
54
-
55
40
  extensions: []
56
-
57
41
  extra_rdoc_files: []
58
-
59
- files:
42
+ files:
60
43
  - lib/mobylette/controllers/helpers.rb
61
44
  - lib/mobylette/controllers/respond_to_mobile_requests.rb
62
45
  - lib/mobylette/helmet/faker.rb
@@ -126,6 +109,7 @@ files:
126
109
  - spec/dummy/app/views/force_fallback/test.js.erb
127
110
  - spec/dummy/app/views/home/desktop.html.erb
128
111
  - spec/dummy/app/views/home/index.html.erb
112
+ - spec/dummy/app/views/home/index.js.erb
129
113
  - spec/dummy/app/views/home/index.mobile.erb
130
114
  - spec/dummy/app/views/home/mobile.mobile.erb
131
115
  - spec/dummy/app/views/home/no_mobile_view.html.erb
@@ -152,65 +136,48 @@ files:
152
136
  - spec/dummy/config/locales/en.yml
153
137
  - spec/dummy/config/routes.rb
154
138
  - spec/dummy/config.ru
155
- - spec/dummy/db/development.sqlite3
156
139
  - spec/dummy/db/schema.rb
157
- - spec/dummy/db/test.sqlite3
158
- - spec/dummy/log/development.log
159
- - spec/dummy/log/test.log
160
140
  - spec/dummy/public/404.html
161
141
  - spec/dummy/public/422.html
162
142
  - spec/dummy/public/500.html
163
143
  - spec/dummy/public/favicon.ico
164
144
  - spec/dummy/Rakefile
165
145
  - spec/dummy/script/rails
166
- - spec/dummy/tmp/cache/assets/C82/3E0/sprockets%2F48eb4ac616538f8f36870451073315da
167
- - spec/dummy/tmp/cache/assets/CE4/1C0/sprockets%2F18d93e1533d585b2f64ec90b33176ac9
168
- - spec/dummy/tmp/cache/assets/CED/A70/sprockets%2F621683d8791730a9cc7ce45e17a7e46d
169
- - spec/dummy/tmp/cache/assets/CFC/200/sprockets%2F716f89d85d4855706b8a9abec1969c62
170
- - spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
171
- - spec/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4
172
- - spec/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384
173
- - spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
174
- - spec/dummy/tmp/pids/server.pid
175
146
  - spec/helpers/mobylette_helpers_spec.rb
176
147
  - spec/integration/navigation_spec.rb
177
148
  - spec/mobylette_spec.rb
178
149
  - spec/spec_helper.rb
179
- has_rdoc: true
180
150
  homepage: https://github.com/tscolari/mobylette
181
151
  licenses: []
182
-
183
152
  post_install_message:
184
153
  rdoc_options: []
185
-
186
- require_paths:
154
+ require_paths:
187
155
  - lib
188
- required_ruby_version: !ruby/object:Gem::Requirement
156
+ required_ruby_version: !ruby/object:Gem::Requirement
189
157
  none: false
190
- requirements:
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- hash: 3
194
- segments:
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ segments:
195
163
  - 0
196
- version: "0"
197
- required_rubygems_version: !ruby/object:Gem::Requirement
164
+ hash: 3248281126714591700
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
166
  none: false
199
- requirements:
200
- - - ">="
201
- - !ruby/object:Gem::Version
202
- hash: 3
203
- segments:
167
+ requirements:
168
+ - - ! '>='
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ segments:
204
172
  - 0
205
- version: "0"
173
+ hash: 3248281126714591700
206
174
  requirements: []
207
-
208
175
  rubyforge_project:
209
- rubygems_version: 1.6.2
176
+ rubygems_version: 1.8.6
210
177
  signing_key:
211
178
  specification_version: 3
212
179
  summary: Mobile request handling for your Rails app.
213
- test_files:
180
+ test_files:
214
181
  - spec/controllers/actioncontroller_base_spec.rb
215
182
  - spec/controllers/default_fallback_controller_spec.rb
216
183
  - spec/controllers/desktop_only_controller_spec.rb
@@ -268,6 +235,7 @@ test_files:
268
235
  - spec/dummy/app/views/force_fallback/test.js.erb
269
236
  - spec/dummy/app/views/home/desktop.html.erb
270
237
  - spec/dummy/app/views/home/index.html.erb
238
+ - spec/dummy/app/views/home/index.js.erb
271
239
  - spec/dummy/app/views/home/index.mobile.erb
272
240
  - spec/dummy/app/views/home/mobile.mobile.erb
273
241
  - spec/dummy/app/views/home/no_mobile_view.html.erb
@@ -294,26 +262,13 @@ test_files:
294
262
  - spec/dummy/config/locales/en.yml
295
263
  - spec/dummy/config/routes.rb
296
264
  - spec/dummy/config.ru
297
- - spec/dummy/db/development.sqlite3
298
265
  - spec/dummy/db/schema.rb
299
- - spec/dummy/db/test.sqlite3
300
- - spec/dummy/log/development.log
301
- - spec/dummy/log/test.log
302
266
  - spec/dummy/public/404.html
303
267
  - spec/dummy/public/422.html
304
268
  - spec/dummy/public/500.html
305
269
  - spec/dummy/public/favicon.ico
306
270
  - spec/dummy/Rakefile
307
271
  - spec/dummy/script/rails
308
- - spec/dummy/tmp/cache/assets/C82/3E0/sprockets%2F48eb4ac616538f8f36870451073315da
309
- - spec/dummy/tmp/cache/assets/CE4/1C0/sprockets%2F18d93e1533d585b2f64ec90b33176ac9
310
- - spec/dummy/tmp/cache/assets/CED/A70/sprockets%2F621683d8791730a9cc7ce45e17a7e46d
311
- - spec/dummy/tmp/cache/assets/CFC/200/sprockets%2F716f89d85d4855706b8a9abec1969c62
312
- - spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
313
- - spec/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4
314
- - spec/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384
315
- - spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
316
- - spec/dummy/tmp/pids/server.pid
317
272
  - spec/helpers/mobylette_helpers_spec.rb
318
273
  - spec/integration/navigation_spec.rb
319
274
  - spec/mobylette_spec.rb