jekyll_flexible_include 2.0.15 → 2.0.18

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef5ec6b930c61453fe741a89ea81e1da2d9303d910a23a9520f12c47a10b802b
4
- data.tar.gz: 629a43513ddb0a6203024eeccbb52e8442d01612f5d10e2fc5451f4a9c739e52
3
+ metadata.gz: d8f07914cb71b0dc833f7735175ef18ccde8357e7fcf14014d954cae6e40c5bc
4
+ data.tar.gz: e077293b1be82f05dedfd02e6326c6c64d4a87895fc4d6f90cc7d532d50df857
5
5
  SHA512:
6
- metadata.gz: d16333226e03cab0849b10d1b3c022c24f03d50d4e27c1459fc0e831f0bab64d080832dac3d3671dc9e1727e60e90a15864b4f74b6860d4045404f9058e5580b
7
- data.tar.gz: ca350963ac6320ad1a1384ab8b2e3eea2c3e6043c12c0b872b95bfb05e942bc070a64a8b5631a642eaea4bd72f11fc7286b25e93a90643a6d54954a5b5b103ef
6
+ metadata.gz: 2a476f8c116c18590acd67e5be96fb1d10889394f3c278cec7bb43d211be7a8f8dcacc158953c4e9bea3de29b6d32668e8d5500ae24a8a0bd405d091219ac6ff
7
+ data.tar.gz: 5bd8341a6eb53a35a520791a32d79ec587169650f56d36c3d4b4aa965f6247867037253d83c677cbdae913d79b19d6a18a901a63013cc49fbc526358583bb238
data/.rubocop.yml CHANGED
@@ -1,6 +1,9 @@
1
1
  require:
2
- - rubocop-rspec
3
2
  # - rubocop-jekyll
3
+ - rubocop-md
4
+ - rubocop-performance
5
+ - rubocop-rake
6
+ - rubocop-rspec
4
7
 
5
8
  # inherit_gem:
6
9
  # rubocop-jekyll: .rubocop.yml
@@ -20,8 +23,14 @@ Gemspec/DeprecatedAttributeAssignment:
20
23
  Gemspec/RequireMFA:
21
24
  Enabled: false
22
25
 
26
+ Layout/InitialIndentation:
27
+ Exclude:
28
+ - README.md
29
+
23
30
  Layout/HashAlignment:
24
- EnforcedHashRocketStyle: table
31
+ EnforcedColonStyle: table
32
+ Exclude:
33
+ - jekyll_flexible_include_plugin.gemspec
25
34
 
26
35
  Layout/LineLength:
27
36
  Max: 150
@@ -29,6 +38,10 @@ Layout/LineLength:
29
38
  Layout/MultilineMethodCallIndentation:
30
39
  Enabled: false
31
40
 
41
+ Lint/RedundantCopDisableDirective:
42
+ Exclude:
43
+ - jekyll_flexible_include_plugin.gemspec
44
+
32
45
  Metrics/AbcSize:
33
46
  Max: 45
34
47
 
@@ -42,10 +55,10 @@ Metrics/ClassLength:
42
55
  - spec/**/*
43
56
 
44
57
  Metrics/CyclomaticComplexity:
45
- Max: 10
58
+ Max: 20
46
59
 
47
60
  Metrics/MethodLength:
48
- Max: 30
61
+ Max: 40
49
62
 
50
63
  Metrics/PerceivedComplexity:
51
64
  Max: 15
@@ -63,6 +76,9 @@ RSpec/MultipleExpectations:
63
76
  Style/CommandLiteral:
64
77
  Enabled: false
65
78
 
79
+ Style/CommentedKeyword:
80
+ Enabled: false
81
+
66
82
  Style/Documentation:
67
83
  Enabled: false
