page_title_helper 1.0.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,3 @@
1
1
  doc/
2
2
  pkg/
3
3
  .yardoc
4
- *.gemspec
data/README.md CHANGED
@@ -1,37 +1,54 @@
1
1
  # Page title helper
2
2
 
3
- Ever wondered if there was an easier and DRY-way to set your page titles (and/or headings). Backed
4
- by Rails (only tested on 2.3.x) and it's new `I18n`-class the solution is a simple helper method.
3
+ Ever wondered if there was an easier and DRY-way to set your page titles (and/or headings),
4
+ introducing _page title helper_, a small Rails 3 view helper to inflect titles from controllers
5
+ & actions.
5
6
 
6
- In your layout add this to your `<head>-section`:
7
+ **Note:** for Rails 2.x please use version 1.0.1: `gem install page_title_helper -v 1.0.1`, because
8
+ the latest versions are no longer compatible with Rails 2.x.
9
+
10
+ In your layout add this to your `<head>`-section:
7
11
 
8
12
  ...
9
- <title><%=h page_title %></title>
13
+ <title><%= page_title %></title>
10
14
  ...
11
15
 
12
- That's it. Now just add your translations, to the locales, in e.g. `config/locales/en.yml`:
16
+ That's it. Now just add translations, in e.g. `config/locales/en.yml`:
13
17
 
14
18
  en:
15
19
  contacts:
16
20
  index:
17
21
  title: "Contacts"
18
22
 
19
- When `contacs/index.html.erb` is rendered, the key `:en, :contacts, :index, :title`
20
- is looked up and printed, together with the applications basename, like: `My cool app - Contacts`.
23
+ When `/contacs/` is requested, the key `:en, :contacts, :index, :title`
24
+ is looked up and printed, together with the applications basename, like: `Contacts - My cool App`.
21
25
  The format etc. is of course configurable, just head down to the options.
22
26
 
23
27
  ## Installation
24
28
 
25
- As gem (from gemcutter.org, as of version 0.7.0):
29
+ As gem (from rubygems.org):
26
30
 
27
- sudo gem install page_title_helper [-s http://gemcutter.org]
31
+ # then add the following line to Gemfile
32
+ gem 'page_title_helper'
28
33
 
29
- # then add the following line to config/environment.rb
30
- config.gem 'page_title_helper', :source => 'http://gemcutter.org'
34
+ # living on the bleeding edge?
35
+ gem 'page_title_helper', :git => 'git://github.com/lwe/page_title_helper.git'
31
36
 
32
37
  or as plain old Rails plugin:
33
38
 
34
- ./script/plugin install git://github.com/lwe/page_title_helper.git
39
+ rails plugin install git://github.com/lwe/page_title_helper.git
40
+
41
+ ## Translated titles
42
+
43
+ All translated titles are inflected from the current controller and action, so to
44
+ easily explain all lookups, here an example with the corresponding lookups:
45
+
46
+ Admin::AccountController#index => :'admin.account.index.title'
47
+ :'admin.account.title'
48
+ options[:default]
49
+
50
+ For `create` and `update` a further fallback to `new.title` and `edit.title` have
51
+ been added, because they certainly are duplicates.
35
52
 
36
53
  ## Customize titles
37
54
 
@@ -39,16 +56,16 @@ Need a custom title, or need to fill in some placeholders? Just use the _bang_ m
39
56
  `contacts/show.html.erb` the requirement is to display the contacts name in the
40
57
  `<title>-tag`as well as in the heading?
41
58
 
42
- <h1><%=h page_title!(@contact.name) %></h1>
59
+ <h1><%= page_title!(@contact.name) %></h1>
43
60
 
44
61
  A call to `page_title` will now return the contacts name, neat :) if for example the
45
62
  `<h1>` does not match the `<title>`, then well, just do something like:
46
63
 
47
64
  <% page_title!(@contact.name + " (" + @contact.company.name + ")") %>
48
- <h1><%=h @contact.name %></h1>
65
+ <h1><%= @contact.name %></h1>
49
66
 
50
- Guess, that's it. Of course it's also possible to use `translate` with `page_title!`, to
51
- translate customzied titles, like:
67
+ Guess, that's it. Of course it's also possible to use `translate` within `page_title!`, to
68
+ translate custom titles, like:
52
69
 
53
70
  # in config/locales/en.yml:
54
71
  en:
@@ -57,7 +74,7 @@ translate customzied titles, like:
57
74
  title: "Welcome back, {{name}}"
58
75
 
59
76
  # in app/views/dashboard/index.html.erb:
60
- <h1><%=h page_title!(t('.title', :name => @user.first_name)) %></h1>
77
+ <h1><%= page_title!(t('.title', :name => @user.first_name)) %></h1>
61
78
 
62
79
  ## More fun with <tt>:format</tt>
63
80
 
@@ -71,7 +88,7 @@ Adding custom interpolations is as easy as defining a block, for example to acce
71
88
  controller:
72
89
 
73
90
  PageTitleHelper.interpolates :controller do |env|
74
- env.controller.controller_name.humanize
91
+ env[:view].controller.controller_name.humanize
75
92
  end
76
93
 
77
94
  page_title :format => ':title / :controller / :app' # => "Welcome back / Dashboard / My cool app"
@@ -84,14 +101,14 @@ To access just the title, without any magic app stuff interpolated or appended,
84
101
  Need a custom format for a single title? Just return an array:
85
102
 
86
103
  # in the view:
87
- <h1><%=h page_title!(@contact.name, ":title from :company - :app") %></h1> # => <h1>Franz Meyer</h1>
104
+ <h1><%= page_title!(@contact.name, ":title from :company - :app") %></h1> # => <h1>Franz Meyer</h1>
88
105
 
89
106
  # in the <head>
90
- <title><%=h(page_title) %></title> # => this time it will use custom title like "Franz Meyer from ABC Corp. - MyCoolApp"
107
+ <title><%= page_title %></title> # => this time it will use custom title like "Franz Meyer from ABC Corp. - My cool app"
91
108
 
92
- To streamline that feature a bit and simplify reuse of often used formats, it's now possible to define format aliases like:
109
+ To streamline that feature a bit and simplify reuse of often used formats, it's possible to define format aliases like:
93
110
 
94
- # in an initializer:
111
+ # in an initializer, e.g. config/initializers/page_title_helper.rb:
95
112
  PageTitleHelper.formats[:with_company] = ":title from :company - :app"
96
113
  PageTitleHelper.formats[:promo] = ":app - :title" # show app first for promo pages :)
97
114
 
@@ -106,8 +123,8 @@ To streamline that feature a bit and simplify reuse of often used formats, it's
106
123
  - "Features comparison"
107
124
  - !ruby/sym promo
108
125
 
109
- Pretty, cool, aint it? The special `:format => :app` works also with the `formats` hash. Then there is also a
110
- `:default` format, which should be used to override the default format.
126
+ Pretty, cool, aint it? The special `:format => :app` works also via the `formats` hash. Then there is also a
127
+ `:default` format, which can be used to override the default format.
111
128
 
112
129
  ## All options - explained
113
130
 
@@ -118,8 +135,8 @@ Pretty, cool, aint it? The special `:format => :app` works also with the `format
118
135
  <tr>
119
136
  <td><tt>:app</tt></td>
120
137
  <td>Specify the applications name, however it's
121
- recommended to define the translation key <tt>:'app.name'</tt>.</td>
122
- <td>Inflected from <tt>RAILS_ROOT</tt></td>
138
+ recommended to define it via translation key <tt>:'app.name'</tt>.</td>
139
+ <td>Inflected from <tt>Rails.root</tt></td>
123
140
  <td>string</td>
124
141
  </tr>
125
142
  <tr>
@@ -138,22 +155,12 @@ Pretty, cool, aint it? The special `:format => :app` works also with the `format
138
155
  <td><tt>:default</tt></td>
139
156
  <td>string, symbol</td>
140
157
  </tr>
141
- <tr>
142
- <td><tt>:suffix</tt></td>
143
- <td>Not happy with the fact that the translations must be named like
144
- <tt>en -> contacts -> index -> title</tt>, but prefer e.g. them to be suffixed with
145
- <tt>page_title</tt>? Then just set <tt>:suffix => :page_title</tt>.</td>
146
- <td><tt>:title</tt></td>
147
- <td>symbol or string</td>
148
- </tr>
149
158
  </table>
150
159
  </p>
151
160
 
152
- If an option should be set globally it's possible to change the default options hash as follows:
161
+ Options can be set globally via `PageTitleHelper.options`. Note, currently it only
162
+ makes sense to set `:default` globally.
153
163
 
