jekyll_plugin_support 0.5.0 → 0.5.2
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 +24 -4
- data/CHANGELOG.md +9 -0
- data/README.md +77 -5
- data/jekyll_plugin_support.gemspec +1 -1
- data/lib/jekyll_plugin_support/version.rb +1 -1
- data/lib/jekyll_plugin_support.rb +36 -7
- data/lib/jekyll_plugin_support_helper.rb +29 -7
- data/spec/jekyll_block_plugin_support_spec.rb +51 -32
- data/spec/spec_helper.rb +1 -1
- data/spec/status_persistence.txt +6 -0
- metadata +2 -4
- data/spec/jekyll_tag_plugin_support_spec.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75b8116adff0e7869b3d9d05def0b7cb702b67860e596e3b9901dce1f43182e7
|
4
|
+
data.tar.gz: 86da2a9936cbeffb9f381d3d2031f58acee7f79d8efd7a37b2f4864c3201b20e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f944740ed80b93a8d5fa6e0e4d3a4b0fe04761aa546d2dfea10b3929d7650daf87afdcd295b3698d80ded0f50209fe04a9c918914f216cfcabc335314da7454a
|
7
|
+
data.tar.gz: c5d1f11b7fb11900a94ba1430faca977794d84fd4073e793cc50128e922c401adaee2ea5ecdc2eef16b3ed1450e0ac98e5eeff1b8dc96fcc9fda1610b04dc2f8
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-rspec
|
3
|
+
- rubocop-rake
|
4
|
+
# - rubocop-jekyll
|
5
|
+
|
1
6
|
AllCops:
|
2
7
|
Exclude:
|
8
|
+
- demo/_site/**/*
|
3
9
|
- exe/**/*
|
4
10
|
- vendor/**/*
|
5
11
|
- Gemfile*
|
@@ -13,16 +19,24 @@ Gemspec/RequireMFA:
|
|
13
19
|
Enabled: false
|
14
20
|
|
15
21
|
Layout/HashAlignment:
|
16
|
-
|
22
|
+
EnforcedHashRocketStyle: table
|
17
23
|
|
18
24
|
Layout/LineLength:
|
19
25
|
Max: 150
|
20
26
|
|
27
|
+
Layout/CommentIndentation:
|
28
|
+
Exclude:
|
29
|
+
- spec/**/*
|
30
|
+
|
21
31
|
Layout/MultilineMethodCallIndentation:
|
22
32
|
Enabled: false
|
23
33
|
|
34
|
+
Lint/RedundantCopDisableDirective:
|
35
|
+
Exclude:
|
36
|
+
- jekyll_plugin_support.gemspec
|
37
|
+
|
24
38
|
Metrics/AbcSize:
|
25
|
-
Max:
|
39
|
+
Max: 30
|
26
40
|
|
27
41
|
Metrics/BlockLength:
|
28
42
|
Exclude:
|
@@ -31,11 +45,17 @@ Metrics/BlockLength:
|
|
31
45
|
Metrics/MethodLength:
|
32
46
|
Max: 25
|
33
47
|
|
34
|
-
|
35
|
-
|
48
|
+
RSpec/ExampleLength:
|
49
|
+
Max: 20
|
50
|
+
|
51
|
+
RSpec/MultipleExpectations:
|
52
|
+
Max: 15
|
36
53
|
|
37
54
|
Style/Documentation:
|
38
55
|
Enabled: false
|
39
56
|
|
57
|
+
Style/FrozenStringLiteralComment:
|
58
|
+
Enabled: false
|
59
|
+
|
40
60
|
Style/TrailingCommaInHashLiteral:
|
41
61
|
EnforcedStyleForMultiline: comma
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 0.5.2 / 2023-03-17
|
2
|
+
* Added `@helper.remaining_markup` public method, which returns remaining markup passed to your tag, after keyword and name/value parsing is complete.
|
3
|
+
* Finally wrote proper `rspec` tests.
|
4
|
+
* Finally documented argument parsing.
|
5
|
+
* Fixed bug introduced in v0.5.1 which did not remove elements from `@params`.
|
6
|
+
|
7
|
+
## 0.5.1 / 2023-02-17
|
8
|
+
* `no_arg_parsing` optimization added.
|
9
|
+
|
1
10
|
## 0.5.0 / 2023-02-15
|
2
11
|
* Plugins now register themselves
|
3
12
|
* Plugins now report their name and version
|
data/README.md
CHANGED
@@ -19,7 +19,7 @@ And then execute:
|
|
19
19
|
|
20
20
|
$ bundle install
|
21
21
|
|
22
|
-
## Usage
|
22
|
+
## General Usage
|
23
23
|
`JekyllSupport::JekyllBlock` and `JekyllSupport::JekyllTag`
|
24
24
|
provide support for Jekyll tag blocks and Jekyll tags, respectively.
|
25
25
|
They are very similar in construction and usage.
|
@@ -47,8 +47,10 @@ For block tags, a single parameter is required, which contains any text enclosed
|
|
47
47
|
Your implementation of `render_impl` can access `@page` and `@site`,
|
48
48
|
and can parse parameters passed to the tag / block tag, [as described here](https://mslinn.com/jekyll/10100-jekyll-plugin-background.html#params):
|
49
49
|
|
50
|
+
### For a tag:
|
50
51
|
```ruby
|
51
|
-
|
52
|
+
require 'jekyll_plugin_support'
|
53
|
+
|
52
54
|
module Jekyll
|
53
55
|
class MyTag < JekyllSupport::JekyllTag
|
54
56
|
VERSION = '0.1.0'.freeze
|
@@ -56,12 +58,16 @@ module Jekyll
|
|
56
58
|
def render_impl
|
57
59
|
# Your code here
|
58
60
|
end
|
61
|
+
|
62
|
+
JekyllPluginHelper.register(self, 'demo_tag')
|
59
63
|
end
|
60
64
|
end
|
61
65
|
```
|
62
66
|
|
67
|
+
### For a tag block:
|
63
68
|
```ruby
|
64
|
-
|
69
|
+
require 'jekyll_plugin_support'
|
70
|
+
|
65
71
|
module Jekyll
|
66
72
|
class MyBlock < JekyllSupport::JekyllBlock
|
67
73
|
VERSION = '0.1.0'.freeze
|
@@ -69,6 +75,8 @@ module Jekyll
|
|
69
75
|
def render_impl(text)
|
70
76
|
# Your code here
|
71
77
|
end
|
78
|
+
|
79
|
+
JekyllPluginHelper.register(self, 'demo_block')
|
72
80
|
end
|
73
81
|
end
|
74
82
|
```
|
@@ -79,12 +87,15 @@ For example, if `lib/my_plugin/version.rb` looks like this:
|
|
79
87
|
|
80
88
|
```ruby
|
81
89
|
module MyPluginVersion
|
82
|
-
VERSION = '0.5.
|
90
|
+
VERSION = '0.5.1'.freeze
|
83
91
|
end
|
84
92
|
```
|
85
93
|
|
86
94
|
Then your plugin can incorporate the `VERSION` constant into your plugin like this:
|
87
95
|
```ruby
|
96
|
+
require 'jekyll_plugin_support'
|
97
|
+
require_relative 'my_block/version'
|
98
|
+
|
88
99
|
module Jekyll
|
89
100
|
class MyBlock < JekyllSupport::JekyllBlock
|
90
101
|
include MyPluginVersion
|
@@ -92,10 +103,71 @@ module Jekyll
|
|
92
103
|
def render_impl(text)
|
93
104
|
# Your code here
|
94
105
|
end
|
106
|
+
|
107
|
+
JekyllPluginHelper.register(self, 'demo_tag')
|
95
108
|
end
|
96
109
|
end
|
97
110
|
```
|
98
111
|
|
112
|
+
### Argument Parsing
|
113
|
+
Tag arguments can be obtained within `render_impl`.
|
114
|
+
Both keyword options and name/value parameters are supported.
|
115
|
+
|
116
|
+
Both `JekyllTag` and `JekyllBlock` use the standard Ruby mechanism for parsing command-line options:
|
117
|
+
[`shellwords`](https://ruby-doc.org/stdlib-2.5.1/libdoc/shellwords/rdoc/Shellwords.html) and
|
118
|
+
[`key_value_parser`](https://www.rubydoc.info/gems/key-value-parser).
|
119
|
+
|
120
|
+
All your code has to do is to specify the keywords to search for in the string passed from the HTML page that your tag is embedded in.
|
121
|
+
The included `demo` website has examples; both [`demo/_plugins/demo_tag.rb`](demo/_plugins/demo_tag.rb) and
|
122
|
+
[`demo/_plugins/demo_block.rb`](demo/_plugins/demo_block.rb) contain the following:
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
@keyword1 = @helper.parameter_specified? 'keyword1'
|
126
|
+
@keyword2 = @helper.parameter_specified? 'keyword2'
|
127
|
+
@name1 = @helper.parameter_specified? 'name1'
|
128
|
+
@name2 = @helper.parameter_specified? 'name2'
|
129
|
+
```
|
130
|
+
|
131
|
+
In [`demo/index.html`](demo/index.html), the following invoked the tag:
|
132
|
+
|
133
|
+
```html
|
134
|
+
{% demo_tag keyword1 name1='value1' unreferenced_key unreferenced_name="unreferenced_value" %}
|
135
|
+
```
|
136
|
+
|
137
|
+
The `demo/_plugins/demo_tag.rb` plugin uses `@helper.parameter_specified?` provided by
|
138
|
+
`jekyll_support_plugin` to parse the string passed to the tag, which is
|
139
|
+
`keyword1 name1='value1' unreferenced_key unreferenced_name="unreferenced_value"`.
|
140
|
+
|
141
|
+
- Because `keyword1` was referenced by `@helper.parameter_specified?` above,
|
142
|
+
that keyword option is removed from the argument string.
|
143
|
+
- Because the `name1` key/value parameter was referenced by `@helper.parameter_specified?` above,
|
144
|
+
that name/value pair is removed from the argument string.
|
145
|
+
- The remainder of the argument string is now `unreferenced_key unreferenced_name="unreferenced_value"`.
|
146
|
+
|
147
|
+
Name/value parameters can be quoted; if the value consists of only one token then it does not need to be quoted.
|
148
|
+
The following name/value parameters all have the same result:
|
149
|
+
|
150
|
+
- `pay_tuesday="true"`
|
151
|
+
- `pay_tuesday='true'`
|
152
|
+
- `pay_tuesday=true`
|
153
|
+
- `pay_tuesday`
|
154
|
+
|
155
|
+
The following also have the same result, however note that because the value has more than one token, quotes must be used:
|
156
|
+
|
157
|
+
- `pay_tuesday="maybe not"`
|
158
|
+
- `pay_tuesday='maybe not'`
|
159
|
+
|
160
|
+
#### Remaining Markup
|
161
|
+
After your plugin has parsed all the keyword options and name/value parameters,
|
162
|
+
call `@helper.remaining_markup` to obtain the remaining markup that was passed to your plugin.
|
163
|
+
|
164
|
+
|
165
|
+
### `no_arg_parsing` Optimization
|
166
|
+
If your tag or block plugin only needs access to the raw arguments passed from the web page,
|
167
|
+
without tokenization, and you expect that the plugin might be invoked with large amounts of text,
|
168
|
+
derive your plugin from `JekyllBlockNoArgParsing` or `JekyllTagNoArgParsing`.
|
169
|
+
|
170
|
+
|
99
171
|
## Additional Information
|
100
172
|
More information is available on
|
101
173
|
[Mike Slinn’s website](https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html).
|
@@ -128,7 +200,7 @@ jekyll_plugin_support (0.1.0)
|
|
128
200
|
License: MIT
|
129
201
|
Installed at: /home/mslinn/.gems
|
130
202
|
|
131
|
-
|
203
|
+
Provides support for writing Jekyll plugins.
|
132
204
|
```
|
133
205
|
|
134
206
|
|
@@ -5,6 +5,12 @@ require_relative 'jekyll_plugin_support/version'
|
|
5
5
|
|
6
6
|
# @author Copyright 2022 Michael Slinn
|
7
7
|
# @license SPDX-License-Identifier: Apache-2.0``
|
8
|
+
module NoArgParsing
|
9
|
+
attr_accessor :no_arg_parsing
|
10
|
+
|
11
|
+
@no_arg_parsing = true
|
12
|
+
end
|
13
|
+
|
8
14
|
module JekyllSupport
|
9
15
|
# Base class for Jekyll block tags
|
10
16
|
class JekyllBlock < Liquid::Block
|
@@ -22,9 +28,10 @@ module JekyllSupport
|
|
22
28
|
def initialize(tag_name, argument_string, parse_context)
|
23
29
|
super
|
24
30
|
@tag_name = tag_name
|
25
|
-
@logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
|
26
|
-
@helper = JekyllPluginHelper.new(tag_name, argument_string, @logger)
|
27
31
|
@argument_string = argument_string
|
32
|
+
@logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
|
33
|
+
@logger.debug { "#{self.class}: respond_to?(:no_arg_parsing) #{respond_to?(:no_arg_parsing) ? 'yes' : 'no'}." }
|
34
|
+
@helper = JekyllPluginHelper.new(tag_name, argument_string, @logger, respond_to?(:no_arg_parsing))
|
28
35
|
end
|
29
36
|
|
30
37
|
# Method prescribed by the Jekyll plugin lifecycle.
|
@@ -33,8 +40,7 @@ module JekyllSupport
|
|
33
40
|
text = super
|
34
41
|
@helper.liquid_context = liquid_context
|
35
42
|
|
36
|
-
|
37
|
-
@page = liquid_context.registers[:page] # Jekyll::Drops::DocumentDrop
|
43
|
+
@page = liquid_context.registers[:page] # Type Jekyll::Drops::DocumentDrop
|
38
44
|
@site = liquid_context.registers[:site]
|
39
45
|
@config = @site.config
|
40
46
|
@envs = liquid_context.environments.first
|
@@ -51,6 +57,17 @@ module JekyllSupport
|
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
60
|
+
class JekyllBlockNoArgParsing < JekyllBlock
|
61
|
+
def initialize(tag_name, argument_string, parse_context)
|
62
|
+
class << self
|
63
|
+
include NoArgParsing
|
64
|
+
end
|
65
|
+
|
66
|
+
super
|
67
|
+
@logger.debug { "#{self.class}: respond_to?(:o_arg_parsing) #{respond_to?(:no_arg_parsing) ? 'yes' : 'no'}." }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
54
71
|
# Base class for Jekyll tags
|
55
72
|
class JekyllTag < Liquid::Tag
|
56
73
|
attr_reader :argument_string, :helper, :line_number, :logger, :page, :site
|
@@ -67,9 +84,10 @@ module JekyllSupport
|
|
67
84
|
def initialize(tag_name, argument_string, parse_context)
|
68
85
|
super
|
69
86
|
@tag_name = tag_name
|
70
|
-
@logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
|
71
|
-
@helper = JekyllPluginHelper.new(tag_name, argument_string, @logger)
|
72
87
|
@argument_string = argument_string
|
88
|
+
@logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
|
89
|
+
@logger.debug { "#{self.class}: respond_to?(:no_arg_parsing) #{respond_to?(:no_arg_parsing) ? 'yes' : 'no'}." }
|
90
|
+
@helper = JekyllPluginHelper.new(tag_name, argument_string, @logger, respond_to?(:no_arg_parsing))
|
73
91
|
end
|
74
92
|
|
75
93
|
# Method prescribed by the Jekyll plugin lifecycle.
|
@@ -94,7 +112,18 @@ module JekyllSupport
|
|
94
112
|
# Jekyll plugins must override this method, not render, so their plugin can be tested more easily
|
95
113
|
# @page and @site are available
|
96
114
|
def render_impl
|
97
|
-
abort "
|
115
|
+
abort "#{self.class}.render_impl for tag #{@tag_name} must be overridden, but it was not."
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
class JekyllTagNoArgParsing < JekyllTag
|
120
|
+
def initialize(tag_name, argument_string, parse_context)
|
121
|
+
class << self
|
122
|
+
include NoArgParsing
|
123
|
+
end
|
124
|
+
|
125
|
+
super
|
126
|
+
@logger.debug { "#{self.class}: respond_to?(:no_arg_parsing) #{respond_to?(:no_arg_parsing) ? 'yes' : 'no'}." }
|
98
127
|
end
|
99
128
|
end
|
100
129
|
end
|
@@ -3,7 +3,7 @@ require 'key_value_parser'
|
|
3
3
|
|
4
4
|
# Base class for all types of Jekyll plugin helpers
|
5
5
|
class JekyllPluginHelper
|
6
|
-
attr_reader :argv, :keys_values, :liquid_context, :logger, :markup, :params, :tag_name
|
6
|
+
attr_reader :argv, :keys_values, :liquid_context, :logger, :markup, :no_arg_parsing, :params, :tag_name
|
7
7
|
|
8
8
|
# Expand an environment variable reference
|
9
9
|
def self.expand_env(str, die_if_undefined: false)
|
@@ -45,20 +45,43 @@ class JekyllPluginHelper
|
|
45
45
|
# This argument is used mostly to display localized error messages on Liquid built-in Tags and Filters.
|
46
46
|
# See https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers#create-your-own-tags
|
47
47
|
# @return [void]
|
48
|
-
def initialize(tag_name, markup, logger)
|
48
|
+
def initialize(tag_name, markup, logger, no_arg_parsing)
|
49
49
|
@tag_name = tag_name
|
50
50
|
@logger = logger
|
51
|
+
@no_arg_parsing = no_arg_parsing
|
51
52
|
reinitialize(markup.strip)
|
52
53
|
@logger.debug { "@keys_values='#{@keys_values}'" }
|
53
54
|
end
|
54
55
|
|
56
|
+
def warn_fetch(variable)
|
57
|
+
abort "Error: Argument parsing was suppressed, but an attempt to obtain the value of #{variable} was made"
|
58
|
+
end
|
59
|
+
|
60
|
+
def warn_parse(meth)
|
61
|
+
abort "Error: Argument parsing was suppressed, but an attempt to invoke #{meth} was made"
|
62
|
+
end
|
63
|
+
|
55
64
|
def reinitialize(markup)
|
56
65
|
# @keys_values was a Hash[Symbol, String|Boolean] but now it is Hash[String, String|Boolean]
|
57
66
|
@markup = markup
|
58
|
-
@
|
59
|
-
|
60
|
-
|
61
|
-
|
67
|
+
if @no_arg_parsing
|
68
|
+
define_singleton_method(:argv) { warn_fetch :argv }
|
69
|
+
define_singleton_method(:keys_values) { warn_fetch :keys_values }
|
70
|
+
define_singleton_method(:params) { warn_fetch :params }
|
71
|
+
define_singleton_method(:parameter_specified?) { |_name| warn_parse(:parameter_specified?) }
|
72
|
+
define_singleton_method(:delete_parameter) { |_name| warn_parse(:delete_parameter) }
|
73
|
+
else
|
74
|
+
@argv = Shellwords.split(self.class.expand_env(markup))
|
75
|
+
@keys_values = KeyValueParser \
|
76
|
+
.new({}, { array_values: false, normalize_keys: false, separator: /=/ }) \
|
77
|
+
.parse(@argv)
|
78
|
+
@params = @keys_values.map { |k, _v| lookup_variable(k) } unless respond_to?(:no_arg_parsing) && no_arg_parsing
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Call this method to return the remaining markup after `parameter_specified?` has been invoked.
|
83
|
+
def remaining_markup
|
84
|
+
@argv.join(' ')
|
62
85
|
end
|
63
86
|
|
64
87
|
def delete_parameter(key)
|
@@ -106,7 +129,6 @@ class JekyllPluginHelper
|
|
106
129
|
# Sets @params by replacing any Liquid variable names with their values
|
107
130
|
def liquid_context=(context)
|
108
131
|
@liquid_context = context
|
109
|
-
@params = @keys_values.map { |k, _v| lookup_variable(k) }
|
110
132
|
end
|
111
133
|
|
112
134
|
def lookup_variable(symbol)
|
@@ -1,41 +1,60 @@
|
|
1
1
|
require 'jekyll_plugin_logger'
|
2
|
-
|
2
|
+
require 'rspec/match_ignoring_whitespace'
|
3
3
|
require_relative '../lib/jekyll_plugin_support'
|
4
4
|
require_relative '../lib/jekyll_plugin_support_spec_support'
|
5
5
|
|
6
|
-
# Lets get this party started
|
7
6
|
class MyTest
|
8
|
-
RSpec.describe
|
9
|
-
|
10
|
-
|
7
|
+
RSpec.describe JekyllPluginHelper do
|
8
|
+
logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
|
9
|
+
|
10
|
+
it 'parses quoted string options' do
|
11
|
+
helper = described_class.new('my_tag', "colors='blue or green' blah ick", logger, false)
|
12
|
+
expect(helper.keys_values.keys).to eq(%w[colors blah ick])
|
13
|
+
|
14
|
+
colors = helper.parameter_specified? 'colors'
|
15
|
+
expect(colors).to eq('blue or green')
|
16
|
+
|
17
|
+
expect(helper.keys_values.keys).to eq(%w[blah ick])
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'parses unquoted string options' do
|
21
|
+
helper = described_class.new('my_tag', 'color=blue blah ick', logger, false)
|
22
|
+
expect(helper.keys_values.keys).to eq(%w[color blah ick])
|
23
|
+
|
24
|
+
color = helper.parameter_specified? 'color'
|
25
|
+
expect(color).to eq('blue')
|
26
|
+
|
27
|
+
expect(helper.keys_values.keys).to eq(%w[blah ick])
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'parses quoted booleans' do
|
31
|
+
helper = described_class.new('my_tag', "bool1='true' bool2='false' blah ick", logger, false)
|
32
|
+
expect(helper.keys_values.keys).to eq(%w[bool1 bool2 blah ick])
|
33
|
+
|
34
|
+
bool1 = helper.parameter_specified? 'bool1'
|
35
|
+
expect(bool1).to be true
|
36
|
+
|
37
|
+
bool2 = helper.parameter_specified? 'bool2'
|
38
|
+
expect(bool2).to be false
|
39
|
+
|
40
|
+
expect(helper.keys_values.keys).to eq(%w[blah ick])
|
41
|
+
|
42
|
+
expect(helper.remaining_markup).to eq('blah ick')
|
11
43
|
end
|
12
44
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# quote = Jekyll::Quote.send(
|
28
|
-
# :new,
|
29
|
-
# 'quote',
|
30
|
-
# command_line,
|
31
|
-
# parse_context
|
32
|
-
# )
|
33
|
-
# result = quote.send(:render_impl, command_line)
|
34
|
-
# expect(result).to match_ignoring_whitespace <<-END_RESULT
|
35
|
-
# <div class='quote'>
|
36
|
-
# This is the quoted text.
|
37
|
-
# </div>
|
38
|
-
# END_RESULT
|
39
|
-
# end
|
45
|
+
it 'parses unquoted booleans' do
|
46
|
+
helper = described_class.new('my_tag', 'bool1=true bool2=false blah ick', logger, false)
|
47
|
+
expect(helper.keys_values.keys).to eq(%w[bool1 bool2 blah ick])
|
48
|
+
|
49
|
+
bool1 = helper.parameter_specified? 'bool1'
|
50
|
+
expect(bool1).to be true
|
51
|
+
|
52
|
+
bool2 = helper.parameter_specified? 'bool2'
|
53
|
+
expect(bool2).to be false
|
54
|
+
|
55
|
+
expect(helper.keys_values.keys).to eq(%w[blah ick])
|
56
|
+
|
57
|
+
expect(helper.remaining_markup).to eq('blah ick')
|
58
|
+
end
|
40
59
|
end
|
41
60
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,7 +3,7 @@ require_relative '../lib/jekyll_plugin_support'
|
|
3
3
|
|
4
4
|
RSpec.configure do |config|
|
5
5
|
config.filter_run :focus
|
6
|
-
config.order = 'random'
|
6
|
+
# config.order = 'random'
|
7
7
|
config.run_all_when_everything_filtered = true
|
8
8
|
|
9
9
|
# See https://relishapp.com/rspec/rspec-core/docs/command-line/only-failures
|
data/spec/status_persistence.txt
CHANGED
@@ -0,0 +1,6 @@
|
|
1
|
+
example_id | status | run_time |
|
2
|
+
------------------------------------------------------------------------------------------------- | ------ | --------------- |
|
3
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_plugin_support/spec/jekyll_block_plugin_support_spec.rb[1:1] | passed | 0.00335 seconds |
|
4
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_plugin_support/spec/jekyll_block_plugin_support_spec.rb[1:2] | passed | 0.00019 seconds |
|
5
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_plugin_support/spec/jekyll_block_plugin_support_spec.rb[1:3] | passed | 0.00337 seconds |
|
6
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_plugin_support/spec/jekyll_block_plugin_support_spec.rb[1:4] | passed | 0.00026 seconds |
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll_plugin_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.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-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -70,7 +70,6 @@ files:
|
|
70
70
|
- lib/jekyll_plugin_support_helper.rb
|
71
71
|
- lib/jekyll_plugin_support_spec_support.rb
|
72
72
|
- spec/jekyll_block_plugin_support_spec.rb
|
73
|
-
- spec/jekyll_tag_plugin_support_spec.rb
|
74
73
|
- spec/spec_helper.rb
|
75
74
|
- spec/status_persistence.txt
|
76
75
|
homepage: https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#quote
|
@@ -106,7 +105,6 @@ specification_version: 4
|
|
106
105
|
summary: Provides support for writing Jekyll plugins.
|
107
106
|
test_files:
|
108
107
|
- spec/jekyll_block_plugin_support_spec.rb
|
109
|
-
- spec/jekyll_tag_plugin_support_spec.rb
|
110
108
|
- spec/spec_helper.rb
|
111
109
|
- spec/status_persistence.txt
|
112
110
|
...
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'jekyll_plugin_logger'
|
2
|
-
# require 'rspec/match_ignoring_whitespace'
|
3
|
-
require_relative '../lib/jekyll_plugin_support'
|
4
|
-
require_relative '../lib/jekyll_plugin_support_spec_support'
|
5
|
-
|
6
|
-
# Lets get this party started
|
7
|
-
class MyTest
|
8
|
-
RSpec.describe JekyllSupport::JekyllTag do
|
9
|
-
let(:logger) do
|
10
|
-
PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:parse_context) { TestParseContext.new }
|
14
|
-
|
15
|
-
# Example for plugin authors to refer to:
|
16
|
-
#
|
17
|
-
# let(:helper) do
|
18
|
-
# JekyllTagHelper.new(
|
19
|
-
# 'quote',
|
20
|
-
# "cite='This is a citation' url='https://blah.com' This is the quoted text.",
|
21
|
-
# logger
|
22
|
-
# )
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
# fit 'is created properly' do
|
26
|
-
# command_line = "cite='This is a citation' url='https://blah.com' This is the quoted text.".dup
|
27
|
-
# quote = Jekyll::Quote.send(
|
28
|
-
# :new,
|
29
|
-
# 'quote',
|
30
|
-
# command_line,
|
31
|
-
# parse_context
|
32
|
-
# )
|
33
|
-
# result = quote.send(:render_impl, command_line)
|
34
|
-
# expect(result).to match_ignoring_whitespace <<-END_RESULT
|
35
|
-
# <div class='quote'>
|
36
|
-
# This is the quoted text.
|
37
|
-
# </div>
|
38
|
-
# END_RESULT
|
39
|
-
# end
|
40
|
-
end
|
41
|
-
end
|