jekyll-postfiles 2.1.1 → 3.0.0

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
- SHA1:
3
- metadata.gz: 3f717f8740d6deda8214d36c11af41d99ad31952
4
- data.tar.gz: 1d344f57c25424d9a2413f803cec4a398ce6c1d3
2
+ SHA256:
3
+ metadata.gz: 0fbc83e7c863e6c9c8de143eb478b3e264cc640d1c88b2a7170be1cacbabb0c6
4
+ data.tar.gz: 8c8cd59474d3de1cbd0702b733a2f3f89f1a0df3dd64deb72628354ceff4830b
5
5
  SHA512:
6
- metadata.gz: d1b6074e7a7a974b71336a5cfb4f43cc0e0f5ba495f7a20c35a78eafa8ced132d265453696fe183672695fd5d196dbf785ae1cad39e2b2a97f983d9549b7f618
7
- data.tar.gz: 8449666bd84da6554a417711a3a5ff3ec80855bc34b2653c12cdb8336f6c549852b9c2bbf2b5d729ecb2dc1793fbc78168ca1b5b0eb31102dd4fa84f2feb9ce5
6
+ metadata.gz: 49bdc09297feda1dc497e8c2c04b18234117231b9e08433539117805f122a7c6339e4cca229da2da7a267f4c79191b6370626ab90f45747d0e7f88fb0f46519e
7
+ data.tar.gz: fcb9eb8fe93bb3388a085610bf341f04602b50a48311ed40b4bb7e0ba3d0c708124683bffabbd98fc27241a02ca66a8d5590c2447a45e8eb8ac169bf7551b339
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
2
4
 
3
- # Specify your gem's dependencies in jekyll-post-files.gemspec
4
5
  gemspec
File without changes
data/README.md CHANGED
@@ -6,7 +6,6 @@
6
6
  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
7
7
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
8
8
 
9
- ## Table of contents
10
9
 
