jekyll-toc-plus 0.20.0 → 0.21.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: 7673dcb756b228f2940af9eb43c7e2e18bb42afd1aae9a508da44991d67c3428
4
- data.tar.gz: f44af3e46bad9e0339246603ae38409ce2ef7301c1d5003bf5f86a5267fa2d0c
3
+ metadata.gz: 9d7d885bed409b2179feb9778b06baf21181d9beaa1afbcb8579e8b642bf2fb6
4
+ data.tar.gz: ae7409264bb42c87b72de4a527a6e0e8a77c5f8cc638a5bdf17093d4a39fb2c3
5
5
  SHA512:
6
- metadata.gz: 4e1552ac001c4036bf30b849a41eb0f64cb75c5de1202518cffaab3d6ce87e145ec90929047cbded341008572823128365e35c44d8a7c61a53650e30486f9f0a
7
- data.tar.gz: ba0c7b2eb8ba036284909822ad1dada88227c0adc4c318d5ec8b782ed12bd5359759d03ea4b2be8bf16fa2aa502e1c4904b031993783ac5b263bbae7d54e92e6
6
+ metadata.gz: 506c7cd216eeb6af1aec9b17193dbb5d300853f64ce539e816e84fc81e4b97423807a8a231ff154d94f08f8b6025d8b23f2df73684dd7ccbeebc252604c8da93
7
+ data.tar.gz: 398a1dbdd54565f0b5f8152cbaaa4247bee486404ee1cb85606a222c36fb01ff1375dd81aa45c61b59889ac033cfd3a9e0744b1f5d73c1bcca77e4f65e57107b
data/.rubocop.yml CHANGED
@@ -1,13 +1,12 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.7
2
+ TargetRubyVersion: 3.2
3
3
  NewCops: enable
4
4
  Exclude:
5
5
  - "*.gemspec"
6
- - "gemfiles/*"
7
6
  - "vendor/**/*"
8
7
  - Rakefile
9
8
  - Gemfile
10
- require:
9
+ plugins:
11
10
  - rubocop-minitest
12
11
  - rubocop-rake
13
12
  - rubocop-performance
@@ -24,21 +23,6 @@ Naming/FileName:
24
23
 
25
24
  Layout/LineLength:
26
25
  Enabled: false
27
- Layout/SpaceAroundMethodCallOperator:
28
- Enabled: true
29
-
30
- Lint/RaiseException:
31
- Enabled: true
32
- Lint/StructNewOverride:
33
- Enabled: true
34
26
 
35
27
  Style/WordArray:
36
28
  Enabled: false
