jekyll-readme-index 0.3.0 → 0.4.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 +4 -4
- data/lib/jekyll/static_file_ext.rb +22 -2
- data/lib/jekyll-readme-index/generator.rb +59 -3
- data/lib/jekyll-readme-index/version.rb +1 -1
- metadata +83 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3ff724c2f3f4731b73dc6b4b4ced3bcd84793669c41913c477ea0c926b25a11b
|
|
4
|
+
data.tar.gz: 49768447b305e6dda9605997b1ef8b45b513dfe6ebd9a95136db3bdc383291df
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cea83b276e2017f4c150400e77f39a6e985bee2a0c0cd7b4fff61da9f0e6f2dce75a2ac0a9be4fd76ea768252cc1fd71457751816c56db91486b908b7cc17526
|
|
7
|
+
data.tar.gz: 3d538fec44f058263ea888acc364f3741304eb9482c4b28e6ea171634d00250f513d6f330fb13da9d7f15bcd5ebc882582ce086cc3a56a178ae3ca233077bdaa
|
|
@@ -5,14 +5,34 @@ module Jekyll
|
|
|
5
5
|
# Convert this static file to a Page
|
|
6
6
|
def to_page
|
|
7
7
|
page = Jekyll::Page.new(@site, @base, @dir, @name)
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
# For READMEs in .github or docs at root level, they should be the root index
|
|
10
|
+
target_dir = if special_readme?
|
|
11
|
+
"/"
|
|
12
|
+
else
|
|
13
|
+
File.dirname(url) + "/"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
page.data["permalink"] = target_dir
|
|
9
17
|
page
|
|
10
18
|
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
# Check if this is a README in a special directory (.github or docs)
|
|
23
|
+
def special_readme?
|
|
24
|
+
relative_path =~ JekyllReadmeIndex::Generator::GITHUB_README_PATTERN ||
|
|
25
|
+
relative_path =~ JekyllReadmeIndex::Generator::DOCS_README_PATTERN
|
|
26
|
+
end
|
|
11
27
|
end
|
|
12
28
|
|
|
13
29
|
class Page
|
|
14
30
|
def update_permalink
|
|
15
|
-
|
|
31
|
+
# If URL already ends with '/', it's a directory URL and should be used as-is
|
|
32
|
+
# Otherwise, extract the directory from the file URL
|
|
33
|
+
target_dir = url.end_with?("/") ? url : File.dirname(url) + "/"
|
|
34
|
+
|
|
35
|
+
data["permalink"] = target_dir
|
|
16
36
|
@url = URL.new(
|
|
17
37
|
:template => template,
|
|
18
38
|
:placeholders => url_placeholders,
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
module JekyllReadmeIndex
|
|
4
4
|
class Generator < Jekyll::Generator
|
|
5
5
|
INDEX_REGEX = %r!$|index\.(html?|xhtml|xml)$!i.freeze
|
|
6
|
+
GITHUB_DIR = "/.github"
|
|
7
|
+
DOCS_DIR = "/docs"
|
|
8
|
+
SPECIAL_DIRS = [GITHUB_DIR, DOCS_DIR].freeze
|
|
9
|
+
GITHUB_README_PATTERN = %r!^/\.github/readme!i.freeze
|
|
10
|
+
DOCS_README_PATTERN = %r!^/docs/readme!i.freeze
|
|
11
|
+
ROOT_README_PATTERN = %r!^/readme!i.freeze
|
|
6
12
|
|
|
7
13
|
attr_accessor :site
|
|
8
14
|
|
|
@@ -13,6 +19,7 @@ module JekyllReadmeIndex
|
|
|
13
19
|
ENABLED_KEY = "enabled"
|
|
14
20
|
CLEANUP_KEY = "remove_originals"
|
|
15
21
|
FRONTMATTER_KEY = "with_frontmatter"
|
|
22
|
+
PATTERN_KEY = "readme_pattern"
|
|
16
23
|
|
|
17
24
|
def initialize(site)
|
|
18
25
|
@site = site
|
|
@@ -42,13 +49,49 @@ module JekyllReadmeIndex
|
|
|
42
49
|
|
|
43
50
|
# Returns an array of all READMEs as StaticFiles
|
|
44
51
|
def readmes
|
|
45
|
-
site.static_files.select { |file| file.relative_path =~ readme_regex }
|
|
52
|
+
candidates = site.static_files.select { |file| file.relative_path =~ readme_regex }
|
|
53
|
+
prioritize_readmes(candidates)
|
|
46
54
|
end
|
|
47
55
|
|
|
48
56
|
def readmes_with_frontmatter
|
|
49
|
-
site.pages.select { |file| ("/" + file.path) =~ readme_regex }
|
|
57
|
+
candidates = site.pages.select { |file| ("/" + file.path) =~ readme_regex }
|
|
58
|
+
prioritize_readmes(candidates)
|
|
50
59
|
end
|
|
51
60
|
|
|
61
|
+
# Prioritize READMEs according to GitHub's order: .github > root > docs
|
|
62
|
+
# For each target directory, keep only the highest priority README
|
|
63
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
|
64
|
+
def prioritize_readmes(candidates)
|
|
65
|
+
grouped = candidates.group_by do |file|
|
|
66
|
+
# Get the directory that would become the index
|
|
67
|
+
# READMEs in .github and docs should serve as index for parent directory
|
|
68
|
+
# Note: file_path returns Jekyll-normalized paths without query strings
|
|
69
|
+
dir = File.dirname(file_path(file))
|
|
70
|
+
|
|
71
|
+
# If the README is in .github or docs subdirectory at root,
|
|
72
|
+
# it should be the index for root
|
|
73
|
+
if SPECIAL_DIRS.include?(dir)
|
|
74
|
+
"/"
|
|
75
|
+
else
|
|
76
|
+
dir
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
grouped.flat_map do |_dir, files|
|
|
81
|
+
# Sort by priority: .github first, then root, then docs, then others
|
|
82
|
+
files.min_by do |file|
|
|
83
|
+
path = file.respond_to?(:relative_path) ? file.relative_path : "/" + file.path
|
|
84
|
+
case path
|
|
85
|
+
when GITHUB_README_PATTERN then 0
|
|
86
|
+
when ROOT_README_PATTERN then 1
|
|
87
|
+
when DOCS_README_PATTERN then 2
|
|
88
|
+
else 3
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end.compact
|
|
92
|
+
end
|
|
93
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
|
94
|
+
|
|
52
95
|
# Should the given readme be the containing directory's index?
|
|
53
96
|
def should_be_index?(readme)
|
|
54
97
|
return false unless readme
|
|
@@ -67,7 +110,15 @@ module JekyllReadmeIndex
|
|
|
67
110
|
|
|
68
111
|
# Regexp to match a file path against to detect if the given file is a README
|
|
69
112
|
def readme_regex
|
|
70
|
-
|
|
113
|
+
# Allow custom pattern override via configuration
|
|
114
|
+
@readme_regex ||= if (custom_pattern = option(PATTERN_KEY))
|
|
115
|
+
Regexp.new(custom_pattern, Regexp::IGNORECASE)
|
|
116
|
+
else
|
|
117
|
+
# Match README in any directory, including .github, docs subdirectories
|
|
118
|
+
# The pattern ensures .github and docs are only matched at path boundaries
|
|
119
|
+
extensions = Regexp.union(markdown_converter.extname_list)
|
|
120
|
+
%r!/(?:\.github/|docs/)?readme(#{extensions})$!i
|
|
121
|
+
end
|
|
71
122
|
end
|
|
72
123
|
|
|
73
124
|
def markdown_converter
|
|
@@ -89,5 +140,10 @@ module JekyllReadmeIndex
|
|
|
89
140
|
def with_frontmatter?
|
|
90
141
|
option(FRONTMATTER_KEY) == true
|
|
91
142
|
end
|
|
143
|
+
|
|
144
|
+
# Helper method to get the file path (URL or path) for a file object
|
|
145
|
+
def file_path(file)
|
|
146
|
+
file.respond_to?(:url) ? file.url : "/" + file.path
|
|
147
|
+
end
|
|
92
148
|
end
|
|
93
149
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-readme-index
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Balter
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: jekyll
|
|
@@ -30,77 +29,146 @@ dependencies:
|
|
|
30
29
|
- - "<"
|
|
31
30
|
- !ruby/object:Gem::Version
|
|
32
31
|
version: '5.0'
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: kramdown-parser-gfm
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - "~>"
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '1.1'
|
|
39
|
+
type: :runtime
|
|
40
|
+
prerelease: false
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - "~>"
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '1.1'
|
|
33
46
|
- !ruby/object:Gem::Dependency
|
|
34
47
|
name: rspec
|
|
35
48
|
requirement: !ruby/object:Gem::Requirement
|
|
36
49
|
requirements:
|
|
37
50
|
- - "~>"
|
|
38
51
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '3.
|
|
52
|
+
version: '3.13'
|
|
40
53
|
type: :development
|
|
41
54
|
prerelease: false
|
|
42
55
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
56
|
requirements:
|
|
44
57
|
- - "~>"
|
|
45
58
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '3.
|
|
59
|
+
version: '3.13'
|
|
47
60
|
- !ruby/object:Gem::Dependency
|
|
48
61
|
name: rubocop
|
|
49
62
|
requirement: !ruby/object:Gem::Requirement
|
|
50
63
|
requirements:
|
|
51
64
|
- - "~>"
|
|
52
65
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '
|
|
66
|
+
version: '1.57'
|
|
54
67
|
type: :development
|
|
55
68
|
prerelease: false
|
|
56
69
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
70
|
requirements:
|
|
58
71
|
- - "~>"
|
|
59
72
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '
|
|
73
|
+
version: '1.57'
|
|
61
74
|
- !ruby/object:Gem::Dependency
|
|
62
75
|
name: rubocop-jekyll
|
|
63
76
|
requirement: !ruby/object:Gem::Requirement
|
|
64
77
|
requirements:
|
|
65
78
|
- - "~>"
|
|
66
79
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 0.
|
|
80
|
+
version: '0.14'
|
|
68
81
|
type: :development
|
|
69
82
|
prerelease: false
|
|
70
83
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
84
|
requirements:
|
|
72
85
|
- - "~>"
|
|
73
86
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 0.
|
|
87
|
+
version: '0.14'
|
|
75
88
|
- !ruby/object:Gem::Dependency
|
|
76
89
|
name: rubocop-performance
|
|
77
90
|
requirement: !ruby/object:Gem::Requirement
|
|
78
91
|
requirements:
|
|
79
92
|
- - "~>"
|
|
80
93
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '1.
|
|
94
|
+
version: '1.23'
|
|
82
95
|
type: :development
|
|
83
96
|
prerelease: false
|
|
84
97
|
version_requirements: !ruby/object:Gem::Requirement
|
|
85
98
|
requirements:
|
|
86
99
|
- - "~>"
|
|
87
100
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: '1.
|
|
101
|
+
version: '1.23'
|
|
89
102
|
- !ruby/object:Gem::Dependency
|
|
90
103
|
name: rubocop-rspec
|
|
91
104
|
requirement: !ruby/object:Gem::Requirement
|
|
92
105
|
requirements:
|
|
93
106
|
- - "~>"
|
|
94
107
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: '
|
|
108
|
+
version: '3.0'
|
|
96
109
|
type: :development
|
|
97
110
|
prerelease: false
|
|
98
111
|
version_requirements: !ruby/object:Gem::Requirement
|
|
99
112
|
requirements:
|
|
100
113
|
- - "~>"
|
|
101
114
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: '
|
|
103
|
-
|
|
115
|
+
version: '3.0'
|
|
116
|
+
- !ruby/object:Gem::Dependency
|
|
117
|
+
name: base64
|
|
118
|
+
requirement: !ruby/object:Gem::Requirement
|
|
119
|
+
requirements:
|
|
120
|
+
- - ">="
|
|
121
|
+
- !ruby/object:Gem::Version
|
|
122
|
+
version: '0'
|
|
123
|
+
type: :development
|
|
124
|
+
prerelease: false
|
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
126
|
+
requirements:
|
|
127
|
+
- - ">="
|
|
128
|
+
- !ruby/object:Gem::Version
|
|
129
|
+
version: '0'
|
|
130
|
+
- !ruby/object:Gem::Dependency
|
|
131
|
+
name: benchmark
|
|
132
|
+
requirement: !ruby/object:Gem::Requirement
|
|
133
|
+
requirements:
|
|
134
|
+
- - ">="
|
|
135
|
+
- !ruby/object:Gem::Version
|
|
136
|
+
version: '0'
|
|
137
|
+
type: :development
|
|
138
|
+
prerelease: false
|
|
139
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
140
|
+
requirements:
|
|
141
|
+
- - ">="
|
|
142
|
+
- !ruby/object:Gem::Version
|
|
143
|
+
version: '0'
|
|
144
|
+
- !ruby/object:Gem::Dependency
|
|
145
|
+
name: ostruct
|
|
146
|
+
requirement: !ruby/object:Gem::Requirement
|
|
147
|
+
requirements:
|
|
148
|
+
- - ">="
|
|
149
|
+
- !ruby/object:Gem::Version
|
|
150
|
+
version: '0'
|
|
151
|
+
type: :development
|
|
152
|
+
prerelease: false
|
|
153
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
154
|
+
requirements:
|
|
155
|
+
- - ">="
|
|
156
|
+
- !ruby/object:Gem::Version
|
|
157
|
+
version: '0'
|
|
158
|
+
- !ruby/object:Gem::Dependency
|
|
159
|
+
name: tsort
|
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
|
161
|
+
requirements:
|
|
162
|
+
- - ">="
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: '0'
|
|
165
|
+
type: :development
|
|
166
|
+
prerelease: false
|
|
167
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
168
|
+
requirements:
|
|
169
|
+
- - ">="
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: '0'
|
|
104
172
|
email:
|
|
105
173
|
- ben.balter@github.com
|
|
106
174
|
executables: []
|
|
@@ -115,7 +183,6 @@ homepage: https://github.com/benbalter/jekyll-readme-index
|
|
|
115
183
|
licenses:
|
|
116
184
|
- MIT
|
|
117
185
|
metadata: {}
|
|
118
|
-
post_install_message:
|
|
119
186
|
rdoc_options: []
|
|
120
187
|
require_paths:
|
|
121
188
|
- lib
|
|
@@ -130,8 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
130
197
|
- !ruby/object:Gem::Version
|
|
131
198
|
version: '0'
|
|
132
199
|
requirements: []
|
|
133
|
-
rubygems_version:
|
|
134
|
-
signing_key:
|
|
200
|
+
rubygems_version: 4.0.16
|
|
135
201
|
specification_version: 4
|
|
136
202
|
summary: A Jekyll plugin to render a project's README as the site's index.
|
|
137
203
|
test_files: []
|