smart_titles 0.3.2 → 0.4.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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZmM2MjRlNTYzMzZhNDdmM2ZkNmIzNDQ3MTExN2I1NzQ5ZDU0YjYwYw==
5
+ data.tar.gz: !binary |-
6
+ NzM4Y2Q3YjRmNzI0ZWM3NDljYjcwYjVjYTkwNTE5NTUzOGViN2M5Ng==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YzBlNGY3YzgzMTg2YTYwM2JmYTUzMzI1MGIzNWViZjVkMWYyM2ZiODkxNmZi
10
+ MWNhMjY3Y2M0Yzk4MmVjOTMyYzhhYzBjNjE0ZTdjNWE1MTRiYTRkODUzM2Q5
11
+ ZjVhMTc5NDdhNzkzY2NkMTc2NTdmMTQwYjVkM2UyNmM2MDBmYTc=
12
+ data.tar.gz: !binary |-
13
+ MTM2ODMyZDU1NzY3ZDVkODNiOTEzODg0YzY1ZTYxOWFlY2MxOTdiMDRhMmY1
14
+ YjgxMDcwYWVmMzNmOTVlMTUxOTZjNTFjN2RiNWUyYTQ2MmZmNTNlM2EyNWI4
15
+ ZTQ0Y2QwMzQ3MzhlNmViYTAzMDA5NDFkNmI5N2FkYzA4ODI4Y2U=
data/Readme.md CHANGED
@@ -12,8 +12,7 @@ If you don't want to display it inside the page simply remove an equality sign:
12
12
  <% title "Title for a browser window" %>
13
13
  <h1>Different title for the page</h1>
14
14
 