154
- PageTitleHelper.options[:suffix] = :page_title
155
-
156
- Note, currently it only makes sense to set `:default` and/or `:page_title` globally.
157
164
  To add or change formats use:
158
165
 
159
166
  # change the default format used (if no format is specified):
@@ -162,17 +169,19 @@ To add or change formats use:
162
169
  # add a custom format alias (which can be used with page_title(:format => :promo))
163
170
  PageTitleHelper.formats[:promo] = ":app // :title"
164
171
 
165
- _Note:_ it's recommended to add this kind of stuff to an initializer.
172
+ _Note:_ it's recommended to add this kind of stuff to an initializer, like e.g.
173
+ `config/initializers/page_title_helper.rb`.
166
174
 
167
175
  ## A (maybe useful) interpolation
168
176
 
169
177
  The internationalized controller name, with fallback to just display the humanized name:
170
178
 
171
179
  PageTitleHelper.interpolates :controller do |env|
172
- I18n.t env.controller.controller_path.tr('/','.') + '.controller', :default => env.controller.controller_name.humanize
180
+ c = env[:view].controller
181
+ I18n.t(c.controller_path.tr('/', '.') + '.controller', :default => c.controller_name.humanize)
173
182
  end
174
183
 
175
- _Note:_ Put this kind of stuff into an initilizer, like `config/initializers/page_title.rb` or someting like that.
184
+ _Note:_ Put this kind of stuff into an initializer, like `config/initializers/page_title_helper.rb` or someting like that.
176
185
 
177
186
  ## Licence and copyright
178
187
  Copyright (c) 2009 Lukas Westermann (Zurich, Switzerland), released under the MIT license
data/Rakefile CHANGED
@@ -6,14 +6,30 @@ require 'yard'
6
6
  desc 'Default: run unit tests.'
7
7
  task :default => :test
8
8
 
9
+ def version
10
+ defined?(PageTitleHelper) ? PageTitleHelper::VERSION : "0.0.0.error"
11
+ end
12
+
13
+ begin
14
+ require File.join(File.dirname(__FILE__), 'lib', 'page_title_helper')
15
+ rescue
16
+ puts "Oops, there was en error loading page_title_helper.rb"
17
+ end
18
+
9
19
  begin
10
20
  require 'jeweler'
11
21
  Jeweler::Tasks.new do |gemspec|
12
22
  gemspec.name = "page_title_helper"
23
+ gemspec.version = version
13
24
  gemspec.summary = "Simple, internationalized and DRY page titles and headings for rails."
14
25
  gemspec.email = "lukas.westermann@gmail.com"
15
26
  gemspec.homepage = "http://github.com/lwe/page_title_helper"
16
27
  gemspec.authors = ["Lukas Westermann"]
28
+
29
+ gemspec.files.reject! { |f| f =~ /\.gemspec$/ }
30
+
31
+ gemspec.add_dependency('rails', '>= 3.0.0')
32
+ gemspec.add_development_dependency('shoulda')
17
33
  end
18
34
  Jeweler::GemcutterTasks.new
19
35
  rescue LoadError
@@ -32,7 +48,7 @@ YARD::Rake::YardocTask.new(:doc) do |t|
32
48
  t.files = ['lib/**/*.rb']
33
49
  t.options = [
34
50
  "--readme", "README.md",
35
- "--title", "page_title_helper API Documentation"
51
+ "--title", "page_title_helper API v#{version} Documentation"
36
52
  ]
37
53
  end
38
54
 
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'page_title_helper'
@@ -6,15 +6,16 @@
6
6
  # Licence:: MIT-Licence (http://www.opensource.org/licenses/mit-license.php)
7
7
  #
8
8
  # See documentation for +page_title+ for usage examples and more informations.
9
+ require 'active_support'
9
10
 
10
11
  # PageTitleHelper
11
12
  module PageTitleHelper
12
13
 
14
+ # Page title version number
15
+ VERSION = "2.0.0".freeze
16
+
13
17
  # http://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/interpolations.rb
14
- module Interpolations
15
- # Represents the environment which is passed into each interpolation call.
16
- class TitleEnv < ::Struct.new(:options, :view, :controller, :title); end
17
-
18
+ module Interpolations
18
19
  extend self
19
20
 
20
21
  def self.interpolate(pattern, *args)
@@ -26,11 +27,11 @@ module PageTitleHelper
26
27
  end
27
28
 
28
29
  def app(env)