37
- Style/HashEachMethods:
38
- Enabled: true
39
- Style/HashTransformKeys:
40
- Enabled: true
41
- Style/HashTransformValues:
42
- Enabled: true
43
- Style/ExponentialNotation:
44
- Enabled: true
data/CHANGELOG.md CHANGED
@@ -1 +1,29 @@
1
- Changelog is maintained under [Github Releases](https://github.com/jannewaren/jekyll-toc-plus/releases).
1
+ # Changelog
2
+
3
+ Versions through 0.20.0 are documented under
4
+ [GitHub Releases](https://github.com/jannewaren/jekyll-toc-plus/releases).
5
+
6
+ ## [Unreleased]
7
+
8
+ ## [0.21.0] - 2026-06-20
9
+
10
+ ### Added
11
+
12
+ - `no_toc_class` config option to customize the class that excludes a heading
13
+ from the TOC (default: `no_toc`), mirroring the configurable `no_toc_section_class`.
14
+
15
+ ### Changed
16
+
17
+ - The `{% toc %}` tag now requires `toc: true` strictly, matching the `toc` /
18
+ `toc_only` / `inject_anchors` filters. Previously the tag accepted any truthy
19
+ front-matter value. If you relied on a non-`true` truthy value (e.g. `toc: "yes"`)
20
+ to render the tag, set it to `toc: true`.
21
+
22
+ ### Fixed
23
+
24
+ - Escape heading ids when interpolating them into `href` attributes, preventing
25
+ HTML/attribute injection from an author-supplied `id` containing characters
26
+ such as `"`.
27
+ - De-duplicate headings that share an explicit `id`: a second `id="foo"` now
28
+ links to `#foo-1` instead of emitting a duplicate `#foo` fragment. Previously
29
+ only generated ids were de-duplicated.
data/CLAUDE.md ADDED
@@ -0,0 +1,51 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## What this is
6
+
7
+ `jekyll-toc-plus` is a Ruby gem / Jekyll plugin that generates a Table of Contents from rendered HTML content. It is a fork of [`toshimaru/jekyll-toc`](https://github.com/toshimaru/jekyll-toc), adding the options `div_list`, `flat_list`, `toc_only_direct_text`, and per-page `toc_config` front-matter overrides. It aims to stay a drop-in replacement for upstream.
8
+
9
+ ## Commands
10
+
11
+ ```sh
12
+ bundle install # install dev dependencies
13
+ bundle exec rake # run the full test suite (default task)
14
+ bundle exec rake test # same, explicit
15
+ bundle exec rubocop # lint
16
+ bundle exec rubocop -A # lint with autocorrect
17
+
18
+ # Run a single test file (note: tests `require 'test_helper'`, so -Itest is required)
19
+ bundle exec ruby -Ilib -Itest test/parser/test_toc_filter.rb
20
+
21
+ # Run a single test by name
22
+ bundle exec ruby -Ilib -Itest test/parser/test_toc_filter.rb -n test_nested_toc
23
+
24
+ bundle exec rake build # build the .gem
25
+ ```
26
+
27
+ CI (`.github/workflows`) runs the test suite across Ruby `3.2`, `3.3`, `3.4`, and `4.0` (on Jekyll 4.4), plus a separate RuboCop job. RuboCop targets Ruby 3.2 syntax; keep new code compatible.
28
+
29
+ ## Architecture
30
+
31
+ The plugin is two thin Liquid integrations over one parser.
32
+
33
+ **Entry point — `lib/jekyll-toc-plus.rb`** (the file `require`d by Jekyll). Registers:
34
+ - `Jekyll::TableOfContentsFilter`, a Liquid filter module exposing three filters: `toc` (TOC + anchored content), `toc_only` (just the TOC list; a supported filter, kept because — unlike the `{% toc %}` tag — it works on any page), and `inject_anchors` (just the anchored content). Each is gated by `toc_enabled?`, which requires the page's front matter to have `toc: true`.
35
+ - `Jekyll::TocTag`, the `{% toc %}` Liquid tag. Equivalent to `toc_only` but reads `content` directly from the page register, so it only works for Posts/Collections (documented limitation).
36
+
37
+ **Config resolution** is shared via `TableOfContents::ConfigResolver#merge_toc_config`, mixed into both the filter (called through `toc_config`) and the tag: site-wide `_config.yml` `toc:` settings are merged with per-page `toc_config:` front matter, where **page values override site values**. This is the mechanism behind per-page `min_level`/`max_level`/`toc_only_direct_text` overrides.
38
+
39
+ **`TableOfContents::Parser`** (`lib/table_of_contents/parser.rb`) does all real work:
40
+ - Parses the HTML once with Nokogiri (`DocumentFragment`) in `initialize`, then `parse_content` walks the configured heading levels, skipping headings with the `no_toc` class or inside any `no_toc_section_class` container. Each entry records its id (existing `id` attribute, else a slug from the heading text), escaped text, node name, and heading number.
41
+ - `build_toc` emits the list; it dispatches to `build_flat_toc_list` (when `flat_list`) or the recursive `build_nested_toc_list`, which builds nested sublists by comparing each entry's heading number to the minimum level in the slice.
42
+ - `inject_anchors_into_html` mutates the parsed doc, inserting `<a class="anchor">` before each heading, and returns the modified HTML.
43
+ - `list_tag` / `list_parent_tag` select the output element: `div` when `div_list`, otherwise `ul`/`ol` (per `ordered_list`) + `li`.
44
+
45
+ **`Configuration`** (`configuration.rb`) merges user options over the single source of truth `DEFAULT_CONFIG` and exposes them as readers. When adding a new option, add it to `DEFAULT_CONFIG`, expose an `attr_reader`, assign it in `initialize`, and document it in `README.md`'s Default Configuration block.
46
+
47
+ **`Helper`** (`helper.rb`) is mixed into `Parser`: `generate_toc_id` slugifies heading text (downcase, strip punctuation via a Unicode-aware regexp, dasherize, URL-encode) and `extract_text` implements `toc_only_direct_text` by pulling only direct text-node children of a heading.
48
+
49
+ ## Tests
50
+
51
+ Minitest, run via Rake. `test/test_helper.rb` boots SimpleCov + Minitest reporters and defines `SIMPLE_HTML` (h1–h6) plus the `TestHelpers#read_html_and_create_parser` helper. Parser-level behavior lives in `test/parser/`; the Liquid tag/front-matter override behavior is in `test/test_page_config_override.rb` and `test/test_toc_tag.rb` (which stub the Liquid context with `Struct`). New options should get a focused file under `test/parser/`.
data/Gemfile CHANGED
@@ -2,10 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'appraisal'
6
5
  gem 'minitest-reporters'
7
6
  gem 'minitest'
8
- gem 'pry'
9
7
  gem 'rake'
10
8
  gem 'rubocop-minitest'
11
9
  gem 'rubocop-performance'
data/README.md CHANGED
@@ -130,7 +130,7 @@ location with the `toc_only` filter.
130
130
 
131
131
  ## Generated HTML
132
132
 
133
- jekyll-toc generates an unordered list by default. The HTML output is as follows.
133
+ jekyll-toc-plus generates an unordered list by default. The HTML output is as follows.
134
134
 
135
135
  ```html
136
136
  <ul id="toc" class="section-nav">
@@ -158,7 +158,7 @@ jekyll-toc generates an unordered list by default. The HTML output is as follows
158
158
 
159
159
  ## Customization
160
160
 
161
- jekyll-toc is customizable on `_config.yml`.
161
+ jekyll-toc-plus is customizable on `_config.yml`.
162
162
 
163
163
  ### Default Configuration
164
164
 
@@ -168,6 +168,7 @@ toc:
168
168
  min_level: 1
169
169
  max_level: 6
170
170
  ordered_list: false
171
+ no_toc_class: no_toc
171
172
  no_toc_section_class: no_toc_section
172
173
  list_id: toc
173
174
  list_class: section-nav
@@ -230,6 +231,14 @@ The heading is ignored in the toc by adding `no_toc` class.
230
231
  <h2>h2</h2>
231
232
  ```
232
233
 
234
+ The class can be configured on `_config.yml`:
235
+
236
+ ```yml
237
+ # _config.yml
238
+ toc:
239
+ no_toc_class: skip-toc # default: no_toc
240
+ ```
241
+
233
242
  ### Skip TOC Sectionally
234
243
 
235
244
  The headings are ignored inside the element which has `no_toc_section` class.
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/table_of_contents/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'jekyll-toc-plus'
7
+ spec.version = Jekyll::TableOfContents::VERSION
8
+ spec.summary = 'Jekyll Table of Contents plugin'
9
+ spec.description = 'Jekyll (Ruby static website generator) plugin which generates a Table of Contents for the page.'
10
+ spec.authors = ['toshimaru', 'torbjoernk', 'Janne Warén']
11
+ spec.email = 'janne.waren@gmail.com'
12
+ spec.homepage = 'https://github.com/jannewaren/jekyll-toc-plus'
13
+ spec.license = 'MIT'
14
+ spec.require_paths = ['lib']
15
+
16
+ spec.metadata['homepage_uri'] = spec.homepage
17
+ spec.metadata['source_code_uri'] = 'https://github.com/jannewaren/jekyll-toc-plus'
18
+ spec.metadata['changelog_uri'] = 'https://github.com/jannewaren/jekyll-toc-plus/releases'
19
+ spec.metadata['rubygems_mfa_required'] = 'true'
20
+
21
+ # Specify which files should be added to the gem when it is released.
22
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
+ spec.files = Dir.chdir(__dir__) do
24
+ `git ls-files -z`.split("\x0").reject do |f|
25
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)})
26
+ end
27
+ end
28
+
29
+ spec.required_ruby_version = '>= 3.2'
30
+
31
+ spec.add_dependency 'jekyll', '>= 4.4'
32
+ spec.add_dependency 'nokogiri', '~> 1.12'
33
+ end
@@ -5,28 +5,42 @@ require 'table_of_contents/configuration'
5
5
  require 'table_of_contents/parser'