11
10
  - [Easing the management of images (and other files) attached to Markdown posts](#easing-the-management-of-images-and-other-files-attached-to-markdown-posts)
12
11
  - [The pain of Jekyll's recommended posts assets management](#the-pain-of-jekylls-recommended-posts-assets-management)
@@ -202,7 +201,7 @@ Just put the images (and PDFs, etc.) in the same folder as your Markdown files,
202
201
 
203
202
  ## Contributing
204
203
 
205
- Bug reports and pull requests are welcome on GitHub at [https://github.com/nhoizey/jekyll-postfiles](https://github.com/nhoizey/jekyll-postfiles)
204
+ Thanks for your interest in contributing! There are many ways to contribute to this project. Get started here (https://github.com/nhoizey/jekyll-postfiles/blob/master/CONTRIBUTING.md).
206
205
 
207
206
  ## License
208
207
 
@@ -0,0 +1,6 @@
1
+ # Releases
2
+
3
+ ## [v3.0.0](https://github.com/nhoizey/jekyll-postfiles/releases/tag/v3.0.0)
4
+
5
+ - [Rewrite for Jekyll 3.8.0](https://github.com/nhoizey/jekyll-postfiles/pull/12) by [@Birch-san](https://github.com/Birch-san)
6
+ - Match jekyll's coding style thanks to [Rubocop](http://rubocop.readthedocs.io/)
data/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  task :default => :spec
@@ -1,86 +1,3 @@
1
- require "jekyll-postfiles/version"
2
- require "jekyll"
1
+ # frozen_string_literal: true
3
2
 
4
- module Jekyll
5
-
6
- class PostFile < StaticFile
7
-
8
- # Initialize a new PostFile.
9
- #
10
- # site - The Site.
11
- # base - The String path to the <source>.
12
- # dir - The String path of the source directory of the file (rel <source>).
13
- # name - The String filename of the file.
14
- def initialize(site, base, dir, name, dest)
15
- super(site, base, dir, name)
16
- @name = name
17
- @dest = dest
18
- end
19
-
20
- # Obtain destination path.
21
- #
22
- # dest - The String path to the destination dir.
23
- #
24
- # Returns destination file path.
25
- def destination(dest)
26
- File.join(@dest, @name)
27
- end
28
- end
29
-
30
- class PostFileGenerator < Generator
31
-
32
- # Copy the files from post's folder.
33
- #
34
- # post - A Post which may have associated content.
35
- def copy_post_files(post)
36
-
37
- post_path = post.path
38
- site = post.site
39
- site_src_dir = site.source
40
-
41
- # Jekyll.logger.warn(
42
- # "[PostFiles]",
43
- # "Current post: #{post_path[site_src_dir.length..-1]}"
44
- # )
45
-
46
- post_dir = File.dirname(post_path)
47
- dest_dir = File.dirname(post.destination(""))
48
-
49
- # Count other Markdown files in the same directory
50
- other_md_count = 0
51
- other_md = Dir.glob(File.join(post_dir, '*.{md,markdown}'), File::FNM_CASEFOLD) do |mdfilepath|
52
- if mdfilepath != post_path
53
- other_md_count += 1
54
- end
55
- end
56
-
57
- contents = Dir.glob(File.join(post_dir, '*')) do |filepath|
58
- if filepath != post_path \
59
- && !File.directory?(filepath) \
60
- && !File.fnmatch?('*.{md,markdown}', filepath, File::FNM_EXTGLOB | File::FNM_CASEFOLD)
61
- # Jekyll.logger.warn(
62
- # "[PostFiles]",
63
- # "-> attachment: #{filepath[site_src_dir.length..-1]}"
64
- # )
65
- if other_md_count > 0
66
- Jekyll.logger.abort_with(
67
- "[PostFiles]",
68
- "Sorry, there can be only one Markdown file in each directory containing other assets to be copied by jekyll-postfiles"
69
- )
70
- end
71
- filedir, filename = File.split(filepath[site_src_dir.length..-1])
72
- site.static_files <<
73
- PostFile.new(site, site_src_dir, filedir, filename, dest_dir)
74
- end
75
- end
76
- end
77
-
78
- # Generate content by copying files associated with each post.
79
- def generate(site)
80
- site.posts.docs.each do |post|
81
- copy_post_files(post)
82
- end
83
- end
84
- end
85
-
86
- end
3
+ require "jekyll/postfiles"
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jekyll"
4
+ require "pathname"
5
+
6
+ module Jekyll
7
+ module PostFiles
8
+
9
+ # there's a bug in the regex Document::DATE_FILENAME_MATCHER:
10
+ # %r!^(?:.+/)*(\d{2,4}-\d{1,2}-\d{1,2})-(.*)(\.[^.]+)$!
11
+ # used by:
12
+ # jekyll/lib/jekyll/readers/post_reader.rb#read_posts
13
+ # which ultimately populates:
14
+ # site.posts.docs
15
+ #
16
+ # the original code's intention was to match:
17
+ # all files with a date in the name
18
+ # but it accidentally matches also:
19
+ # all files immediately within a directory whose name contains a date
20
+ #
21
+ # our plugin changes the regex, to:
22
+ # avoid false positive when directory name matches date regex
23
+ Hooks.register :site, :after_reset do |site|
24
+ # Suppress warning messages.
25
+ original_verbose = $VERBOSE
26
+ $VERBOSE = nil
27
+ Document.const_set("DATE_FILENAME_MATCHER", PostFileGenerator::FIXED_DATE_FILENAME_MATCHER)
28
+ # Activate warning messages again.
29
+ $VERBOSE = original_verbose
30
+ end
31
+
32
+ class PostFile < StaticFile
33
+ # Initialize a new PostFile.
34
+ #
35
+ # site - The Site.
36
+ # base - The String path to the <source> - /srv/jekyll
37
+ # dir - The String path between <source> and the file - _posts/somedir
38
+ # name - The String filename of the file - cool.svg
39
+ # dest - The String path to the containing folder of the document which is output - /dist/blog/[:tag/]*:year/:month/:day
40
+ def initialize(site, base, dir, name, dest)
41
+ super(site, base, dir, name)
42
+ @name = name
43
+ @dest = dest
44
+ end
45
+
46
+ # Obtain destination path.
47
+ #
48
+ # dest - The String path to the destination dir.
49
+ #
50
+ # Returns destination file path.
51
+ def destination(dest)
52
+ File.join(@dest, @name)
53
+ end
54
+ end
55
+
56
+ class PostFileGenerator < Generator
57
+ FIXED_DATE_FILENAME_MATCHER = %r!^(?:.+/)*(\d{2,4}-\d{1,2}-\d{1,2})-([^/]*)(\.[^.]+)$!
58
+
59
+ # _posts/
60
+ # 2018-01-01-whatever.md # there's a date on this filename, so it will be treated as a post
61
+ # # it's a direct descendant of _posts, so we do not treat it as an asset root
62
+ # somedir/
63
+ # 2018-05-01-some-post.md # there's a date on this filename, so it will be treated as a post.
64
+ # # moreover, we will treat its dir as an asset root
65
+ # cool.svg # there's no date on this filename, so it will be treated as an asset
66
+ # undated.md # there's no date on this filename, so it will be treated as an asset
67
+ # img/
68
+ # cool.png # yes, even deeply-nested files are eligible to be copied.
69
+ def generate(site)
70
+ site_srcroot = Pathname.new site.source
71
+ posts_src_dir = site_srcroot + "_posts"
72
+ drafts_src_dir = site_srcroot + "_drafts"
73
+
74
+ # Jekyll.logger.warn("[PostFiles]", "_posts: #{posts_src_dir}")
75
+ # Jekyll.logger.warn("[PostFiles]", "docs: #{site.posts.docs.map(&:path)}")
76
+
77
+ docs_with_dirs = site.posts.docs
78
+ .reject { |doc|
79
+ Pathname.new(doc.path).dirname.instance_eval { |dirname|
80
+ [posts_src_dir, drafts_src_dir].reduce(false) { |acc, dir|
81
+ acc || dirname.eql?(dir)
82
+ }
83
+ }
84
+ }
85
+
86
+ # Jekyll.logger.warn("[PostFiles]", "postdirs: #{docs_with_dirs.map{|doc| Pathname.new(doc.path).dirname}}")
87
+
88
+ assets = docs_with_dirs.map { |doc|
89
+ dest_dir = Pathname.new(doc.destination("")).dirname
90
+ Pathname.new(doc.path).dirname.instance_eval { |postdir|
91
+ Dir[postdir + "**/*"]
92
+ .reject { |fname| fname =~ FIXED_DATE_FILENAME_MATCHER }
93
+ .reject { |fname| File.directory? fname }
94
+ .map { |fname|
95
+ asset_abspath = Pathname.new fname
96
+ srcroot_to_asset = asset_abspath.relative_path_from(site_srcroot)
97
+ srcroot_to_assetdir = srcroot_to_asset.dirname
98
+ asset_basename = srcroot_to_asset.basename
99
+
100
+ assetdir_abs = site_srcroot + srcroot_to_assetdir
101
+ postdir_to_assetdir = assetdir_abs.relative_path_from(postdir)
102
+ PostFile.new(site, site_srcroot, srcroot_to_assetdir.to_path, asset_basename, (dest_dir + postdir_to_assetdir).to_path)
103
+ }
104
+ }
105
+ }.flatten
106
+
107
+ site.static_files.concat(assets)
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module PostFiles
5
+ VERSION = "3.0.0"
6
+ end
7
+ end
metadata CHANGED
@@ -1,59 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-postfiles
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Hoizey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-17 00:00:00.000000000 Z
11
+ date: 2018-05-31 00:00:00.000000000 Z
12
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.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.6'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '1.12'
33
+ version: '1.16'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: '1.12'
40
+ version: '1.16'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '10.0'
47
+ version: '12.0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '10.0'
54
+ version: '12.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rubocop
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0.42'
61
+ version: 0.55.0
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0.42'
55
- description: This plugin takes any file that is in posts folders, and copy them to
56
- the folder in which the post HTML page will be created.
68
+ version: 0.55.0
69
+ description: " This plugin takes any file that is in posts folders, and copy them
70
+ to the folder in which the post HTML page will be created.\n"
57
71
  email:
58
72
  - nicolas@hoizey.com
59
73
  executables: []
@@ -61,13 +75,13 @@ extensions: []
61
75
  extra_rdoc_files: []
62
76
  files:
63
77
  - Gemfile
64
- - LICENSE.txt
78
+ - LICENSE
65
79
  - README.md
80
+ - RELEASES.md
66
81
  - Rakefile
67
- - _release.sh
68
- - jekyll-postfiles.gemspec
69
82
  - lib/jekyll-postfiles.rb
70
- - lib/jekyll-postfiles/version.rb
83
+ - lib/jekyll/postfiles.rb
84
+ - lib/jekyll/postfiles/version.rb
71
85
  homepage: https://nhoizey.github.io/jekyll-postfiles/
72
86
  licenses:
73
87
  - MIT
@@ -88,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
102
  version: '0'
89
103
  requirements: []
90
104
  rubyforge_project:
91
- rubygems_version: 2.6.4
105
+ rubygems_version: 2.7.4
92
106
  signing_key:
93
107
  specification_version: 4
94
108
  summary: A Jekyll plugin to keep posts assets alongside their Markdown files
@@ -1,11 +0,0 @@
1
- #!/bin/sh
2
- # https://github.com/svenfuchs/gem-release
3
-
4
- if [ -z "$1" ]; then
5
- echo "Usage: provide the release type (patch, minor, major)."
6
- exit -1
7
- else
8
- release_type="$@"
9
- fi
10
-
11
- gem bump --version "$release_type" --tag --release
@@ -1,23 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'jekyll-postfiles/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "jekyll-postfiles"
8
- spec.version = JekyllPostFiles::VERSION
9
- spec.authors = ["Nicolas Hoizey"]
10
- spec.email = ["nicolas@hoizey.com"]
11
-
12
- spec.summary = %q{A Jekyll plugin to keep posts assets alongside their Markdown files}
13
- spec.description = %q{This plugin takes any file that is in posts folders, and copy them to the folder in which the post HTML page will be created.}
14
- spec.homepage = "https://nhoizey.github.io/jekyll-postfiles/"
15
- spec.license = "MIT"
16
-
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.require_paths = ["lib"]
19
-
20
- spec.add_development_dependency "bundler", "~> 1.12"
21
- spec.add_development_dependency "rake", "~> 10.0"
22
- spec.add_development_dependency "rubocop", "~> 0.42"
23
- end
@@ -1,3 +0,0 @@
1
- module JekyllPostFiles
2
- VERSION = "2.1.1"
3
- end