29
- env.options[:app] || I18n.translate(:'app.name', :default => File.basename(RAILS_ROOT).humanize)
30
+ env[:app] || I18n.translate(:'app.name', :default => File.basename(Rails.root).humanize)
30
31
  end
31
32
 
32
33
  def title(env)
33
- env.title
34
+ env[:title]
34
35
  end
35
36
  end
36
37
 
@@ -44,8 +45,7 @@ module PageTitleHelper
44
45
  def self.options
45
46
  @options ||= {
46
47
  :format => :default,
47
- :default => :'app.tagline',
48
- :suffix => :title
48
+ :default => :'app.tagline'
49
49
  }
50
50
  end
51
51
 
@@ -69,36 +69,40 @@ module PageTitleHelper
69
69
 
70
70
  options = PageTitleHelper.options.merge(options || {}).symbolize_keys!
71
71
  options[:format] ||= :title # handles :format => false
72
- options.assert_valid_keys(:app, :suffix, :default, :format)
73
-
74
- # construct basic env to pass around
75
- env = Interpolations::TitleEnv.new(options, self, self.controller)
76
-
72
+ options.assert_valid_keys(:app, :default, :format)
73
+
77
74
  # read page title and split into 'real' title and customized format
78
- env.title = @_page_title || I18n.translate(i18n_template_key(options[:suffix]), :default => options[:default])
79
- env.title, options[:format] = *(env.title << options[:format]) if env.title.is_a?(Array)
80
-
75
+ title = @_page_title || page_title_from_translation(options[:default])
76
+ title, options[:format] = *(title << options[:format]) if title.is_a?(Array)
77
+
81
78
  # handle format aliases
82
- format = options[:format]
79
+ format = options.delete(:format)
83
80
  format = PageTitleHelper.formats[format] if PageTitleHelper.formats.include?(format)
84
81
 
82
+ # construct basic env to pass around
83
+ env = { :title => title, :app => options.delete(:app), :options => options, :view => self }
84
+
85
85
  # interpolate format
86
- Interpolations.interpolate format, env
86
+ Interpolations.interpolate(format, env)
87
87
  end
88
88
 
89
89
  protected
90
90
 
91
- # Find current title key based on currently rendering template.
92
- #
93
- # Access +ActionView+s internal <tt>@_first_render</tt> variable, to access
94
- # template first rendered, this is to help create the DRY-I18n-titles magic,
95
- # and also kind of a hack, because this really seems to be some sort if
96
- # internal variable, that's why it's "abstracted" away as well.
97
- #
98
- # Also ensure that the extensions (like <tt>.html.erb</tt> or
99
- # <tt>.html.haml</tt>) have been stripped of and translated in the sense
100
- # of converting <tt>/</tt> to <tt>.</tt>.
101
- def i18n_template_key(suffix = nil)
102
- @_first_render.template_path.gsub(/\.[^\/]*\Z/, '').tr('/', '.') + (suffix.present? ? ".#{suffix}" : "")
91
+ # Find translation for `controller.action.title` combination, falls back to
92
+ # `controller.title` or supplied default if no title was found.
93
+ def page_title_from_translation(default)
94
+ base = controller.controller_path.tr('/', '.')
95
+ action = params[:action].to_s
96
+
97
+ keys = [:"#{base}.#{action}.title"]
98
+ keys << :"#{base}.new.title" if action == 'create'
99
+ keys << :"#{base}.edit.title" if action == 'update'
100
+ keys << :"#{base}.title"
101
+ keys << default
102
+
103
+ I18n.translate(keys.shift, :default => keys)
103
104
  end
104
- end
105
+ end
106
+
107
+ # include helper methods in ActionView
108
+ ActiveSupport.on_load(:action_view) { include PageTitleHelper }
data/test/en.yml CHANGED
@@ -5,7 +5,17 @@ en:
5
5
  page_title: custom contacts title
6
6
  myhaml:
7
7
  title: this is haml!
8
- placeholder: Displaying {{name}}
8
+ admin:
9
+ account:
10
+ title: Account administration
11
+ show:
12
+ title: Account
13
+ new:
14
+ title: New account
15
+ edit:
16
+ title: Edit account
17
+
18
+ placeholder: "Displaying %{name}"
9
19
  app:
10
20
  tagline: Default
11
21
  other_tagline: Other default
@@ -4,8 +4,7 @@ require 'page_title_helper'
4
4
  class MultipleFormatsTest < ActiveSupport::TestCase
