nanoc-github 1.0.1 → 1.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 +4 -4
- data/README.md +5 -3
- data/lib/nanoc/github.rb +71 -1
- data/lib/nanoc/github/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd984944196f6054b8fd003d57caa00c57651f843112c2f16305be56e1ec8e4d
|
4
|
+
data.tar.gz: 50435138314259aa25e3649663b695b5e0f52e3f12a7a278b70d3c513e8ea6bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9dcbbff78cc680d767f444202bb501861372afd2bf1ba704ebc8ebcc8f3d2aa705d528ad09e8e204212921a771d0963288ff01ba33e6099b66599d3ad15653e0
|
7
|
+
data.tar.gz: c4f2ba46b7c121bbe37fb04cb456e619d2dde881c68496a7d679a3471186635278f053983d1de56566aec67735c88a3dc0dd364c50e01d3463d2e53b3caaabf3
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Nanoc::Github
|
2
2
|
|
3
|
-
Content source from git repository. A way to have your writing in public and open for
|
3
|
+
Content source from git repository. A way to have your writing in public and open for editing while not being distracted
|
4
4
|
by static site generator trivia this content is usually mixed with.
|
5
5
|
|
6
6
|
## Usage
|
@@ -23,14 +23,16 @@ At last, enable github data source in `nanoc.yaml`:
|
|
23
23
|
data_sources:
|
24
24
|
- type: github
|
25
25
|
items_root: /posts # the root where items should be mounted
|
26
|
-
repository: arkency/posts
|
26
|
+
repository: arkency/posts # organization/repository on github to use as a source of content
|
27
27
|
encoding: utf-8 # how to decode content (default: utf-8)
|
28
28
|
access_token: secret123 # github access token, not required for public repositories (default: nil)
|
29
29
|
path: posts/ # subdirectory of the content in given repository (default: nil)
|
30
30
|
concurrency: 10 # how many threads to spawn to fetch data (default: 5)
|
31
|
+
verbose: true # show HTTP cache hit/miss on STDOUT (default: false)
|
32
|
+
max_age: 600 # override time in which cached content is considered to be fresh (default: 60)
|
31
33
|
```
|
32
34
|
|
33
35
|
## Status
|
34
36
|
|
35
37
|
[](https://github.com/pawelpacana/nanoc-github/actions)
|
36
|
-
[](https://badge.fury.io/rb/nanoc-github)
|
38
|
+
[](https://badge.fury.io/rb/nanoc-github)
|
data/lib/nanoc/github.rb
CHANGED
@@ -1,14 +1,68 @@
|
|
1
1
|
require "nanoc"
|
2
2
|
require "octokit"
|
3
3
|
require "concurrent-ruby"
|
4
|
+
require "faraday/http_cache"
|
5
|
+
require "pstore"
|
4
6
|
|
5
7
|
module Nanoc
|
6
8
|
module Github
|
7
9
|
REGEX = /^(?<metadata>---\s*\n.*?\n?)^(---\s*$\n?)/m
|
8
10
|
|
11
|
+
class Cache
|
12
|
+
def initialize(cache_dir)
|
13
|
+
@store = PStore.new(File.join(cache_dir, "nanoc-github.store"), true)
|
14
|
+
end
|
15
|
+
|
16
|
+
def write(name, value, options = nil)
|
17
|
+
store.transaction { store[name] = value }
|
18
|
+
end
|
19
|
+
|
20
|
+
def read(name, options = nil)
|
21
|
+
store.transaction(true) { store[name] }
|
22
|
+
end
|
23
|
+
|
24
|
+
def delete(name, options = nil)
|
25
|
+
store.transaction { store.delete(name) }
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
attr_reader :store
|
30
|
+
end
|
31
|
+
|
32
|
+
class ModifyMaxAge < Faraday::Middleware
|
33
|
+
def initialize(app, time:)
|
34
|
+
@app = app
|
35
|
+
@time = Integer(time)
|
36
|
+
end
|
37
|
+
|
38
|
+
def call(request_env)
|
39
|
+
@app.call(request_env).on_complete do |response_env|
|
40
|
+
response_env[:response_headers][:cache_control] = "public, max-age=#{@time}, s-maxage=#{@time}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
9
45
|
class Source < Nanoc::DataSource
|
10
46
|
identifier :github
|
11
47
|
|
48
|
+
def up
|
49
|
+
stack = Faraday::RackBuilder.new do |builder|
|
50
|
+
builder.use Faraday::HttpCache,
|
51
|
+
serializer: Marshal,
|
52
|
+
shared_cache: false,
|
53
|
+
store: Cache.new(tmp_dir),
|
54
|
+
logger: verbose ? logger : nil
|
55
|
+
builder.use ModifyMaxAge, time: max_age
|
56
|
+
builder.use Faraday::Request::Retry,
|
57
|
+
exceptions: [Octokit::ServerError]
|
58
|
+
builder.use Octokit::Middleware::FollowRedirects
|
59
|
+
builder.use Octokit::Response::RaiseError
|
60
|
+
builder.use Octokit::Response::FeedParser
|
61
|
+
builder.adapter Faraday.default_adapter
|
62
|
+
end
|
63
|
+
Octokit.middleware = stack
|
64
|
+
end
|
65
|
+
|
12
66
|
def items
|
13
67
|
@items ||= begin
|
14
68
|
repository_items.map do |item|
|
@@ -51,7 +105,7 @@ module Nanoc
|
|
51
105
|
def encoding
|
52
106
|
@config[:encoding] || "utf-8"
|
53
107
|
end
|
54
|
-
|
108
|
+
|
55
109
|
def concurrency
|
56
110
|
@config[:concurrency] || 5
|
57
111
|
end
|
@@ -67,6 +121,22 @@ module Nanoc
|
|
67
121
|
def repository
|
68
122
|
@config[:repository]
|
69
123
|
end
|
124
|
+
|
125
|
+
def verbose
|
126
|
+
@config[:verbose]
|
127
|
+
end
|
128
|
+
|
129
|
+
def max_age
|
130
|
+
@config[:max_age] || 60
|
131
|
+
end
|
132
|
+
|
133
|
+
def logger
|
134
|
+
Logger.new(STDOUT)
|
135
|
+
end
|
136
|
+
|
137
|
+
def tmp_dir
|
138
|
+
File.join(@site_config.dir, "tmp")
|
139
|
+
end
|
70
140
|
end
|
71
141
|
end
|
72
142
|
end
|
data/lib/nanoc/github/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc-github
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paweł Pacana
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nanoc
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - "<"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '2.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: faraday-http-cache
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
61
75
|
description: |
|
62
76
|
Nanoc content source from git repository. A way to have your writing in public and open for edition while not being
|
63
77
|
distracted by static site generator trivia this content is usually mixed with.
|
@@ -96,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
110
|
- !ruby/object:Gem::Version
|
97
111
|
version: '0'
|
98
112
|
requirements: []
|
99
|
-
rubygems_version: 3.
|
113
|
+
rubygems_version: 3.0.3
|
100
114
|
signing_key:
|
101
115
|
specification_version: 4
|
102
116
|
summary: Nanoc content source from git repository
|