jekyll_plugin_support 0.4.0 → 0.5.0

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: 5704c55f7166173f403cb54d03524eec33e0180fdb1f1ef4e3fe7f3d928d1c42
4
- data.tar.gz: bac72f2f2a1e579256482b6e9e2c5583c8de1fc9c570d95e862b4ca0620a69d2
3
+ metadata.gz: ad3dd2c6f00993d77f9db69e844a1f70e52c21ac1ef66c47294cc7683dee5743
4
+ data.tar.gz: 121436f415bbcb0cddffa4f9b9c26f735e899aa733df38749e5be2856d56d238
5
5
  SHA512:
6
- metadata.gz: 6023e3b8096284d039794a90be4669181f583a25fb3f5507b35cf8458ed84fd1ce17d538ce7c513b3729fa4eff06da8f5360a6c444d8678826cbbd35ab1cd0a4
7
- data.tar.gz: 637ec49f7e0438c88acfc6ed042fd921a0cda96a986b99c3b9dfe8f9b520056af7235f8085ac1115fa092150bd6e8cd9641eb8beb50cdf00f114609306ef9a06
6
+ metadata.gz: b6d186e5d5347b7857cef3318a152a4a9db75e57ebe7dc244dd0574542b47b2c97c4ba55af03065099cca94c3ca3fb3e666268fb4e2427683b94a0c058388a7b
7
+ data.tar.gz: 1529488c906cc7c687356f22b65223f347d75eb35f1747742466166921b266c4f172233eaf638bb06af7fdf6fcd93e67d0f6ca25cbde0f98139edb05fb07d64a
data/.rubocop.yml CHANGED
@@ -1,11 +1,17 @@
1
1
  AllCops:
2
2
  Exclude:
3
- - vendor/**/*
4
- - Gemfile*
5
- - '*.gemspec' # This does nothing. Why?
3
+ - exe/**/*
4
+ - vendor/**/*
5
+ - Gemfile*
6
6
  NewCops: enable
7
7
  TargetRubyVersion: 2.6
8
8
 
9
+ Gemspec/DeprecatedAttributeAssignment:
10
+ Enabled: false
11
+
12
+ Gemspec/RequireMFA:
13
+ Enabled: false
14
+
9
15
  Layout/HashAlignment:
10
16
  Enabled: false
11
17
 
@@ -15,5 +21,21 @@ Layout/LineLength:
15
21
  Layout/MultilineMethodCallIndentation:
16
22
  Enabled: false
17
23
 
24
+ Metrics/AbcSize:
25
+ Max: 20
26
+
27
+ Metrics/BlockLength:
28
+ Exclude:
29
+ - jekyll_plugin_support.gemspec
30
+
31
+ Metrics/MethodLength:
32
+ Max: 25
33
+
18
34
  Style/FrozenStringLiteralComment:
19
35
  Enabled: false
