jekyll-notion 0.0.0.alpha
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 +7 -0
- data/README.md +2 -0
- data/lib/jekyll-notion/document_without_a_file.rb +13 -0
- data/lib/jekyll-notion/generator.rb +64 -0
- data/lib/jekyll-notion/notion_database.rb +38 -0
- data/lib/jekyll-notion/notion_page.rb +48 -0
- data/lib/jekyll-notion/version.rb +3 -0
- data/lib/jekyll-notion.rb +10 -0
- metadata +128 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 28969fe017d3182ae86953154bef64b2faf3fea5477eea3b315af7b0c6e99def
|
4
|
+
data.tar.gz: 4fe4fdeb77eaaafcadd5adce283e2a77e17ea9bfa57c32464e0c45d467038827
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 30a409cbf940624c5d60556f50c70f19edcdd6d936b969faf375f410cf5ecfaea940eb0441de1ff527717bfdef5f0580a35d7619e41f3e6ff2d75f0851776a55
|
7
|
+
data.tar.gz: dd5ae8d678bc6f6ebeef2703e2722161a36cecef145a275146818bea6fb0abccdb3cb9427bf1020cdd33271912e1c10c75c395eea86d51d371b6fc2fd548fe49
|
data/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module JekyllNotion
|
4
|
+
class DocumentWithoutAFile < Jekyll::Document
|
5
|
+
def read_content(new_content, **opts)
|
6
|
+
if content =~ YAML_FRONT_MATTER_REGEXP
|
7
|
+
self.content = $POSTMATCH
|
8
|
+
data_file = SafeYAML.load(Regexp.last_match(1))
|
9
|
+
merge_data!(data_file, :source => "YAML front matter") if data_file
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/inflector'
|
4
|
+
require 'notion'
|
5
|
+
require 'notion_to_md'
|
6
|
+
require_relative './notion_database'
|
7
|
+
|
8
|
+
module JekyllNotion
|
9
|
+
class Generator < Jekyll::Generator
|
10
|
+
attr_reader :current_page
|
11
|
+
|
12
|
+
def initialize(plugin)
|
13
|
+
super(plugin)
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate(site)
|
17
|
+
@site = site
|
18
|
+
@db = NotionDatabase.new(config: config)
|
19
|
+
@db.pages do |page|
|
20
|
+
@current_page = page
|
21
|
+
site.posts.docs << make_page
|
22
|
+
Jekyll.logger.info("New page from notion", site.posts.docs.last.path)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def make_page
|
27
|
+
new_post = DocumentWithoutAFile.new(
|
28
|
+
"#{Dir.pwd}/_#{config['collection']}/#{make_filename}",
|
29
|
+
{ site: @site, collection: collection }
|
30
|
+
)
|
31
|
+
new_post.content = "#{make_frontmatter}\n\n#{make_md}"
|
32
|
+
new_post.read
|
33
|
+
new_post
|
34
|
+
end
|
35
|
+
|
36
|
+
def make_md
|
37
|
+
NotionToMd::Converter.new(page_id: current_page.id).convert
|
38
|
+
end
|
39
|
+
|
40
|
+
def make_frontmatter
|
41
|
+
<<-CONTENT
|
42
|
+
#{config['frontmatter'].to_yaml}
|
43
|
+
id: #{current_page.id}
|
44
|
+
layout: #{current_page.layout}
|
45
|
+
title: #{current_page.title}
|
46
|
+
date: #{current_page.created_datetime.to_s}
|
47
|
+
cover: #{current_page.cover}
|
48
|
+
---
|
49
|
+
CONTENT
|
50
|
+
end
|
51
|
+
|
52
|
+
def make_filename
|
53
|
+
"#{current_page.created_date.to_s}-#{current_page.title.downcase.parameterize}.md"
|
54
|
+
end
|
55
|
+
|
56
|
+
def collection
|
57
|
+
@site.send(config['collection'].to_sym)
|
58
|
+
end
|
59
|
+
|
60
|
+
def config
|
61
|
+
@config ||= @site.config["notion"] || {}
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative './notion_page'
|
2
|
+
|
3
|
+
module JekyllNotion
|
4
|
+
class NotionDatabase
|
5
|
+
def initialize(config:)
|
6
|
+
@notion = Notion::Client.new
|
7
|
+
@config = config
|
8
|
+
end
|
9
|
+
|
10
|
+
def pages
|
11
|
+
@pages ||= @notion.database_query(query)[:results].map do |page|
|
12
|
+
NotionPage.new(page: page, layout: @config['layout'])
|
13
|
+
end
|
14
|
+
|
15
|
+
return @pages unless block_given?
|
16
|
+
|
17
|
+
@pages.each { |page| yield page }
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def filter
|
23
|
+
@config.dig('database', 'filter')
|
24
|
+
end
|
25
|
+
|
26
|
+
def sort
|
27
|
+
@config.dig('database', 'sort')
|
28
|
+
end
|
29
|
+
|
30
|
+
def id
|
31
|
+
@config.dig('database', 'id')
|
32
|
+
end
|
33
|
+
|
34
|
+
def query
|
35
|
+
{ id: id, filter: filter, sort: sort }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module JekyllNotion
|
2
|
+
class NotionPage
|
3
|
+
attr_reader :page, :layout
|
4
|
+
|
5
|
+
def initialize(page:, layout:)
|
6
|
+
@page = page
|
7
|
+
@layout = layout
|
8
|
+
end
|
9
|
+
|
10
|
+
def title
|
11
|
+
page.dig(:properties, :Name, :title).inject('') do |acc, slug|
|
12
|
+
acc + slug[:plain_text]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def cover
|
17
|
+
page.dig(:cover, :external, :url)
|
18
|
+
end
|
19
|
+
|
20
|
+
def icon
|
21
|
+
page.dig(:icon, :emoji)
|
22
|
+
end
|
23
|
+
|
24
|
+
def id
|
25
|
+
page[:id]
|
26
|
+
end
|
27
|
+
|
28
|
+
def created_date
|
29
|
+
created_datetime.to_date
|
30
|
+
end
|
31
|
+
|
32
|
+
def created_datetime
|
33
|
+
DateTime.parse(page["created_time"])
|
34
|
+
end
|
35
|
+
|
36
|
+
def updated_date
|
37
|
+
updated_datetime.to_date
|
38
|
+
end
|
39
|
+
|
40
|
+
def updated_datetime
|
41
|
+
DateTime.parse(page["last_edited_time"])
|
42
|
+
end
|
43
|
+
|
44
|
+
def url
|
45
|
+
page[:url]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-notion
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0.alpha
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Enrique Arias
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-01-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jekyll
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.7'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '5.0'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '3.7'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '5.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: notion_to_md
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: notion-ruby-client
|
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'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: bundler
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '2'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '2'
|
89
|
+
description:
|
90
|
+
email:
|
91
|
+
- emoriarty81@gmail.com
|
92
|
+
executables: []
|
93
|
+
extensions: []
|
94
|
+
extra_rdoc_files:
|
95
|
+
- README.md
|
96
|
+
files:
|
97
|
+
- README.md
|
98
|
+
- lib/jekyll-notion.rb
|
99
|
+
- lib/jekyll-notion/document_without_a_file.rb
|
100
|
+
- lib/jekyll-notion/generator.rb
|
101
|
+
- lib/jekyll-notion/notion_database.rb
|
102
|
+
- lib/jekyll-notion/notion_page.rb
|
103
|
+
- lib/jekyll-notion/version.rb
|
104
|
+
homepage: https://github.com/emoriarty/jekyll-notion
|
105
|
+
licenses:
|
106
|
+
- MIT
|
107
|
+
metadata: {}
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 2.5.0
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 1.3.1
|
122
|
+
requirements: []
|
123
|
+
rubyforge_project:
|
124
|
+
rubygems_version: 2.7.3
|
125
|
+
signing_key:
|
126
|
+
specification_version: 4
|
127
|
+
summary: A Jekyll plugin to generate pages from Notion
|
128
|
+
test_files: []
|