68
84
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## 2.0.18 / 2023-03-24
2
+ * The following are now parsed property:
3
+ `die_on_file_error`, `die_on_path_denied`, `die_on_run_error`, `die_on_path_denied`, and `die_on_other_error`.
4
+
5
+ ## 2.0.17 / 2023-03-22
6
+ * Added `repo` and `git_ref` parameters, so files can be retrieved from git repositories at a given commit or tag.
7
+
8
+ ## 2.0.16 / 2023-02-19
9
+ * Replaced hard-coded CSS in `denied` method with `flexible_error` class in
10
+ `demo/assets/css/style.css`.
11
+ * Added `-e` and `-x` options to `demo/_bin/debug`.
12
+ * Added configuration section `flexible_include` with supported parameters
13
+ `die_on_file_error`, `die_on_path_denied`, `die_on_run_error`,
14
+ `die_on_path_denied` and `die_on_other_error`.
15
+ * Fixed `undefined method 'path'` that occurred when `FLEXIBLE_INCLUDE_PATHS` was specified.
16
+
1
17
  ## 2.0.15 / 2023-02-18
2
18
  * Replaced dependency `key-value-parser` with `jekyll_plugin_support`.
3
19
  * Added `demo` website.
data/README.md CHANGED
@@ -34,46 +34,78 @@ In addition, filenames that require environment expansion because they contain a
34
34
  defined when <code>jekyll build</code> executes.
35
35
 
36
36
 
37
+ A file from a git repository can also be included.
38
+ Files can be retrieved from at a given commit or tag.
39
+ Two new options are provided for this purpose:
40
+ - `repo` - directory where git repo resides; environment variables are expanded; defaults to current directory.
41
+ - `git_ref` - Git ref of commit or tag to be examined for the file; defaults to `HEAD`.
42
+
43
+
44
+ ### Configuration
45
+ Configuration parameters can be added to a section in `_config.yml` called `flexible_include`, like this:
46
+
47
+ ```yaml
48
+ flexible_include:
49
+ die_on_file_error: true
50
+ die_on_path_denied: true
51
+ die_on_run_error: true
52
+ die_on_other_error: true
53
+ ```
54
+
55
+ The default values for all of these parameters is `false`,
56
+ except for `die_on_other_error`, which defaults to `true`.
57
+
58
+ - If `die_on_file_error` is enabled, then an attempt to include a file that fails will cause Jekyll to die with an error message.
59
+
60
+ - If `die_on_path_denied` is enabled (see [Restricting Directory Access](#restricting-directory-access)), then an attempt to include a file that should be blocked will cause Jekyll to die with an error message.
61
+
62
+ - If `die_on_run_error` is enabled, then an attempt to run a process that fails will cause Jekyll to die with an error message.
63
+
64
+ - If `die_on_other_error` is enabled, then any other exception will cause Jekyll to die with an error message.
65
+
66
+
37
67
  ### Syntax
38
- The following are equivalent:
68
+ The following are all equivalent, however, the first two are recommended:
39
69
  ```html
70
+ {% flexible_include file="path" [ OPTIONS ] %}
71
+ {% flexible_include file='path' [ OPTIONS ] %}
40
72
  {% flexible_include path [ OPTIONS ] %}
41
73
  {% flexible_include 'path' [ OPTIONS ] %}
42
74
  {% flexible_include "path" [ OPTIONS ] %}
43
75
  ```
44
76
 
45
- By default, the included file will escape characters <code>&lt;</code>,
46
- <code>{</code> and <code>}</code> unless the <code>do_not_escape</code> keyword option is specified.
47
77
  Note that the [square brackets] merely indicate optional parameters
48
78
  and are not intended to be written literally.
49
79
 
50
80
 
51
81
  ### Options
52
- * `do_not_escape` includes the content without HTML escaping it.
82
+ * `do_not_escape` keyword option caused the content to be included without HTML escaping it.
83
+ By default, the included file will escape characters <code>&lt;</code>,
84
+ <code>{</code> and <code>}</code> unless the <code>do_not_escape</code> keyword option is specified.
53
85
 
54
86
  * `highlight='regex pattern here'` wraps content matching the regex pattern within a
55
87
  `<span class='bg_yellow'></span>` tag.
56
88
  Note that the pattern can simply consist of the exact text that you want to highlight.
57
89
 
58
- * `pre` causes the included file to be wrapped inside a &lt;pre>&lt;/pre> tag,
59
- no label is generated.
90
+ * `pre` is a keyword option that causes the included file to be wrapped inside a
91
+ &lt;pre>&lt;/pre> tag; no label is generated.
60
92
  The &lt;pre>&lt;/pre> tag has an `data-lt-active="false"` attribute, so
61
93
  [LanguageTool](https://forum.languagetool.org/t/avoid-spell-check-on-certain-html-inputs-manually/3944)
62
94
  will not attempt to check the spelling or grammar of the contents.
63
95
 
64
96
  The following options imply `pre`:
65
- * `dark` applies the `dark` class to the generated &lt;pre>&lt;/pre> tag.
97
+ * `dark` keyword option applies the `dark` class to the generated &lt;pre>&lt;/pre> tag.
66
98
  You can define the `dark` and `darkLabel` classes as desired.
67
99
  [This CSS is a good starting point.](https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#pre_css)
68
100
 
69
- * `download` uses the name of the file as a label,
101
+ * `download` keyword option uses the name of the file as a label,
70
102
  and displays it above the &lt;pre>&lt;/pre> tag.
71
103
  Clicking the label causes the file to be downloaded.
72
104
 
73
- * `copy_button` draws an icon at the top right of the &lt;pre>&lt;/pre>
105
+ * `copyButton` keyword option draws an icon at the top right of the &lt;pre>&lt;/pre>
74
106
  tag that causes the included contents to be copied to the clipboard.
75
107
 
76
- * `label` specifies that an automatically generated label be placed above the contents.
108
+ * `label` keyword option specifies that an automatically generated label be placed above the contents.
77
109
  There is no need to specify this option if `download` or `copy_button` options are provided.
78
110
 
79
111
  * `label="blah blah"` specifies a label for the contents; this value overrides the default label.
@@ -130,7 +162,7 @@ and a red error message will be logged on the console that says something like:
130
162
 
131
163
  ## Installation
132
164
  1. Add the following to `Gemfile`, inside the `jekyll_plugins` group:
133
- ```
165
+ ```ruby
134
166
  group :jekyll_plugins do
135
167
  gem 'jekyll_flexible_include', '~> 2.0.15'
136
168
  end
@@ -172,13 +204,13 @@ and a red error message will be logged on the console that says something like:
172
204
  {% flexible_include 'folder/within/jekyll/site/bar.js' %}
173
205
  {% flexible_include '/etc/passwd' %}
174
206
  {% flexible_include '~/.ssh/config' %}
175
- {% flexible_include '!jekyll' %}
207
+ {% flexible_include '!jekyll help' %}
176
208
  {% flexible_include '$HOME/.bash_aliases' %}
177
209
  ```
178
210
 
179
211
  2. Include a JSON file (without escaping characters).
180
212
  ```
181
- {% flexible_include '~/folder/under/home/directory/foo.html' do_not_escape %}
213
+ {% flexible_include do_not_escape file='~/folder/under/home/directory/foo.html' %}
182
214
  ```
183
215
 
184
216
  ## Additional Information
@@ -210,7 +242,7 @@ Following is a workaround.
210
242
  ## Known Issues
211
243
  If the plugin does not work:
212
244
 
213
- 1. Ensure `_config.yml` doesn't have `safe: true`.
245
+ 1. Ensure `_config.yml` doesn't have `safe: true` set.
214
246
  That prevents all plugins from working.
215
247
 
216
248
  2. If you have version older than v2.x.x,
@@ -246,19 +278,36 @@ jekyll_flexible_include (2.0.4)
246
278
  ```
247
279
 
248
280
 
249
- ## Demo
281
+ ## Demo Website
250
282
  A test/demo website is provided in the `demo` directory.
251
283
  You can run it under a debugger, or let it run free.
252
284
 
253
- ### Free Range Demo Website
254
- To let it run freely, without a debugger, use the `-r` option:
255
- ```shell
256
- $ demo/bin/debug -r
257
- ```
285
+ The `demo/_bin/debug` script can set various parameters for the demo.
286
+ View the help information with the `-h` option:
287
+ ```shell
288
+ $ demo/_bin/debug -h
289
+
290
+ debug - Run the demo Jekyll website.
291
+
292
+ By default the demo Jekyll website runs without restriction under ruby-debug-ide and debase.
293
+ View it at http://localhost:4444
294
+
295
+ Options:
296
+ -e Restrict the allowable directories to read from to the following regexes:
297
+ jekyll_flexible_include_plugin/.*
298
+ /dev/.*
299
+ /proc/.*
300
+ /run/.*
301
+
302
+ -h Show this error message
303
+
304
+ -r Run freely, without a debugger
305
+
306
+ -x Disable the ability to execute arbitrary commands
307
+ ```
258
308
 
259
- View the generated website at [`http://localhost:4444`](http://localhost:4444)
260
309
 
261
- ### Demo Website Debugging
310
+ ### Debugging the Demo
262
311
  To run under a debugger, for example Visual Studio Code:
263
312
  1. Set breakpoints.
264
313
 
@@ -269,7 +318,7 @@ To run under a debugger, for example Visual Studio Code:
269
318
 
270
319
  3. Once the `Fast Debugger` signon appears, launch the Visual Studio Code launch configuration called `Attach rdebug-ide`.
271
320
 
272
- 4. View the generated website at [`http://localhost:4444`](http://localhost:4444)
321
+ 4. View the generated website at [`http://localhost:4444`](http://localhost:4444).
273
322
 
274
323
 
275
324
  ### Build and Push to RubyGems
@@ -36,4 +36,5 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
36
36
  spec.version = JekyllFlexibleIncludePluginVersion::VERSION
37
37
 
38
38
  spec.add_dependency 'jekyll_plugin_support', '~> 0.5.1'
39
+ spec.add_dependency 'rugged'
39
40
  end
@@ -1,3 +1,3 @@
1
1
  module JekyllFlexibleIncludePluginVersion
2
- VERSION = '2.0.15'.freeze
2
+ VERSION = '2.0.18'.freeze
3
3
  end
@@ -58,29 +58,21 @@ module FlexibleClassMethods
58
58
  end
59
59
  end
60
60
 
61
- class FlexibleError < StandardError; end
61
+ FlexibleIncludeError = Class.new(Liquid::Error)
62
62
 
63
- class FlexibleInclude < JekyllSupport::JekyllTag
63
+ class FlexibleInclude < JekyllSupport::JekyllTag # rubocop: disable Metrics/ClassLength
64
64
  include JekyllFlexibleIncludePluginVersion
65
65
 
66
- class << self
67
- include FlexibleClassMethods
68
- end
69
-
70
- FlexibleIncludeError = Class.new(Liquid::Error)
71
-
72
- def render_impl
73
- self.class.security_check
74
- parse_args
66
+ def render_impl # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
67
+ setup
75
68
  path = JekyllPluginHelper.expand_env(@filename)
76
-
77
69
  case path
78
70
  when /\A\// # Absolute path
79
- return denied("Access to #{path} denied by FLEXIBLE_INCLUDE_PATHS value.") unless self.class.access_allowed(path)
71
+ return denied("Access to <code>#{path}</code> denied by <code>FLEXIBLE_INCLUDE_PATHS</code> value.") unless self.class.access_allowed(path)
80
72
 
81
73
  @logger.debug { "Absolute path=#{path}, @filename=#{@filename}" }
82
74
  when /\A~/ # Relative path to user's home directory
83
- return denied("Access to #{path} denied by FLEXIBLE_INCLUDE_PATHS value.") unless self.class.access_allowed(path)
75
+ return denied("Access to <code>#{path}</code> denied by <code>FLEXIBLE_INCLUDE_PATHS</code> value.") unless self.class.access_allowed(path)
84
76
 
85
77
  @logger.debug { "User home start @filename=#{@filename}, path=#{path}" }
86
78
  @filename = @filename.delete_prefix '~/'
@@ -99,19 +91,49 @@ class FlexibleInclude < JekyllSupport::JekyllTag
99
91
  @logger.debug { "Relative end @filename=#{@filename}, path=#{path}" }
100
92
  end
101
93
  render_completion(path, contents)
102
- # rescue StandardError => e
103
- # raise FlexibleIncludeError, e.message.red, [] # Suppress stack trace
94
+ rescue Errno::EACCES => e
95
+ msg = format_error_message e.message
96
+ @logger.error msg
97
+ raise FlexibleIncludeError, msg, [] if @die_on_file_error
98
+
99
+ "<span class='flexible_error'>FlexibleIncludeError: #{msg}</span>"
100
+ rescue Errno::ENOENT => e
101
+ msg = format_error_message e.message
102
+ @logger.error msg
103
+ raise FlexibleIncludeError, msg, [] if @die_on_path_denied
104
+
105
+ "<span class='flexible_error'>FlexibleIncludeError: #{msg}</span>"
106
+ rescue FlexibleIncludeError => e
107
+ @logger.error e.message
108
+ raise e
109
+ rescue StandardError => e
110
+ msg = format_error_message e.message
111
+ @logger.error msg
112
+ raise FlexibleIncludeError, msg, [] if @die_on_other_error
113
+
114
+ "<span class='flexible_error'>FlexibleIncludeError: #{msg}</span>"
104
115
  end
105
116
 
106
117
  private
107
118
 
119
+ class << self
120
+ include FlexibleClassMethods
121
+ end
122
+
108
123
  def denied(msg)
109
- @logger.error("#{@helper.page.path} - #{msg}")
110
- "<p style='color: white; background-color: red; padding: 2pt 1em 2pt 1em;'>#{msg}</p>"
124
+ msg_no_html = remove_html_tags(msg)
125
+ @logger.error("#{@page['path']} - #{msg_no_html}")
126
+ raise FlexibleIncludeError, "#{@page['path']} - #{msg_no_html.red}", [] if @die_on_path_denied
127
+
128
+ "<p class='flexible_error'>#{msg}</p>"
129
+ end
130
+
131
+ def format_error_message(message)
132
+ "#{message} on line #{@line_number} (after front matter) of #{@page['path']}}"
111
133
  end
112
134
 
113
135
  def highlight(content, pattern)
114
- content.gsub(Regexp::new(pattern), "<span class='bg_yellow'>\\0</span>")
136
+ content.gsub(Regexp.new(pattern), "<span class='bg_yellow'>\\0</span>")
115
137
  end
116
138
 
117
139
  def parse_args
@@ -138,18 +160,19 @@ class FlexibleInclude < JekyllSupport::JekyllTag
138
160
  @logger.debug("@filename=#{@filename}")
139
161
  end
140
162
 
141
- def read_file(file)
142
- File.read(file)
143
- end
144
-
163
+ # Not used, delete
145
164
  def realpath_prefixed_with?(path, dir)
146
165
  File.exist?(path) && File.realpath(path).start_with?(dir)
147
- rescue StandardError
148
- false
166
+ rescue StandardError => _e
167
+ raise FlexibleIncludeError, remove_html_tags(e.message).red, [] if @die_on_file_error
168
+ end
169
+
170
+ def remove_html_tags(string)
171
+ string.gsub(/<[^>]*>/, '')
149
172
  end
150
173
 
151
174
  def render_completion(path, contents)
152
- contents ||= read_file(path)
175
+ contents ||= File.read(path)
153
176
  contents.strip! if @strip
154
177
  contents2 = @do_not_escape ? contents : FlexibleClassMethods.escape_html(contents)
155
178
  contents2 = highlight(contents2, @highlight_pattern) if @highlight_pattern
@@ -158,8 +181,40 @@ class FlexibleInclude < JekyllSupport::JekyllTag
158
181
  end
159
182
 
160
183
  def run(cmd)
161
- @logger.debug { "Executing @filename=#{cmd}" }
184
+ if cmd.empty?
185
+ msg = format_error_message 'FlexibleIncludeError: Empty command string'
186
+ @do_not_escape = true
187
+ return "<span class='flexible_error'>#{msg}</span>" unless @die_on_other_error
188
+
189
+ raise FlexibleIncludeError, msg, []
190
+ end
191
+
192
+ @logger.debug { "Executing #{cmd}" }
162
193
  %x[#{cmd}].chomp
194
+ rescue FlexibleIncludeError => e
195
+ raise e
196
+ rescue StandardError => e
197
+ msg = format_error_message "#{e.class}: #{e.message.strip}"
198
+ @logger.error msg
199
+ @do_not_escape = true
200
+ return "<span class='flexible_error'>#{msg}</span>" unless @die_on_run_error
201
+
202
+ e.set_backtrace []
203
+ raise e
204
+ end
205
+
206
+ def setup
207
+ self.class.security_check
208
+
209
+ config = @config[JekyllFlexibleIncludeName::PLUGIN_NAME]
210
+ if config
211
+ @die_on_file_error = config['die_on_file_error'] == true
212
+ @die_on_other_error = config['die_on_other_error'] == true
213
+ @die_on_path_denied = config['die_on_path_denied'] == true
214
+ @die_on_run_error = config['die_on_run_error'] == true
215
+ end
216
+
217
+ parse_args
163
218
  end
164
219
 
165
220
  PREFIX = "<button class='copyBtn' data-clipboard-target=".freeze
data/lib/git_util.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'rugged'
2
+
3
+ class GitFileReader
4
+ def initialize(repo_dir = '.')
5
+ @repo = Rugged::Repository.new repo_dir
6
+ end
7
+
8
+ def blob_at(ref, path)
9
+ commit = @repo.rev_parse ref # Rugged::Commit
10
+ @repo.blob_at(commit.oid, path) # Rugged::Blob
11
+ end
12
+
13
+ def commit_for_ref(ref)
14
+ reference = @repo.ref ref # Rugged::Reference
15
+ abort "Error: #{ref} is an invalid ref" if reference.nil?
16
+
17
+ reference_direct = reference.type == :symbolic ? reference.target : reference
18
+ @commit = reference_direct.target # Rugged::Commit
19
+ self
20
+ end
21
+
22
+ # @return content of desired file
23
+ def contents(filename)
24
+ abort('Error: @commit is undefined; invoke commit_for_ref before invoking contents') if @commit.nil?
25
+
26
+ tree = @commit.tree # Rugged::Tree
27
+ entry = tree.get_entry filename # hash
28
+ abort("Error: #{filename} is not present in commit #{commit.oid}") if entry.nil?
29
+
30
+ sha = entry[:oid] # String
31
+ object = @repo.read sha # Rugged::ObdObject; this is a blob
32
+ object.data # String
33
+ end
34
+ end
35
+
36
+ if $PROGRAM_NAME == __FILE__
37
+ puts GitFileReader.new('.').blob_at('HEAD~2', 'README.md').content
38
+ # puts GitFileReader.new('.').commit_for_ref('HEAD^').contents('README.md')
39
+ # puts GitFileReader.new('.').commit_for_ref('HEAD').contents('README.md')
40
+ # puts GitFileReader.new('.').commit_for_ref('refs/heads/master').contents('README.md')
41
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll_flexible_include
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.15
4
+ version: 2.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Slinn
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2023-02-19 00:00:00.000000000 Z
13
+ date: 2023-03-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: jekyll_plugin_support
@@ -26,6 +26,20 @@ dependencies:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
28
  version: 0.5.1
29
+ - !ruby/object:Gem::Dependency
30
+ name: rugged
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
29
43
  description: |
30
44
  Jekyll's built-in include tag only supports including files within the _includes folder.
31
45
  This plugin supports 4 types of includes: absolute filenames,
@@ -45,7 +59,8 @@ files:
45
59
  - jekyll_flexible_include_plugin.gemspec
46
60
  - lib/flexible_include.rb
47
61
  - lib/flexible_include/version.rb
48
- - spec/glob_spec.rb
62
+ - lib/git_util.rb
63
+ - spec/flexible_include_spec.rb
49
64
  - spec/spec_helper.rb
50
65
  - spec/status_persistence.txt
51
66
  homepage: https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#flexibleInclude
@@ -81,7 +96,7 @@ specification_version: 4
81
96
  summary: Jekyll plugin supports various ways to include content into the generated
82
97
  site.
83
98
  test_files:
84
- - spec/glob_spec.rb
99
+ - spec/flexible_include_spec.rb
85
100
  - spec/spec_helper.rb
86
101
  - spec/status_persistence.txt
87
102
  ...
File without changes