middleman-meta-tags 0.1.3 → 0.6.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 +5 -5
- data/.github/workflows/ruby.yml +23 -0
- data/.gitignore +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +26 -1
- data/LICENSE +21 -0
- data/README.md +41 -0
- data/lib/middleman-meta-tags.rb +1 -1
- data/lib/middleman-meta-tags/extension.rb +3 -6
- data/lib/middleman-meta-tags/helpers.rb +170 -33
- data/lib/middleman-meta-tags/version.rb +1 -1
- data/middleman-meta-tags.gemspec +2 -1
- data/spec/middleman-meta-tags/helpers_spec.rb +89 -0
- data/spec/spec_helper.rb +6 -0
- metadata +33 -13
- data/LICENSE.txt +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ef14ab4f61e2d7198851cc0808879c8c3430a9bcdc2859da4ce1a0f1f013cdd4
|
4
|
+
data.tar.gz: e8f9404f1345214f339ca1c4c67c707fa5a2d8cdbae6e046b9d2ec3151c73685
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e288243971af0448eb3da675e580a1c5eb27621518c5d38f3823dca6780cfa2463cb508761d960ff4c6b1204df7e01d72b9eaf6691a5b392ea8cea9b3c7dc1bf
|
7
|
+
data.tar.gz: 3bfdfb8894575caf3f8530c096355d72e24e24e59d9da63f26e36e9deb2385ed191fa4104c8bcdbf7d4e9decf359b515c9cfc1ad7418aa9e2198d8827913f957
|
@@ -0,0 +1,23 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
- name: Set up Ruby
|
17
|
+
uses: ruby/setup-ruby@v1
|
18
|
+
with:
|
19
|
+
ruby-version: 2.6
|
20
|
+
- name: Install dependencies
|
21
|
+
run: bundle install
|
22
|
+
- name: Run tests
|
23
|
+
run: bundle exec rspec
|
data/.gitignore
CHANGED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
middleman-meta-tags
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.6.2
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,29 @@
|
|
1
|
-
##
|
1
|
+
## 0.6.0 (11/03/20)
|
2
|
+
|
3
|
+
* Allow viewport to be customized
|
4
|
+
* Add ability to not have images in meta data
|
5
|
+
* Use a newer version of Ruby
|
6
|
+
|
7
|
+
## 0.5.0 (08/01/20)
|
8
|
+
|
9
|
+
* Description truncate to 220 chars
|
10
|
+
* Add test
|
11
|
+
* Add more tags
|
12
|
+
|
13
|
+
## 0.4.0 (03/28/18)
|
14
|
+
|
15
|
+
* Added support for the meta HTTP refresh tag
|
16
|
+
* i18n compatibility for title and meta tags
|
17
|
+
* Description truncate to 300 chars
|
18
|
+
|
19
|
+
## 0.3.0 (01/30/17)
|
20
|
+
|
21
|
+
* Keywords can be an Array
|
22
|
+
* Calculate pull_image path with image_path
|
23
|
+
|
24
|
+
## 0.2.0 (03/30/16)
|
25
|
+
|
26
|
+
* Allow gem to work with middleman 4.0
|
2
27
|
|
3
28
|
## 0.1.3 (04/30/15)
|
4
29
|
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 Baptiste Lecocq
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -49,6 +49,14 @@ set_meta_tags keywords: %w(some seo keywords).join(', ')
|
|
49
49
|
keywords %w(some seo keywords).join(', ')
|
50
50
|
```
|
51
51
|
|
52
|
+
### Meta-Refresh
|
53
|
+
|
54
|
+
To set the HTTP Meta-Refresh property of a page, use the `refresh` key:
|
55
|
+
|
56
|
+
```rb
|
57
|
+
set_meta_tags refresh: "0;url=http://example.com/"
|
58
|
+
```
|
59
|
+
|
52
60
|
## Display meta tags
|
53
61
|
|
54
62
|
Into your `<head></head>` tag:
|
@@ -86,6 +94,11 @@ Then it looks the page meta data to attempt to display the following keys:
|
|
86
94
|
- MM `pull_image` => META `og:image`
|
87
95
|
- MM `site` => META `og:site_name`
|
88
96
|
- MM `title` => META `og:title`
|
97
|
+
- MM `host` => optional attribute for composing `pull_image` src with asset helper
|
98
|
+
|
99
|
+
In addition, if you want to customize meta tags by each page's frontmatter, you
|
100
|
+
can add `customize_by_frontmatter: true` in `data/site.yml`. The priority would
|
101
|
+
be set_meta_tags > frontmatter > site wide defaults.
|
89
102
|
|
90
103
|
### Manually adding addition tags
|
91
104
|
|
@@ -101,6 +114,28 @@ end
|
|
101
114
|
|
102
115
|
And add it to the layouts and views that you need.
|
103
116
|
|
117
|
+
### Pull images
|
118
|
+
|
119
|
+
For the `pull_image` to render for twitter metatags, a full url must be used:
|
120
|
+
|
121
|
+
```
|
122
|
+
pull_image: 'http://example.com/path/to/image.jpg'
|
123
|
+
```
|
124
|
+
|
125
|
+
If pointing to an image in your Middleman source, you can instead specify the
|
126
|
+
relative image path as you would with an asset helper provided you have also
|
127
|
+
configured the `host` in your `site.yml`. If your Middleman build activates
|
128
|
+
extensions like `:asset_hash`, the full, hashed URL will be generated in your
|
129
|
+
metatags.
|
130
|
+
|
131
|
+
```
|
132
|
+
# site.yml
|
133
|
+
host: http://example.com
|
134
|
+
|
135
|
+
# your article
|
136
|
+
pull_image 'page/to/image/jpg'
|
137
|
+
```
|
138
|
+
|
104
139
|
## Contributing
|
105
140
|
|
106
141
|
1. [Fork it](http://github.com/tiste/middleman-meta-tags/fork)
|
@@ -108,3 +143,9 @@ And add it to the layouts and views that you need.
|
|
108
143
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
109
144
|
4. Push to the branch (`git push origin my-new-feature`)
|
110
145
|
5. Create new Pull Request
|
146
|
+
|
147
|
+
## Publishing
|
148
|
+
|
149
|
+
1. Update `./lib/middleman-meta-tags/version.rb` and CHANGELOG.md
|
150
|
+
2. `gem build middleman-meta-tags.gemspec`
|
151
|
+
3. `bundle exec rake release`
|
data/lib/middleman-meta-tags.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
|
+
require 'middleman-core'
|
1
2
|
require 'middleman-meta-tags/helpers'
|
2
3
|
|
3
4
|
module Middleman
|
4
|
-
|
5
|
-
|
6
|
-
def registered(app, options_hash = {}, &block)
|
7
|
-
app.helpers Middleman::MetaTags::Helpers
|
8
|
-
end
|
9
|
-
end
|
5
|
+
class MetaTagsExtension < Extension
|
6
|
+
self.defined_helpers = [Middleman::MetaTags::Helpers]
|
10
7
|
end
|
11
8
|
end
|
@@ -5,42 +5,89 @@ module Middleman
|
|
5
5
|
@meta_tags ||= ActiveSupport::HashWithIndifferentAccess.new
|
6
6
|
end
|
7
7
|
|
8
|
+
def link_tags
|
9
|
+
@link_tags ||= ActiveSupport::HashWithIndifferentAccess.new
|
10
|
+
end
|
11
|
+
|
8
12
|
def set_meta_tags(meta_tags = {})
|
9
13
|
self.meta_tags.merge! meta_tags
|
10
14
|
end
|
11
15
|
|
12
|
-
def
|
13
|
-
|
16
|
+
def set_link_tags(link_tags = {})
|
17
|
+
self.link_tags.merge! link_tags
|
14
18
|
end
|
15
19
|
|
16
|
-
def
|
17
|
-
|
20
|
+
def site_data
|
21
|
+
(data['site'] || {}).with_indifferent_access
|
18
22
|
end
|
19
23
|
|
20
24
|
def title(title = nil)
|
21
25
|
set_meta_tags(title: title) unless title.nil?
|
22
26
|
end
|
23
27
|
|
28
|
+
def description(description = nil)
|
29
|
+
set_meta_tags(description: description) unless description.nil?
|
30
|
+
end
|
31
|
+
|
32
|
+
def keywords(keywords = nil)
|
33
|
+
set_meta_tags(keywords: keywords) unless keywords.nil?
|
34
|
+
end
|
35
|
+
|
24
36
|
def display_meta_tags(default = {})
|
25
37
|
result = []
|
26
38
|
meta_tags = default.merge(self.meta_tags).with_indifferent_access
|
39
|
+
link_tags = default.merge(self.link_tags)
|
40
|
+
|
41
|
+
charset = meta_tags.delete(:charset)
|
42
|
+
result << tag(:meta, charset: charset) if charset.present?
|
43
|
+
|
44
|
+
viewport = meta_tags.delete(:viewport)
|
45
|
+
result << tag(:meta, name: :viewport, content: viewport) if viewport.present?
|
27
46
|
|
28
|
-
|
47
|
+
http_equiv = meta_tags.delete('http-equiv')
|
48
|
+
result << tag(:meta, 'http-equiv': 'X-UA-Compatible', content: http_equiv) if http_equiv.present?
|
49
|
+
|
50
|
+
need_full_title = true
|
51
|
+
need_full_title = meta_tags['full_title'] unless meta_tags['full_title'].nil?
|
52
|
+
need_full_title = current_page.data['full_title'] unless current_page.data['full_title'].nil?
|
53
|
+
title = need_full_title ? full_title(meta_tags) : safe_title(meta_tags[:title])
|
29
54
|
meta_tags.delete(:title)
|
30
55
|
meta_tags.delete(:separator)
|
31
|
-
result << content_tag(:title, title)
|
56
|
+
result << content_tag(:title, title) if title.present?
|
32
57
|
|
33
58
|
description = safe_description(meta_tags.delete(:description))
|
34
|
-
result << tag(:meta, name: :description, content: description)
|
59
|
+
result << tag(:meta, name: :description, content: description) if description.present?
|
35
60
|
|
36
61
|
keywords = meta_tags.delete(:keywords)
|
37
|
-
|
62
|
+
keywords = keywords.join(', ') if keywords.is_a?(Array)
|
63
|
+
result << tag(:meta, name: :keywords, content: keywords) if keywords.present?
|
64
|
+
|
65
|
+
refresh = meta_tags.delete(:refresh)
|
66
|
+
result << tag(:meta, {content: refresh, 'http-equiv': 'refresh'}) if refresh.present?
|
38
67
|
|
39
68
|
meta_tags.each do |name, content|
|
40
|
-
|
41
|
-
|
69
|
+
unless content.blank? || %(site latitude longitude).include?(name)
|
70
|
+
if name.start_with?('itemprop:')
|
71
|
+
result << tag(:meta, itemprop: name.gsub('itemprop:', ''), content: content)
|
72
|
+
elsif name.start_with?('og:')
|
73
|
+
result << tag(:meta, property: name, content: content)
|
74
|
+
else
|
75
|
+
result << tag(:meta, name: name, content: content)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
position = [meta_tags.delete(:latitude), meta_tags.delete(:longitude)] if meta_tags['latitude'] && meta_tags['longitude']
|
81
|
+
result << tag(:meta, name: 'geo:position', content: position.join(';')) if position
|
82
|
+
result << tag(:meta, name: 'ICBM', content: position.join(', ')) if position
|
83
|
+
|
84
|
+
link_tags.each do |rel, href|
|
85
|
+
if href.kind_of?(Array)
|
86
|
+
href.each do |link|
|
87
|
+
result << tag(:link, rel: rel, href: link)
|
88
|
+
end
|
42
89
|
else
|
43
|
-
result << tag(:
|
90
|
+
result << tag(:link, rel: rel, href: href) unless href.blank?
|
44
91
|
end
|
45
92
|
end
|
46
93
|
|
@@ -49,60 +96,150 @@ module Middleman
|
|
49
96
|
end
|
50
97
|
|
51
98
|
def auto_display_meta_tags(default = {})
|
52
|
-
|
99
|
+
auto_set_meta_tags
|
53
100
|
|
54
101
|
display_meta_tags default
|
55
102
|
end
|
56
103
|
|
57
|
-
def
|
58
|
-
|
104
|
+
def auto_set_meta_tags
|
105
|
+
geocoding_data = site_data['geocoding'] || {}
|
106
|
+
author_data = site_data['author'] || {}
|
59
107
|
|
60
|
-
set_meta_tags
|
61
|
-
|
108
|
+
set_meta_tags charset: 'utf-8',
|
109
|
+
'http-equiv': 'IE=edge,chrome=1'
|
62
110
|
|
111
|
+
fall_through(site_data, :site, 'name')
|
112
|
+
fall_through(site_data, :site, 'site')
|
63
113
|
fall_through(site_data, :title, 'title')
|
64
114
|
fall_through(site_data, :description, 'description')
|
65
115
|
fall_through(site_data, :keywords, 'keywords')
|
116
|
+
fall_through(site_data, :viewport, 'viewport', 'width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no')
|
117
|
+
|
118
|
+
# Microdata
|
119
|
+
fall_through(site_data, 'itemprop:name', 'name')
|
120
|
+
fall_through(site_data, 'itemprop:name', 'site')
|
121
|
+
fall_through(site_data, 'itemprop:name', 'title')
|
122
|
+
fall_through(site_data, 'itemprop:description', 'description')
|
123
|
+
fall_through_image(site_data, 'itemprop:image', 'thumbnail')
|
66
124
|
|
67
125
|
# Twitter cards
|
68
|
-
|
69
|
-
fall_through(site_data,
|
70
|
-
fall_through(site_data,
|
71
|
-
fall_through(site_data,
|
72
|
-
fall_through(
|
73
|
-
|
126
|
+
set_meta_tags 'twitter:card': 'summary_large_image'
|
127
|
+
fall_through(site_data, 'twitter:card', 'twitter_card')
|
128
|
+
fall_through(site_data, 'twitter:site', 'name')
|
129
|
+
fall_through(site_data, 'twitter:site', 'site')
|
130
|
+
fall_through(author_data, 'twitter:creator', 'twitter')
|
131
|
+
set_meta_tags 'twitter:url': current_page_url
|
132
|
+
fall_through(site_data, 'twitter:url', 'url')
|
133
|
+
fall_through(site_data, 'twitter:title', 'name')
|
134
|
+
fall_through(site_data, 'twitter:title', 'site')
|
135
|
+
fall_through(site_data, 'twitter:title', 'title')
|
136
|
+
fall_through(site_data, 'twitter:description', 'description')
|
137
|
+
fall_through_image(site_data, 'twitter:image', 'thumbnail')
|
74
138
|
|
75
139
|
# Open Graph
|
76
|
-
|
77
|
-
fall_through(site_data,
|
78
|
-
|
140
|
+
set_meta_tags 'og:url': current_page_url
|
141
|
+
fall_through(site_data, 'og:url', 'url')
|
142
|
+
set_meta_tags 'og:type': 'website'
|
143
|
+
fall_through(site_data, 'og:type', 'type')
|
144
|
+
fall_through(site_data, 'og:title', 'name')
|
145
|
+
fall_through(site_data, 'og:title', 'site')
|
146
|
+
fall_through(site_data, 'og:title', 'title')
|
147
|
+
fall_through_image(site_data, 'og:image', 'thumbnail')
|
148
|
+
fall_through(site_data, 'og:description', 'description')
|
149
|
+
fall_through(site_data, 'og:site_name', 'name')
|
150
|
+
fall_through(site_data, 'og:site_name', 'site')
|
151
|
+
set_meta_tags 'og:locale': 'en_US'
|
152
|
+
fall_through(site_data, 'og:locale', 'locale')
|
153
|
+
|
154
|
+
# Theme color
|
155
|
+
fall_through(site_data, 'theme-color', 'base_color')
|
156
|
+
fall_through(site_data, 'msapplication-TileColor', 'base_color')
|
157
|
+
|
158
|
+
# Geocoding
|
159
|
+
fall_through(geocoding_data, 'latitude', 'latitude')
|
160
|
+
fall_through(geocoding_data, 'longitude', 'longitude')
|
161
|
+
fall_through(geocoding_data, 'geo.placename', 'place')
|
162
|
+
fall_through(geocoding_data, 'geo.region', 'region')
|
163
|
+
|
164
|
+
# Author
|
165
|
+
set_link_tags author: author_data['website'] if author_data['website']
|
166
|
+
set_link_tags license: site_data['license'] if site_data['license']
|
167
|
+
|
168
|
+
me_link_tags = []
|
169
|
+
me_link_tags << author_data['website'] if author_data['website']
|
170
|
+
me_link_tags << "mailto:#{author_data['email']}" if author_data['email'].present?
|
171
|
+
me_link_tags += ["tel:#{author_data['phone']}", "sms:#{author_data['phone']}"] if author_data['phone'].present?
|
172
|
+
%w(github twitter dribbble medium linkedin facebook instagram gitlab bitbucket).each do |social|
|
173
|
+
me_link_tags << "https://#{social}#{['bitbucket'].include?(social) ? '.org' : '.com'}/#{'in/' if social == 'linkedin'}#{author_data[social]}" if author_data[social].present?
|
174
|
+
set_link_tags me: me_link_tags
|
175
|
+
end
|
79
176
|
end
|
80
177
|
|
81
|
-
|
178
|
+
private
|
82
179
|
|
83
180
|
def fall_through(site_data, name, key, default = nil)
|
84
|
-
value =
|
85
|
-
|
181
|
+
value = current_page.data[key] ||
|
182
|
+
meta_tags[key] ||
|
183
|
+
site_data[key] ||
|
184
|
+
default
|
185
|
+
|
186
|
+
value = yield value if block_given?
|
187
|
+
|
188
|
+
value = safe_title(value) if key == 'title'
|
189
|
+
value = safe_description(value) if key == 'description'
|
190
|
+
|
191
|
+
set_meta_tags name => value if value.present?
|
86
192
|
value
|
87
193
|
end
|
88
194
|
|
195
|
+
def fall_through_image(*args)
|
196
|
+
fall_through(*args) do |path|
|
197
|
+
uri?(path) && path ? path : meta_tags_image_url(path)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def current_page_url
|
202
|
+
meta_tags_host + current_page.url unless (data['site'] || {})['host'].nil?
|
203
|
+
end
|
204
|
+
|
205
|
+
def meta_tags_image_url(source)
|
206
|
+
return nil unless source.present?
|
207
|
+
File.join(meta_tags_host, image_path(source))
|
208
|
+
end
|
209
|
+
|
210
|
+
def meta_tags_host
|
211
|
+
(data['site'] || {})['host'] || ''
|
212
|
+
end
|
213
|
+
|
214
|
+
def uri?(path)
|
215
|
+
path =~ %r{^[-a-z]+://|^(?:cid|data):|^//}
|
216
|
+
end
|
217
|
+
|
89
218
|
def full_title(meta_tags)
|
90
|
-
separator = meta_tags[:separator] || '
|
219
|
+
separator = meta_tags[:separator] || '-'
|
91
220
|
full_title = ''
|
92
221
|
title = safe_title(meta_tags[:title])
|
93
222
|
|
94
|
-
(full_title << title)
|
223
|
+
(full_title << title) if title.present?
|
95
224
|
(full_title << " #{separator} ") unless title.blank? || meta_tags[:site].blank?
|
96
|
-
(full_title << meta_tags[:site])
|
225
|
+
(full_title << meta_tags[:site]) if meta_tags[:site].present?
|
97
226
|
full_title
|
98
227
|
end
|
99
228
|
|
100
229
|
def safe_description(description)
|
101
|
-
|
230
|
+
description = description[I18n.locale] if description.is_a?(Hash) && description[I18n.locale]
|
231
|
+
|
232
|
+
description = I18n.t(description[2..-1]) if description&.start_with?('t:')
|
233
|
+
|
234
|
+
truncate(strip_tags(description), length: 220)
|
102
235
|
end
|
103
236
|
|
104
237
|
def safe_title(title)
|
105
|
-
title =
|
238
|
+
title = title[I18n.locale] if title.is_a?(Hash) && title[I18n.locale]
|
239
|
+
|
240
|
+
title = I18n.t(title[2..-1]) if title&.start_with?('t:')
|
241
|
+
|
242
|
+
strip_tags(title)
|
106
243
|
end
|
107
244
|
end
|
108
245
|
end
|
data/middleman-meta-tags.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'middleman-core', ['>= 3.0.0']
|
22
22
|
|
23
|
-
spec.add_development_dependency 'bundler'
|
23
|
+
spec.add_development_dependency 'bundler'
|
24
24
|
spec.add_development_dependency 'rake'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.2'
|
25
26
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Middleman::MetaTags::Helpers do
|
4
|
+
let(:h) { Class.new { extend Middleman::MetaTags::Helpers } }
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
allow(h).to receive_message_chain(:current_page, :data).and_return({ full_title: nil })
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'transforms title tag' do
|
11
|
+
h.set_meta_tags title: 'Relevant title'
|
12
|
+
expect(h.display_meta_tags).to eql('<title>Relevant title</title>')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'transforms description tag' do
|
16
|
+
h.set_meta_tags description: 'Relevant title of more than 220 characters
|
17
|
+
1 Relevant title of more than 220 characters
|
18
|
+
2 Relevant title of more than 220 characters
|
19
|
+
3 Relevant title of more than 220 characters
|
20
|
+
4 Relevant title of more than 220 characters'
|
21
|
+
expect(h.display_meta_tags).to eql('<meta name="description" content="Relevant title of more than 220 characters
|
22
|
+
1 Relevant title of more than 220 characters
|
23
|
+
2 Relevant title of more than 220 characters
|
24
|
+
3 Relevant title of more than 220 characters
|
25
|
+
4 Relevant title of more than 220 chara..." />')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'transforms keywords tag' do
|
29
|
+
h.set_meta_tags keywords: %w(some seo keywords)
|
30
|
+
expect(h.display_meta_tags).to eql('<meta name="keywords" content="some, seo, keywords" />')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'transforms site tag' do
|
34
|
+
expect(h.display_meta_tags site: 'My Awesome Website').to eql('<title>My Awesome Website</title>
|
35
|
+
<link rel="site" href="My Awesome Website" />')
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "auto_display_meta_tags" do
|
39
|
+
before do
|
40
|
+
allow(h).to receive(:data).and_return({})
|
41
|
+
end
|
42
|
+
|
43
|
+
it "includes a viewport tag" do
|
44
|
+
tags = h.auto_display_meta_tags.split("\n")
|
45
|
+
expect(tags).to include(
|
46
|
+
'<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />'
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "prefers viewport from site data" do
|
51
|
+
allow(h).to receive(:data).and_return(
|
52
|
+
{
|
53
|
+
"site" => {
|
54
|
+
"viewport" => "width=device-width,user-scalable=yes"
|
55
|
+
}
|
56
|
+
}
|
57
|
+
)
|
58
|
+
|
59
|
+
tags = h.auto_display_meta_tags.split("\n")
|
60
|
+
expect(tags).to include(
|
61
|
+
'<meta name="viewport" content="width=device-width,user-scalable=yes" />'
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "meta_tags_image_url" do
|
67
|
+
before do
|
68
|
+
allow(h).to receive(:data).and_return(
|
69
|
+
{
|
70
|
+
"site" => {
|
71
|
+
"host" => "https://example.com"
|
72
|
+
}
|
73
|
+
}
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns a URL when image is given" do
|
78
|
+
expect(
|
79
|
+
h.send(:meta_tags_image_url, "/awesome/image.jpg")
|
80
|
+
).to eq("https://example.com/awesome/image.jpg")
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns nil when image is nil" do
|
84
|
+
expect(
|
85
|
+
h.send(:meta_tags_image_url, nil)
|
86
|
+
).to be_nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-meta-tags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Baptiste Lecocq
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: middleman-core
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
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
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.2'
|
55
69
|
description: Easy integration of meta tags into your Middleman applications
|
56
70
|
email:
|
57
71
|
- hello@tiste.io
|
@@ -59,10 +73,13 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
76
|
+
- ".github/workflows/ruby.yml"
|
62
77
|
- ".gitignore"
|
78
|
+
- ".ruby-gemset"
|
79
|
+
- ".ruby-version"
|
63
80
|
- CHANGELOG.md
|
64
81
|
- Gemfile
|
65
|
-
- LICENSE
|
82
|
+
- LICENSE
|
66
83
|
- README.md
|
67
84
|
- Rakefile
|
68
85
|
- lib/middleman-meta-tags.rb
|
@@ -71,11 +88,13 @@ files:
|
|
71
88
|
- lib/middleman-meta-tags/version.rb
|
72
89
|
- lib/middleman_extension.rb
|
73
90
|
- middleman-meta-tags.gemspec
|
91
|
+
- spec/middleman-meta-tags/helpers_spec.rb
|
92
|
+
- spec/spec_helper.rb
|
74
93
|
homepage: https://github.com/tiste/middleman-meta-tags
|
75
94
|
licenses:
|
76
95
|
- MIT
|
77
96
|
metadata: {}
|
78
|
-
post_install_message:
|
97
|
+
post_install_message:
|
79
98
|
rdoc_options: []
|
80
99
|
require_paths:
|
81
100
|
- lib
|
@@ -90,9 +109,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
109
|
- !ruby/object:Gem::Version
|
91
110
|
version: '0'
|
92
111
|
requirements: []
|
93
|
-
|
94
|
-
|
95
|
-
signing_key:
|
112
|
+
rubygems_version: 3.0.8
|
113
|
+
signing_key:
|
96
114
|
specification_version: 4
|
97
115
|
summary: Meta tags for Middleman
|
98
|
-
test_files:
|
116
|
+
test_files:
|
117
|
+
- spec/middleman-meta-tags/helpers_spec.rb
|
118
|
+
- spec/spec_helper.rb
|
data/LICENSE.txt
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 Baptiste Lecocq
|
2
|
-
|
3
|
-
MIT License
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|