jekyll_pre 1.1.4 → 1.1.6

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: 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