5
5
  context "#page_title supporting multiple formats through arrays" do
6
6
  setup do
7
- @view = ActionView::Base.new
8
- @view.template = ActionView::Template.new "contacts/list.html.erb"
7
+ @view = TestView.new('contacts', 'list')
9
8
  end
10
9
 
11
10
  should "accept an array passed in the page_title block and use the second argument as format" do
@@ -21,8 +20,8 @@ class MultipleFormatsTest < ActiveSupport::TestCase
21
20
  context "#page_title with format aliases" do
22
21
  setup do
23
22
  PageTitleHelper.formats[:myformat] = ":title <-> :app"
24
- @view = ActionView::Base.new
25
- @view.template = ActionView::Template.new "contacts/list.html.erb"
23
+ @view = TestView.new('contacts', 'list')
24
+ @view.template = "contacts/list.html.erb"
26
25
  end
27
26
 
28
27
  should "have a default alias named :app" do
@@ -57,16 +56,16 @@ class MultipleFormatsTest < ActiveSupport::TestCase
57
56
  I18n.load_path = [File.join(File.dirname(__FILE__), "en_wohaapp.yml")]
58
57
  I18n.reload!
59
58
  PageTitleHelper.formats[:promo] = ":app > :title"
60
- @view = ActionView::Base.new
59
+ @view = TestView.new
61
60
  end
62
61
 
63
62
  should "allow to overide format through YAML" do
64
- @view.template = 'pages/features.html.haml'
63
+ @view.controller! 'pages', 'features'
65
64
  assert_equal 'Wohaapp > Feature comparison', @view.page_title
66
65
  end
67
66
 
68
67
  should "handle raw string formats from YAML as well" do
69
- @view.template = 'pages/signup.html.haml'
68
+ @view.controller! 'pages', 'signup'
70
69
  assert_equal 'Sign up for Wohaapp now!', @view.page_title
71
70
  end
72
71
  end
@@ -8,23 +8,22 @@ class PageTitleHelperTest < ActiveSupport::TestCase
8
8
  I18n.load_path = [File.join(File.dirname(__FILE__), 'en.yml')]
9
9
  I18n.reload!
10
10
 
11
- @view = ActionView::Base.new
12
- @view.template_path = "contacts/list.html.erb"
11
+ @view = TestView.new('contacts', 'list')
13
12
  end
14
13
 
15
14
  context "::Interpolations" do
16
15
  should "interpolate :app and :title" do
17
- assert_equal 'Page title helper', PageTitleHelper::Interpolations.app(OpenStruct.new(:options => {}))
18
- assert_equal 'Appname', PageTitleHelper::Interpolations.app(OpenStruct.new(:options => { :app => 'Appname' }))
19
- assert_equal 'untitled', PageTitleHelper::Interpolations.title(OpenStruct.new({:title => 'untitled'}))
16
+ assert_equal 'Page title helper', PageTitleHelper::Interpolations.app({})
17
+ assert_equal 'Appname', PageTitleHelper::Interpolations.app({ :app => 'Appname' })
18
+ assert_equal 'untitled', PageTitleHelper::Interpolations.title({:title => 'untitled'})
20
19
  end
21
20
 
22
21
  should "allow adding custom interpolations" do
23
22
  # extend Interpolations
24
23
  PageTitleHelper.interpolates(:app_reverse) { |env| app(env).reverse.downcase }
25
24
 
26
- assert_equal "anna", PageTitleHelper::Interpolations.app_reverse(OpenStruct.new(:options => { :app => 'Anna' }))
27
- assert_equal "ppa", PageTitleHelper::Interpolations.interpolate(':app_reverse', OpenStruct.new(:options => { :app => 'app' }))
25
+ assert_equal "anna", PageTitleHelper::Interpolations.app_reverse({ :app => 'Anna' })
26
+ assert_equal "ppa", PageTitleHelper::Interpolations.interpolate(':app_reverse', { :app => 'app' })
28
27
  end
29
28
 
30
29
  should "interpolate in correct order, i.e. longest first" do
@@ -32,8 +31,8 @@ class PageTitleHelperTest < ActiveSupport::TestCase
32
31
  PageTitleHelper.interpolates(:foobar_test) { "foobar_test" }
33
32
  PageTitleHelper.interpolates(:title_foobar) { "title_foobar" }
34
33
 
