jt-rails-meta 1.0.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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 28d40d524f437254f790d03e11d624832e9aca78
4
+ data.tar.gz: 58ee97c8f8bea3f9524beaa5596335e11a210170
5
+ SHA512:
6
+ metadata.gz: 1c8a9eb16ad7119f6191432e5b0da4573efad1c904a33b7d739632f59db1bf0e5ec1c930357e8174fdadc7d6c14f6009a9fe064f1825551e40d97985625629be
7
+ data.tar.gz: eca6440a137c5e9841e4e7c1c5e1d3c72bf07ec4dde447f5d2ac16080752166abbb831fd6df0ab3029c56fc6b8b45c2c771c342690cfd1786f09a38ec3f953b4
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2015 Jonathan Tribouharet
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,105 @@
1
+ # JTRailsMeta
2
+
3
+ JTRailsMeta help you to manage HTML meta tags like title, description, keywords used in Search Engine Optimization (SEO).
4
+
5
+ ## Installation
6
+
7
+ JTRailsMeta is distributed as a gem, which is how it should be used in your app.
8
+
9
+ Include the gem in your Gemfile:
10
+
11
+ gem 'jt-rails-meta', '~> 1.0'
12
+
13
+ Create a `meta.yml` file for the translation:
14
+
15
+ rails g rails_meta:install
16
+
17
+ ## Usage
18
+
19
+ ### Basic usage
20
+
21
+ Include `JTRailsMeta` in your `ApplicationController`:
22
+
23
+ ```ruby
24
+ class ApplicationController < ActionController::Base
25
+ include JTRailsMeta
26
+ ...
27
+ end
28
+ ```
29
+
30
+ Call `meta_tags` in your layout:
31
+
32
+ ```html
33
+ <!DOCTYPE html>
34
+ <head>
35
+ <meta charset="UTF-8" />
36
+ <%= meta_tags %>
37
+ </head>
38
+ <body>
39
+ </body>
40
+ ```
41
+
42
+ You have also access to `meta_title`, `meta_description`, `meta_keywords` methods.
43
+
44
+ ### Pass parameters to tags
45
+
46
+ In your controller:
47
+
48
+ ```ruby
49
+ class PostsController < ApplicationController
50
+ def show
51
+ @post = Post.find(params[:id])
52
+
53
+ set_meta_title({ title: @post.title })
54
+ set_meta_description({ title: @post.title, author: @post.author })
55
+ end
56
+ end
57
+ ```
58
+
59
+ In your `meta.yml` file:
60
+
61
+ ```yaml
62
+ en:
63
+ meta:
64
+ posts:
65
+ show:
66
+ title: "%{title}"
67
+ description: "Post about %{title} by %{author}"
68
+ ```
69
+
70
+ ### Add more tags
71
+
72
+ You can add more tags with `add_meta_extra` and `add_meta_link` methods:
73
+
74
+ ```ruby
75
+ add_meta_extra 'robots' => 'noindex,nofollow'
76
+ add_meta_extra {
77
+ twitter: {
78
+ site: '@mywebsite',
79
+ domain: 'mywebsite.com',
80
+ title: meta_title,
81
+ description: meta_description,
82
+ image: [
83
+ http://mywebsite.com/image_1.jpg'),
84
+ http://mywebsite.com/image_2.jpg')
85
+ ]
86
+ }
87
+ }
88
+
89
+ add_meta_link 'author', 'https://github.com/jonathantribouharet'
90
+ add_meta_link 'publisher', 'https://github.com/jonathantribouharet'
91
+ ```
92
+
93
+ There is some methods already created using `add_meta_link` method:
94
+ - `add_meta_link_canonical` which is equivalent to `add_meta_link 'canonical'`
95
+ - `add_meta_link_author` which is equivalent to `add_meta_link 'author'`
96
+ - `add_meta_link_publisher` which is equivalent to `add_meta_link 'publisher'`
97
+ - `add_meta_link_alternate` which is equivalent to `add_meta_link 'alternate'`
98
+
99
+ ## Author
100
+
101
+ - [Jonathan Tribouharet](https://github.com/jonathantribouharet) ([@johntribouharet](https://twitter.com/johntribouharet))
102
+
103
+ ## License
104
+
105
+ JTRailsMeta is released under the MIT license. See the LICENSE file for more info.
@@ -0,0 +1,13 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'jt-rails-meta'
3
+ s.summary = "Manage HTML meta tags for Ruby On Rails"
4
+ s.description = "JTRailsMeta help you to manage HTML meta tags like title, description, keywords used in Search Engine Optimization (SEO)."
5
+ s.homepage = 'https://github.com/jonathantribouharet/jt-rails-meta'
6
+ s.version = '1.0.0'
7
+ s.files = `git ls-files`.split("\n")
8
+ s.require_paths = ['lib']
9
+ s.authors = ['Jonathan TRIBOUHARET']
10
+ s.email = 'jonathan.tribouharet@gmail.com'
11
+ s.license = 'MIT'
12
+ s.platform = Gem::Platform::RUBY
13
+ end
@@ -0,0 +1,3 @@
1
+ Create a default locale file to your Rails App.
2
+
3
+ rails g rails_meta:install
@@ -0,0 +1,11 @@
1
+ module RailsMeta
2
+
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../templates", __FILE__)
5
+
6
+ def create_initializer_file
7
+ copy_file "meta.yml", "config/locales/meta.yml"
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,21 @@
1
+ en:
2
+ meta:
3
+
4
+ # in general you use either prefx or suffix
5
+ # prefix or suffix are not applied on default title
6
+ prefix: "My Website - " # Optional
7
+ suffix: " - My Website" # Optional
8
+
9
+ # default meta used if no meta are found for a page
10
+ default:
11
+ title: My WebSite
12
+ description: My super website is about something magnificent
13
+ keywords: "website, some keywords"
14
+
15
+ # Exemple of meta for the controller home and the action index
16
+ # title, description and keywords are optional
17
+ home:
18
+ index:
19
+ title: Home
20
+ description: Description of homepage
21
+ keywords: home
@@ -0,0 +1,154 @@
1
+ module JTRailsMeta
2
+ extend ActiveSupport::Concern
3
+
4
+ include ActionView::Helpers::TagHelper
5
+
6
+ included do
7
+ before_action :create_meta_hash
8
+
9
+ helper_method :meta_tags, :meta_title, :meta_description, :meta_keywords
10
+ end
11
+
12
+ # Generate HTML tags title, description, keywords and others meta
13
+ def meta_tags
14
+ output = ""
15
+
16
+ output += content_tag 'title', meta_title
17
+ output += "\n"
18
+ output += tag 'meta', name: 'description', content: meta_description
19
+ output += "\n"
20
+ output += tag 'meta', name: 'keywords', content: meta_keywords
21
+ output += "\n"
22
+
23
+ for link in @meta[:links]
24
+ output += tag 'link', link[:options]
25
+ output += "\n"
26
+ end
27
+
28
+ for extra_params in @meta[:extra]
29
+ output += tag 'meta', name: extra_params[:name], content: extra_params[:content]
30
+ output += "\n"
31
+ end
32
+
33
+ output.html_safe
34
+ end
35
+
36
+ # Content of meta title
37
+ def meta_title
38
+ @meta[:title] ||= set_meta_title
39
+ end
40
+
41
+ # Content of meta description
42
+ def meta_description
43
+ @meta[:description] ||= set_meta_description
44
+ end
45
+
46
+ # Content of meta keywords
47
+ def meta_keywords
48
+ @meta[:keywords] ||= set_meta_keywords
49
+ end
50
+
51
+ # Generate meta title
52
+ # Use meta.default.title if no meta found for the current controller/action
53
+ # Params:
54
+ # +options+:: options passed to I18n
55
+ def set_meta_title(options = {})
56
+ @meta[:title] = I18n.translate("#{meta_key}.title", options)
57
+
58
+ if !have_translation?(@meta[:title])
59
+ @meta[:title] = I18n.translate('meta.default.title')
60
+ else
61
+ @meta[:title] = "#{@meta[:prefix]}#{I18n.translate("#{meta_key}.title", options)}#{@meta[:suffix]}"
62
+ end
63
+
64
+ @meta[:title]
65
+ end
66
+
67
+ # Generate meta description
68
+ # Use meta.default.description if no meta found for the current controller/action
69
+ # Params:
70
+ # +options+:: options passed to I18n
71
+ def set_meta_description(options = {})
72
+ @meta[:description] = I18n.translate("#{meta_key}.description", options)
73
+ @meta[:description] = I18n.translate('meta.default.description') if !have_translation?(@meta[:description])
74
+ @meta[:description]
75
+ end
76
+
77
+ # Generate meta keywords
78
+ # Use meta.default.keywords if no meta found for the current controller/action
79
+ # Params:
80
+ # +options+:: options passed to I18n
81
+ def set_meta_keywords(options = {})
82
+ @meta[:keywords] = I18n.translate("#{meta_key}.keywords", options)
83
+ @meta[:keywords] = I18n.translate('meta.default.keywords') if !have_translation?(@meta[:keywords])
84
+ @meta[:keywords]
85
+ end
86
+
87
+ # Add meta other than title, description, keywords
88
+ # Params:
89
+ # +extra_params+:: hash containing the meta(s) wanted
90
+ def add_meta_extra(extra_params, previous_key = nil)
91
+ for key, value in extra_params
92
+ current_key = previous_key ? "#{previous_key}:#{key}" : key
93
+
94
+ if value.is_a?(String) || value.is_a?(Symbol)
95
+ @meta[:extra] << { name: current_key, content: value.to_s }
96
+ elsif value.is_a?(Hash)
97
+ add_meta_extra(value, current_key)
98
+ elsif value.is_a?(Array)
99
+ for v in value
100
+ @meta[:extra] << { name: current_key, content: v.to_s }
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ # Add links to meta, used for add 'canonicalæ or 'publisher' links
107
+ def add_meta_link(rel, href, options = {})
108
+ options.merge!(rel: rel, href: href)
109
+ @meta[:links] << {options: options}
110
+ end
111
+
112
+ # Helpers
113
+
114
+ def add_meta_link_canonical(url)
115
+ add_meta_link 'canonical', url
116
+ end
117
+
118
+ def add_meta_link_author(url)
119
+ add_meta_link 'author', url
120
+ end
121
+
122
+ def add_meta_link_publisher(url)
123
+ add_meta_link 'publisher', url
124
+ end
125
+
126
+ def add_meta_link_alternate(url, lang)
127
+ add_meta_link 'alternate', url, hreflang: lang
128
+ end
129
+
130
+ private
131
+
132
+ def create_meta_hash
133
+ @meta = {
134
+ extra: [],
135
+ links: []
136
+ }
137
+
138
+ @meta[:prefix] = I18n.translate('meta.prefix')
139
+ @meta[:prefix] = "" if !have_translation?(@meta[:prefix])
140
+
141
+ @meta[:suffix] = I18n.translate('meta.suffix')
142
+ @meta[:suffix] = "" if !have_translation?(@meta[:suffix])
143
+ end
144
+
145
+ # Key used by I18n for the current controller/action
146
+ def meta_key
147
+ "meta.#{request[:controller].sub('/', '.')}.#{request[:action]}"
148
+ end
149
+
150
+ def have_translation?(text)
151
+ !text.start_with?('translation missing')
152
+ end
153
+
154
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jt-rails-meta
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan TRIBOUHARET
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-01 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: JTRailsMeta help you to manage HTML meta tags like title, description,
14
+ keywords used in Search Engine Optimization (SEO).
15
+ email: jonathan.tribouharet@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - .gitignore
21
+ - Gemfile
22
+ - LICENSE
23
+ - README.md
24
+ - jt-rails-meta.gemspec
25
+ - lib/generators/rails_meta/USAGE
26
+ - lib/generators/rails_meta/install_generator.rb
27
+ - lib/generators/rails_meta/templates/meta.yml
28
+ - lib/jt-rails-meta.rb
29
+ homepage: https://github.com/jonathantribouharet/jt-rails-meta
30
+ licenses:
31
+ - MIT
32
+ metadata: {}
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubyforge_project:
49
+ rubygems_version: 2.0.14
50
+ signing_key:
51
+ specification_version: 4
52
+ summary: Manage HTML meta tags for Ruby On Rails
53
+ test_files: []