jekyll_flexible_include 2.0.15 → 2.0.19

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef5ec6b930c61453fe741a89ea81e1da2d9303d910a23a9520f12c47a10b802b
4
- data.tar.gz: 629a43513ddb0a6203024eeccbb52e8442d01612f5d10e2fc5451f4a9c739e52
3
+ metadata.gz: 0dda7cdd2a335fc1f4f64b9579c0b0973a3c817baee5cb3dccd45aea688081d4
4
+ data.tar.gz: 81c206fabbe87b73eaf6381e173fee3ea8dafcc3f79ce91a9a5560d6abcade49
5
5
  SHA512:
6
- metadata.gz: d16333226e03cab0849b10d1b3c022c24f03d50d4e27c1459fc0e831f0bab64d080832dac3d3671dc9e1727e60e90a15864b4f74b6860d4045404f9058e5580b
7
- data.tar.gz: ca350963ac6320ad1a1384ab8b2e3eea2c3e6043c12c0b872b95bfb05e942bc070a64a8b5631a642eaea4bd72f11fc7286b25e93a90643a6d54954a5b5b103ef
6
+ metadata.gz: 879ebc1e5250526005f3712b4c12b06fc936c0687e059e7f61401ca7d0cc4f724b0c216245f6fa555db9e3743f975afe40829c7acef8aef5b709c36be62e7bb0
7
+ data.tar.gz: e68c36ccac83b91af75ac84c24ea6f43da9f757d2cd30473788b40122a65fca461694adc99e0a83cec9329e02ca241b889b3ae44a7a2dc17228bcf03012de615
data/.rubocop.yml CHANGED
@@ -1,9 +1,9 @@
1
1
  require:
2
- - rubocop-rspec
3
2
  # - rubocop-jekyll
4
-
5
- # inherit_gem:
6
- # rubocop-jekyll: .rubocop.yml
3
+ - rubocop-md
4
+ - rubocop-performance
5
+ - rubocop-rake
6
+ - rubocop-rspec
7
7
 
8
8
  AllCops:
9
9
  Exclude:
@@ -20,7 +20,12 @@ Gemspec/DeprecatedAttributeAssignment:
20
20
  Gemspec/RequireMFA:
21
21
  Enabled: false
22
22
 
23
+ Layout/InitialIndentation:
24
+ Exclude:
25
+ - README.md
26
+
23
27
  Layout/HashAlignment:
28
+ EnforcedColonStyle: table
24
29
  EnforcedHashRocketStyle: table
25
30
 
26
31
  Layout/LineLength:
@@ -29,6 +34,10 @@ Layout/LineLength:
29
34
  Layout/MultilineMethodCallIndentation:
30
35
  Enabled: false
31
36
 
37
+ Lint/RedundantCopDisableDirective:
38
+ Exclude:
39
+ - jekyll_flexible_include_plugin.gemspec
40
+
32
41
  Metrics/AbcSize:
33
42
  Max: 45
34
43
 
@@ -42,10 +51,10 @@ Metrics/ClassLength:
42
51
  - spec/**/*
43
52
 
44
53
  Metrics/CyclomaticComplexity:
45
- Max: 10
54
+ Max: 20
46
55
 
47
56
  Metrics/MethodLength:
48
- Max: 30
57
+ Max: 40
49
58
 
50
59
  Metrics/PerceivedComplexity:
51
60
  Max: 15
@@ -63,6 +72,9 @@ RSpec/MultipleExpectations:
63
72
  Style/CommandLiteral:
64
73
  Enabled: false
65
74
 
75
+ Style/CommentedKeyword:
76
+ Enabled: false
77
+
66
78
  Style/Documentation:
67
79
  Enabled: false