35
- assert_equal "title_foobar / foobar_test / foobar / foobar_x", PageTitleHelper::Interpolations.interpolate(":title_foobar / :foobar_test / :foobar / :foobar_x", nil)
36
- end
34
+ assert_equal "title_foobar / foobar_test / foobar / foobar_x", PageTitleHelper::Interpolations.interpolate(":title_foobar / :foobar_test / :foobar / :foobar_x", {})
35
+ end
37
36
  end
38
37
 
39
38
  context "#page_title (define w/ block)" do
@@ -62,10 +61,17 @@ class PageTitleHelperTest < ActiveSupport::TestCase
62
61
  end
63
62
 
64
63
  context "#page_title (rendering)" do
65
- should "read default title from I18n, based on template" do
64
+ should "read default title from I18n, based on controller/action" do
66
65
  assert_equal 'contacts.list.title - Page title helper', @view.page_title
67
66
  end
68
67
 
68
+ # currently not feasible :(
69
+ # should "if passed in a hash, use it to expand translations" do
70
+ # @view.controller! 'contacts', 'show'
71
+ # assert_equal 'Contact: Bella', @view.page_title!( :name => "Bella" )
72
+ # assert_equal 'Contact: Bella - Page title helper', @view.page_title
73
+ #end
74
+
69
75
  should "only print app name if :format => :app" do
70
76
  assert_equal 'Page title helper', @view.page_title(:format => :app)
71
77
  end
@@ -88,29 +94,47 @@ class PageTitleHelperTest < ActiveSupport::TestCase
88
94
  should "return title if :format => false and when using the DRY-I18n titles" do
89
95
  assert_equal "contacts.list.title", @view.page_title(:format => false)
90
96
  end
91
-
97
+
92
98
  should "render translated :'app.tagline' if no title is available" do
93
- @view.template_path = 'view/does/not_exist.html.erb'
99
+ @view.controller! 'view/does', 'not_exist'
94
100
  assert_equal "Default - Page title helper", @view.page_title
95
101
  end
96
102
 
97
- should "render custom 'default' string, if title is not available" do
98
- @view.template_path = 'view/does/not_exist.html.erb'
99
- assert_equal 'Some default - Page title helper', @view.page_title(:default => 'Some default')
103
+ should "render use controller.title as first fallback, if no title exists" do
104
+ @view.controller! 'admin/account', 'index'
105
+ assert_equal 'Account administration - Page title helper', @view.page_title(:default => 'Other default')
100
106
  end
107
+
108
+ should "not fallback to controller.title if controller.action.title exists" do
109
+ @view.controller! 'admin/account', 'show'
110
+ assert_equal 'Account - Page title helper', @view.page_title(:default => 'Other default')
111
+ end
101
112
 
102
- should "render custom default translation, if title is not available" do
103
- @view.template_path = 'view/does/not_exist.html.erb'
104
- assert_equal 'Other default - Page title helper', @view.page_title(:default => :'app.other_tagline')
113
+ should 'fallback to controller.new.title if create has no title' do
114
+ @view.controller! 'admin/account', 'create'
115
+ assert_equal 'New account - Page title helper', @view.page_title(:default => 'Other default')
116
+ end
117
+
118
+ should 'fallback to controller.edit.title if update has no title' do
119
+ @view.controller! 'admin/account', 'update'
120
+ assert_equal 'Edit account - Page title helper', @view.page_title(:default => 'Other default')
121
+ end
122
+
123
+ should "render custom 'default' string, if title is not available nor controller.title" do
124
+ @view.controller! 'view/does', 'not_exist'
125
+ assert_equal 'Some default - Page title helper', @view.page_title(:default => 'Some default')
105
126
  end
106
127
 
107
- should "render auto-title using custom suffix 'page_title'" do
108
- assert_equal 'custom contacts title - Page title helper', @view.page_title(:suffix => :page_title)
128
+ should "render custom default translation, if title is not available nor controller.title" do
129
+ @view.controller! 'view/does', 'not_exist'
130
+ assert_equal 'Other default - Page title helper', @view.page_title(:default => :'app.other_tagline')
109
131
  end
110
-
111
- should "work with other template engines, like HAML" do
112
- @view.template_path = 'contacts/myhaml.html.haml'
113
- assert_equal 'this is haml! - Page title helper', @view.page_title
132
+ end
133
+
134
+ context "README.md" do
135
+ should "interpolate :controller" do
136
+ PageTitleHelper.interpolates(:controller) { |env| env[:view].controller.controller_name.humanize }
137
+ assert_equal "contacts.list.title - Test", @view.page_title(:format => ":title - :controller")
114
138
  end
