title 0.0.3 → 0.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 03f9667e1be4fe850bb8d230b5a564eca382c5e5
4
- data.tar.gz: 6151b9dd9a956ef25ffd803f5d65613480c72148
2
+ SHA256:
3
+ metadata.gz: a5223d4bc45bb6bde8e268cb533e675a4a77628b85518151e10d1033f20ef341
4
+ data.tar.gz: 9fc368e00d9242fad23bba51657b34e46c54b436c9cc48a54de4abd8c304ad3a
5
5
  SHA512:
6
- metadata.gz: 22c49852733852b6a395f569f65965db25d04607784eee8f2788c5eeab2a3a58f21eac4b016413165f6cebb03a2461a7b31b3c81d07ce173f0722456831b80c2
7
- data.tar.gz: f23398d952d9941c116badc046e8a6003b71837637039b32de85abdabca4dc7dc62a90f963865b5772191a4e259d20b63b0147345a6d22006acd28a5f9b28010
6
+ metadata.gz: f1ea8d9d9b5eb0cfc566a497e06d09e3bfcfa7cd8a617134c7da91bb84e67b3bf6c57bcdd1b2654a52f2dcb9eea34e7e8b358eee0cd7e26131ef5b8cf8b22052
7
+ data.tar.gz: 1546ca41e1d44809a45685d846f6de98c42aea2a510218e3aae726a3508fa71209c0fce39006d3cec5910940788aeafc886dcef79405532f0628c142c9b01f3f
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Title
2
2
 