68
80
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ## 2.0.19 / 2023-04-05
2
+ * Added attribution support
3
+
4
+ ## 2.0.18 / 2023-03-24
5
+ * The following are now parsed property:
6
+ `die_on_file_error`, `die_on_path_denied`, `die_on_run_error`, `die_on_path_denied`, and `die_on_other_error`.
7
+
8
+ ## 2.0.17 / 2023-03-22
9
+ * Added `repo` and `git_ref` parameters, so files can be retrieved from git repositories at a given commit or tag.
10
+
11
+ ## 2.0.16 / 2023-02-19
12
+ * Replaced hard-coded CSS in `denied` method with `flexible_error` class in
13
+ `demo/assets/css/style.css`.
14
+ * Added `-e` and `-x` options to `demo/_bin/debug`.
15
+ * Added configuration section `flexible_include` with supported parameters
16
+ `die_on_file_error`, `die_on_path_denied`, `die_on_run_error`,
17
+ `die_on_path_denied` and `die_on_other_error`.
18
+ * Fixed `undefined method 'path'` that occurred when `FLEXIBLE_INCLUDE_PATHS` was specified.
19
+
1
20
  ## 2.0.15 / 2023-02-18
2
21
  * Replaced dependency `key-value-parser` with `jekyll_plugin_support`.
3
22
  * Added `demo` website.
