jekyll_pre 1.1.4 → 1.1.6

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: be2fcd1765446ab64973e355acb073057dea3c98ed1be553362b5b755e5453fb
4
- data.tar.gz: 33b14de234b5764673af3c9380d6ae32fa5a429294f7ee5f53d094aa63bf1f87
3
+ metadata.gz: 342dc6a4bc2860320f78fa197b5c8543ce387f6a4ab848133bdedae1cb3b12a9
4
+ data.tar.gz: 06bb60d730294296d468e0191e77fb0679427f35ec635121fa0c45d112ced8c9
5
5
  SHA512:
6
- metadata.gz: 46fcc4e0dcab10f27bfc9f8fa408e84e5d5c3c19f926d1de51167b39754740a2a4a3af2a17ca4c4f8dc2bf25011283205137c7afa9d144abb67ee6c2479276a5
7
- data.tar.gz: c39c5e30e3386d1eeb3029d7cf31ab159fcb8b32fb3b72fa5f03d5af8269daa30b7cf308e0bdbf1905180a468f88b2e7b00ab1e440daf75ba5ee96987bc1a727
6
+ metadata.gz: 5c0b0e9cd0a3d24e8f33834554e9ad5c306e8a679c230b0d2419fef758d329b17fed575bd02d68b8a146caf43b1709797252d123b9778deb7546d098a078d43b
7
+ data.tar.gz: 5e3bdd70cbe31a57330cf8e820965f2f13382e378cbd612a890a08c67cf3ea2222fe01630caf58ec9bc6612e5421b7e03483d9417a56655bb2cf815477a6dff1
data/.rubocop.yml CHANGED
@@ -1,13 +1,63 @@
1
- require: rubocop-jekyll
2
- inherit_gem:
3
- rubocop-jekyll: .rubocop.yml
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-rake
4
4
 
5
5
  AllCops:
6
6
  Exclude:
7
- - vendor/**/*
8
- - Gemfile*
7
+ - exe/**/*
8
+ - vendor/**/*
9
+ - Gemfile*
9
10
  NewCops: enable
10
11
  TargetRubyVersion: 2.6
11
12
 
13
+ Gemspec/DeprecatedAttributeAssignment:
14
+ Enabled: false
15
+
16
+ Gemspec/RequireMFA:
17
+ Enabled: false
18
+
19
+ Layout/HashAlignment:
20
+ Enabled: false
21
+
12
22
  Layout/LineLength:
13
23
  Max: 150
24
+
25
+ Metrics/AbcSize:
26
+ Max: 25
27
+
28
+ Metrics/BlockLength:
29
+ Exclude:
30
+ - jekyll_pre.gemspec
31
+ Max: 30
32
+
33
+ Metrics/CyclomaticComplexity:
34
+ Max: 15
35
+
36
+ Metrics/MethodLength:
37
+ Max: 30
38
+
39
+ Metrics/PerceivedComplexity:
40
+ Max: 15
41
+
42
+ Naming/FileName:
43
+ Exclude:
44
+ - Rakefile
45
+
46
+ Style/Documentation:
47
+ Enabled: false
48
+
49
+ Style/FrozenStringLiteralComment:
50
+ Enabled: false
51
+
52
+ Style/TrailingCommaInHashLiteral:
53
+ EnforcedStyleForMultiline: comma
54
+
55
+ RSpec/FilePath:
56
+ IgnoreMethods: true
57
+ SpecSuffixOnly: true
58
+
59
+ RSpec/ExampleLength:
60
+ Max: 30
61
+
62
+ RSpec/MultipleExpectations:
63
+ Max: 15
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.1.6
2
+ * Added `jekyll_plugin_support` as a dependency.
3
+
4
+
5
+ ## 1.1.5
6
+ * Added `class` and `style` options to allow for specifying additional CSS classes and inline CSS
7
+ * Added `clear` option to ensure no images overlap the pre output
8
+
1
9
  ## 1.1.4
2
10
  * Added `highlight` regex option
3
11
  * Now using `lib/jekyll_tag_helper.rb` to parse markup
data/README.md CHANGED
@@ -6,10 +6,20 @@ This Jekyll plugin provides 2 new Liquid tags that work together:
6
6
 
7
7
  * A `pre` block tag that can optionally display a copy button.
