mobylette 3.1 → 3.2

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.
@@ -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