6
6
 
7
7
  module Jekyll
8
+ module TableOfContents
9
+ # Resolves the effective TOC config by merging site-wide `_config.yml`
10
+ # `toc:` settings with per-page `toc_config:` front matter, where page
11
+ # values override site values. Shared by the filter and the tag.
12
+ module ConfigResolver
13
+ private
14
+
15
+ def merge_toc_config(registers)
16
+ site_config = registers[:site].config['toc'] || {}
17
+ page_config = registers[:page]['toc_config'] || {}
18
+ site_config.merge(page_config)
19
+ end
20
+ end
21
+ end
22
+
8
23
  # toc tag for Jekyll
9
24
  class TocTag < Liquid::Tag
25
+ include TableOfContents::ConfigResolver
26
+
10
27
  def render(context)
11
- return '' unless context.registers[:page]['toc']
28
+ return '' unless context.registers[:page]['toc'] == true
12
29
 
13
30
  content_html = context.registers[:page]['content']
14
- toc_config = merge_toc_config(context)
31
+ toc_config = merge_toc_config(context.registers)
15
32
  TableOfContents::Parser.new(content_html, toc_config).build_toc
16
33
  end
17
-
18
- private
19
-
20
- def merge_toc_config(context)
21
- site_config = context.registers[:site].config['toc'] || {}
22
- page_config = context.registers[:page]['toc_config'] || {}
23
- site_config.merge(page_config)
24
- end
25
34
  end
