page_meta 1.2.0 → 1.3.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 +4 -4
- data/.rubocop.yml +3 -3
- data/CHANGELOG.md +6 -0
- data/README.md +8 -0
- data/lib/page_meta/base.rb +86 -35
- data/lib/page_meta/meta_tag/dns_prefetch_control.rb +9 -2
- data/lib/page_meta/meta_tag/title.rb +1 -2
- data/lib/page_meta/meta_tag.rb +5 -2
- data/lib/page_meta/open_tag.rb +24 -0
- data/lib/page_meta/tag.rb +24 -0
- data/lib/page_meta/translator.rb +5 -1
- data/lib/page_meta/version.rb +1 -1
- data/lib/page_meta.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 732b10b45a16c54c1d95e8f20440bc52cbac065e378e1eed2284c6d99c2f9d47
|
4
|
+
data.tar.gz: 0266ece7ba5fbd03f8e0c9f4b77ff3097192ef8999292342680149b77cd8577c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9eef3c915a3d762e53aef9d75ab95c11ccd76d5a2385d07f7159c69cae9e48488295100d36e349369c65cb4e8e255a7d8078c058cd40cbdc5bc0c704de07c05
|
7
|
+
data.tar.gz: a4e04ac623c1e2963b23c747008d7d2e84fac6d4bfda74bf7b516258a2b71e5032e215fce03c89d57f68532e1e336e5239dae9f432b233e4f800ed05ddd1bffe
|
data/.rubocop.yml
CHANGED
@@ -11,9 +11,6 @@ AllCops:
|
|
11
11
|
- bin/**/*
|
12
12
|
- gemfiles/vendor/**/*
|
13
13
|
|
14
|
-
Layout/LineLength:
|
15
|
-
Enabled: false
|
16
|
-
|
17
14
|
Metrics:
|
18
15
|
Enabled: false
|
19
16
|
|
@@ -22,3 +19,6 @@ Minitest/MultipleAssertions:
|
|
22
19
|
|
23
20
|
Gemspec/DevelopmentDependencies:
|
24
21
|
Enabled: false
|
22
|
+
|
23
|
+
Minitest/EmptyLineBeforeAssertionMethods:
|
24
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -11,6 +11,12 @@ Prefix your message with one of the following:
|
|
11
11
|
- [Security] in case of vulnerabilities.
|
12
12
|
-->
|
13
13
|
|
14
|
+
## 1.3.0
|
15
|
+
|
16
|
+
- [Added] `page_meta.base` will now set the base url.
|
17
|
+
- [Changed] Some tags will be enforced to show up first. It loosely follows
|
18
|
+
https://rviscomi.github.io/capo.js/user/rules/.
|
19
|
+
|
14
20
|
## 1.2.0
|
15
21
|
|
16
22
|
- [Added] The meta tag's content can also be any object that responds to the
|
data/README.md
CHANGED
@@ -112,6 +112,14 @@ en:
|
|
112
112
|
keywords: "myapp, thing, other thing"
|
113
113
|
```
|
114
114
|
|
115
|
+
### Defining base url
|
116
|
+
|
117
|
+
You can define the base url.
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
page_meta.base "https://example.com/"
|
121
|
+
```
|
122
|
+
|
115
123
|
### Defining meta tags
|
116
124
|
|
117
125
|
To define other meta tags, you have to use `PageMeta::Base#tag` like the
|
data/lib/page_meta/base.rb
CHANGED
@@ -6,11 +6,29 @@ module PageMeta
|
|
6
6
|
language
|
7
7
|
charset
|
8
8
|
title
|
9
|
+
viewport
|
9
10
|
keywords
|
10
11
|
description
|
11
|
-
viewport
|
12
12
|
].freeze
|
13
13
|
|
14
|
+
DEFAULT_ORDER = 99
|
15
|
+
|
16
|
+
META_TAG_ORDER = {
|
17
|
+
pragma: -1,
|
18
|
+
cache_control: -1,
|
19
|
+
expires: -1,
|
20
|
+
refresh: -1,
|
21
|
+
dns_prefetch_control: 4
|
22
|
+
}.freeze
|
23
|
+
|
24
|
+
LINK_ORDER = {
|
25
|
+
preconnect: 6,
|
26
|
+
preload: 7,
|
27
|
+
modulepreload: 8,
|
28
|
+
prefetch: 9,
|
29
|
+
dns_prefetch: 10
|
30
|
+
}.freeze
|
31
|
+
|
14
32
|
attr_reader :controller, :store
|
15
33
|
|
16
34
|
delegate :[], :[]=, to: :store
|
@@ -21,86 +39,119 @@ module PageMeta
|
|
21
39
|
@store = {}
|
22
40
|
end
|
23
41
|
|
24
|
-
def
|
25
|
-
@
|
42
|
+
def items
|
43
|
+
@items ||= []
|
26
44
|
end
|
27
45
|
|
28
|
-
|
29
|
-
|
46
|
+
# Add a new `<base>` tag.
|
47
|
+
def base(href)
|
48
|
+
items << {
|
49
|
+
type: :tag,
|
50
|
+
name: :base,
|
51
|
+
value: {href:},
|
52
|
+
order: 2,
|
53
|
+
open: true
|
54
|
+
}
|
30
55
|
end
|
31
56
|
|
32
|
-
|
33
|
-
|
57
|
+
# Add a new meta tag.
|
58
|
+
def tag(name, value = nil, order: nil, **kwargs)
|
59
|
+
order = order || META_TAG_ORDER[name] || DEFAULT_ORDER
|
60
|
+
items << {type: :meta, name:, value: value || kwargs, order:}
|
34
61
|
end
|
35
62
|
|
36
|
-
|
37
|
-
|
63
|
+
# Add a new link tag.
|
64
|
+
def link(rel, order: nil, **options)
|
65
|
+
order = order || LINK_ORDER[rel] || DEFAULT_ORDER
|
66
|
+
items << {type: :link, rel:, options:, order:}
|
38
67
|
end
|
39
68
|
|
69
|
+
# Add new html tag, like `<base>` or `<title>`.
|
70
|
+
def html(name, value, open: false, order: DEFAULT_ORDER)
|
71
|
+
items << {type: :tag, name:, order:, open:, value:}
|
72
|
+
end
|
73
|
+
|
74
|
+
# The title translation.
|
40
75
|
def title
|
41
76
|
@title ||= Translator.new(:titles, naming, store)
|
42
77
|
end
|
43
78
|
|
79
|
+
# The description translation.
|
44
80
|
def description(html: false)
|
45
|
-
@description[html] ||= Translator.new(
|
81
|
+
@description[html] ||= Translator.new(
|
82
|
+
:descriptions,
|
83
|
+
naming,
|
84
|
+
store.merge(html:)
|
85
|
+
)
|
46
86
|
end
|
47
87
|
|
88
|
+
# The keywords translation.
|
48
89
|
def keywords
|
49
90
|
@keywords ||= Translator.new(:keywords, naming, store)
|
50
91
|
end
|
51
92
|
|
52
93
|
def render
|
53
|
-
|
54
|
-
|
94
|
+
compute_default_items
|
95
|
+
|
96
|
+
items
|
97
|
+
.sort_by { _1[:order] }
|
98
|
+
.map { send(:"build_#{_1[:type]}", _1).render }
|
99
|
+
.join
|
100
|
+
.html_safe
|
55
101
|
end
|
56
102
|
alias to_s render
|
57
103
|
|
58
|
-
def
|
59
|
-
|
104
|
+
private def build_tag(item)
|
105
|
+
klass = item[:open] ? OpenTag : Tag
|
106
|
+
|
107
|
+
klass.build(item[:name], item[:value])
|
60
108
|
end
|
61
109
|
|
62
|
-
def
|
63
|
-
|
64
|
-
.map {|name, value| MetaTag.build(name, value).render }
|
65
|
-
.join
|
66
|
-
.html_safe
|
110
|
+
private def build_meta(item)
|
111
|
+
MetaTag.build(item[:name], item[:value])
|
67
112
|
end
|
68
113
|
|
69
|
-
def
|
70
|
-
|
71
|
-
.map {|info| Link.build(info[:rel], info[:options]).render }
|
72
|
-
.join
|
73
|
-
.html_safe
|
114
|
+
private def build_link(item)
|
115
|
+
Link.build(item[:rel], item[:options])
|
74
116
|
end
|
75
117
|
|
76
|
-
def
|
118
|
+
private def naming
|
119
|
+
@naming ||= Naming.new(controller)
|
120
|
+
end
|
121
|
+
|
122
|
+
private def compute_default_items
|
77
123
|
DEFAULT_META_TAGS.each do |method_name|
|
78
|
-
|
124
|
+
send(:"compute_default_#{method_name}")
|
79
125
|
end
|
80
126
|
end
|
81
127
|
|
82
|
-
def compute_default_language
|
128
|
+
private def compute_default_language
|
83
129
|
tag(:language, I18n.locale)
|
84
130
|
end
|
85
131
|
|
86
|
-
def compute_default_title
|
87
|
-
|
132
|
+
private def compute_default_title
|
133
|
+
return if title.to_s.blank?
|
134
|
+
|
135
|
+
html(:title, title.to_s, order: 3)
|
136
|
+
tag(:title, title)
|
88
137
|
end
|
89
138
|
|
90
|
-
def compute_default_charset
|
91
|
-
tag(:charset, Rails.configuration.encoding)
|
139
|
+
private def compute_default_charset
|
140
|
+
tag(:charset, Rails.configuration.encoding, order: 0)
|
92
141
|
end
|
93
142
|
|
94
|
-
def compute_default_keywords
|
143
|
+
private def compute_default_keywords
|
95
144
|
tag(:keywords, keywords.to_s) unless keywords.to_s.blank?
|
96
145
|
end
|
97
146
|
|
98
|
-
def compute_default_description
|
147
|
+
private def compute_default_description
|
99
148
|
tag(:description, description.to_s) unless description.to_s.blank?
|
100
149
|
end
|
101
150
|
|
102
|
-
def compute_default_viewport
|
103
|
-
|
151
|
+
private def compute_default_viewport
|
152
|
+
return if items.any? { _1[:name] == :viewport && _1[:type] == :tag }
|
153
|
+
|
154
|
+
tag(:viewport, "width=device-width,initial-scale=1", order: 1)
|
104
155
|
end
|
105
156
|
end
|
106
157
|
end
|
@@ -4,8 +4,15 @@ module PageMeta
|
|
4
4
|
class MetaTag
|
5
5
|
class DnsPrefetchControl < MetaTag
|
6
6
|
def render
|
7
|
-
helpers.tag(
|
8
|
-
|
7
|
+
meta = helpers.tag(
|
8
|
+
:meta,
|
9
|
+
"http-equiv" => "x-dns-prefetch-control",
|
10
|
+
content: "on"
|
11
|
+
)
|
12
|
+
|
13
|
+
link = helpers.tag(:link, rel: "dns-prefetch", href: content)
|
14
|
+
|
15
|
+
meta + link
|
9
16
|
end
|
10
17
|
end
|
11
18
|
end
|
@@ -4,8 +4,7 @@ module PageMeta
|
|
4
4
|
class MetaTag
|
5
5
|
class Title < MetaTag
|
6
6
|
def render
|
7
|
-
helpers.
|
8
|
-
helpers.tag(:meta, name: "DC.title", content: content.simple) +
|
7
|
+
helpers.tag(:meta, name: "DC.title", content: content.simple) +
|
9
8
|
helpers.tag(:meta, itemprop: "name", content: content.simple)
|
10
9
|
end
|
11
10
|
end
|
data/lib/page_meta/meta_tag.rb
CHANGED
@@ -20,8 +20,11 @@ module PageMeta
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def content
|
23
|
-
@content ||=
|
24
|
-
|
23
|
+
@content ||= if @raw_content.respond_to?(:call)
|
24
|
+
@raw_content.call
|
25
|
+
else
|
26
|
+
@raw_content
|
27
|
+
end
|
25
28
|
end
|
26
29
|
|
27
30
|
def render
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PageMeta
|
4
|
+
class OpenTag
|
5
|
+
def self.build(tag, attrs)
|
6
|
+
new(tag, attrs)
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :tag, :attrs
|
10
|
+
|
11
|
+
def initialize(tag, attrs)
|
12
|
+
@tag = tag
|
13
|
+
@attrs = attrs
|
14
|
+
end
|
15
|
+
|
16
|
+
def render
|
17
|
+
helpers.tag(tag, attrs)
|
18
|
+
end
|
19
|
+
|
20
|
+
def helpers
|
21
|
+
ActionController::Base.helpers
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PageMeta
|
4
|
+
class Tag
|
5
|
+
def self.build(tag, content)
|
6
|
+
new(tag, content)
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :tag, :content
|
10
|
+
|
11
|
+
def initialize(tag, content)
|
12
|
+
@tag = tag
|
13
|
+
@content = content
|
14
|
+
end
|
15
|
+
|
16
|
+
def render
|
17
|
+
helpers.content_tag(tag, content) unless content.blank?
|
18
|
+
end
|
19
|
+
|
20
|
+
def helpers
|
21
|
+
ActionController::Base.helpers
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/page_meta/translator.rb
CHANGED
data/lib/page_meta/version.rb
CHANGED
data/lib/page_meta.rb
CHANGED
@@ -16,6 +16,8 @@ module PageMeta
|
|
16
16
|
require "page_meta/meta_tag/twitter"
|
17
17
|
require "page_meta/link"
|
18
18
|
require "page_meta/helpers"
|
19
|
+
require "page_meta/tag"
|
20
|
+
require "page_meta/open_tag"
|
19
21
|
require "page_meta/action"
|
20
22
|
require "page_meta/naming"
|
21
23
|
require "page_meta/translator"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page_meta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -165,7 +165,9 @@ files:
|
|
165
165
|
- lib/page_meta/meta_tag/title.rb
|
166
166
|
- lib/page_meta/meta_tag/twitter.rb
|
167
167
|
- lib/page_meta/naming.rb
|
168
|
+
- lib/page_meta/open_tag.rb
|
168
169
|
- lib/page_meta/railtie.rb
|
170
|
+
- lib/page_meta/tag.rb
|
169
171
|
- lib/page_meta/translator.rb
|
170
172
|
- lib/page_meta/version.rb
|
171
173
|
- page_meta.gemspec
|