115
139
  end
116
140
  end
data/test/test_helper.rb CHANGED
@@ -1,23 +1,34 @@
1
1
  require 'rubygems'
2
2
  require 'active_support'
3
3
  require 'action_view'
4
- require File.join(File.dirname(__FILE__), '..', 'rails', 'init')
4
+ require File.join(File.dirname(__FILE__), '..', 'init')
5
5
 
6
6
  unless defined?(IRB)
7
7
  require 'active_support/test_case'
8
8
  require 'shoulda'
9
- require 'rr'
10
- # enable RR to use all the mocking magic, uweee!
11
- Test::Unit::TestCase.send(:include, RR::Adapters::TestUnit)
12
9
  end
13
10
 
14
- ROOT = File.expand_path File.dirname(File.dirname(__FILE__))
15
- RAILS_ROOT = '/this/is/just/for/testing/page_title_helper'
16
- RAILS_ENV = 'test'
11
+ # fake global rails object
12
+ Rails = Object.new
13
+ Rails.class_eval do
14
+ def root; @pathname ||= Pathname.new('/this/is/just/for/testing/page_title_helper') end
15
+ def env; "test" end
16
+ end
17
17
 
18
- class ActionView::Base
19
- def template=(template)
20
- @_first_render = template.respond_to?(:template_path) ? template : ActionView::Template.new(template)
18
+ # Mock ActionView a bit to allow easy (fake) template assignment
19
+ class TestView < ActionView::Base
20
+ def initialize(controller_path = nil, action = nil)
21
+ @controller = ActionView::TestCase::TestController.new
22
+ @controller.controller_path = controller_path
23
+ self.params[:action] = action if action
24
+ end
25
+
26
+ def controller!(controller_path, action)
27
+ @controller.controller_path = controller_path
28
+ self.params[:action] = action
29
+ end
30
+
31
+ def controller
32
+ @controller
21
33
  end
22
- alias_method :template_path=, :template=
23
34
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: page_title_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ hash: 15
5
+ prerelease: false
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - 0
10
+ version: 2.0.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Lukas Westermann
@@ -9,10 +15,39 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-11-26 00:00:00 +01:00
18
+ date: 2010-09-14 00:00:00 +02:00
13
19
  default_executable:
14
- dependencies: []
15
-
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rails
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 3
32
+ - 0
33
+ - 0
34
+ version: 3.0.0
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: shoulda
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :development
50
+ version_requirements: *id002
16
51
  description:
17
52
  email: lukas.westermann@gmail.com
18
53
  executables: []
@@ -27,9 +62,8 @@ files:
27
62
  - LICENSE
28
63
  - README.md
29
64
  - Rakefile
30
- - VERSION.yml
65
+ - init.rb
31
66
  - lib/page_title_helper.rb
32
- - rails/init.rb
33
67
  - test/en.yml
34
68
  - test/en_wohaapp.yml
35
69
  - test/multiple_formats_test.rb
@@ -45,21 +79,27 @@ rdoc_options:
45
79
  require_paths:
46
80
  - lib
47
81
  required_ruby_version: !ruby/object:Gem::Requirement
82
+ none: false
48
83
  requirements:
49
84
  - - ">="
50
85
  - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
51
89
  version: "0"
52
- version:
53
90
  required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
54
92
  requirements:
55
93
  - - ">="
56
94
  - !ruby/object:Gem::Version
95
+ hash: 3
96
+ segments:
97
+ - 0
57
98
  version: "0"
58
- version:
59
99
  requirements: []
60
100
 
61
101
  rubyforge_project:
62
- rubygems_version: 1.3.5
102
+ rubygems_version: 1.3.7
63
103
  signing_key:
64
104
  specification_version: 3
65
105
  summary: Simple, internationalized and DRY page titles and headings for rails.
data/VERSION.yml DELETED
@@ -1,4 +0,0 @@
1
- ---
2
- :major: 1
3
- :minor: 0
4
- :patch: 1
data/rails/init.rb DELETED
@@ -1,4 +0,0 @@
1
- require 'page_title_helper'
2
-
3
- # include helper methods in ActionView
4
- ActionView::Base.send(:include, PageTitleHelper) if defined?(ActionView)