26
35
 
27
36
  # Jekyll Table of Contents filter plugin
28
37
  module TableOfContentsFilter
29
- # Deprecated method. Removed in v1.0.
38
+ include TableOfContents::ConfigResolver
39
+
40
+ # Renders the TOC only (no anchors injected into the content).
41
+ # Kept as a supported filter: unlike the {% toc %} tag, it works on any
42
+ # page because it receives the content as input, whereas the tag reads
43
+ # page['content'] and therefore only works for Posts and Collections.
30
44
  def toc_only(html)
31
45
  return '' unless toc_enabled?
32
46
 
@@ -52,12 +66,10 @@ module Jekyll
52
66
  end
53
67
 
54
68
  def toc_config
55
- site_config = @context.registers[:site].config['toc'] || {}
56
- page_config = @context.registers[:page]['toc_config'] || {}
57
- site_config.merge(page_config)
69
+ merge_toc_config(@context.registers)
58
70
  end
59
71
  end
60
72
  end
61
73
 
62
74
  Liquid::Template.register_filter(Jekyll::TableOfContentsFilter)
63
- Liquid::Template.register_tag('toc', Jekyll::TocTag) # will be enabled at v1.0
75
+ Liquid::Template.register_tag('toc', Jekyll::TocTag)
@@ -12,6 +12,7 @@ module Jekyll
12
12
  'min_level' => 1,
13
13
  'max_level' => 6,
14
14
  'ordered_list' => false,
15
+ 'no_toc_class' => 'no_toc',
15
16
  'no_toc_section_class' => 'no_toc_section',
16
17
  'list_id' => 'toc',
17
18
  'list_class' => 'section-nav',
@@ -28,7 +29,7 @@ module Jekyll
28
29
 
29
30
  @toc_levels = options['min_level']..options['max_level']
30
31
  @ordered_list = options['ordered_list']
31
- @no_toc_class = 'no_toc'
32
+ @no_toc_class = options['no_toc_class']
32
33
  @no_toc_section_class = options['no_toc_section_class']
33
34
  @list_id = options['list_id']
34
35
  @list_class = options['list_class']
