jekyll_href 1.1.0 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +74 -12
- data/CHANGELOG.md +15 -0
- data/README.md +153 -16
- data/Rakefile +2 -1
- data/jekyll_href.gemspec +4 -6
- data/lib/hash_array.rb +32 -0
- data/lib/href_summary_tag.rb +79 -0
- data/lib/href_tag.rb +214 -0
- data/lib/jekyll_href/version.rb +1 -1
- data/lib/jekyll_href.rb +6 -174
- data/spec/hash_array_spec.rb +43 -0
- data/spec/href_spec.rb +68 -123
- data/spec/spec_helper.rb +68 -3
- data/spec/status_persistence.txt +27 -13
- metadata +24 -36
- data/lib/jekyll_tag_helper2.rb +0 -94
data/spec/href_spec.rb
CHANGED
@@ -1,50 +1,10 @@
|
|
1
|
-
require 'jekyll'
|
2
|
-
require 'jekyll_plugin_logger'
|
3
|
-
require 'yaml'
|
4
1
|
require_relative '../lib/jekyll_href'
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
# Mock for Collections
|
9
|
-
class Collections
|
10
|
-
def values
|
11
|
-
[]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
# Mock for Site
|
16
|
-
class SiteMock
|
17
|
-
attr_reader :config
|
18
|
-
|
19
|
-
def initialize
|
20
|
-
@config = YAML.safe_load(File.read('_config.yml'))
|
21
|
-
end
|
22
|
-
|
23
|
-
def collections
|
24
|
-
Collections.new
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Mock for Liquid::ParseContent
|
29
|
-
class TestParseContext < Liquid::ParseContext
|
30
|
-
attr_reader :line_number, :registers
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
super
|
34
|
-
@line_number = 123
|
35
|
-
|
36
|
-
@registers = Registers.new(
|
37
|
-
{ 'path' => 'https://feeds.soundcloud.com/users/soundcloud:users:7143896/sounds.rss' },
|
38
|
-
SiteMock.new
|
39
|
-
)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# Lets get this party started
|
44
|
-
class MyTest # rubocop:disable Metrics/ClassLength
|
3
|
+
class MyTest
|
45
4
|
Dir.chdir 'demo'
|
5
|
+
HashArray.reset
|
46
6
|
|
47
|
-
RSpec.describe
|
7
|
+
RSpec.describe HrefTag::HrefTag do
|
48
8
|
let(:logger) do
|
49
9
|
PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
|
50
10
|
end
|
@@ -59,209 +19,194 @@ class MyTest # rubocop:disable Metrics/ClassLength
|
|
59
19
|
)
|
60
20
|
end
|
61
21
|
|
62
|
-
it
|
63
|
-
href =
|
22
|
+
it 'obtains internal link with blank' do
|
23
|
+
href = described_class.send(
|
64
24
|
:new,
|
65
25
|
'href',
|
66
|
-
'blank
|
26
|
+
+ 'blank path/page.html internal link text',
|
67
27
|
parse_context
|
68
28
|
)
|
69
|
-
href.
|
70
|
-
linkk = href.send(:compute_linkk)
|
71
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
29
|
+
href.render TestLiquidContext.new
|
72
30
|
expect(href.follow).to eq('')
|
73
|
-
expect(href.link).to eq('
|
31
|
+
expect(href.link).to eq('path/page.html')
|
74
32
|
expect(href.target).to eq(" target='_blank'")
|
75
33
|
expect(href.text).to eq('internal link text')
|
76
34
|
end
|
77
35
|
|
78
|
-
it
|
79
|
-
href =
|
36
|
+
it 'obtains external link with text' do
|
37
|
+
href = described_class.send(
|
80
38
|
:new,
|
81
39
|
'href',
|
82
|
-
'https://feeds.soundcloud.com/users/soundcloud:users:7143896/sounds.rss SoundCloud RSS Feed'
|
40
|
+
+ 'summary_exclude https://feeds.soundcloud.com/users/soundcloud:users:7143896/sounds.rss SoundCloud RSS Feed',
|
83
41
|
parse_context
|
84
42
|
)
|
85
|
-
href.
|
86
|
-
linkk = href.send(:compute_linkk)
|
87
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
43
|
+
href.render TestLiquidContext.new
|
88
44
|
expect(href.follow).to eq(" rel='nofollow'")
|
89
45
|
expect(href.link).to eq('https://feeds.soundcloud.com/users/soundcloud:users:7143896/sounds.rss')
|
90
46
|
expect(href.target).to eq(" target='_blank'")
|
91
47
|
expect(href.text).to eq('SoundCloud RSS Feed')
|
92
48
|
end
|
93
49
|
|
94
|
-
it
|
95
|
-
href =
|
50
|
+
it 'obtains external link using url parameter with text' do
|
51
|
+
href = described_class.send(
|
96
52
|
:new,
|
97
53
|
'href',
|
98
|
-
'url="https://feeds.soundcloud.com/users/soundcloud:users:7143896/sounds.rss" SoundCloud RSS Feed'
|
54
|
+
+ 'summary_exclude url="https://feeds.soundcloud.com/users/soundcloud:users:7143896/sounds.rss" SoundCloud RSS Feed',
|
99
55
|
parse_context
|
100
56
|
)
|
101
|
-
href.
|
102
|
-
linkk = href.send(:compute_linkk)
|
103
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
57
|
+
href.render TestLiquidContext.new
|
104
58
|
expect(href.follow).to eq(" rel='nofollow'")
|
105
59
|
expect(href.link).to eq('https://feeds.soundcloud.com/users/soundcloud:users:7143896/sounds.rss')
|
106
60
|
expect(href.target).to eq(" target='_blank'")
|
107
61
|
expect(href.text).to eq('SoundCloud RSS Feed')
|
108
62
|
end
|
109
63
|
|
110
|
-
it
|
111
|
-
href =
|
64
|
+
it 'obtains external link without scheme or text' do
|
65
|
+
href = described_class.send(
|
112
66
|
:new,
|
113
67
|
'href',
|
114
|
-
'super-fake-merger.com'
|
68
|
+
+ 'super-fake-merger.com',
|
115
69
|
parse_context
|
116
70
|
)
|
117
|
-
href.
|
118
|
-
linkk = href.send(:compute_linkk)
|
119
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
71
|
+
href.render TestLiquidContext.new
|
120
72
|
expect(href.follow).to eq(" rel='nofollow'")
|
121
73
|
expect(href.link).to eq('https://super-fake-merger.com')
|
122
74
|
expect(href.target).to eq(" target='_blank'")
|
123
75
|
expect(href.text).to eq('<code>super-fake-merger.com</code>')
|
124
76
|
end
|
125
77
|
|
126
|
-
it
|
127
|
-
href =
|
78
|
+
it 'expands YAML hash with link text' do
|
79
|
+
href = described_class.send(
|
128
80
|
:new,
|
129
81
|
'href',
|
130
|
-
'{{github}}/diasks2/confidential_info_redactor <code>confidential_info_redactor</code>'
|
82
|
+
+ '{{github}}/diasks2/confidential_info_redactor <code>confidential_info_redactor</code>',
|
131
83
|
parse_context
|
132
84
|
)
|
133
|
-
href.
|
134
|
-
linkk = href.send(:compute_linkk)
|
135
|
-
linkk = href.send(:replace_vars, linkk)
|
136
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
85
|
+
href.render TestLiquidContext.new
|
137
86
|
expect(href.follow).to eq(" rel='nofollow'")
|
138
87
|
expect(href.link).to eq('https://github.com/diasks2/confidential_info_redactor')
|
139
88
|
expect(href.target).to eq(" target='_blank'")
|
140
89
|
expect(href.text).to eq('<code>confidential_info_redactor</code>')
|
141
90
|
end
|
142
91
|
|
143
|
-
it
|
144
|
-
href =
|
92
|
+
it 'obtains external link with follow' do
|
93
|
+
href = described_class.send(
|
145
94
|
:new,
|
146
95
|
'href',
|
147
|
-
'follow https://www.mslinn.com Awesome'
|
96
|
+
+ 'follow https://www.mslinn.com Awesome',
|
148
97
|
parse_context
|
149
98
|
)
|
150
|
-
href.
|
151
|
-
linkk = href.send(:compute_linkk)
|
152
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
99
|
+
href.render TestLiquidContext.new
|
153
100
|
expect(href.follow).to eq('')
|
154
101
|
expect(href.link).to eq('https://www.mslinn.com')
|
155
102
|
expect(href.target).to eq(" target='_blank'")
|
156
103
|
expect(href.text).to eq('Awesome')
|
157
104
|
end
|
158
105
|
|
159
|
-
it
|
160
|
-
href =
|
106
|
+
it 'obtains external link with follow and notarget' do
|
107
|
+
href = described_class.send(
|
161
108
|
:new,
|
162
109
|
'href',
|
163
|
-
'follow notarget https://www.mslinn.com Awesome'
|
110
|
+
+ 'follow notarget https://www.mslinn.com Awesome',
|
164
111
|
parse_context
|
165
112
|
)
|
166
|
-
href.
|
167
|
-
linkk = href.send(:compute_linkk)
|
168
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
113
|
+
href.render TestLiquidContext.new
|
169
114
|
expect(href.follow).to eq('')
|
170
115
|
expect(href.link).to eq('https://www.mslinn.com')
|
171
116
|
expect(href.target).to eq('')
|
172
117
|
expect(href.text).to eq('Awesome')
|
173
118
|
end
|
174
119
|
|
175
|
-
it
|
176
|
-
href =
|
120
|
+
it 'obtains external link with blank' do
|
121
|
+
href = described_class.send(
|
177
122
|
:new,
|
178
123
|
'href',
|
179
|
-
'blank https://www.mslinn.com Awesome'
|
124
|
+
+ 'blank https://www.mslinn.com Awesome',
|
180
125
|
parse_context
|
181
126
|
)
|
182
|
-
href.
|
183
|
-
linkk = href.send(:compute_linkk)
|
184
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
127
|
+
href.render TestLiquidContext.new
|
185
128
|
expect(href.follow).to eq(" rel='nofollow'")
|
186
129
|
expect(href.link).to eq('https://www.mslinn.com')
|
187
130
|
expect(href.target).to eq(" target='_blank'")
|
188
131
|
expect(href.text).to eq('Awesome')
|
189
132
|
end
|
190
133
|
|
191
|
-
it
|
192
|
-
href =
|
134
|
+
it 'implicitly computes external link from text' do
|
135
|
+
href = described_class.send(
|
193
136
|
:new,
|
194
137
|
'href',
|
195
|
-
'www.mslinn.com'
|
138
|
+
+ 'www.mslinn.com',
|
196
139
|
parse_context
|
197
140
|
)
|
198
|
-
href.
|
199
|
-
linkk = href.send(:compute_linkk)
|
200
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
141
|
+
href.render TestLiquidContext.new
|
201
142
|
expect(href.follow).to eq(" rel='nofollow'")
|
202
143
|
expect(href.link).to eq('https://www.mslinn.com')
|
203
144
|
expect(href.target).to eq(" target='_blank'")
|
204
145
|
expect(href.text).to eq('<code>www.mslinn.com</code>')
|
205
146
|
end
|
206
147
|
|
207
|
-
it
|
208
|
-
href =
|
148
|
+
it 'implicitly computes external link from text with follow and notarget' do
|
149
|
+
href = described_class.send(
|
209
150
|
:new,
|
210
151
|
'href',
|
211
|
-
'follow notarget www.mslinn.com'
|
152
|
+
+ 'follow notarget www.mslinn.com',
|
212
153
|
parse_context
|
213
154
|
)
|
214
|
-
href.
|
215
|
-
linkk = href.send(:compute_linkk)
|
216
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
155
|
+
href.render TestLiquidContext.new
|
217
156
|
expect(href.follow).to eq('')
|
218
157
|
expect(href.link).to eq('https://www.mslinn.com')
|
219
158
|
expect(href.target).to eq('')
|
220
159
|
expect(href.text).to eq('<code>www.mslinn.com</code>')
|
221
160
|
end
|
222
161
|
|
223
|
-
it
|
224
|
-
href =
|
162
|
+
it 'implicitly computes external link from text with blank' do
|
163
|
+
href = described_class.send(
|
225
164
|
:new,
|
226
165
|
'href',
|
227
|
-
'follow blank www.mslinn.com'
|
166
|
+
+ 'follow blank www.mslinn.com',
|
228
167
|
parse_context
|
229
168
|
)
|
230
|
-
href.
|
231
|
-
linkk = href.send(:compute_linkk)
|
232
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
169
|
+
href.render TestLiquidContext.new
|
233
170
|
expect(href.follow).to eq('')
|
234
171
|
expect(href.link).to eq('https://www.mslinn.com')
|
235
172
|
expect(href.target).to eq(" target='_blank'")
|
236
173
|
expect(href.text).to eq('<code>www.mslinn.com</code>')
|
174
|
+
|
175
|
+
# hrefs = HashArray.instance_variable_get(:@global_hrefs)
|
176
|
+
# expect(hrefs).to eq(
|
177
|
+
# {
|
178
|
+
# "index.html" => [
|
179
|
+
# "<a href='https://feeds.soundcloud.com/users/soundcloud:users:7143896/sounds.rss' target='_blank' rel='nofollow'>SoundCloud RSS Feed</a>",
|
180
|
+
# "<a href='https://github.com/diasks2/confidential_info_redactor' target='_blank' rel='nofollow'><code>confidential_info_redactor</code></a>",
|
181
|
+
# "<a href='https://super-fake-merger.com' target='_blank' rel='nofollow'><code>super-fake-merger.com</code></a>",
|
182
|
+
# "<a href='https://www.mslinn.com' target='_blank'><code>www.mslinn.com</code></a>"
|
183
|
+
# ],
|
184
|
+
# }
|
185
|
+
# )
|
237
186
|
end
|
238
187
|
|
239
|
-
it
|
240
|
-
href =
|
188
|
+
it 'obtains mailto without text' do
|
189
|
+
href = described_class.send(
|
241
190
|
:new,
|
242
191
|
'href',
|
243
|
-
'mailto:mslinn@mslinn.com'
|
192
|
+
+ 'mailto:mslinn@mslinn.com',
|
244
193
|
parse_context
|
245
194
|
)
|
246
|
-
href.
|
247
|
-
linkk = href.send(:compute_linkk)
|
248
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
195
|
+
href.render TestLiquidContext.new
|
249
196
|
expect(href.follow).to eq('')
|
250
197
|
expect(href.link).to eq('mailto:mslinn@mslinn.com')
|
251
198
|
expect(href.target).to eq('')
|
252
199
|
expect(href.text).to eq('<code>mslinn@mslinn.com</code>')
|
253
200
|
end
|
254
201
|
|
255
|
-
it
|
256
|
-
href =
|
202
|
+
it 'obtains mailto with text' do
|
203
|
+
href = described_class.send(
|
257
204
|
:new,
|
258
205
|
'href',
|
259
|
-
'mailto:mslinn@mslinn.com Mike Slinn'
|
206
|
+
+ 'mailto:mslinn@mslinn.com Mike Slinn',
|
260
207
|
parse_context
|
261
208
|
)
|
262
|
-
href.
|
263
|
-
linkk = href.send(:compute_linkk)
|
264
|
-
href.send(:globals_update, href.helper.argv, linkk)
|
209
|
+
href.render TestLiquidContext.new
|
265
210
|
expect(href.follow).to eq('')
|
266
211
|
expect(href.link).to eq('mailto:mslinn@mslinn.com')
|
267
212
|
expect(href.target).to eq('')
|
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'jekyll'
|
2
|
+
require 'jekyll_plugin_logger'
|
3
|
+
require 'liquid'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'yaml'
|
3
6
|
require_relative "../lib/jekyll_href"
|
4
7
|
|
5
8
|
RSpec.configure do |config|
|
6
9
|
config.filter_run :focus
|
7
|
-
config.order = "random"
|
10
|
+
# config.order = "random"
|
8
11
|
config.run_all_when_everything_filtered = true
|
9
12
|
|
10
13
|
# See https://relishapp.com/rspec/rspec-core/docs/command-line/only-failures
|
@@ -12,3 +15,65 @@ RSpec.configure do |config|
|
|
12
15
|
|
13
16
|
config.filter_run_when_matching focus: true
|
14
17
|
end
|
18
|
+
|
19
|
+
Registers = Struct.new(:page, :site)
|
20
|
+
|
21
|
+
# Mock for Collections
|
22
|
+
class Collections
|
23
|
+
def values
|
24
|
+
[]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Mock for Site
|
29
|
+
class SiteMock
|
30
|
+
attr_reader :config
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
@config = YAML.safe_load(File.read('../demo/_config.yml'))
|
34
|
+
@config['env'] = { 'JEKYLL_ENV' => 'development' }
|
35
|
+
end
|
36
|
+
|
37
|
+
def collections
|
38
|
+
Collections.new
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class TestLiquidContext < Liquid::Context
|
43
|
+
def initialize
|
44
|
+
super
|
45
|
+
|
46
|
+
page = {
|
47
|
+
"content" => "blah blah",
|
48
|
+
"description" => "Jekyll plugin support demo",
|
49
|
+
"dir" => "/",
|
50
|
+
"excerpt" => nil,
|
51
|
+
"layout" => "default",
|
52
|
+
"name" => "index.html",
|
53
|
+
"path" => "index.html",
|
54
|
+
"title" => "Welcome",
|
55
|
+
"url" => "/",
|
56
|
+
}
|
57
|
+
|
58
|
+
@content = "Interior of the tag"
|
59
|
+
@registers = Registers.new(
|
60
|
+
page,
|
61
|
+
SiteMock.new
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Mock for Liquid::ParseContent
|
67
|
+
class TestParseContext < Liquid::ParseContext
|
68
|
+
attr_reader :line_number, :registers
|
69
|
+
|
70
|
+
def initialize
|
71
|
+
super
|
72
|
+
@line_number = 123
|
73
|
+
|
74
|
+
@registers = Registers.new(
|
75
|
+
{ 'path' => 'path/to/page.html' },
|
76
|
+
SiteMock.new
|
77
|
+
)
|
78
|
+
end
|
79
|
+
end
|
data/spec/status_persistence.txt
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
example_id | status | run_time |
|
2
2
|
----------------------------------------------------------------- | ------ | --------------- |
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
3
|
+
./spec/hash_array_spec.rb[1:1] | passed | 0.17104 seconds |
|
4
|
+
./spec/href_spec.rb[1:1] | passed | 0.03236 seconds |
|
5
|
+
./spec/href_spec.rb[1:2] | passed | 0.02884 seconds |
|
6
|
+
./spec/href_spec.rb[1:3] | passed | 0.02956 seconds |
|
7
|
+
./spec/href_spec.rb[1:4] | passed | 0.02841 seconds |
|
8
|
+
./spec/href_spec.rb[1:5] | passed | 0.02897 seconds |
|
9
|
+
./spec/href_spec.rb[1:6] | passed | 0.02866 seconds |
|
10
|
+
./spec/href_spec.rb[1:7] | passed | 0.02966 seconds |
|
11
|
+
./spec/href_spec.rb[1:8] | passed | 0.02983 seconds |
|
12
|
+
./spec/href_spec.rb[1:9] | passed | 0.02735 seconds |
|
13
|
+
./spec/href_spec.rb[1:10] | passed | 0.02928 seconds |
|
14
|
+
./spec/href_spec.rb[1:11] | passed | 0.02861 seconds |
|
15
|
+
./spec/href_spec.rb[1:12] | passed | 0.02958 seconds |
|
16
|
+
./spec/href_spec.rb[1:13] | passed | 0.02714 seconds |
|
17
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:1] | passed | 0.02582 seconds |
|
18
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:2] | passed | 0.01031 seconds |
|
19
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:3] | passed | 0.01045 seconds |
|
20
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:4] | passed | 0.01038 seconds |
|
21
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:5] | passed | 0.01081 seconds |
|
22
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:6] | passed | 0.01053 seconds |
|
23
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:7] | passed | 0.01125 seconds |
|
24
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:8] | passed | 0.01113 seconds |
|
25
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:9] | passed | 0.01088 seconds |
|
26
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:10] | passed | 0.01066 seconds |
|
27
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:11] | failed | 0.06099 seconds |
|
28
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:12] | passed | 0.01096 seconds |
|
29
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_href/spec/href_spec.rb[1:13] | passed | 0.01028 seconds |
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll_href
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Slinn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -28,58 +28,42 @@ dependencies:
|
|
28
28
|
name: jekyll_all_collections
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
33
|
+
version: 0.3.0
|
38
34
|
- - ">="
|
39
35
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: jekyll_plugin_logger
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
36
|
+
version: 0.3.1
|
48
37
|
type: :runtime
|
49
38
|
prerelease: false
|
50
39
|
version_requirements: !ruby/object:Gem::Requirement
|
51
40
|
requirements:
|
52
|
-
- - "
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: key-value-parser
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
41
|
+
- - "~>"
|
60
42
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
43
|
+
version: 0.3.0
|
66
44
|
- - ">="
|
67
45
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
46
|
+
version: 0.3.1
|
69
47
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
48
|
+
name: jekyll_plugin_support
|
71
49
|
requirement: !ruby/object:Gem::Requirement
|
72
50
|
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.6.0
|
73
54
|
- - ">="
|
74
55
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
56
|
+
version: 0.6.1
|
76
57
|
type: :runtime
|
77
58
|
prerelease: false
|
78
59
|
version_requirements: !ruby/object:Gem::Requirement
|
79
60
|
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.6.0
|
80
64
|
- - ">="
|
81
65
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
66
|
+
version: 0.6.1
|
83
67
|
description: 'Generates an ''a href'' tag, possibly with target=''_blank'' and rel=''nofollow''.
|
84
68
|
|
85
69
|
'
|
@@ -95,20 +79,23 @@ files:
|
|
95
79
|
- README.md
|
96
80
|
- Rakefile
|
97
81
|
- jekyll_href.gemspec
|
82
|
+
- lib/hash_array.rb
|
83
|
+
- lib/href_summary_tag.rb
|
84
|
+
- lib/href_tag.rb
|
98
85
|
- lib/jekyll_href.rb
|
99
86
|
- lib/jekyll_href/version.rb
|
100
|
-
-
|
87
|
+
- spec/hash_array_spec.rb
|
101
88
|
- spec/href_spec.rb
|
102
89
|
- spec/spec_helper.rb
|
103
90
|
- spec/status_persistence.txt
|
104
|
-
homepage: https://www.mslinn.com/
|
91
|
+
homepage: https://www.mslinn.com/jekyll/3000-jekyll-plugins.html#href
|
105
92
|
licenses:
|
106
93
|
- MIT
|
107
94
|
metadata:
|
108
95
|
allowed_push_host: https://rubygems.org
|
109
96
|
bug_tracker_uri: https://github.com/mslinn/jekyll_href/issues
|
110
97
|
changelog_uri: https://github.com/mslinn/jekyll_href/CHANGELOG.md
|
111
|
-
homepage_uri: https://www.mslinn.com/
|
98
|
+
homepage_uri: https://www.mslinn.com/jekyll/3000-jekyll-plugins.html#href
|
112
99
|
source_code_uri: https://github.com/mslinn/jekyll_href
|
113
100
|
post_install_message: |2+
|
114
101
|
|
@@ -133,6 +120,7 @@ signing_key:
|
|
133
120
|
specification_version: 4
|
134
121
|
summary: Generates an 'a href' tag, possibly with target='_blank' and rel='nofollow'.
|
135
122
|
test_files:
|
123
|
+
- spec/hash_array_spec.rb
|
136
124
|
- spec/href_spec.rb
|
137
125
|
- spec/spec_helper.rb
|
138
126
|
- spec/status_persistence.txt
|
data/lib/jekyll_tag_helper2.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
require 'key_value_parser'
|
3
|
-
|
4
|
-
# Parses arguments and options
|
5
|
-
class JekyllTagHelper2
|
6
|
-
attr_reader :argv, :keys_values, :liquid_context, :logger, :markup, :params, :tag_name
|
7
|
-
|
8
|
-
# Expand a environment variable reference
|
9
|
-
def self.expand_env(str, die_if_undefined: false)
|
10
|
-
str.gsub(/\$([a-zA-Z_][a-zA-Z0-9_]*)|\${\g<1>}|%\g<1>%/) do
|
11
|
-
envar = Regexp.last_match(1)
|
12
|
-
raise HrefError, "jekyll_href error: #{envar} is undefined".red, [] \
|
13
|
-
if !ENV.key?(envar) && die_if_undefined # Suppress stack trace
|
14
|
-
|
15
|
-
ENV[envar]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# strip leading and trailing quotes if present
|
20
|
-
def self.remove_quotes(string)
|
21
|
-
string.strip.gsub(/\A'|\A"|'\Z|"\Z/, '').strip if string
|
22
|
-
end
|
23
|
-
|
24
|
-
def initialize(tag_name, markup, logger)
|
25
|
-
# @keys_values was a Hash[Symbol, String|Boolean] but now it is Hash[String, String|Boolean]
|
26
|
-
@tag_name = tag_name
|
27
|
-
@markup = markup # Useful for debugging
|
28
|
-
@argv = Shellwords.split(JekyllTagHelper2.expand_env(markup))
|
29
|
-
@keys_values = KeyValueParser \
|
30
|
-
.new({}, { array_values: false, normalize_keys: false, separator: /=/ }) \
|
31
|
-
.parse(@argv)
|
32
|
-
@logger = logger
|
33
|
-
@logger.debug { "@keys_values='#{@keys_values}'" }
|
34
|
-
end
|
35
|
-
|
36
|
-
def delete_parameter(key)
|
37
|
-
return if @keys_values.empty?
|
38
|
-
|
39
|
-
@params.delete(key)
|
40
|
-
@argv.delete_if { |x| x == key or x.start_with?("#{key}=") }
|
41
|
-
@keys_values.delete(key)
|
42
|
-
end
|
43
|
-
|
44
|
-
# @return if parameter was specified, removes it from the available tokens and returns value
|
45
|
-
def parameter_specified?(name)
|
46
|
-
return false if @keys_values.empty?
|
47
|
-
|
48
|
-
key = name
|
49
|
-
key = name.to_sym if @keys_values.first.first.instance_of?(Symbol)
|
50
|
-
value = @keys_values[key]
|
51
|
-
delete_parameter(name)
|
52
|
-
value
|
53
|
-
end
|
54
|
-
|
55
|
-
PREDEFINED_SCOPE_KEYS = %i[include page].freeze
|
56
|
-
|
57
|
-
# Finds variables defined in an invoking include, or maybe somewhere else
|
58
|
-
# @return variable value or nil
|
59
|
-
def dereference_include_variable(name)
|
60
|
-
@liquid_context.scopes.each do |scope|
|
61
|
-
next if PREDEFINED_SCOPE_KEYS.include? scope.keys.first
|
62
|
-
|
63
|
-
value = scope[name]
|
64
|
-
return value if value
|
65
|
-
end
|
66
|
-
nil
|
67
|
-
end
|
68
|
-
|
69
|
-
# @return value of variable, or the empty string
|
70
|
-
def dereference_variable(name)
|
71
|
-
value = @liquid_context[name] # Finds variables named like 'include.my_variable', found in @liquid_context.scopes.first
|
72
|
-
value ||= @page[name] if @page # Finds variables named like 'page.my_variable'
|
73
|
-
value ||= dereference_include_variable(name)
|
74
|
-
value ||= ''
|
75
|
-
value
|
76
|
-
end
|
77
|
-
|
78
|
-
# Sets @params by replacing any Liquid variable names with their values
|
79
|
-
def liquid_context=(context)
|
80
|
-
@liquid_context = context
|
81
|
-
@params = @keys_values.map { |k, _v| lookup_variable(k) }
|
82
|
-
end
|
83
|
-
|
84
|
-
def lookup_variable(symbol)
|
85
|
-
string = symbol.to_s
|
86
|
-
return string unless string.start_with?('{{') && string.end_with?('}}')
|
87
|
-
|
88
|
-
dereference_variable(string.delete_prefix('{{').delete_suffix('}}'))
|
89
|
-
end
|
90
|
-
|
91
|
-
def page
|
92
|
-
@liquid_context.registers[:page]
|
93
|
-
end
|
94
|
-
end
|