15
- This gem is under development and [therefore](http://semver.org/) API can change between minor versions until the 1.0.0.
16
- It works only with Rails 3.1 and higher.
15
+ The gem uses [Semantic Versioning](http://semver.org/). It works with Rails 3.1 and higher.
17
16
 
18
17
  Installation
19
18
  ---
@@ -27,7 +26,7 @@ And run:
27
26
 
28
27
  Integration
29
28
  ---
30
- You have to insert the following code inside the `<title>` tag in your layout:
29
+ Insert `head_title` inside the `<title>` tag in your layout:
31
30
 
32
31
  <title><%= head_title "Default title" %></title>
33
32
 
@@ -35,10 +34,12 @@ The default title is displayed only if you haven't specified title in your view.
35
34
 
36
35
  With Internationalization
37
36
  ---
38
- If you are using I18n in your Rails application static titles are specified in the locale file:
37
+ It is easy to translate titles using built-in Rails I18n.
39
38
 
40
39
  en:
41
- title: Default title
40
+ layouts:
41
+ application:
42
+ title: Default title
42
43
  pages:
43
44
  index:
44
45
  title: All pages
@@ -49,7 +50,11 @@ And then you should just call `title` without any arguments.
49
50
 
50
51
  <%= title %>
51
52
 
52
- Note that you _have to call it_ even if you don't output it.
53
+ The same goes for `head_title`:
54
+
55
+ <title><%= head_title %></title>
56
+
57
+ Note that you _have to call `title`_ even if you don't output it.
53
58
 
54
59
  <% title %>
55
60
 
@@ -57,17 +62,15 @@ Dynamic titles are set as usual:
57
62
 
58
63
  <%= title @page.title %>
59
64
 
60
- "Default title" will be only used by `head_title` if you call it with no arguments and there will be no title set by the current page.
61
-
62
- <title><%= head_title %></title>
63
-
64
65
  Title Template
65
66
  ---
66
- If you want to add your website name to all of your titles just add :title_template translation
67
+ If you want to add your website name to all of your titles just add title_template translation
67
68
 
68
69
  en:
69
- title: The Coolest Store
70
- title_template: %{title} from the Coolest Store
70
+ layouts:
71
+ application:
72
+ title: The Coolest Store
73
+ title_template: %{title} from the Coolest Store
71
74
  products:
72
75
  index:
73
76
  title: Products
@@ -76,6 +79,20 @@ And now products#index page will have "Products from the Coolest Store" browser'
76
79
 
77
80
  Changelog
78
81
  ---
82
+
83
+ ### 0.4.0
84
+ The website title and template translations can now be scoped by layout. Example:
85
+
86
+ layouts:
87
+ application:
88
+ title: My Website
89
+ title_template: "%{title} - My Website"
90
+ admin:
91
+ title: Web Admin
92
+
93
+ Also, this prevents h1 from showing default title when translation is missing if you use cascading I18n backend.
94
+ The old-style global translations still do work.
95
+
79
96
  ### 0.3.2
80
97
  Page title is no longer double-escaped.
81
98
 
@@ -1,6 +1,4 @@
1
1
  module SmartTitles
2
- MISSING_TRANSLATION = Object.new
3
-
4
2
  module Helper
5
3
  # <title><%= head_title %></title>
6
4
  # Will return title if it was set for the current page.
@@ -17,9 +15,10 @@ module SmartTitles
17
15
  # head_title # => The Coolest Store
18
16
  # title "Drinks" # => <h1>Drinks</h1>
19
17
  # head_title # => Drinks from the Coolest Store
20
- def head_title(default_title = t(:title))
21
- if title = page_title
22
- t(:title_template, title: title, default: title)
18
+ def head_title(default_title = t('.title', default: :title))
19
+ if content_for?(:page_title)
20
+ title = content_for(:page_title)
21
+ t('.title_template', title: title, default: [:title_template, title])
23
22
  else
24
23
  default_title
25
24
  end
@@ -28,24 +27,23 @@ module SmartTitles
28
27
  # Convinient helper method that will:
29
28
  # * Set custom title for the current page if it is passed. Otherwise the title will be automatically set
30
29
  # * Return the title passed or looked up from locale wrapped into h1 tag
31
- def title(custom_title = nil)
32
- title = custom_title || page_title
33
- title &&= title.html_safe
34
- provide(:page_title, title)
35
- content_tag(:h1, page_title) if page_title
36
- end
37
-
38
- private
39
-
40
- # This is a page title that was set by the #title helper method
41
- # It defaults to ".title" translation
42
- def page_title
43
- if content_for?(:page_title)
44
- content_for(:page_title)
30
+ def title(custom_title_or_options = nil)
31
+ case custom_title_or_options
32
+ when Hash
33
+ options = custom_title_or_options
45
34
  else
46
- translation = t('.title', default: MISSING_TRANSLATION)
47
- translation unless translation.equal? MISSING_TRANSLATION
35
+ options = {}
36
+ custom_title = custom_title_or_options
48
37
  end
38
+
39
+ title = custom_title
40
+ title ||= begin t('.title', options.merge(raise: true))
41
+ rescue I18n::MissingTranslationData
42
+ end
43
+
44
+ title &&= title.html_safe
45
+ provide(:page_title, title)
46
+ content_tag(:h1, title) if title
49
47
  end
50
48
  end
51
49
  end
@@ -1,3 +1,3 @@
1
1
  module SmartTitles
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
data/smart_titles.gemspec CHANGED
@@ -14,10 +14,7 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.add_dependency 'activesupport'
16
16
  s.add_dependency 'actionpack'
17
- s.add_development_dependency 'rake'
18
17
 
19
18
  s.files = `git ls-files`.split("\n")
20
19
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
- s.require_paths = ["lib"]
23
20
  end
@@ -17,19 +17,24 @@ class SmartTitlesHelperTest < ActionView::TestCase
17
17
 
18
18
 
19
19
  def test_custom_title
20
- store_global_title
20
+ store_layout_title
21
21
  store_page_title
22
22
  assert_equal "<h1>Hi</h1>", title("Hi")
23
23
  end
24
24
 
25
25
  def test_translated_title
26
- store_global_title
26
+ store_layout_title
27
27
  store_page_title
28
28
  assert_equal "<h1>New post</h1>", title
29
29
  end
30
30
 
31
+ def test_translated_title_with_options
32
+ store_translations posts: { new: { title: "New post - %{category}" } }
33
+ assert_equal "<h1>New post - News</h1>", title(category: "News")
34
+ end
35
+
31
36
  def test_no_page_title
32
- store_global_title
37
+ store_layout_title
33
38
  assert_nil title
34
39
  end
35
40
 
@@ -39,21 +44,21 @@ class SmartTitlesHelperTest < ActionView::TestCase
39
44
 
40
45
 
41
46
  def test_head_title_with_custom_title
42
- store_global_title
47
+ store_layout_title
43
48
  store_page_title
44
49
  title("Hi")
45
50
  assert_equal "Hi", head_title
46
51
  end
47
52
 
48
53
  def test_head_title_with_translated_title
49
- store_global_title
54
+ store_layout_title
50
55
  store_page_title
51
56
  title
52
57
  assert_equal "New post", head_title
53
58
  end
54
59
 
55
60
  def test_head_title_with_translated_global_title
56
- store_global_title
61
+ store_layout_title
57
62
  assert_equal "My Website", head_title
58
63
  end
59
64
 
@@ -73,7 +78,7 @@ class SmartTitlesHelperTest < ActionView::TestCase
73
78
 
74
79
 
75
80
  def test_head_title_with_template_and_translated_titles
76
- store_global_title
81
+ store_layout_title
77
82
  store_page_title
78
83
  store_title_template
79
84
  title
@@ -81,7 +86,7 @@ class SmartTitlesHelperTest < ActionView::TestCase
81
86
  end
82
87
 
83
88
  def test_head_title_with_template_and_custom_title
84
- store_global_title
89
+ store_layout_title
85
90
  store_page_title
86
91
  store_title_template
87
92
  title("Hi")
@@ -89,11 +94,20 @@ class SmartTitlesHelperTest < ActionView::TestCase
89
94
  end
90
95
 
91
96
  def test_head_title_with_template_and_translated_title
92
- store_global_title
97
+ store_layout_title
93
98
  store_title_template
94
99
  assert_equal "My Website", head_title
95
100
  end
96
101
 
102
+ def test_head_title_old
103
+ store_old_global_title
104
+ assert_equal "My Website", head_title
105
+
106
+ store_page_title
107
+ title
108
+ assert_equal "d New post b", head_title
109
+ end
110
+
97
111
 
98
112
  def test_head_title_template_is_escaped
99
113
  store_translations title_template: '"%{title}"'
@@ -145,11 +159,16 @@ private
145
159
  store_page_title
146
160
  end
147
161
 
148
- def store_global_title
149
- store_translations title: "My Website"
162
+ def store_layout_title
163
+ store_translations layouts: { application: { title: "My Website" } }
150
164
  end
151
165
 
152
166
  def store_title_template
167
+ store_translations layouts: { application: { title_template: "d %{title} b" } }
168
+ end
169
+
170
+ def store_old_global_title
171
+ store_translations title: "My Website"
153
172
  store_translations title_template: "d %{title} b"
154
173
  end
155
174
 
metadata CHANGED
@@ -1,64 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_titles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
5
- prerelease:
4
+ version: 0.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Semyon Perepelitsa
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-20 00:00:00.000000000 Z
11
+ date: 2013-05-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: activesupport
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
14
  prerelease: false
15
+ name: activesupport
24
16
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
17
  requirements:
27
18
  - - ! '>='
28
19
  - !ruby/object:Gem::Version
29
20
  version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: actionpack
32
21
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
22
  requirements:
35
23
  - - ! '>='
36
24
  - !ruby/object:Gem::Version
37
25
  version: '0'
38
26
  type: :runtime
27
+ - !ruby/object:Gem::Dependency
39
28
  prerelease: false
29
+ name: actionpack
40
30
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
31
  requirements:
43
32
  - - ! '>='
44
33
  - !ruby/object:Gem::Version
45
34
  version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rake
48
35
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
36
  requirements:
59
37
  - - ! '>='
60
38
  - !ruby/object:Gem::Version
61
39
  version: '0'
40
+ type: :runtime
62
41
  description:
63
42
  email: sema@sema.in
64
43
  executables: []
@@ -82,29 +61,27 @@ files:
82
61
  homepage: http://github.com/semaperepelitsa/smart_titles
83
62
  licenses:
84
63
  - MIT
64
+ metadata: {}
85
65
  post_install_message:
86
66
  rdoc_options: []
87
67
  require_paths:
88
68
  - lib
89
69
  required_ruby_version: !ruby/object:Gem::Requirement
90
- none: false
91
70
  requirements:
92
71
  - - ! '>='
93
72
  - !ruby/object:Gem::Version
94
73
  version: '0'
95
74
  required_rubygems_version: !ruby/object:Gem::Requirement
96
- none: false
97
75
  requirements:
98
76
  - - ! '>='
99
77
  - !ruby/object:Gem::Version
100
78
  version: '0'
101
79
  requirements: []
102
80
  rubyforge_project:
103
- rubygems_version: 1.8.24
81
+ rubygems_version: 2.0.3
104
82
  signing_key:
105
- specification_version: 3
83
+ specification_version: 4
106
84
  summary: Really convenient way to set up page titles in a Rails application.
107
85
  test_files:
108
86
  - test/smart_titles/helper_test.rb
109
87
  - test/test_helper.rb
110
- has_rdoc: