notion_ruby_mapping 0.6.4 → 0.6.5
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 +7 -11
- data/{tools/createErDiagram.rb → exe/notionErDiagram.rb} +20 -7
- data/exe/notionSitemap.rb +130 -0
- data/lib/notion_ruby_mapping/blocks/base.rb +1 -1
- data/lib/notion_ruby_mapping/objects/equation_object.rb +5 -0
- data/lib/notion_ruby_mapping/objects/mention_object.rb +5 -0
- data/lib/notion_ruby_mapping/version.rb +1 -1
- metadata +7 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1cd3d5401bef9a8567f2e316a14ae4e2833d55eb5f22456afe74714133a2b970
|
|
4
|
+
data.tar.gz: b795baa4b02b38080ecce9381efad566c304548bb3e90116d71fa687e371e7de
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 761538aea8d3bfce6e577c2f6681a84e1ec94cf1a3ef2ccc15b284867303f4d6235b7d90c1806ed0beb2292fa4e5391a62e3b8a6e7c27f1741eb6a7f7f3fd275
|
|
7
|
+
data.tar.gz: d9faffa54de1a2379f75ad4add80cd08d38b450553d2e7b0fad340ee718a7a73e02275b085f54c140810dbb3c5013e375407cae39ae500bc1f34963ba0c61638
|
data/README.md
CHANGED
|
@@ -75,21 +75,16 @@ NotionCache.instance.create_client ENV["NOTION_API_TOKEN"] # from environment
|
|
|
75
75
|
### 2.3 Sample codes
|
|
76
76
|
|
|
77
77
|
1. [Database and page access sample](https://www.notion.so/hkob/Database-and-page-access-sample-d30033e707194faf995741167eb2b6f8)
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
2. [Append block children sample](https://www.notion.so/hkob/Append-block-children-sample-3867910a437340be931cf7f2c06443c6)
|
|
79
|
+
3. [Update block sample](https://www.notion.so/hkob/update-block-sample-5568c1c36fe84f12b83edfe2dda83028)
|
|
80
80
|
|
|
81
81
|
### 2.4. Another example code (Use case)
|
|
82
82
|
|
|
83
83
|
1. [Set icon to all icon unsettled pages](examples/set_icon_to_all_icon_unsettled_pages.md)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
```shell
|
|
89
|
-
Usage:
|
|
90
|
-
ruby tools/createErDiagram.rb database_id code_block_id
|
|
91
|
-
ruby tools/createErDiagram.rb "database_url" "code_block_url"
|
|
92
|
-
```
|
|
84
|
+
2. [Renumbering pages](examples/renumbering_pages.md)
|
|
85
|
+
3. [Change title](examples/change_title.md)
|
|
86
|
+
4. [Create ER Diagram from Notion database](https://www.notion.so/hkob/notionErDiagram-Sample-1720c2199c534ca08138cde38f31f710)
|
|
87
|
+
5. [Create Sitemap from Notion pages](https://www.notion.so/hkob/NotionSitemap-sample-14e195c83d024c5382aab09210916c87)
|
|
93
88
|
|
|
94
89
|
### 2.5 API reference
|
|
95
90
|
|
|
@@ -97,6 +92,7 @@ Usage:
|
|
|
97
92
|
|
|
98
93
|
## 3. ChangeLog
|
|
99
94
|
|
|
95
|
+
- 2022/8/10 [v0.6.5] add notionSiteMap.rb, rename createErDiagram to notionErDiagram, and move them to exe directory
|
|
100
96
|
- 2022/8/9 [v0.6.4] url can be entered instead of page_id, block_id and database_id
|
|
101
97
|
- 2022/8/9 [v0.6.3] update createErDiagram.rb (Fixed a bug with non-ASCII database titles)
|
|
102
98
|
- 2022/8/7 [v0.6.2] add comment_object support
|
|
@@ -6,13 +6,13 @@ include NotionRubyMapping
|
|
|
6
6
|
def append_database(text, db, db_titles)
|
|
7
7
|
base_title = db_title db
|
|
8
8
|
normalize_db_title(db, db_titles) if db_titles[db].nil?
|
|
9
|
-
text << "#{db_titles[db]} {"
|
|
10
|
-
text << %(
|
|
9
|
+
text << " #{db_titles[db]} {"
|
|
10
|
+
text << %( Database title "#{base_title}") unless base_title == db_titles[db]
|
|
11
11
|
db.properties.reject { |p| p.is_a? RelationProperty }.each_with_index do |p, i|
|
|
12
12
|
class_name = p.class.name.split("::").last.sub /Property/, ""
|
|
13
|
-
text << %(
|
|
13
|
+
text << %( #{class_name} p#{i} "#{p.name}")
|
|
14
14
|
end
|
|
15
|
-
text << "}\n"
|
|
15
|
+
text << " }\n"
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def normalize_db_title(db, db_titles)
|
|
@@ -25,7 +25,7 @@ def db_title(db)
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
if ARGV.length < 2
|
|
28
|
-
print "Usage:
|
|
28
|
+
print "Usage: notionErDiagram.rb top_database_id code_block_id"
|
|
29
29
|
exit
|
|
30
30
|
end
|
|
31
31
|
database_id, code_block_id = ARGV
|
|
@@ -47,11 +47,24 @@ until dbs.empty?
|
|
|
47
47
|
db.properties.select { |pp| pp.is_a? RelationProperty }.each_with_index do |pp, i|
|
|
48
48
|
new_db = Database.find pp.relation_database_id
|
|
49
49
|
normalize_db_title(new_db, db_titles) if db_titles[new_db].nil?
|
|
50
|
-
text << "#{db_titles[db]} |o--o{ #{db_titles[new_db]} : r#{i}"
|
|
50
|
+
text << " #{db_titles[db]} |o--o{ #{db_titles[new_db]} : r#{i}"
|
|
51
51
|
dbs << new_db unless finished[new_db]
|
|
52
52
|
end
|
|
53
53
|
text << ""
|
|
54
54
|
end
|
|
55
|
-
|
|
55
|
+
|
|
56
|
+
text_objects = text.each_with_object([]) do |str, ans|
|
|
57
|
+
strn = "#{str}\n"
|
|
58
|
+
if (last = ans.last)
|
|
59
|
+
if last.length + strn.length > 1999
|
|
60
|
+
ans << strn
|
|
61
|
+
else
|
|
62
|
+
ans[-1] += strn
|
|
63
|
+
end
|
|
64
|
+
else
|
|
65
|
+
ans << strn
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
block.rich_text_array.rich_text_objects = text_objects
|
|
56
69
|
block.language = "mermaid"
|
|
57
70
|
block.save
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "notion_ruby_mapping"
|
|
4
|
+
include NotionRubyMapping
|
|
5
|
+
|
|
6
|
+
# see https://zenn.dev/kinkinbeer135ml/articles/f08ce790091aca
|
|
7
|
+
def escape_title(title)
|
|
8
|
+
title.gsub /[(){}\[\]!”#$%&’()=^〜|¥1234567890@`「」{};:+*<>、。・?_]/, ""
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Sitemap
|
|
12
|
+
def initialize(top_page, orient, nolink)
|
|
13
|
+
@top_page = top_page
|
|
14
|
+
@code = {@top_page => "p0"}
|
|
15
|
+
@queue = [@top_page]
|
|
16
|
+
@finished = {}
|
|
17
|
+
@page_links = Hash.new { |h, k| h[k] = [] }
|
|
18
|
+
@text = ["flowchart #{orient}"]
|
|
19
|
+
@nolink = nolink
|
|
20
|
+
end
|
|
21
|
+
attr_reader :text
|
|
22
|
+
|
|
23
|
+
def dig_pages
|
|
24
|
+
until @queue.empty?
|
|
25
|
+
page = @queue.shift
|
|
26
|
+
@finished[page] = true
|
|
27
|
+
search_blocks(page)
|
|
28
|
+
@text << %(click #{@code[page]} "#{page["url"]}")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def code_with_title(page)
|
|
33
|
+
"#{@code[page]}(#{escape_title page.title})"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def search_blocks(page)
|
|
37
|
+
print "#{page.title}\n"
|
|
38
|
+
@children = []
|
|
39
|
+
@block_queue = page.children.to_a
|
|
40
|
+
search_block page, @block_queue.shift until @block_queue.empty?
|
|
41
|
+
unless @children.empty?
|
|
42
|
+
title = page == @top_page ? code_with_title(page) : @code[page]
|
|
43
|
+
@text << [title, @children.map { |p| code_with_title p }.join(" & ")].join(" --> ")
|
|
44
|
+
end
|
|
45
|
+
print "\n"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def search_block(page, block)
|
|
49
|
+
case block
|
|
50
|
+
when ChildPageBlock
|
|
51
|
+
add_child block.children.first.parent
|
|
52
|
+
when LinkToPageBlock
|
|
53
|
+
add_link page, block.page_id unless @nolink
|
|
54
|
+
else
|
|
55
|
+
@block_queue += block.children.to_a if block.has_children
|
|
56
|
+
search_link_in_rta(page, block.rich_text_array) if !@nolink && block.is_a?(TextSubBlockColorBaseBlock)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def add_child(child)
|
|
61
|
+
@queue << child
|
|
62
|
+
@children << child
|
|
63
|
+
set_code child
|
|
64
|
+
print " --> #{child.title}\n"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def set_code(page)
|
|
68
|
+
@code[page] ||= "p#{@code.length}"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def add_link(page, link_page_id)
|
|
72
|
+
return unless link_page_id
|
|
73
|
+
|
|
74
|
+
begin
|
|
75
|
+
link_page = Page.find link_page_id
|
|
76
|
+
rescue
|
|
77
|
+
print "\n#{link_page_id} can not read by this integration\n"
|
|
78
|
+
return
|
|
79
|
+
end
|
|
80
|
+
set_code link_page
|
|
81
|
+
@page_links[page] << link_page
|
|
82
|
+
print " -.-> #{link_page.title} "
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def search_link_in_rta(page, rta)
|
|
86
|
+
rta.each { |to| add_link page, to.page_id if to.is_a?(MentionObject) && to.page_id }
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def link_pages
|
|
90
|
+
@page_links.each do |org, array|
|
|
91
|
+
link_finished = {}
|
|
92
|
+
array.each do |lp|
|
|
93
|
+
link_finished[lp] = @finished[lp] ? @code[lp] : code_with_title(lp)
|
|
94
|
+
end
|
|
95
|
+
@text << [@code[org], link_finished.values.join(" & ")].join(" -.-> ")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
if ARGV.length < 3
|
|
101
|
+
print "Usage: notionSitemap.rb top_page_id code_block_id orient(LR or TD) [--nolink]"
|
|
102
|
+
exit
|
|
103
|
+
end
|
|
104
|
+
top_page_id, code_block_id, orient, nolink = ARGV
|
|
105
|
+
NotionCache.instance.create_client ENV["NOTION_API_KEY"]
|
|
106
|
+
code_block = Block.find code_block_id
|
|
107
|
+
unless code_block.is_a? CodeBlock
|
|
108
|
+
print "#{code_block_id} is not CodeBlock's id"
|
|
109
|
+
exit
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
top_page = Page.find top_page_id
|
|
113
|
+
sm = Sitemap.new top_page, orient, nolink == "--nolink"
|
|
114
|
+
sm.dig_pages
|
|
115
|
+
sm.link_pages unless nolink
|
|
116
|
+
text_objects = sm.text.each_with_object([]) do |str, ans|
|
|
117
|
+
strn = "#{str}\n"
|
|
118
|
+
if (last = ans.last)
|
|
119
|
+
if last.length + strn.length > 1999
|
|
120
|
+
ans << strn
|
|
121
|
+
else
|
|
122
|
+
ans[-1] += strn
|
|
123
|
+
end
|
|
124
|
+
else
|
|
125
|
+
ans << strn
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
code_block.rich_text_array.rich_text_objects = text_objects
|
|
129
|
+
code_block.language = "mermaid"
|
|
130
|
+
code_block.save
|
|
@@ -25,7 +25,7 @@ module NotionRubyMapping
|
|
|
25
25
|
assign.each_slice(2) { |(klass, key)| assign_property(klass, key) }
|
|
26
26
|
@json ||= {}
|
|
27
27
|
end
|
|
28
|
-
attr_reader :json, :id, :archived
|
|
28
|
+
attr_reader :json, :id, :archived, :has_children
|
|
29
29
|
|
|
30
30
|
# @param [Hash, Notion::Messages] json
|
|
31
31
|
# @return [NotionRubyMapping::Base]
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: notion_ruby_mapping
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hiroyuki KOBAYASHI
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-08-
|
|
11
|
+
date: 2022-08-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -125,7 +125,9 @@ dependencies:
|
|
|
125
125
|
description: Mapping tool from Notion Database/Page/Block to Ruby Objects.
|
|
126
126
|
email:
|
|
127
127
|
- hkob@metro-cit.ac.jp
|
|
128
|
-
executables:
|
|
128
|
+
executables:
|
|
129
|
+
- notionErDiagram.rb
|
|
130
|
+
- notionSitemap.rb
|
|
129
131
|
extensions: []
|
|
130
132
|
extra_rdoc_files: []
|
|
131
133
|
files:
|
|
@@ -144,6 +146,8 @@ files:
|
|
|
144
146
|
- examples/change_title.md
|
|
145
147
|
- examples/renumbering_pages.md
|
|
146
148
|
- examples/set_icon_to_all_icon_unsettled_pages.md
|
|
149
|
+
- exe/notionErDiagram.rb
|
|
150
|
+
- exe/notionSitemap.rb
|
|
147
151
|
- images/post_set_icon.png
|
|
148
152
|
- images/pre_set_icon.png
|
|
149
153
|
- images/serial_number.png
|
|
@@ -234,7 +238,6 @@ files:
|
|
|
234
238
|
- notion_ruby_mapping.gemspec
|
|
235
239
|
- sig/notion_ruby_mapping.rbs
|
|
236
240
|
- tools/an
|
|
237
|
-
- tools/createErDiagram.rb
|
|
238
241
|
homepage: https://github.com/hkob/notion_ruby_mapping.git
|
|
239
242
|
licenses:
|
|
240
243
|
- MIT
|