@@ -43,9 +44,9 @@ module Jekyll
43
44
  private
44
45
 
45
46
  def generate_option_hash(options)
47
+ return DEFAULT_CONFIG.dup unless options.is_a?(Hash)
48
+
46
49
  DEFAULT_CONFIG.merge(options)
47
- rescue TypeError
48
- DEFAULT_CONFIG
49
50
  end
50
51
  end
51
52
  end
@@ -4,7 +4,7 @@ module Jekyll
4
4
  module TableOfContents
5
5
  # helper methods for Parser
6
6
  module Helper
7
- PUNCTUATION_REGEXP = /[^\p{Word}\- ]/u.freeze
7
+ PUNCTUATION_REGEXP = /[^\p{Word}\- ]/u
8
8
 
9
9
  def generate_toc_id(text)
10
10
  text = text.downcase
@@ -24,9 +24,8 @@ module Jekyll
24
24
 
25
25
  def inject_anchors_into_html
26
26
  @entries.each do |entry|
27
- # NOTE: `entry[:id]` is automatically URL encoded by Nokogiri
28
27
  entry[:header_content].add_previous_sibling(
29
- %(<a class="anchor" href="##{entry[:id]}" aria-hidden="true"><span class="octicon octicon-link"></span></a>)
28
+ %(<a class="anchor" href="##{escaped_id(entry)}" aria-hidden="true"><span class="octicon octicon-link"></span></a>)
30
29
  )
31
30
  end
32
31
 
@@ -44,7 +43,9 @@ module Jekyll
44
43
  .reject { |n| n.classes.include?(@configuration.no_toc_class) }
45
44
  .inject([]) do |entries, node|
46
45
  text = extract_text(node, only_direct_text: @configuration.toc_only_direct_text)
47
- id = node.attribute('id') || generate_toc_id(text)
46
+ # Use the attribute's string value (not the Nokogiri::XML::Attr object)
47
+ # so duplicate explicit ids dedupe correctly via the `headers` hash.
48
+ id = node.attribute('id')&.value || generate_toc_id(text)
48
49
 
49
50
  suffix_num = headers[id]
50
51
  headers[id] += 1
@@ -73,7 +74,7 @@ module Jekyll
73
74
  toc_list = +''
74
75
 
75
76
  entries.each do |entry|
