jekyll-fetch 0.1.2 → 0.2.1
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/.rubocop.yml +5 -0
- data/README.md +32 -0
- data/lib/jekyll-fetch/version.rb +1 -1
- data/lib/jekyll-fetch.rb +78 -16
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5454f6d5abbbd61428289ac94ae2283a5668ace9ec37941d6a333897e70d140
|
4
|
+
data.tar.gz: 295243d723f1b8e149a3ef010d40bff5c7468569937144720a3756a998114612
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c8ca44f9b14fb48ff1662e7ca8e0a901dab63ee028fdccee0dae934af36548a05ec7611945084d44c039be8747313f0632397bbfaf836cf310de128015cc669
|
7
|
+
data.tar.gz: 57fb86f18102e24be963427de16c7a00136da3a90920ec3eafe2cefbb1cccf7110b090fce3c9cff69d3b6e5d61e4937e773e9c9455507dfd869f11f4a852a5b7
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -29,6 +29,38 @@ The example above will render to the raw markdown of this readme. You can chain
|
|
29
29
|
{{ "https://raw.githubusercontent.com/pcouy/jekyll-fetch/main/README.md" | fetch | markdownify }}
|
30
30
|
```
|
31
31
|
|
32
|
+
Additionally, this plugin contains helper filters that help you work with files from GitHub repositories :
|
33
|
+
|
34
|
+
```
|
35
|
+
{{ "gh_user/repo_name" | github_url }}
|
36
|
+
Will render to : https://github.com/gh_user/repo_name
|
37
|
+
|
38
|
+
{{ "gh_user/repo_name" | github_readme }}
|
39
|
+
Will render to the content of the `README.md` file from the repository
|
40
|
+
|
41
|
+
{{ "gh_user/repo_name" | github_file: "path/to/file/in/repo" }}
|
42
|
+
Will render to the content of the specified file from the repository
|
43
|
+
```
|
44
|
+
|
45
|
+
### Specify GitHub branches
|
46
|
+
|
47
|
+
You can change the default branch used for retrieving GitHub files from main to the value of your choice by updating `_config.yml` :
|
48
|
+
|
49
|
+
```yaml
|
50
|
+
fetch: # Config section for the plugin
|
51
|
+
default_github_branch: main # This is the default value but you can use whatever you want
|
52
|
+
```
|
53
|
+
|
54
|
+
The `github_readme` and `github_file` accept an optional argument for one-time overrides of the branch :
|
55
|
+
|
56
|
+
```
|
57
|
+
{{ "gh_user/repo_name" | github_readme: 'branch_name' }}
|
58
|
+
Will render to the content of the `README.md` file from the repository
|
59
|
+
|
60
|
+
{{ "gh_user/repo_name" | github_file: "path/to/file/in/repo", "branch_name" }}
|
61
|
+
Will render to the content of the specified file from the repository
|
62
|
+
```
|
63
|
+
|
32
64
|
## Development
|
33
65
|
|
34
66
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/jekyll-fetch/version.rb
CHANGED
data/lib/jekyll-fetch.rb
CHANGED
@@ -1,29 +1,91 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require_relative 'jekyll-fetch/version'
|
4
|
+
require 'liquid'
|
5
|
+
require 'net/https'
|
6
6
|
|
7
7
|
module Jekyll
|
8
|
+
# Filters for transforming URL strings into the content at the URL
|
8
9
|
module JekyllFetch
|
10
|
+
CONFIG = {
|
11
|
+
'default_github_branch' => 'main'
|
12
|
+
}.freeze
|
9
13
|
class Error < StandardError; end
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
15
|
+
# Helper functions for HTTP requests
|
16
|
+
class Utils
|
17
|
+
class << self
|
18
|
+
def fetch(uri_str, limit = 10)
|
19
|
+
raise ArgumentError, 'Max retries reached' if limit.zero?
|
20
|
+
|
21
|
+
begin
|
22
|
+
unsafe_fetch(uri_str, limit)
|
23
|
+
rescue Errno::ECONNREFUSED
|
24
|
+
Jekyll.logger.warn "Connection refused for #{uri_str}, retrying in 2s..."
|
25
|
+
sleep 2
|
26
|
+
Jekyll.logger.warn "Retrying (#{limit - 1} tries left)"
|
27
|
+
fetch(uri_str, limit - 1)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def config
|
32
|
+
@config ||= CONFIG.merge(JEKYLL_SITE.config['fetch'] || {})
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def unsafe_fetch(uri_str, limit)
|
38
|
+
raise ArgumentError, 'Max retries reached' if limit.zero?
|
39
|
+
|
40
|
+
response_to_body(
|
41
|
+
uri_to_response(uri_str), limit - 1
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
def uri_to_response(uri_str)
|
46
|
+
url = URI.parse(uri_str)
|
47
|
+
req = Net::HTTP::Get.new(url.path, { 'User-Agent' => 'Mozilla/5.0 (etc...)' })
|
48
|
+
Net::HTTP.start(url.host, url.port, use_ssl: true) { |http| http.request(req) }
|
49
|
+
end
|
50
|
+
|
51
|
+
def response_to_body(response, limit)
|
52
|
+
case response
|
53
|
+
when Net::HTTPSuccess then response.body.force_encoding('UTF-8')
|
54
|
+
when Net::HTTPRedirection then fetch(response['location'], limit)
|
55
|
+
else
|
56
|
+
response.error!
|
57
|
+
end
|
58
|
+
end
|
24
59
|
end
|
25
60
|
end
|
61
|
+
|
62
|
+
def fetch(uri_str, limit = 10)
|
63
|
+
raise ArgumentError, 'HTTP redirect too deep' if limit.zero?
|
64
|
+
|
65
|
+
Jekyll.logger.debug "fetch(#{uri_str})"
|
66
|
+
Utils.fetch(uri_str, limit)
|
67
|
+
end
|
68
|
+
|
69
|
+
def github_url(repo)
|
70
|
+
"https://github.com/#{repo}"
|
71
|
+
end
|
72
|
+
|
73
|
+
def github_readme(repo, branch = nil)
|
74
|
+
branch ||= Utils.config['default_github_branch']
|
75
|
+
Jekyll.logger.debug "github_readme(#{repo}, #{branch})"
|
76
|
+
github_file repo, 'README.md', branch
|
77
|
+
end
|
78
|
+
|
79
|
+
def github_file(repo, file, branch = nil)
|
80
|
+
branch ||= Utils.config['default_github_branch']
|
81
|
+
Jekyll.logger.debug "github_file(#{repo}, #{file}, #{branch})"
|
82
|
+
fetch "#{github_url(repo)}/raw/#{branch}/#{file}"
|
83
|
+
end
|
26
84
|
end
|
27
85
|
end
|
28
86
|
|
29
87
|
Liquid::Template.register_filter(Jekyll::JekyllFetch)
|
88
|
+
|
89
|
+
Jekyll::Hooks.register :site, :after_init do |site|
|
90
|
+
Jekyll::JekyllFetch::JEKYLL_SITE = site
|
91
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-fetch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pcouy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: liquid
|