36
+
37
+ Style/Documentation:
38
+ Enabled: false
39
+
40
+ Style/TrailingCommaInHashLiteral:
41
+ EnforcedStyleForMultiline: comma
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.5.0 / 2023-02-15
2
+ * Plugins now register themselves
3
+ * Plugins now report their name and version
4
+ * `@layout`, `@paginator`, and `@theme` have values if supported by the version of Jekyll, and they are active. (See [Jekyll docs](https://jekyllrb.com/docs/variables/).)
5
+
6
+ ## 0.4.1 / 2023-02-14
7
+ * Fixed several problems
8
+ * Added demo site
9
+
1
10
  ## 0.4.0 / 2023-02-12
2
11
  * `render_impl` for tags and blocks now predefines more instance variables:
3
12
  - `@liquid_context` – passed to `render`
data/README.md CHANGED
@@ -50,11 +50,11 @@ and can parse parameters passed to the tag / block tag, [as described here](http
50
50
  ```ruby
51
51
  # For a tag:
52
52
  module Jekyll
53
- class Quote < JekyllSupport::JekyllTag
53
+ class MyTag < JekyllSupport::JekyllTag
54
+ VERSION = '0.1.0'.freeze
55
+
54
56
  def render_impl
55
- site_data = @site.data
56
- @break = @helper.parameter_specified? 'break'
57
- # ...
57
+ # Your code here
58
58
  end
59
59
  end
60
60
  end
@@ -63,11 +63,34 @@ end
63
63
  ```ruby
64
64
  # For a tag block:
65
65
  module Jekyll
66
- class Quote < JekyllSupport::JekyllBlock
66
+ class MyBlock < JekyllSupport::JekyllBlock
67
+ VERSION = '0.1.0'.freeze
68
+
67
69
  def render_impl(text)
68
- site_url = @site.url
69
- @break = @helper.parameter_specified? 'break'
70
- # ...
70
+ # Your code here
71
+ end
72
+ end
73
+ end
74
+ ```
75
+
76
+ Note that each tag or tag block must define a constant called `VERSION`.
77
+ If your plugin is packaged as a gem, then you might need to include `version.rb` into the plugin class.
78
+ For example, if `lib/my_plugin/version.rb` looks like this:
79
+
80
+ ```ruby
81
+ module MyPluginVersion
82
+ VERSION = '0.5.0'.freeze
83
+ end
84
+ ```
85
+
86
+ Then your plugin can incorporate the `VERSION` constant into your plugin like this:
87
+ ```ruby
88
+ module Jekyll
89
+ class MyBlock < JekyllSupport::JekyllBlock
90
+ include MyPluginVersion
91
+
92
+ def render_impl(text)
93
+ # Your code here
71
94
  end
72
95
  end
73
96
  end
@@ -109,6 +132,20 @@ jekyll_plugin_support (0.1.0)
109
132
  ```
110
133
 
111
134
 
135
+ ## Test
136
+ A test website is provided in the `demo` directory.
137
+ 1. Set breakpoints.
138
+
139
+ 2. Initiate a debug session from the command line:
140
+ ```shell
141
+ $ bin/attach demo
142
+ ```
143
+
144
+ 3. Once the `Fast Debugger` signon appears, launch the Visual Studio Code launch configuration called `Attach rdebug-ide`.
145
+
146
+ 4. View the generated website at [`http://localhost:4444`](http://localhost:4444)
147
+
148
+
112
149
  ### Build and Push to RubyGems
113
150
  To release a new version,
114
151
  1. Update the version number in `version.rb`.
data/Rakefile CHANGED
@@ -2,4 +2,4 @@ require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
- task :default => :spec
5
+ task default: :spec
@@ -21,26 +21,14 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  Thanks for installing #{spec.name}!
23
23
 
24
- END_MESSAGE
25
- spec.post_install_message = <<~END_MESSAGE
26
-
27
- Thanks for installing #{spec.name}!
28
-
29
24
  END_MESSAGE
30
25
  spec.require_paths = ['lib']
31
26
  spec.required_ruby_version = '>= 2.6.0'
32
27
  spec.summary = 'Provides support for writing Jekyll plugins.'
33
28
  spec.test_files = spec.files.grep %r{^(test|spec|features)/}
34
- spec.version = JekyllQuoteVersion::VERSION
29
+ spec.version = JekyllPluginSupportVersion::VERSION
35
30
 
36
31
  spec.add_dependency 'jekyll', '>= 3.5.0'
37
32
  spec.add_dependency 'jekyll_plugin_logger'
38
33
  spec.add_dependency 'key-value-parser'
39
-
40
- spec.add_development_dependency 'debase'
41
- spec.add_development_dependency 'rspec-match_ignoring_whitespace'
42
- # spec.add_development_dependency 'rubocop-jekyll'
43
- spec.add_development_dependency 'rubocop-rake'
44
- spec.add_development_dependency 'rubocop-rspec'
45
- spec.add_development_dependency 'ruby-debug-ide'
46
34
  end
@@ -1,3 +1,3 @@
1
- module JekyllQuoteVersion
2
- VERSION = '0.4.0'.freeze
1
+ module JekyllPluginSupportVersion
2
+ VERSION = '0.5.0'.freeze
3
3
  end
@@ -31,7 +31,7 @@ module JekyllSupport
31
31
  # @return [String]
32
32
  def render(liquid_context)
33
33
  text = super
34
- @liquid_context = liquid_context
34
+ @helper.liquid_context = liquid_context
35
35
 
36
36
  # The names of front matter variables are hash keys for @page
37
37
  @page = liquid_context.registers[:page] # Jekyll::Drops::DocumentDrop
@@ -74,12 +74,20 @@ module JekyllSupport
74
74
 
75
75
  # Method prescribed by the Jekyll plugin lifecycle.
76
76
  def render(liquid_context)
77
- @liquid_context = liquid_context
78
- @page = liquid_context.registers[:page]
79
- @site = liquid_context.registers[:site]
77
+ @helper.liquid_context = liquid_context
78
+
79
+ @envs = liquid_context.environments.first
80
+
81
+ @layout = @envs[:layout]
82
+ @paginator = @envs[:paginator]
83
+ @theme = @envs[:theme]
84
+
85
+ @page = liquid_context.registers[:page]
86
+ @site = liquid_context.registers[:site]
87
+
80
88
  @config = @site.config
81
- @envs = liquid_context.environments.first
82
89
  @mode = @config['env']['JEKYLL_ENV'] || 'development'
90
+
83
91
  render_impl
84
92
  end
85
93
 
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'shellwords'
4
2
  require 'key_value_parser'
5
3
 
@@ -7,17 +5,32 @@ require 'key_value_parser'
7
5
  class JekyllPluginHelper
8
6
  attr_reader :argv, :keys_values, :liquid_context, :logger, :markup, :params, :tag_name
9
7
 
10
- # Expand a environment variable reference
8
+ # Expand an environment variable reference
11
9
  def self.expand_env(str, die_if_undefined: false)
12
10
  str.gsub(/\$([a-zA-Z_][a-zA-Z0-9_]*)|\${\g<1>}|%\g<1>%/) do
13
11
  envar = Regexp.last_match(1)
14
12
  raise HrefError, "jekyll_href error: #{envar} is undefined".red, [] \
15
13
  if !ENV.key?(envar) && die_if_undefined # Suppress stack trace
16
14
 
17
- ENV[envar]
15
+ ENV.fetch(envar, nil)
18
16
  end
19
17
  end
20
18
 
19
+ def self.register(klass, name)
20
+ abort("Error: The #{name} plugin does not define VERSION") \
21
+ unless klass.const_defined?(:VERSION)
22
+
23
+ version = klass.const_get(:VERSION)
24
+
25
+ abort("Error: The #{name} plugin is not an instance of JekyllSupport::JekyllBlock or JekyllSupport::JekyllTag") \
26
+ unless klass.instance_of?(Class) &&
27
+ (klass.ancestors.include?(JekyllSupport::JekyllBlock) || \
28
+ klass.ancestors.include?(JekyllSupport::JekyllTag))
29
+
30
+ Liquid::Template.register_tag(name, klass)
31
+ PluginMetaLogger.instance.info { "Loaded #{name} v#{version} plugin." }
32
+ end
33
+
21
34
  # strip leading and trailing quotes if present
22
35
  def self.remove_quotes(string)
23
36
  string.strip.gsub(/\A'|\A"|'\Z|"\Z/, '').strip if string
@@ -35,14 +48,14 @@ class JekyllPluginHelper
35
48
  def initialize(tag_name, markup, logger)
36
49
  @tag_name = tag_name
37
50
  @logger = logger
38
- @logger.debug { "@keys_values='#{@keys_values}'" }
39
51
  reinitialize(markup.strip)
52
+ @logger.debug { "@keys_values='#{@keys_values}'" }
40
53
  end
41
54
 
42
55
  def reinitialize(markup)
43
56
  # @keys_values was a Hash[Symbol, String|Boolean] but now it is Hash[String, String|Boolean]
44
- @markup = markup # Useful for debugging
45
- @argv = Shellwords.split(JekyllPluginHelper.expand_env(markup))
57
+ @markup = markup
58
+ @argv = Shellwords.split(self.class.expand_env(markup))
46
59
  @keys_values = KeyValueParser \
47
60
  .new({}, { array_values: false, normalize_keys: false, separator: /=/ }) \
48
61
  .parse(@argv)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll_plugin_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Slinn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-13 00:00:00.000000000 Z
11
+ date: 2023-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -52,76 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: debase
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rspec-match_ignoring_whitespace
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: rubocop-rake
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
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-rspec
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: ruby-debug-ide
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
55
  description:
126
56
  email:
127
57
  - mslinn@mslinn.com