data/README.md CHANGED
@@ -34,46 +34,79 @@ 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
+ * `attribution` see [`jekyll_plugin_support`](https://github.com/mslinn/jekyll_plugin_support#subclass-attribution)
83
+ * `do_not_escape` keyword option caused the content to be included without HTML escaping it.
84
+ By default, the included file will escape characters <code>&lt;</code>,
85
+ <code>{</code> and <code>}</code> unless the <code>do_not_escape</code> keyword option is specified.
53
86
 
54
87
  * `highlight='regex pattern here'` wraps content matching the regex pattern within a
55
88
  `<span class='bg_yellow'></span>` tag.
56
89
  Note that the pattern can simply consist of the exact text that you want to highlight.
57
90
 
58
- * `pre` causes the included file to be wrapped inside a &lt;pre>&lt;/pre> tag,
59
- no label is generated.
91
+ * `pre` is a keyword option that causes the included file to be wrapped inside a
92
+ &lt;pre>&lt;/pre> tag; no label is generated.
60
93
  The &lt;pre>&lt;/pre> tag has an `data-lt-active="false"` attribute, so
61
94
  [LanguageTool](https://forum.languagetool.org/t/avoid-spell-check-on-certain-html-inputs-manually/3944)
62
95
  will not attempt to check the spelling or grammar of the contents.
63
96
 
64
97
  The following options imply `pre`:
65
- * `dark` applies the `dark` class to the generated &lt;pre>&lt;/pre> tag.
98
+ * `dark` keyword option applies the `dark` class to the generated &lt;pre>&lt;/pre> tag.
66
99
  You can define the `dark` and `darkLabel` classes as desired.
67
100
  [This CSS is a good starting point.](https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#pre_css)
68
101
 
69
- * `download` uses the name of the file as a label,
102
+ * `download` keyword option uses the name of the file as a label,
70
103
  and displays it above the &lt;pre>&lt;/pre> tag.
71
104
  Clicking the label causes the file to be downloaded.
72
105
 
73
- * `copy_button` draws an icon at the top right of the &lt;pre>&lt;/pre>
106
+ * `copyButton` keyword option draws an icon at the top right of the &lt;pre>&lt;/pre>
74
107
  tag that causes the included contents to be copied to the clipboard.
75
108
 
76
- * `label` specifies that an automatically generated label be placed above the contents.
109
+ * `label` keyword option specifies that an automatically generated label be placed above the contents.
77
110
  There is no need to specify this option if `download` or `copy_button` options are provided.
78
111
 
79
112
  * `label="blah blah"` specifies a label for the contents; this value overrides the default label.
@@ -130,7 +163,7 @@ and a red error message will be logged on the console that says something like:
130
163
 
131
164
  ## Installation
132
165
  1. Add the following to `Gemfile`, inside the `jekyll_plugins` group:
133
- ```
166
+ ```ruby
134
167
  group :jekyll_plugins do
135
168
  gem 'jekyll_flexible_include', '~> 2.0.15'
136
169
  end
@@ -172,13 +205,13 @@ and a red error message will be logged on the console that says something like:
172
205
  {% flexible_include 'folder/within/jekyll/site/bar.js' %}
173
206
  {% flexible_include '/etc/passwd' %}
174
207
  {% flexible_include '~/.ssh/config' %}
175
- {% flexible_include '!jekyll' %}
208
+ {% flexible_include '!jekyll help' %}
176
209
  {% flexible_include '$HOME/.bash_aliases' %}
177
210
  ```
178
211
 
179
212
  2. Include a JSON file (without escaping characters).
180
213
  ```
181
- {% flexible_include '~/folder/under/home/directory/foo.html' do_not_escape %}
214
+ {% flexible_include do_not_escape file='~/folder/under/home/directory/foo.html' %}
182
215
  ```
183
216
 
184
217
  ## Additional Information
@@ -210,7 +243,7 @@ Following is a workaround.
210
243
  ## Known Issues
211
244
  If the plugin does not work:
212
245
 
213
- 1. Ensure `_config.yml` doesn't have `safe: true`.
246
+ 1. Ensure `_config.yml` doesn't have `safe: true` set.
214
247
  That prevents all plugins from working.
215
248
 
216
249
  2. If you have version older than v2.x.x,
@@ -246,19 +279,36 @@ jekyll_flexible_include (2.0.4)
246
279
  ```
247
280
 
248
281
 
249
- ## Demo
282
+ ## Demo Website
250
283
  A test/demo website is provided in the `demo` directory.
251
284
  You can run it under a debugger, or let it run free.
252
285
 
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
- ```
286
+ The `demo/_bin/debug` script can set various parameters for the demo.
287
+ View the help information with the `-h` option:
288
+ ```shell
289
+ $ demo/_bin/debug -h
290
+
291
+ debug - Run the demo Jekyll website.
292
+
293
+ By default the demo Jekyll website runs without restriction under ruby-debug-ide and debase.
294
+ View it at http://localhost:4444
295
+
296
+ Options:
297
+ -e Restrict the allowable directories to read from to the following regexes:
298
+ jekyll_flexible_include_plugin/.*
299
+ /dev/.*
300
+ /proc/.*
301
+ /run/.*
302
+
303
+ -h Show this error message
304
+
305
+ -r Run freely, without a debugger
306
+
307
+ -x Disable the ability to execute arbitrary commands
308
+ ```
258
309
 
259
- View the generated website at [`http://localhost:4444`](http://localhost:4444)
260
310
 
261
- ### Demo Website Debugging
311
+ ### Debugging the Demo
262
312
  To run under a debugger, for example Visual Studio Code:
263
313
  1. Set breakpoints.
264
314
 
@@ -269,7 +319,7 @@ To run under a debugger, for example Visual Studio Code:
269
319
 
270
320
  3. Once the `Fast Debugger` signon appears, launch the Visual Studio Code launch configuration called `Attach rdebug-ide`.
271
321
 
272
- 4. View the generated website at [`http://localhost:4444`](http://localhost:4444)
322
+ 4. View the generated website at [`http://localhost:4444`](http://localhost:4444).
273
323
 
274
324
 
275
325
  ### Build and Push to RubyGems
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
14
14
  END_OF_DESC
15
15
  spec.email = ['mslinn@mslinn.com']
16
16
  spec.files = Dir['.rubocop.yml', 'LICENSE.*', 'Rakefile', '{lib,spec}/**/*', '*.gemspec', '*.md']
17
- spec.homepage = 'https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#flexibleInclude'
17
+ spec.homepage = 'https://www.mslinn.com/jekyll/3000-jekyll-plugins.html#flexibleInclude'
18
18
  spec.license = 'MIT'
19
19
  spec.metadata = {
20
20
  'allowed_push_host' => 'https://rubygems.org',
@@ -35,5 +35,6 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
35
35
  spec.test_files = spec.files.grep(%r!^(test|spec|features)/!)
36
36
  spec.version = JekyllFlexibleIncludePluginVersion::VERSION
37
37
 
38
- spec.add_dependency 'jekyll_plugin_support', '~> 0.5.1'
38
+ spec.add_dependency 'jekyll_plugin_support', '~> 0.6.0'
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.19'.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,28 +160,66 @@ 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
156
179
  contents2 = FlexibleInclude.number_content(contents2) if @number_lines
157
- @pre ? wrap_in_pre(path, contents2) : contents2
180
+ result = @pre ? wrap_in_pre(path, contents2) : contents2
181
+ <<~END_OUTPUT
182
+ #{result}
183
+ #{@helper.attribute if @helper.attribution}
184
+ END_OUTPUT
158
185
  end
159
186
 
160
187
  def run(cmd)
161
- @logger.debug { "Executing @filename=#{cmd}" }
188
+ if cmd.empty?
189
+ msg = format_error_message 'FlexibleIncludeError: Empty command string'
190
+ @do_not_escape = true
191
+ return "<span class='flexible_error'>#{msg}</span>" unless @die_on_other_error
192
+
193
+ raise FlexibleIncludeError, msg, []
194
+ end
195
+
196
+ @logger.debug { "Executing #{cmd}" }
162
197
  %x[#{cmd}].chomp
198
+ rescue FlexibleIncludeError => e
199
+ raise e
200
+ rescue StandardError => e
201
+ msg = format_error_message "#{e.class}: #{e.message.strip}"
202
+ @logger.error msg
203
+ @do_not_escape = true
204
+ return "<span class='flexible_error'>#{msg}</span>" unless @die_on_run_error
205
+
206
+ e.set_backtrace []
207
+ raise e
208
+ end
209
+
210
+ def setup
211
+ @helper.gem_file __FILE__ # Enables attribution
212
+ self.class.security_check
213
+
214
+ config = @config[JekyllFlexibleIncludeName::PLUGIN_NAME]
215
+ if config
216
+ @die_on_file_error = config['die_on_file_error'] == true
217
+ @die_on_other_error = config['die_on_other_error'] == true
218
+ @die_on_path_denied = config['die_on_path_denied'] == true
219
+ @die_on_run_error = config['die_on_run_error'] == true
220
+ end
221
+
222
+ parse_args
163
223
  end
164
224
 
165
225
  PREFIX = "<button class='copyBtn' data-clipboard-target=".freeze
@@ -181,7 +241,7 @@ class FlexibleInclude < JekyllSupport::JekyllTag
181
241
  dark_label = ' darkLabel' if @dark
182
242
  <<~END_PRE
183
243
  <div class="codeLabel#{dark_label}">#{label_or_href}</div>
184
- <pre data-lt-active="false" class="maxOneScreenHigh copyContainer#{@dark}" id="#{pre_id}">#{copy_button}#{content}</pre>
244
+ <pre data-lt-active="false" class="pre_tag maxOneScreenHigh copyContainer#{@dark}" id="#{pre_id}">#{copy_button}#{content}</pre>
185
245
  END_PRE
186
246
  end
187
247
 
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.19
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-04-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: jekyll_plugin_support
@@ -18,14 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: 0.5.1
21
+ version: 0.6.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: 0.5.1
28
+ version: 0.6.0
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,17 +59,18 @@ 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
- homepage: https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#flexibleInclude
66
+ homepage: https://www.mslinn.com/jekyll/3000-jekyll-plugins.html#flexibleInclude
52
67
  licenses:
53
68
  - MIT
54
69
  metadata:
55
70
  allowed_push_host: https://rubygems.org
56
71
  bug_tracker_uri: https://github.com/mslinn/jekyll_flexible_include_plugin/issues
57
72
  changelog_uri: https://github.com/mslinn/jekyll_flexible_include_plugin/CHANGELOG.md
58
- homepage_uri: https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#flexibleInclude
73
+ homepage_uri: https://www.mslinn.com/jekyll/3000-jekyll-plugins.html#flexibleInclude
59
74
  source_code_uri: https://github.com/mslinn/jekyll_flexible_include_plugin
60
75
  post_install_message: |2+
61
76
 
@@ -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