8
8
  ```
9
- {% pre [copyButton] [shell] [headline words] %}
9
+ {% pre [Options] [headline words] %}
10
10
  Contents of pre tag
11
11
  {% endpre %}
12
12
  ```
13
+ `Options` are:
14
+ - `clear` – Line break after floating HTML elements
15
+ - `class="class names"` – Apply CSS styles
16
+ - `copyButton` – Generate a copy button
17
+ - `dark` – Dark mode
18
+ - `label='This is a label'` – Apply text above pre tag
19
+ - `number` – Number the lines
20
+ - `shell` – Equivalent to `label='Shell'`
21
+ - `style` – Apply CSS styles
22
+
13
23
  The generated <pre></pre> tag has an `data-lt-active="false"` attribute, so [LanguageTool](https://forum.languagetool.org/t/avoid-spell-check-on-certain-html-inputs-manually/3944) does not check the spelling or grammar of the contents.
14
24
  * A `noselect` tag that can renders HTML content passed to it unselectable.
15
25
  ```
@@ -39,8 +49,9 @@ Below are the CSS declarations that I defined pertaining to the pre and noselect
39
49
  }
40
50
  ```
41
51
 
52
+
42
53
  ## Additional Information
43
- More information is available on [my web site](https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#jekyll_pre).
54
+ More information is available on [my website](https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#jekyll_pre).
44
55
 
45
56
 
46
57
  ## Installation
@@ -57,10 +68,6 @@ And then execute:
57
68
 
58
69
  $ bundle install
59
70
 
60
- Or install it yourself as:
61
-
62
- $ gem install jekyll_pre
63
-
64
71
 
65
72
  ## Usage
66
73
 
@@ -175,6 +182,20 @@ After checking out the repo, run `bin/setup` to install dependencies.
175
182
  You can also run `bin/console` for an interactive prompt that will allow you to experiment.
176
183
 
177
184
 
185
+ ## Test
186
+ A test website is provided in the `demo` directory.
187
+ 1. Set breakpoints.
188
+
189
+ 2. Initiate a debug session from the command line:
190
+ ```shell
191
+ $ bin/attach demo
192
+ ```
193
+
194
+ 3. Once the `Fast Debugger` signon appears, launch the Visual Studio Code launch configuration called `Attach rdebug-ide`.
195
+
196
+ 4. View the generated website at [`http://localhost:4444`](http://localhost:4444)
197
+
198
+
178
199
  ### Build and Install Locally
179
200
  To build and install this gem onto your local machine, run:
180
201
  ```shell
data/Rakefile CHANGED
@@ -1,7 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
5
3
 
6
4
  RSpec::Core::RakeTask.new(:spec)
7
- task :default => :spec
5
+ task default: :spec
data/jekyll_pre.gemspec CHANGED
@@ -1,48 +1,36 @@
1
- # frozen_string_literal: true
1
+ require_relative 'lib/jekyll_pre/version'
2
2
 
3
- require_relative "lib/jekyll_pre/version"
4
-
5
- # rubocop:disable Metrics/BlockLength
6
3
  Gem::Specification.new do |spec|
7
- github = "https://github.com/mslinn/jekyll_pre"
4
+ github = 'https://github.com/mslinn/jekyll_pre'
8
5
 
9
- spec.authors = ["Mike Slinn"]
10
- spec.bindir = "exe"
6
+ spec.authors = ['Mike Slinn']
7
+ spec.bindir = 'exe'
11
8
  spec.description = <<~END_OF_DESC
12
9
  Jekyll tags pre and noselect, for HTML <pre/> tag, prompts and unselectable text. Can number lines.
13
10
  END_OF_DESC
14
- spec.email = ["mslinn@mslinn.com"]
15
- spec.files = Dir[".rubocop.yml", "LICENSE.*", "Rakefile", "{lib,spec}/**/*", "*.gemspec", "*.md"]
16
- spec.homepage = "https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#pre"
17
- spec.license = "MIT"
11
+ spec.email = ['mslinn@mslinn.com']
12
+ spec.files = Dir['.rubocop.yml', 'LICENSE.*', 'Rakefile', '{lib,spec}/**/*', '*.gemspec', '*.md']
13
+ spec.homepage = 'https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#pre'
14
+ spec.license = 'MIT'
18
15
  spec.metadata = {
19
- "allowed_push_host" => "https://rubygems.org",
20
- "bug_tracker_uri" => "#{github}/issues",
21
- "changelog_uri" => "#{github}/CHANGELOG.md",
22
- "homepage_uri" => spec.homepage,
23
- "source_code_uri" => github,
16
+ 'allowed_push_host' => 'https://rubygems.org',
17
+ 'bug_tracker_uri' => "#{github}/issues",
18
+ 'changelog_uri' => "#{github}/CHANGELOG.md",
19
+ 'homepage_uri' => spec.homepage,
20
+ 'source_code_uri' => github,
24
21
  }
25
- spec.name = "jekyll_pre"
22
+ spec.name = 'jekyll_pre'
26
23
  spec.post_install_message = <<~END_MESSAGE
27
24
 
28
25
  Thanks for installing #{spec.name}!
29
26
 
30
27
  END_MESSAGE
31
- spec.require_paths = ["lib"]
32
- spec.required_ruby_version = ">= 2.6.0"
33
- spec.summary = "Jekyll tags pre and noselect, for HTML <pre/> tag, prompts and unselectable text. Can number lines."
34
- spec.test_files = spec.files.grep(%r!^(test|spec|features)/!)
28
+ spec.require_paths = ['lib']
29
+ spec.required_ruby_version = '>= 2.6.0'
30
+ spec.summary = 'Jekyll tags pre and noselect, for HTML <pre/> tag, prompts and unselectable text. Can number lines.'
31
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
35
32
  spec.version = JekyllPreVersion::VERSION
36
33
 
37
- spec.add_dependency "jekyll", ">= 3.5.0"
38
- spec.add_dependency "jekyll_plugin_logger"
39
- spec.add_dependency "key-value-parser"
40
- spec.add_dependency "shellwords"
41
-
42
- spec.add_development_dependency "debase"
43
- # spec.add_development_dependency "rubocop-jekyll"
44
- # spec.add_development_dependency "rubocop-rake"
45
- # spec.add_development_dependency "rubocop-rspec"
46
- spec.add_development_dependency "ruby-debug-ide"
34
+ spec.add_dependency 'jekyll', '>= 3.5.0'
35
+ spec.add_dependency 'jekyll_plugin_support', '~> 0.4.0'
47
36
  end
48
- # rubocop:enable Metrics/BlockLength
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module JekyllPreVersion
4
- VERSION = "1.1.4"
2
+ VERSION = '1.1.6'.freeze
5
3
  end
data/lib/jekyll_pre.rb CHANGED
@@ -1,63 +1,52 @@
1
- # frozen_string_literal: true
2
-
3
- require "liquid"
4
- require "jekyll_plugin_logger"
5
- require 'key_value_parser'
6
- require "shellwords"
7
- require_relative "jekyll_pre/version"
8
- require_relative "jekyll_tag_helper"
1
+ require 'liquid'
2
+ require 'jekyll_plugin_logger'
3
+ require 'jekyll_plugin_support'
4
+ require_relative 'jekyll_pre/version'
9
5
 
10
6
  module JekyllPluginPreName
11
- PLUGIN_NAME = "jekyll_pre"
7
+ PLUGIN_NAME = 'jekyll_pre'.freeze
12
8
  end
13
9
 
14
- # """
15
- # \\{% pre %}
16
- # Content here
17
- # \\{% endpre %}
18
- #
19
- # \\{% pre copyButton %}
20
- # Content here
21
- # \\{% endpre %}"""
22
- #
23
- # \\{% pre shell %}
24
- # Content here
25
- # \\{% endpre %}
26
- #
27
- # \\{% pre copyButton shell %}
28
- # Content here
29
- # \\{% endpre %}
30
- #
31
- # \\{% pre copyButton label %}
32
- # Content here
33
- # \\{% endpre %}"""
34
- class PreTagBlock < Liquid::Block
10
+ class PreTagBlock < JekyllSupport::JekyllBlock
35
11
  @@prefix = "<button class='copyBtn' data-clipboard-target="
36
12
  @@suffix = " title='Copy to clipboard'><img src='/assets/images/clippy.svg' " \
37
13
  "alt='Copy to clipboard' style='width: 13px'></button>"
38
14
 
39
15
  def self.highlight(content, pattern)
40
- content.gsub(Regexp::new(pattern), "<span class='bg_yellow'>\\0</span>")
16
+ content.gsub(Regexp.new(pattern), "<span class='bg_yellow'>\\0</span>")
41
17
  end
42
18
 
43
19
  def self.make_copy_button(pre_id)
44
20
  "#{@@prefix}'##{pre_id}'#{@@suffix}"
45
21
  end
46
22
 
47
- def self.make_pre(make_copy_button, number_lines, label, dark, highlight_pattern, content) # rubocop:disable Metrics/ParameterLists
48
- dark_label = " darkLabel" if dark
23
+ def self.make_pre(make_copy_button, number_lines, label, dark, highlight_pattern, css_class, style, clear, content) # rubocop:disable Metrics/ParameterLists
24
+ pre_clear = label_clear = ''
25
+ if clear
26
+ if label.to_s.empty?
27
+ pre_clear = ' clear'
28
+ else
29
+ label_clear = ' clear'
30
+ end
31
+ end
32
+ css_class = css_class ? " #{css_class}" : ''
33
+ style = style ? " style='#{style}'" : ''
34
+ dark_label = ' darkLabel' if dark
49
35
  label = if label.to_s.empty?
50
- ""
51
- elsif label.to_s.downcase.strip == "shell"
52
- "<div class='codeLabel unselectable#{dark_label}' data-lt-active='false'>Shell</div>"
36
+ ''
37
+ elsif label.to_s.downcase.strip == 'shell'
38
+ "<div class='codeLabel unselectable#{dark_label}#{label_clear}' data-lt-active='false'>Shell</div>"
53
39
  else
54
- "<div class='codeLabel unselectable#{dark_label}' data-lt-active='false'>#{label}</div>"
40
+ "<div class='codeLabel unselectable#{dark_label}#{label_clear}' data-lt-active='false'>#{label}</div>"
55
41
  end
56
42
  pre_id = "id#{SecureRandom.hex(6)}"
57
- copy_button = make_copy_button ? PreTagBlock.make_copy_button(pre_id) : ""
43
+ copy_button = make_copy_button ? PreTagBlock.make_copy_button(pre_id) : ''
58
44
  content = PreTagBlock.highlight(content, highlight_pattern) if highlight_pattern
59
45
  content = PreTagBlock.number_content(content) if number_lines
60
- "#{label}<pre data-lt-active='false' class='maxOneScreenHigh copyContainer#{dark}' id='#{pre_id}'>#{copy_button}#{content.strip}</pre>"
46
+
47
+ classes = "maxOneScreenHigh copyContainer#{dark}#{pre_clear}#{css_class}"
48
+ pre_content = "#{copy_button}#{content.strip}"
49
+ "#{label}<pre data-lt-active='false' class='#{classes}'#{style} id='#{pre_id}'>#{pre_content}</pre>"
61
50
  end
62
51
 
63
52
  def self.number_content(content)
@@ -66,7 +55,7 @@ class PreTagBlock < Liquid::Block
66
55
  i = 0
67
56
  numbered_content = lines.map do |line|
68
57
  i += 1
69
- number = i.to_s.rjust(digits, " ")
58
+ number = i.to_s.rjust(digits, ' ')
70
59
  "<span class='unselectable numbered_line'> #{number}: </span>#{line}"
71
60
  end
72
61
  result = numbered_content.join("\n")
@@ -74,65 +63,35 @@ class PreTagBlock < Liquid::Block
74
63
  result
75
64
  end
76
65
 
77
- # @param _tag_name [String] is the name of the tag, which we already know.
78
- # @param markup [String] the arguments from the web page.
79
- # @param _tokens [Liquid::ParseContext] tokenized command line
80
- # By default it has two keys: :locale and :line_numbers, the first is a Liquid::I18n object, and the second,
81
- # a boolean parameter that determines if error messages should display the line number the error occurred.
82
- # This argument is used mostly to display localized error messages on Liquid built-in Tags and Filters.
83
- # See https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers#create-your-own-tags
84
- # @return [void]
85
- def initialize(_tag_name, markup, _tokens)
86
- super
87
- markup = "" if markup.nil?
88
- markup.strip!
89
-
90
- @logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
91
- @helper = JekyllTagHelper.new(tag_name, markup, @logger)
92
- end
66
+ def render_impl(text)
67
+ text.strip!
93
68
 
94
- # Method prescribed by the Jekyll plugin lifecycle.
95
- # @param liquid_context [Liquid::Context]
96
- # @return [String]
97
- def render(liquid_context)
98
- content = super
99
- @helper.liquid_context = liquid_context
100
-
101
- @highlight = @helper.parameter_specified? "highlight"
102
- @make_copy_button = @helper.parameter_specified? "copyButton"
103
- @number_lines = @helper.parameter_specified? "number"
104
- @dark = " dark" if @helper.parameter_specified? "dark"
105
- @label = @helper.parameter_specified? "label"
69
+ @clear = @helper.parameter_specified? 'clear'
70
+ @class = @helper.parameter_specified? 'class'
71
+ @highlight = @helper.parameter_specified? 'highlight'
72
+ @make_copy_button = @helper.parameter_specified? 'copyButton'
73
+ @number_lines = @helper.parameter_specified? 'number'
74
+ @dark = ' dark' if @helper.parameter_specified? 'dark'
75
+ @style = @helper.parameter_specified? 'style'
76
+ @label = @helper.parameter_specified? 'label'
106
77
 
107
78
  # If a label was specified, use it, otherwise concatenate any dangling parameters and use that as the label
108
- @label ||= @helper.params.join(" ")
79
+ @label ||= @helper.argv.join(' ')
109
80
 
110
81
  @logger.debug { "@make_copy_button = '#{@make_copy_button}'; @label = '#{@label}'" }
111
- PreTagBlock.make_pre(@make_copy_button, @number_lines, @label, @dark, @highlight, content)
82
+ self.class.make_pre(@make_copy_button, @number_lines, @label, @dark, @highlight, @class, @style, @clear, text)
112
83
  end
113
84
  end
114
85
 
115
86
  # """\\{% noselect %} or \\{% noselect this all gets copied.
116
87
  # Also, space before the closing percent is signficant %}"""
117
- class UnselectableTag < Liquid::Tag
118
- # @param _tag_name [String] is the name of the tag, which we already know.
119
- # @param markup [String] the arguments from the web page.
120
- # @param _tokens [Liquid::ParseContext] tokenized command line
121
- # @return [void]
122
- def initialize(_tag_name, markup, _tokens)
123
- super
124
- @logger = PluginMetaLogger.instance.new_logger(self)
125
-
126
- @markup = markup
127
- @markup = "$ " if @markup.nil? || @markup.empty?
128
- @logger.debug { "UnselectableTag: markup= '#{@markup}'" }
129
- end
130
-
131
- def render(_)
132
- "<span class='unselectable'>#{@markup}</span>"
88
+ class UnselectableTag < JekyllSupport::JekyllTag
89
+ def render_impl
90
+ text = @helper.argv.join(' ').strip
91
+ "<span class='unselectable'>#{text}</span>"
133
92
  end
134
93
  end
135
94
 
136
95
  PluginMetaLogger.instance.info { "Loaded #{JekyllPluginPreName::PLUGIN_NAME} v#{JekyllPreVersion::VERSION} plugin." }
137
- Liquid::Template.register_tag("pre", PreTagBlock)
138
- Liquid::Template.register_tag("noselect", UnselectableTag)
96
+ Liquid::Template.register_tag('pre', PreTagBlock)
97
+ Liquid::Template.register_tag('noselect', UnselectableTag)
data/spec/pre_spec.rb CHANGED
@@ -1,14 +1,12 @@
1
- # frozen_string_literal: true
2
-
3
- require "fileutils"
4
- require "jekyll"
5
- require "key_value_parser"
6
- require "shellwords"
7
- require_relative "../lib/jekyll_pre"
1
+ require 'fileutils'
2
+ require 'jekyll'
3
+ require 'key_value_parser'
4
+ require 'shellwords'
5
+ require_relative '../lib/jekyll_pre'
8
6
 
9
7
  RSpec.describe(PreTagBlock) do
10
- it "parses arguments" do
11
- argv = Shellwords.split "number copyButton shell"
8
+ it 'parses arguments' do
9
+ argv = Shellwords.split 'number copyButton shell'
12
10
  options = KeyValueParser.new.parse(argv)
13
11
  # puts options.map { |k, v| "#{k} = #{v}" }.join("\n")
14
12
 
@@ -17,7 +15,7 @@ RSpec.describe(PreTagBlock) do
17
15
  expect(options[:shell]).to be true
18
16
  end
19
17
 
20
- it "numbers content lines" do
18
+ it 'numbers content lines' do
21
19
  content = <<~END_CONTENT
22
20
  Line 1
23
21
  Line 2
@@ -30,7 +28,7 @@ RSpec.describe(PreTagBlock) do
30
28
  Line 9
31
29
  Line 10
32
30
  END_CONTENT
33
- numbered_content = PreTagBlock.number_content(content)
31
+ numbered_content = described_class.number_content(content)
34
32
  expected_content = <<~END_CONTENT
35
33
  <span class='unselectable numbered_line'> 1: </span>Line 1
36
34
  <span class='unselectable numbered_line'> 2: </span> Line 2
@@ -46,7 +44,7 @@ RSpec.describe(PreTagBlock) do
46
44
  expect(numbered_content).to eq(expected_content)
47
45
  end
48
46
 
49
- it "highlights regex patterns" do
47
+ it 'highlights regex patterns' do
50
48
  content = <<~END_CONTENT
51
49
  Line 1
52
50
  Line 2
@@ -59,7 +57,7 @@ RSpec.describe(PreTagBlock) do
59
57
  Line 9
60
58
  Line 10
61
59
  END_CONTENT
62
- highlighted = PreTagBlock.highlight(content, ".*2").split("\n")[1]
60
+ highlighted = described_class.highlight(content, '.*2').split("\n")[1]
63
61
  expect(highlighted).to eq("<span class='bg_yellow'> Line 2</span>")
64
62
  end
65
63
  end
data/spec/spec_helper.rb CHANGED
@@ -1,19 +1,17 @@
1
- # frozen_string_literal: true
1
+ require 'jekyll'
2
+ require 'fileutils'
3
+ require 'key_value_parser'
4
+ require 'shellwords'
2
5
 
3
- require "jekyll"
4
- require "fileutils"
5
- require "key_value_parser"
6
- require "shellwords"
7
-
8
- require_relative "../lib/jekyll_pre"
6
+ require_relative '../lib/jekyll_pre'
9
7
 
10
8
  Jekyll.logger.log_level = :info
11
9
 
12
10
  RSpec.configure do |config|
13
11
  config.filter_run :focus
14
- config.order = "random"
12
+ # config.order = 'random'
15
13
  config.run_all_when_everything_filtered = true
16
14
 
17
15
  # See https://relishapp.com/rspec/rspec-core/docs/command-line/only-failures
18
- config.example_status_persistence_file_path = "spec/status_persistence.txt"
16
+ config.example_status_persistence_file_path = 'spec/status_persistence.txt'
19
17
  end
@@ -1,5 +1,5 @@
1
1
  example_id | status | run_time |
2
2
  ----------------------- | ------ | --------------- |
3
- ./spec/pre_spec.rb[1:1] | passed | 0.00187 seconds |
4
- ./spec/pre_spec.rb[1:2] | passed | 0.00285 seconds |
5
- ./spec/pre_spec.rb[1:3] | passed | 0.00056 seconds |
3
+ ./spec/pre_spec.rb[1:1] | passed | 0.00075 seconds |
4
+ ./spec/pre_spec.rb[1:2] | passed | 0.00044 seconds |
5
+ ./spec/pre_spec.rb[1:3] | passed | 0.00018 seconds |
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll_pre
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Slinn
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-24 00:00:00.000000000 Z
11
+ date: 2023-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -25,79 +25,23 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.5.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: jekyll_plugin_logger
28
+ name: jekyll_plugin_support
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: key-value-parser
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: shellwords
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
31
+ - - "~>"
60
32
  - !ruby/object:Gem::Version
61
- version: '0'
33
+ version: 0.4.0
62
34
  type: :runtime
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: debase
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: ruby-debug-ide
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
38
+ - - "~>"
95
39
  - !ruby/object:Gem::Version
96
- version: '0'
40
+ version: 0.4.0
97
41
  description: 'Jekyll tags pre and noselect, for HTML <pre/> tag, prompts and unselectable
98
42
  text. Can number lines.
99
43
 
100
- '
44
+ '
101
45
  email:
102
46
  - mslinn@mslinn.com
103
47
  executables: []
@@ -112,7 +56,6 @@ files:
112
56
  - jekyll_pre.gemspec
113
57
  - lib/jekyll_pre.rb
114
58
  - lib/jekyll_pre/version.rb
115
- - lib/jekyll_tag_helper.rb
116
59
  - spec/pre_spec.rb
117
60
  - spec/spec_helper.rb
118
61
  - spec/status_persistence.txt
@@ -143,8 +86,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
86
  - !ruby/object:Gem::Version
144
87
  version: '0'
145
88
  requirements: []
146
- rubygems_version: 3.1.4
147
- signing_key:
89
+ rubygems_version: 3.3.3
90
+ signing_key:
148
91
  specification_version: 4
149
92
  summary: Jekyll tags pre and noselect, for HTML <pre/> tag, prompts and unselectable
150
93
  text. Can number lines.
@@ -152,3 +95,4 @@ test_files:
152
95
  - spec/pre_spec.rb
153
96
  - spec/spec_helper.rb
154
97
  - spec/status_persistence.txt
98
+ ...
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "shellwords"
4
- require 'key_value_parser'
5
-
6
- class JekyllTagHelper
7
- attr_reader :argv, :liquid_context, :logger, :params, :tag_name
8
-
9
- def self.escape_html(string)
10
- string.gsub("&", "&amp;")
11
- .gsub("{", "&#123;")
12
- .gsub("}", "&#125;")
13
- .gsub("<", "&lt;")
14
- end
15
-
16
- # Expand a environment variable reference
17
- def self.expand_env(str, die_if_undefined=false)
18
- str.gsub(/\$([a-zA-Z_][a-zA-Z0-9_]*)|\${\g<1>}|%\g<1>%/) do
19
- envar = Regexp.last_match(1)
20
- raise FlexibleError, "flexible_include error: #{envar} is undefined".red, [] if !ENV.key?(envar) && die_if_undefined # Suppress stack trace
21
- ENV[envar]
22
- end
23
- end
24
-
25
- # strip leading and trailing quotes if present
26
- def self.remove_quotes(string)
27
- string.strip.gsub(/\A'|\A"|'\Z|"\Z/, '').strip if string
28
- end
29
-
30
- def initialize(tag_name, markup, logger)
31
- @tag_name = tag_name
32
- @argv = Shellwords.split(markup)
33
- @keys_values = KeyValueParser.new.parse(@argv) # Hash[Symbol, String|Boolean]
34
- @logger = logger
35
- @logger.debug { "@keys_values='#{@keys_values}'" }
36
- end
37
-
38
- def delete_parameter(name)
39
- @params.delete(name)
40
- @argv.delete_if { |x| x.start_with? name }
41
- @keys_values.delete(name.to_sym)
42
- end
43
-
44
- # @return if parameter was specified, returns value and removes it from the available tokens
45
- def parameter_specified?(name)
46
- value = @keys_values[name.to_sym]
47
- delete_parameter(name)
48
- value
49
- end
50
-
51
- PREDEFINED_SCOPE_KEYS = [:include, :page].freeze
52
-
53
- # Finds variables defined in an invoking include, or maybe somewhere else
54
- # @return variable value or nil
55
- def dereference_include_variable(name)
56
- @liquid_context.scopes.each do |scope|
57
- next if PREDEFINED_SCOPE_KEYS.include? scope.keys.first
58
-
59
- value = scope[name]
60
- return value if value
61
- end
62
- nil
63
- end
64
-
65
- # @return value of variable, or the empty string
66
- def dereference_variable(name)
67
- value = @liquid_context[name] # Finds variables named like 'include.my_variable', found in @liquid_context.scopes.first
68
- value ||= @page[name] if @page # Finds variables named like 'page.my_variable'
69
- value ||= dereference_include_variable(name)
70
- value ||= ""
71
- value
72
- end
73
-
74
- # Sets @params by replacing any Liquid variable names with their values
75
- def liquid_context=(context)
76
- @liquid_context = context
77
- @params = @keys_values.map { |k, _v| lookup_variable(k) }
78
- end
79
-
80
- def lookup_variable(symbol)
81
- string = symbol.to_s
82
- return string unless string.start_with?("{{") && string.end_with?("}}")
83
-
84
- dereference_variable(string.delete_prefix("{{").delete_suffix("}}"))
85
- end
86
-
87
- def page
88
- @liquid_context.registers[:page]
89
- end
90
- end