mobylette 3.1 → 3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,6 +10,9 @@ http://tscolari.github.com/mobylette/mobylette_images/mobylette.jpg
10
10
 
11
11
  = Mobylette
12
12
  {<img src="https://secure.travis-ci.org/tscolari/mobylette.png" />}[http://travis-ci.org/tscolari/mobylette]
13
+ {<img src="https://gemnasium.com/tscolari/mobylette.png" />}[https://gemnasium.com/tscolari/mobylette]
14
+ {<img src="https://codeclimate.com/badge.png" />}[https://codeclimate.com/github/tscolari/mobylette]
15
+
13
16
 
14
17
  This gem works by adding the 'mobile' format to your rails application. Whenever a request come from a mobile device, if you have your controller mobile enabled, it shall render the view.mobile.erb instead of the view.html.erb (or haml, or whatever).
15
18
 
@@ -1,13 +1,15 @@
1
1
  module Mobylette
2
2
  module Resolvers
3
3
  class ChainedFallbackResolver < ::ActionView::FileSystemResolver
4
+ DEFAULT_PATTERN = "{:path}/:prefix/:action{.:locale,}{.:formats,}{.:handlers,}"
4
5
 
5
6
  # Initializes the fallback resolver with a default
6
7
  # mobile format.
7
8
  #
8
- def initialize(formats = {})
9
- @fallback_formats = formats.reverse_merge!({ mobile: [:mobile] })
10
- super('app/views')
9
+ def initialize(formats = {}, view_paths = ['app/views'])
10
+ @fallback_formats = formats
11
+ @paths = view_paths.map { |view_path| File.expand_path(view_path)}
12
+ super(@paths.first, DEFAULT_PATTERN)
11
13
  end
12
14
 
13
15
  # Updates the fallback resolver replacing the
@@ -29,10 +31,12 @@ module Mobylette
29
31
  # it will behave as a normal FileSystemResovler.
30
32
  #
31
33
  def replace_fallback_formats_chain(formats)
32
- @fallback_formats = formats.reverse_merge!({ mobile: [:mobile] })
34
+ @fallback_formats = formats
33
35
  end
34
36
 
35
- # Public: finds the right template on the filesystem,
37
+ private
38
+
39
+ # Private: finds the right template on the filesystem,
36
40
  # using fallback if needed
37
41
  #
38
42
  def find_templates(name, prefix, partial, details)
@@ -43,6 +47,23 @@ module Mobylette
43
47
  end
44
48
  super(name, prefix, partial, details)
45
49
  end
50
+
51
+ # Helper for building query glob string based on resolver's pattern.
52
+ def build_query(path, details)
53
+ query = @pattern.dup
54
+
55
+ prefix = path.prefix.empty? ? "" : "#{escape_entry(path.prefix)}\\1"
56
+ query.gsub!(/\:prefix(\/)?/, prefix)
57
+
58
+ partial = escape_entry(path.partial? ? "_#{path.name}" : path.name)
59
+ query.gsub!(/\:action/, partial)
60
+
61
+ details.each do |ext, variants|
62
+ query.gsub!(/\:#{ext}/, "{#{variants.compact.uniq.join(',')}}")
63
+ end
64
+
65
+ query.gsub!(/\:path/, "#{@paths.compact.uniq.join(',')}")
66
+ end
46
67
  end
47
68
  end
48
69
  end
@@ -43,13 +43,11 @@ module Mobylette
43
43
  @@mobylette_options[:devices] = Hash.new
44
44
 
45
45
  cattr_accessor :mobylette_resolver
46
- self.mobylette_resolver = Mobylette::Resolvers::ChainedFallbackResolver.new()
46
+ self.mobylette_resolver = Mobylette::Resolvers::ChainedFallbackResolver.new({}, self.view_paths)
47
47
  self.mobylette_resolver.replace_fallback_formats_chain(@@mobylette_options[:fallback_chains])
48
48
  append_view_path self.mobylette_resolver
49
49
  end
50
50
 
51
-
52
-
53
51
  module ClassMethods
54
52
  # This method enables the controller do handle mobile requests
55
53
  #
@@ -120,7 +118,7 @@ module Mobylette
120
118
  self.mobylette_resolver.replace_fallback_formats_chain({ mobile: [:mobile, options[:fall_back]] })
121
119
  else
122
120
  if options[:fallback_chains]
123
- self.mobylette_resolver.replace_fallback_formats_chain(options[:fallback_chains])
121
+ self.mobylette_resolver.replace_fallback_formats_chain((options[:fallback_chains] || {}).reverse_merge({ mobile: [:mobile, :html] }))
124
122
  end
125
123
  end
126
124
  end
@@ -1,3 +1,3 @@
1
1
  module Mobylette
2
- VERSION = "3.1"
2
+ VERSION = "3.2"
3
3
  end
@@ -1 +1,29 @@
1
1
  DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
2
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
3
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
4
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
5
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
6
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
7
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
8
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
9
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
10
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
11
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
12
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
13
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
14
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
15
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
16
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
17
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
18
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
19
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
20
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
21
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
22
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
23
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
24
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
25
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
26
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
27
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
28
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
29
+ DEPRECATED > Mobylette: Please don't user :fall_back to configure fall backs any more. See the README for :fallback_chains instead.
@@ -5,7 +5,6 @@ module Mobylette
5
5
  describe ChainedFallbackResolver do
6
6
 
7
7
  describe "#find_templates" do
8
-
9
8
  context "single fallback chain" do
10
9
  [
11
10
  { mobile: [:mobile, :html]},
@@ -17,7 +16,7 @@ module Mobylette
17
16
  it "should change details[:formats] to the fallback array" do
18
17
  details = { formats: [fallback_chain.keys.first] }
19
18
  details.stub(:dup).and_return(details)
20
- subject.find_templates("", "", "", details)
19
+ subject.send(:find_templates, "", "", "", details)
21
20
  details[:formats].should == fallback_chain.values.first
22
21
  end
23
22
 
@@ -34,14 +33,26 @@ module Mobylette
34
33
  it "should change details[:formats] to the fallback array" do
35
34
  details = { formats: [format] }
36
35
  details.stub(:dup).and_return(details)
37
- subject.find_templates("", "", "", details)
36
+ subject.send(:find_templates, "", "", "", details)
38
37
  details[:formats].should == fallback_array
39
38
  end
40
39
  end
41
40
  end
42
41
  end
42
+ end
43
43
 
44
+ describe "#build_query" do
45
+ it "should merge paths, formats, and handlers" do
46
+ details = {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}
47
+ paths = ['/app1/home', '/app2/home']
48
+ path = ActionView::Resolver::Path.build('index', 'tests', nil)
49
+
50
+ resolver = Mobylette::Resolvers::ChainedFallbackResolver.new({}, paths)
51
+ query = resolver.send :build_query, path, details
52
+ query.should == "{/app1/home,/app2/home}/tests/index{.{en},}{.{html},}{.{erb,builder,coffee},}"
53
+ end
44
54
  end
55
+
45
56
  end
46
57
  end
47
58
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mobylette
3
3
  version: !ruby/object:Gem::Version
4
- version: '3.1'
4
+ version: '3.2'
5
5
  prerelease:
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-06-28 00:00:00.000000000 Z
12
+ date: 2012-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
16
- requirement: &70350105267040 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70350105267040
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rspec
27
- requirement: &70350105266040 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70350105266040
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rspec-rails
38
- requirement: &70350105265420 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70350105265420
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: debugger
49
- requirement: &70350105264620 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,7 +69,12 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70350105264620
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  description: Adds the mobile format for rendering views for mobile device.
59
79
  email:
60
80
  - tscolari@gmail.com
@@ -129,7 +149,6 @@ files:
129
149
  - spec/dummy/config/routes.rb
130
150
  - spec/dummy/config.ru
131
151
  - spec/dummy/db/schema.rb
132
- - spec/dummy/log/development.log
133
152
  - spec/dummy/log/test.log
134
153
  - spec/dummy/public/404.html
135
154
  - spec/dummy/public/422.html
@@ -158,7 +177,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
177
  version: '0'
159
178
  segments:
160
179
  - 0
161
- hash: 204503549891134721
180
+ hash: -3729222328630037007
162
181
  required_rubygems_version: !ruby/object:Gem::Requirement
163
182
  none: false
164
183
  requirements:
@@ -167,10 +186,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
186
  version: '0'
168
187
  segments:
169
188
  - 0
170
- hash: 204503549891134721
189
+ hash: -3729222328630037007
171
190
  requirements: []
172
191
  rubyforge_project:
173
- rubygems_version: 1.8.10
192
+ rubygems_version: 1.8.24
174
193
  signing_key:
175
194
  specification_version: 3
176
195
  summary: Mobile request handling for your Rails app.
@@ -229,7 +248,6 @@ test_files:
229
248
  - spec/dummy/config/routes.rb
230
249
  - spec/dummy/config.ru
231
250
  - spec/dummy/db/schema.rb
232
- - spec/dummy/log/development.log
233
251
  - spec/dummy/log/test.log
234
252
  - spec/dummy/public/404.html
235
253
  - spec/dummy/public/422.html
File without changes