3
+ [![Build Status](https://travis-ci.org/calebthompson/title.svg)](https://travis-ci.org/calebthompson/title)
4
+ [![Code Climate](https://codeclimate.com/github/calebthompson/title.svg)](https://codeclimate.com/github/calebthompson/title)
5
+ [![Coverage Status](https://coveralls.io/repos/calebthompson/title/badge.svg)](https://coveralls.io/r/calebthompson/title)
6
+
3
7
  Translations for \<title\>s!
4
8
 
5
9
  ## Usage
@@ -9,6 +13,8 @@ Add to your translations:
9
13
  ```yaml
10
14
  en:
11
15
  titles:
16
+ # titles.application defaults to the sigficant portion of
17
+ # AppName::Application, which would be:
12
18
  application: AppName
13
19
  dashboards:
14
20
  show: Dashboard
@@ -31,6 +37,19 @@ def to_s
31
37
  end
32
38
  ```
33
39
 
40
+ You can pass additional values to the `#title` helper, which can be referenced
41
+ in your translations:
42
+
43
+ ```erb
44
+ <title><%= title(user_name: current_user.name) %></title>
45
+ ```
46
+
47
+ ```yaml
48
+ en:
49
+ titles:
50
+ application: '%{user_name} - AppName'
51
+ ```
52
+
34
53
  ## Acknowledgement
35
54
 
36
55
  Though the idea of translating titles was arrived at seperately, [Brandon
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:rspec)
5
+
6
+ task default: :rspec
7
+ task release: :rspec
@@ -1,20 +1,21 @@
1
1
  module Title
2
2
  module TitleHelper
3
- def title
4
- PageTitle.new(controller_path, action_name, controller.view_assigns.symbolize_keys).to_s
3
+ def title(additional_context = {})
4
+ context = controller.view_assigns.merge(additional_context).symbolize_keys
5
+ PageTitle.new(controller_path, action_name, context).to_s
5
6
  end
6
7
 
7
8
  class PageTitle
8
9
  def initialize(controller_path, action_name, context)
9
10
  @controller_path = controller_path
10
- @action_name = action_name
11
+ @action_name = adjusted_action_name(action_name)
11
12
  @context = context
12
13
  end
13
14
 
14
15
  def to_s
15
16
  I18n.t(
16
17
  [:titles, controller_name, action_name].join('.'),
17
- context.merge(default: [application_title, guess_title])
18
+ **safe_context.merge(default: defaults)
18
19
  )
19
20
  end
20
21
 
@@ -30,9 +31,38 @@ module Title
30
31
  Rails.application.class.to_s.split('::').first
31
32
  end
32
33
 
34
+ def defaults
35
+ default_keys_in_lookup_path + [application_title, guess_title]
36
+ end
37
+
33
38
  def controller_name
34
39
  controller_path.gsub('/', '.')
35
40
  end
41
+
42
+ def default_keys_in_lookup_path
43
+ defaults = []
44
+ lookup_path = controller_name.split('.')
45
+ while lookup_path.length > 0
46
+ defaults << ['titles', *lookup_path, 'default'].join('.').to_sym
47
+ lookup_path.pop
48
+ end
49
+ defaults.reverse
50
+ end
51
+
52
+ def adjusted_action_name(action_name)
53
+ case action_name
54
+ when 'create'
55
+ 'new'
56
+ when 'update'
57
+ 'edit'
58
+ else
59
+ action_name
60
+ end
61
+ end
62
+
63
+ def safe_context
64
+ context.except(*I18n::RESERVED_KEYS)
65
+ end
36
66
  end
37
67
  end
38
68
  end
@@ -1,3 +1,6 @@
1
+ app = File.expand_path('../../app', __FILE__)
2
+ $LOAD_PATH.unshift(app) unless $LOAD_PATH.include?(app)
3
+
1
4
  require 'title/version'
2
5
  require 'rails/engine'
3
6
  require 'title/engine'
@@ -1,3 +1,3 @@
1
1
  module Title
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.8'
3
3
  end
@@ -1,4 +1,6 @@
1
- require 'rubygems'
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
2
4
  require 'title'
3
5
 
4
6
  describe Title::TitleHelper do
@@ -15,6 +17,14 @@ describe Title::TitleHelper do
15
17
  expect(helper.title).to eq('Not Dummy')
16
18
  end
17
19
 
20
+ it 'uses a :default key at an arbitrary point in the lookup path' do
21
+ stub_rails
22
+ stub_controller_and_action('engine/users', :show)
23
+ load_translations(engine: { default: 'Engine name' })
24
+
25
+ expect(helper.title).to eq 'Engine name'
26
+ end
27
+
18
28
  it 'matches controller/action to translation and uses that title' do
19
29
  stub_rails
20
30
  stub_controller_and_action(:dashboards, :show)
@@ -27,20 +37,39 @@ describe Title::TitleHelper do
27
37
  stub_rails
28
38
  stub_controller_and_action(:users, :show)
29
39
  load_translations(users: { show: '%{name}' })
30
- helper.stub_chain(:controller, :view_assigns, :symbolize_keys).and_return({ name: 'Caleb' })
40
+ allow(helper).to receive_message_chain(:controller, :view_assigns).and_return('name' => 'Caleb')
31
41
 
32
42
  expect(helper.title).to eq('Caleb')
33
43
  end
34
44
 
45
+ it 'can accept a hash of extra context in addition to the view assigns' do
46
+ stub_rails
47
+ stub_controller_and_action(:users, :show)
48
+ load_translations(users: { show: '%{greeting} %{name}' })
49
+ allow(helper).to receive_message_chain(:controller, :view_assigns).and_return('name' => 'Caleb')
50
+
51
+ expect(helper.title(greeting: 'Hello')).to eq('Hello Caleb')
52
+ end
53
+
54
+ it 'makes context safe to be passed as interpolation options' do
55
+ stub_rails
56
+ stub_controller_and_action(:users, :show)
57
+ load_translations(users: { show: 'User' })
58
+ allow(helper).to receive_message_chain(:controller, :view_assigns).and_return('scope' => 'Foo')
59
+
60
+ expect(helper.title).to eq('User')
61
+ end
62
+
35
63
  def stub_rails
36
- helper.stub(:controller_path).and_return('dashboards')
37
- helper.stub(:action_name)
38
- helper.stub_chain(:controller, :view_assigns, :symbolize_keys).and_return({})
39
- Rails.stub_chain(:application, :class).and_return('Dummy::Application')
64
+ allow(helper).to receive(:controller_path).and_return('dashboards')
65
+ allow(helper).to receive(:action_name)
66
+ allow(helper).to receive_message_chain(:controller, :view_assigns).and_return({})
67
+ allow(Rails).to receive_message_chain(:application, :class).and_return('Dummy::Application')
40
68
  end
41
69
 
42
70
  def stub_controller_and_action(controller, action)
43
- helper.stub(controller_path: controller.to_s, action_name: action.to_s)
71
+ allow(helper).to receive(:controller_path).and_return(controller.to_s)
72
+ allow(helper).to receive(:action_name).and_return(action.to_s)
44
73
  end
45
74
 
46
75
  def helper
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency 'bundler', '~> 1.3'
22
22
  spec.add_development_dependency 'rake'
23
23
  spec.add_development_dependency 'rspec'
24
+ spec.add_development_dependency 'coveralls'
25
+ spec.add_development_dependency 'pry'
24
26
 
25
27
  spec.add_dependency 'rails', '>= 3.1'
26
28
  spec.add_dependency 'i18n'
metadata CHANGED
@@ -1,83 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: title
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Caleb Thompson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-11 00:00:00.000000000 Z
11
+ date: 2020-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coveralls
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rails
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - '>='
87
+ - - ">="
60
88
  - !ruby/object:Gem::Version
61
89
  version: '3.1'
62
90
  type: :runtime
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - '>='
94
+ - - ">="
67
95
  - !ruby/object:Gem::Version
68
96
  version: '3.1'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: i18n
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - '>='
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
103
  version: '0'
76
104
  type: :runtime
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - '>='
108
+ - - ">="
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  description: Abuses I18n to set HTML <title>s
@@ -87,7 +115,7 @@ executables: []
87
115
  extensions: []
88
116
  extra_rdoc_files: []
89
117
  files:
90
- - .gitignore
118
+ - ".gitignore"
91
119
  - CONTRIBUTING.md
92
120
  - Gemfile
93
121
  - LICENSE.txt
@@ -110,17 +138,16 @@ require_paths:
110
138
  - app
111
139
  required_ruby_version: !ruby/object:Gem::Requirement
112
140
  requirements:
113
- - - '>='
141
+ - - ">="
114
142
  - !ruby/object:Gem::Version
115
143
  version: '0'
116
144
  required_rubygems_version: !ruby/object:Gem::Requirement
117
145
  requirements:
118
- - - '>='
146
+ - - ">="
119
147
  - !ruby/object:Gem::Version
120
148
  version: '0'
121
149
  requirements: []
122
- rubyforge_project:
123
- rubygems_version: 2.0.3
150
+ rubygems_version: 3.1.2
124
151
  signing_key:
125
152
  specification_version: 4
126
153
  summary: I18n your <title>s