76
- toc_list << %(<#{list_parent_tag} class="#{@configuration.item_class} #{@configuration.item_prefix}#{entry[:node_name]}"><a href="##{entry[:id]}">#{entry[:text]}</a></#{list_parent_tag}>\n)
77
+ toc_list << %(<#{list_parent_tag} class="#{@configuration.item_class} #{@configuration.item_prefix}#{entry[:node_name]}"><a href="##{escaped_id(entry)}">#{entry[:text]}</a></#{list_parent_tag}>\n)
77
78
  end
78
79
 
79
80
  toc_list
@@ -90,7 +91,7 @@ module Jekyll
90
91
  if entry[:h_num] == min_h_num
91
92
  # If the current entry should not be indented in the list, add the entry to the list
92
93
  # If the next entry should be indented in the list, generate a sublist
93
- toc_list << %(<#{list_parent_tag} class="#{@configuration.item_class} #{@configuration.item_prefix}#{entry[:node_name]}"><a href="##{entry[:id]}">#{entry[:text]}</a>)
94
+ toc_list << %(<#{list_parent_tag} class="#{@configuration.item_class} #{@configuration.item_prefix}#{entry[:node_name]}"><a href="##{escaped_id(entry)}">#{entry[:text]}</a>)
94
95
  next_i = i + 1
95
96
  if next_i < entries.count && entries[next_i][:h_num] > min_h_num
96
97
  nest_entries = get_nest_entries(entries[next_i, entries.count], min_h_num)
@@ -109,6 +110,13 @@ module Jekyll
109
110
  toc_list
110
111
  end
111
112
 
113
+ # Escapes an entry's id for safe interpolation into an HTML attribute
114
+ # value (the `href="#..."` fragment). Author-supplied ids may contain
115
+ # characters such as `"` that would otherwise break out of the attribute.
116
+ def escaped_id(entry)
117
+ CGI.escapeHTML(entry[:id])
118
+ end
119
+
112
120
  # Returns the entries in a nested list
113
121
  # The nested list starts at the first entry in entries (inclusive)
114
122
  # The nested list ends at the first entry in entries with depth min_h_num or greater (exclusive)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module TableOfContents
5
- VERSION = '0.20.0'
5
+ VERSION = '0.21.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-toc-plus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - toshimaru
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '3.9'
20
+ version: '4.4'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '3.9'
27
+ version: '4.4'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: nokogiri
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -47,17 +47,13 @@ extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
49
  - ".rubocop.yml"
50
- - Appraisals
51
50
  - CHANGELOG.md
51
+ - CLAUDE.md
52
52
  - Gemfile
53
53
  - LICENSE.md
54
54
  - README.md
55
55
  - Rakefile
56
- - gemfiles/jekyll_3.9.gemfile
57
- - gemfiles/jekyll_4.0.gemfile
58
- - gemfiles/jekyll_4.1.gemfile
59
- - gemfiles/jekyll_4.2.gemfile
60
- - gemfiles/jekyll_4.3.gemfile
56
+ - jekyll-toc-plus.gemspec
61
57
  - lib/jekyll-toc-plus.rb
62
58
  - lib/table_of_contents/configuration.rb
63
59
  - lib/table_of_contents/helper.rb
@@ -78,7 +74,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
74
  requirements:
79
75
  - - ">="
80
76
  - !ruby/object:Gem::Version
81
- version: '2.7'
77
+ version: '3.2'
82
78
  required_rubygems_version: !ruby/object:Gem::Requirement
83
79
  requirements:
84
80
  - - ">="
data/Appraisals DELETED
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- SUPPORTED_VERSIONS = %w[3.9 4.0 4.1 4.2 4.3].freeze
4
-
5
- SUPPORTED_VERSIONS.each do |version|
6
- appraise "jekyll-#{version}" do
7
- gem 'jekyll', version
8
- end
9
- end
@@ -1,17 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "minitest-reporters"
7
- gem "minitest"
8
- gem "pry"
9
- gem "rake"
10
- gem "rubocop-minitest"
11
- gem "rubocop-performance"
12
- gem "rubocop-rake"
13
- gem "rubocop"
14
- gem "simplecov", "~> 0.22.0"
15
- gem "jekyll", "3.9"
16
-
17
- gemspec path: "../"
@@ -1,17 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "minitest-reporters"
7
- gem "minitest"
8
- gem "pry"
9
- gem "rake"
10
- gem "rubocop-minitest"
11
- gem "rubocop-performance"
12
- gem "rubocop-rake"
13
- gem "rubocop"
14
- gem "simplecov", "~> 0.22.0"
15
- gem "jekyll", "4.0"
16
-
17
- gemspec path: "../"
@@ -1,17 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "minitest-reporters"
7
- gem "minitest"
8
- gem "pry"
9
- gem "rake"
10
- gem "rubocop-minitest"
11
- gem "rubocop-performance"
12
- gem "rubocop-rake"
13
- gem "rubocop"
14
- gem "simplecov", "~> 0.22.0"
15
- gem "jekyll", "4.1"
16
-
17
- gemspec path: "../"
@@ -1,17 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "minitest-reporters"
7
- gem "minitest"
8
- gem "pry"
9
- gem "rake"
10
- gem "rubocop-minitest"
11
- gem "rubocop-performance"
12
- gem "rubocop-rake"
13
- gem "rubocop"
14
- gem "simplecov", "~> 0.22.0"
15
- gem "jekyll", "4.2"
16
-
17
- gemspec path: "../"
@@ -1,17 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "minitest-reporters"
7
- gem "minitest"
8
- gem "pry"
9
- gem "rake"
10
- gem "rubocop-minitest"
11
- gem "rubocop-performance"
12
- gem "rubocop-rake"
13
- gem "rubocop"
14
- gem "simplecov", "~> 0.22.0"
15
- gem "jekyll", "4.3"
16
-
17
- gemspec path: "../"