jekyll_badge 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 834bd7abc2419f6afdd57c028c2eb097809fd39fbde253ef024e51f6f010a772
4
+ data.tar.gz: 30b2431ae996917cc61cb722052636219b339840816cde4ff37b2698c66dbbb8
5
+ SHA512:
6
+ metadata.gz: 20dc2fec246c3673b629a12a0f0ec3da9a759c05707147d0fd0aa9bb7d65761e5a0722acaad42d079a3f401dfed015e7100200220ae6a05ab29b4de045cf1f80
7
+ data.tar.gz: 8a7a751d2e39550e62e63d7b0198656b8dc1992d1cf2d83e625e4f666728f30f6372fe7a958ccfedd0f4a424681b5c5eb3d80ef5465cc403de52063c7884a676
data/.rubocop.yml ADDED
@@ -0,0 +1,71 @@
1
+ require:
2
+ # - rubocop-jekyll
3
+ - rubocop-md
4
+ - rubocop-performance
5
+ - rubocop-rake
6
+ - rubocop-rspec
7
+
8
+ AllCops:
9
+ Exclude:
10
+ - binstub/**/*
11
+ - exe/**/*
12
+ - vendor/**/*
13
+ - Gemfile*
14
+ NewCops: enable
15
+ TargetRubyVersion: 3.1.3
16
+
17
+ Gemspec/DeprecatedAttributeAssignment:
18
+ Enabled: false
19
+
20
+ Gemspec/RequireMFA:
21
+ Enabled: false
22
+
23
+ Layout/HashAlignment:
24
+ EnforcedColonStyle: table
25
+ EnforcedHashRocketStyle: table
26
+
27
+ Layout/LineLength:
28
+ Max: 150
29
+
30
+ Metrics/AbcSize:
31
+ Max: 35
32
+
33
+ Metrics/BlockLength:
34
+ Exclude:
35
+ - jekyll_badge.gemspec
36
+ Max: 30
37
+
38
+ Metrics/CyclomaticComplexity:
39
+ Max: 15
40
+
41
+ Metrics/MethodLength:
42
+ Max: 40
43
+
44
+ Metrics/ModuleLength:
45
+ Enabled: false
46
+
47
+ Metrics/PerceivedComplexity:
48
+ Max: 15
49
+
50
+ Naming/FileName:
51
+ Exclude:
52
+ - Rakefile
53
+
54
+ Style/Documentation:
55
+ Enabled: false
56
+
57
+ Style/FrozenStringLiteralComment:
58
+ Enabled: false
59
+
60
+ Style/TrailingCommaInHashLiteral:
61
+ EnforcedStyleForMultiline: comma
62
+
63
+ RSpec/FilePath:
64
+ IgnoreMethods: true
65
+ SpecSuffixOnly: true
66
+
67
+ RSpec/ExampleLength:
68
+ Max: 30
69
+
70
+ RSpec/MultipleExpectations:
71
+ Max: 15
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Change Log
2
+
3
+ ## 0.1.0
4
+
5
+ * Initial release.
data/README.md ADDED
@@ -0,0 +1,89 @@
1
+ # `Badge` [![Gem Version](https://jekyll_badge.fury.io/rb/jekyll_badge.svg)](https://jekyll_badge.fury.io/rb/jekyll_badge)
2
+
3
+ Displays a badge on a Jekyll page for the package showing its version.
4
+
5
+
6
+ ## Installation
7
+
8
+ Add the following to your Jekyll website's `Gemfile`:
9
+
10
+ ```ruby
11
+ group :jekyll_plugins do
12
+ gem 'jekyll_badge'
13
+ end
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ ```shell
19
+ $ bundle
20
+ ```
21
+
22
+
23
+ ## Usage
24
+
25
+ See [demo/index.html](demo/index.html) for examples.
26
+
27
+
28
+ ### Options
29
+
30
+ - `align` – Float badge `left`, `center` or `right`.
31
+ - `class` – Override default class for generated badge (`rounded shadow`).
32
+ - `clear` – Ensure the badge is moved below (cleared) below floating elements that precede it.
33
+ - `git_url_base` – Override the default value specified in
34
+
35
+
36
+ ## Development
37
+
38
+ After checking out this git repository, install dependencies by typing:
39
+
40
+ ```shell
41
+ $ bin/setup
42
+ ```
43
+
44
+ You should do the above before running Visual Studio Code.
45
+
46
+
47
+ ### Run the Tests
48
+
49
+ ```shell
50
+ $ bundle exec rake test
51
+ ```
52
+
53
+
54
+ ### Interactive Session
55
+
56
+ The following will allow you to experiment:
57
+
58
+ ```shell
59
+ $ bin/console
60
+ ```
61
+
62
+
63
+ ### Local Installation
64
+
65
+ To install this gem onto your local machine, type:
66
+
67
+ ```shell
68
+ $ bundle exec rake install
69
+ ```
70
+
71
+
72
+ ### To Release A New Version
73
+
74
+ To create a git tag for the new version, push git commits and tags,
75
+ and push the new version of the gem to https://rubygems.org, type:
76
+
77
+ ```shell
78
+ $ bundle exec rake release
79
+ ```
80
+
81
+
82
+ ## Contributing
83
+
84
+ Bug reports and pull requests are welcome at https://github.com/mslinn/jekyll_badge.
85
+
86
+
87
+ ## License
88
+
89
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,40 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ desc 'Bump patch version'
11
+ task :patch do
12
+ system 'gem bump --tag'
13
+ end
14
+
15
+ desc 'Bump minor version'
16
+ task :minor do
17
+ system 'gem bump --version minor --tag'
18
+ end
19
+
20
+ desc 'Bump major version'
21
+ task :major do
22
+ system 'gem bump --version major --tag'
23
+ end
24
+
25
+ task publish: [:build] do
26
+ $VERBOSE = nil
27
+ load 'jekyll_badge/version.rb'
28
+ system "gem push pkg/jekyll_badge-#{JekyllBadge::VERSION}.gem"
29
+ end
30
+
31
+ desc 'Bump patch version, create git tag, build the gem and release to geminabox (default)'
32
+ task release_patch: %i[test patch publish]
33
+
34
+ desc 'Bump minor version, create git tag, build the gem and release to geminabox'
35
+ task release_minor: %i[test minor publish]
36
+
37
+ desc 'Bump major version, create git tag, build the gem and release to geminabox'
38
+ task release_major: %i[test major publish]
39
+
40
+ task default: :test
@@ -0,0 +1,34 @@
1
+ require_relative 'lib/jekyll_badge/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ host = 'https://github.com/mslinn/jekyll_badge'
5
+
6
+ spec.authors = ['Mike Slinn']
7
+ spec.description = <<~END_DESC
8
+ Displays a badge on a Jekyll page for the package showing its version
9
+ END_DESC
10
+ spec.email = ['mslinn@mslinn.com']
11
+ spec.files = Dir['.rubocop.yml', 'LICENSE.*', 'Rakefile', '{lib,spec}/**/*', '*.gemspec', '*.md']
12
+ spec.homepage = 'https://www.mslinn.com/jekyll_plugins/jekyll_badge.html'
13
+ spec.license = 'MIT'
14
+ spec.metadata = {
15
+ 'allowed_push_host' => 'https://rubygems.org',
16
+ 'bug_tracker_uri' => "#{host}/issues",
17
+ 'changelog_uri' => "#{host}/CHANGELOG.md",
18
+ 'homepage_uri' => spec.homepage,
19
+ 'source_code_uri' => host,
20
+ }
21
+ spec.name = 'jekyll_badge'
22
+ spec.post_install_message = <<~END_MESSAGE
23
+
24
+ Thanks for installing #{spec.name}!
25
+
26
+ END_MESSAGE
27
+ spec.require_paths = ['lib']
28
+ spec.required_ruby_version = '>= 3.1.0'
29
+ spec.summary = 'Displays a badge on a Jekyll page for the package showing its version'
30
+ spec.version = JekyllBadge::VERSION
31
+ spec.add_dependency 'jekyll', '>= 3.5.0'
32
+ spec.add_dependency 'jekyll_plugin_support', '>= 0.7.0'
33
+ spec.add_dependency 'ruby-link-checker'
34
+ end
@@ -0,0 +1,3 @@
1
+ module JekyllBadge
2
+ VERSION = '0.1.0'.freeze unless defined? VERSION
3
+ end
@@ -0,0 +1,104 @@
1
+ require 'jekyll_plugin_support'
2
+ require 'net/http'
3
+ require 'ruby-link-checker'
4
+ require 'uri'
5
+
6
+ require_relative 'jekyll_badge/version'
7
+
8
+ class String
9
+ def squish
10
+ strip.gsub(/\s+/, ' ')
11
+ end
12
+ end
13
+
14
+ module JekyllBadge
15
+ # This class implements the jekyll_badge functionality
16
+ # Assumes project is stored on GitHub
17
+ class JekyllBadge < JekyllSupport::JekyllTag
18
+ PLUGIN_NAME = 'jekyll_badge'.freeze
19
+ VERSION = ::JekyllBadge::VERSION
20
+
21
+ def render_impl
22
+ @align = @helper.parameter_specified?('align') || 'right'
23
+ @clear = @helper.parameter_specified?('clear') ? 'clear' : nil
24
+ @class = @helper.parameter_specified?('class') || 'rounded shadow'
25
+ # TODO: put this into _config.yml
26
+ @git_url_base = @helper.parameter_specified?('git_url_base') || 'https://github.com/mslinn'
27
+ @image = @helper.parameter_specified?('image') || '/blog/images/git/github-mark'
28
+ @name = @helper.parameter_specified?('name') || @page['name']
29
+ @label = @helper.parameter_specified?('label') || @name
30
+ @style = @helper.parameter_specified?('style') || ''
31
+ @git_url = @helper.parameter_specified?('git_url') || "#{@git_url_base}/#{@name}"
32
+
33
+ unless %w[left center right].include? @align
34
+ @helper.logger.warn { "Ignoring invalid align value ('#{@align}') on line #{@line_number} (plus front matter) of #{@page['name']}." }
35
+ @align = 'right'
36
+ end
37
+
38
+ if @check_links
39
+ check_url
40
+ else
41
+ generate_output
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ # Calling this method can slow down startup time dramatically because of HTTP timeouts
48
+ # Better to use this functionality in parallel, the way it was designed, instead of this
49
+ def check_url
50
+ puts 'Checking links, please wait ...'
51
+ @link_checker.check @git_url
52
+ @link_checker.results.each_pair do |_bucket, result|
53
+ if result
54
+ generate_output
55
+ else
56
+ msg = "Error: #{@git_url} is broken"
57
+ @helper.logger.error { msg }
58
+ "<span style='color: red;'>#{msg}</span>"
59
+ end
60
+ end
61
+ end
62
+
63
+ def generate_output
64
+ classes = "gem_banner #{@align} #{@class} #{@clear}".squish
65
+ <<~END_CONTENT
66
+ <div class="#{classes}" style='#{@style}'>
67
+ <div class="center one_column">
68
+ <a href='https://rubygems.org/gems/#{@name}' target='_blank' class='imgImgUrl'>
69
+ #{"<code class='banner_label'>#{@label}</code>" unless @label.empty?}
70
+ <div class='imgWrapper imgFlex center' style='margin-bottom: 0;'>
71
+ <picture class='imgPicture'>
72
+ <source srcset="https://badge.fury.io/rb/#{@name}.svg" type="image/webp">
73
+ <source srcset="https://badge.fury.io/rb/#{@name}.svg" type="image/png">
74
+ <img alt='#{@name} version'
75
+ class="imgImg"
76
+ src="https://badge.fury.io/rb/#{@name}.svg"
77
+ style='width: 100%;'
78
+ title='#{@name} version'
79
+ />
80
+ </picture>
81
+ </a>
82
+ </div>
83
+ <div class='imgWrapper imgFlex center' style='width: 120px;'>
84
+ <a href='https://github.com/mslinn/#{@name}' target='_blank' class='imgImgUrl'>
85
+ <picture class='imgPicture'>
86
+ <source srcset="#{@image}.webp" type="image/webp">
87
+ <source srcset="#{@image}.png" type="image/png">
88
+ <img alt='GitHub project for #{@name}'
89
+ class="imgImg"
90
+ src="/blog/images/git/github-mark.png"
91
+ style='width: 100%;'
92
+ title='Git project for #{@name}'
93
+ />
94
+ </picture>
95
+ </div>
96
+ </a>
97
+ </div>
98
+ </div>
99
+ END_CONTENT
100
+ end
101
+
102
+ JekyllPluginHelper.register(self, PLUGIN_NAME)
103
+ end
104
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../lib/jekyll_badge'
2
+
3
+ RSpec.describe Badge::Badge do
4
+ let(:logger) do
5
+ PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
6
+ end
7
+
8
+ let(:parse_context) { TestParseContext.new }
9
+
10
+ it 'has a test' do
11
+ expect(true).to be_true
12
+ end
13
+ end
@@ -0,0 +1,79 @@
1
+ require 'jekyll'
2
+ require 'jekyll_plugin_logger'
3
+ require 'liquid'
4
+ require 'fileutils'
5
+ require 'yaml'
6
+ require_relative '../lib/<%= @gem_name %>'
7
+
8
+ RSpec.configure do |config|
9
+ config.filter_run :focus
10
+ # config.order = 'random'
11
+ config.run_all_when_everything_filtered = true
12
+
13
+ # See https://relishapp.com/rspec/rspec-core/docs/command-line/only-failures
14
+ config.example_status_persistence_file_path = '../spec/status_persistence.txt'
15
+
16
+ config.filter_run_when_matching focus: true
17
+ end
18
+
19
+ Registers = Struct.new(:page, :site)
20
+
21
+ # Mock for Collections
22
+ class Collections
23
+ def values
24
+ []
25
+ end
26
+ end
27
+
28
+ # Mock for Site
29
+ class SiteMock
30
+ attr_reader :config
31
+
32
+ def initialize
33
+ @config = YAML.safe_load_file(File.read('../demo/_config.yml'))
34
+ @config['env'] = { 'JEKYLL_ENV' => 'development' }
35
+ end
36
+
37
+ def collections
38
+ Collections.new
39
+ end
40
+ end
41
+
42
+ class TestLiquidContext < Liquid::Context
43
+ def initialize
44
+ super
45
+
46
+ page = {
47
+ 'content' => 'blah blah',
48
+ 'description' => 'Jekyll plugin support demo',
49
+ 'dir' => '/',
50
+ 'excerpt' => nil,
51
+ 'layout' => 'default',
52
+ 'name' => 'index.html',
53
+ 'path' => 'index.html',
54
+ 'title' => 'Welcome',
55
+ 'url' => '/',
56
+ }
57
+
58
+ @content = 'Interior of the tag'
59
+ @registers = Registers.new(
60
+ page,
61
+ SiteMock.new
62
+ )
63
+ end
64
+ end
65
+
66
+ # Mock for Liquid::ParseContent
67
+ class TestParseContext < Liquid::ParseContext
68
+ attr_reader :line_number, :registers
69
+
70
+ def initialize
71
+ super
72
+ @line_number = 123
73
+
74
+ @registers = Registers.new(
75
+ { 'path' => 'path/to/page.html' },
76
+ SiteMock.new
77
+ )
78
+ end
79
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll_badge
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mike Slinn
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-11-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jekyll
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.5.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.5.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: jekyll_plugin_support
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.7.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.7.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: ruby-link-checker
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
+ description: 'Displays a badge on a Jekyll page for the package showing its version
56
+
57
+ '
58
+ email:
59
+ - mslinn@mslinn.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".rubocop.yml"
65
+ - CHANGELOG.md
66
+ - README.md
67
+ - Rakefile
68
+ - jekyll_badge.gemspec
69
+ - lib/jekyll_badge.rb
70
+ - lib/jekyll_badge/version.rb
71
+ - spec/badge/badge_spec.rb
72
+ - spec/spec_helper.rb
73
+ homepage: https://www.mslinn.com/jekyll_plugins/jekyll_badge.html
74
+ licenses:
75
+ - MIT
76
+ metadata:
77
+ allowed_push_host: https://rubygems.org
78
+ bug_tracker_uri: https://github.com/mslinn/jekyll_badge/issues
79
+ changelog_uri: https://github.com/mslinn/jekyll_badge/CHANGELOG.md
80
+ homepage_uri: https://www.mslinn.com/jekyll_plugins/jekyll_badge.html
81
+ source_code_uri: https://github.com/mslinn/jekyll_badge
82
+ post_install_message: |2+
83
+
84
+ Thanks for installing jekyll_badge!
85
+
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 3.1.0
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubygems_version: 3.3.7
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: Displays a badge on a Jekyll page for the package showing its version
104
+ test_files: []
105
+ ...