notion_ruby_mapping 0.7.2 → 0.7.3
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 +4 -2
- data/exe/erdToNotionDb.rb +19 -4
- data/lib/notion_ruby_mapping/blocks/database.rb +6 -1
- data/lib/notion_ruby_mapping/controllers/mermaid.rb +15 -5
- data/lib/notion_ruby_mapping/controllers/mermaid_database.rb +107 -44
- data/lib/notion_ruby_mapping/properties/property.rb +2 -0
- data/lib/notion_ruby_mapping/version.rb +1 -1
- 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: da835af42a7f97ad54db43b0cbc8bad2e0a7374004cc5a643f2b307641e1b081
|
4
|
+
data.tar.gz: d0b5d728ea30328290c676c51cb3bbbf19508c7f2c6413f032b347989cefae12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85bc6f5b88a5a91fc951455c658c9e9e39cc806f3d772c170eafb323eedfc0fc326e601cf8d3ba79ec518f17ec3a42d9c3cec3c70639c1282eec9daed4da6415
|
7
|
+
data.tar.gz: 6af5b7f9a5da2c678826746808310e82ce53f5f60df9ea7808e9b12ac7b8b78d20b9bc81441e6a8596896921ec0d57f97c8add47d04c12c48a5b1374a41851de
|
data/README.md
CHANGED
@@ -116,8 +116,9 @@ NotionRubyMapping.configuration { |c| c.notion_token = ENV["NOTION_API_TOKEN"] }
|
|
116
116
|
1. [Set icon to all icon unsettled pages / 全てのページのアイコンを同一に設定](examples/set_icon_to_all_icon_unsettled_pages.md)
|
117
117
|
2. [Renumbering pages / ページのナンバリング](examples/renumbering_pages.md)
|
118
118
|
3. [Change title / タイトルの変更](examples/change_title.md)
|
119
|
-
4. [Create ER Diagram from Notion database / Notion データベースの ER 図を作成](https://
|
120
|
-
5. [Create Sitemap from Notion pages / Notion page からサイトマップを作成](https://
|
119
|
+
4. [Create ER Diagram from Notion database / Notion データベースの ER 図を作成](https://hkob.notion.site/notionErDiagram-Sample-1720c2199c534ca08138cde38f31f710)
|
120
|
+
5. [Create Sitemap from Notion pages / Notion page からサイトマップを作成](https://hkob.notion.site/notionSitemap-sample-14e195c83d024c5382aab09210916c87)
|
121
|
+
6. [Create Notion databases from ER Diagram / ER 図から Notion データベースを作成](https://hkob.notion.site/erdToNotionDb-sample-87e5e52a6b9f46abbdeebcb3c902a516)
|
121
122
|
|
122
123
|
### 2.5 API reference / API リファレンス
|
123
124
|
|
@@ -125,6 +126,7 @@ NotionRubyMapping.configuration { |c| c.notion_token = ENV["NOTION_API_TOKEN"] }
|
|
125
126
|
|
126
127
|
## 3. ChangeLog
|
127
128
|
|
129
|
+
- 2023/1/26 [v0.7.3] release beta version of erdToNotionRb.rb script
|
128
130
|
- 2023/1/25 [v0.7.2] bug fix for creating relation property / add erdToNotionRb.rb script
|
129
131
|
- 2022/12/16 [v0.7.1] bug fix for query rollup property
|
130
132
|
- 2022/11/28 [v0.7.0] add this_week filter and NotionRubyMapping.configure
|
data/exe/erdToNotionDb.rb
CHANGED
@@ -35,7 +35,22 @@ exist_dbs.each do |db|
|
|
35
35
|
end
|
36
36
|
|
37
37
|
mermaid.create_notion_db target_page, inline
|
38
|
-
mermaid.
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
mermaid.update_title
|
39
|
+
pass = 1
|
40
|
+
pre_remain = nil
|
41
|
+
loop do
|
42
|
+
print "=== Pass #{pass} ===\n"
|
43
|
+
mermaid.update_databases
|
44
|
+
mermaid.rename_reverse_name
|
45
|
+
count = mermaid.count
|
46
|
+
remain = mermaid.remain
|
47
|
+
print "Pass #{pass} Remain #{remain} in #{count}\n"
|
48
|
+
if pre_remain == remain
|
49
|
+
print "Dependency loop detected.\n"
|
50
|
+
exit
|
51
|
+
end
|
52
|
+
pre_remain = remain
|
53
|
+
break if remain.zero?
|
54
|
+
pass += 1
|
55
|
+
end
|
56
|
+
print "Finish!!!"
|
@@ -155,7 +155,12 @@ module NotionRubyMapping
|
|
155
155
|
if dry_run
|
156
156
|
dry_run_script :patch, @nc.database_path(@id), :update_property_schema_json
|
157
157
|
else
|
158
|
-
|
158
|
+
payload = update_property_schema_json
|
159
|
+
begin
|
160
|
+
update_json @nc.update_database_request(@id, payload)
|
161
|
+
rescue StandardError => e
|
162
|
+
raise StandardError, "#{e.message} by #{payload}"
|
163
|
+
end
|
159
164
|
end
|
160
165
|
end
|
161
166
|
end
|
@@ -16,7 +16,7 @@ module NotionRubyMapping
|
|
16
16
|
until @lines.empty?
|
17
17
|
case @lines.shift
|
18
18
|
when / *(\w+) *[|}][|o]--[o|][|{] *(\w+) *: *"(.*)" */
|
19
|
-
db_or_create(Regexp.last_match(1)).
|
19
|
+
db_or_create(Regexp.last_match(1)).append_relation_queue db_or_create(Regexp.last_match(2)), Regexp.last_match(3)
|
20
20
|
when / *(\w+) *{ */
|
21
21
|
append_db_with_attributes Regexp.last_match(1)
|
22
22
|
else
|
@@ -52,11 +52,17 @@ module NotionRubyMapping
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def create_notion_db(target_page, inline)
|
55
|
-
@databases.
|
55
|
+
@databases.each_value do |mdb|
|
56
56
|
mdb.create_notion_db(target_page, inline) unless mdb.real_db
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
def update_title
|
61
|
+
@databases.each_value do |mdb|
|
62
|
+
mdb.update_title
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
60
66
|
def update_databases
|
61
67
|
@databases.each_value(&:update_database)
|
62
68
|
end
|
@@ -65,8 +71,12 @@ module NotionRubyMapping
|
|
65
71
|
@databases.each_value(&:rename_reverse_name)
|
66
72
|
end
|
67
73
|
|
68
|
-
def
|
69
|
-
@databases.
|
74
|
+
def count
|
75
|
+
@databases.values.map(&:count).sum
|
76
|
+
end
|
77
|
+
|
78
|
+
def remain
|
79
|
+
@databases.values.map(&:remain).sum
|
70
80
|
end
|
71
81
|
end
|
72
|
-
end
|
82
|
+
end
|
@@ -6,11 +6,14 @@ module NotionRubyMapping
|
|
6
6
|
@name = key
|
7
7
|
@title = nil
|
8
8
|
@properties = {}
|
9
|
+
@finish_flag = {}
|
10
|
+
@working = []
|
9
11
|
@relations = {}
|
12
|
+
@relation_queue = []
|
10
13
|
@real_db = nil
|
11
14
|
@reverse_name_queue = {}
|
12
15
|
end
|
13
|
-
attr_reader :properties, :relations, :real_db, :title
|
16
|
+
attr_reader :properties, :relation_queue, :relations, :real_db, :title, :finish_flag
|
14
17
|
attr_accessor :name
|
15
18
|
|
16
19
|
def add_property(key, value)
|
@@ -21,8 +24,8 @@ module NotionRubyMapping
|
|
21
24
|
end
|
22
25
|
end
|
23
26
|
|
24
|
-
def
|
25
|
-
@
|
27
|
+
def append_relation_queue(other, relation)
|
28
|
+
@relation_queue << [relation, other]
|
26
29
|
end
|
27
30
|
|
28
31
|
def attach_database(db)
|
@@ -40,12 +43,30 @@ module NotionRubyMapping
|
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
43
|
-
def
|
46
|
+
def blocked?(name)
|
47
|
+
@finish_flag[name].nil?
|
48
|
+
end
|
49
|
+
|
50
|
+
def count
|
51
|
+
@properties.count + @relation_queue.count
|
52
|
+
end
|
53
|
+
|
54
|
+
def remain
|
55
|
+
count - @finish_flag.count
|
56
|
+
end
|
57
|
+
|
58
|
+
def update_title
|
44
59
|
ps = @real_db.properties
|
45
60
|
title_property = ps.select { |p| p.is_a? TitleProperty }.first
|
46
61
|
title_property.new_name = @title unless title_property.name == @title
|
62
|
+
end
|
63
|
+
|
64
|
+
def update_properties
|
65
|
+
ps = @real_db.properties
|
47
66
|
@properties.each do |(value, key)|
|
48
67
|
name, *options = value.split("|")
|
68
|
+
next if @finish_flag[name]
|
69
|
+
|
49
70
|
property = ps.values_at(name).first
|
50
71
|
case key
|
51
72
|
when /checkbox|created_by|created_time|date|email|files|last_edited_by|last_edited_time|people|phone_number|text|url|status/
|
@@ -56,13 +77,23 @@ module NotionRubyMapping
|
|
56
77
|
rich_text: RichTextProperty, url: UrlProperty, status: StatusProperty
|
57
78
|
}[key.to_sym]
|
58
79
|
@real_db.add_property klass, name unless property
|
80
|
+
@working << name
|
59
81
|
when "formula"
|
60
82
|
f_e = options.first&.gsub "@", '"'
|
61
|
-
|
62
|
-
|
83
|
+
dependencies = f_e&.scan(/prop\("([^"]+)"\)/) || []
|
84
|
+
blocked_key = dependencies.select { |k| blocked? k.first }
|
85
|
+
if blocked_key.empty?
|
86
|
+
if property
|
87
|
+
property.formula_expression = f_e unless property.formula_expression == f_e
|
88
|
+
else
|
89
|
+
@real_db.add_property(FormulaProperty, name) { |dp| dp.formula_expression = f_e }
|
90
|
+
end
|
91
|
+
@working << name
|
63
92
|
else
|
64
|
-
|
93
|
+
print("#{name} blocked by #{blocked_key.flatten}\n")
|
94
|
+
next
|
65
95
|
end
|
96
|
+
|
66
97
|
when "multi_select"
|
67
98
|
if property
|
68
99
|
(options - (property.multi_select_options.map { |h| h["name"] })).each do |select_name|
|
@@ -75,6 +106,7 @@ module NotionRubyMapping
|
|
75
106
|
end
|
76
107
|
end
|
77
108
|
end
|
109
|
+
@working << name
|
78
110
|
when "number"
|
79
111
|
format_value = options.empty? ? "number" : options.first
|
80
112
|
if property
|
@@ -82,6 +114,35 @@ module NotionRubyMapping
|
|
82
114
|
else
|
83
115
|
@real_db.add_property(NumberProperty, name) { |p| p.format = format_value }
|
84
116
|
end
|
117
|
+
@working << name
|
118
|
+
when "rollup"
|
119
|
+
name, *options = value.split("|")
|
120
|
+
relation_name, rollup_name, function = options
|
121
|
+
if blocked? relation_name
|
122
|
+
print("#{name} blocked by #{relation_name}\n")
|
123
|
+
next
|
124
|
+
else
|
125
|
+
relation_db = @relations[relation_name]
|
126
|
+
if relation_db.nil? || relation_db.blocked?(rollup_name)
|
127
|
+
print "#{name} blocked by #{relation_name}-#{rollup_name}\n"
|
128
|
+
next
|
129
|
+
else
|
130
|
+
property = ps.values_at(name).first
|
131
|
+
|
132
|
+
if property
|
133
|
+
property.function = function unless property.function == function
|
134
|
+
property.relation_property_name = relation_name unless property.relation_property_name == relation_name
|
135
|
+
property.rollup_property_name = rollup_name unless property.rollup_property_name == rollup_name
|
136
|
+
else
|
137
|
+
@real_db.add_property(RollupProperty, name) do |dp|
|
138
|
+
dp.function = function
|
139
|
+
dp.relation_property_name = relation_name
|
140
|
+
dp.rollup_property_name = rollup_name
|
141
|
+
end
|
142
|
+
end
|
143
|
+
@working << name
|
144
|
+
end
|
145
|
+
end
|
85
146
|
when "select"
|
86
147
|
if property
|
87
148
|
(options - (property.select_options.map { |h| h["name"] })).each do |select_name|
|
@@ -94,34 +155,51 @@ module NotionRubyMapping
|
|
94
155
|
end
|
95
156
|
end
|
96
157
|
end
|
158
|
+
@working << name
|
97
159
|
else
|
98
160
|
nil
|
99
161
|
end
|
100
162
|
end
|
101
|
-
@
|
163
|
+
while (array = @relation_queue.shift) do
|
164
|
+
value, relation_db = array
|
102
165
|
db_id = relation_db.real_db.id
|
103
166
|
forward, reverse = value.split "|"
|
104
167
|
property = ps.values_at(forward).first
|
105
168
|
if property
|
106
169
|
if reverse
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
170
|
+
if property.database_id == db_id && property.synced_property_name == reverse
|
171
|
+
relation_db.add_property "relation", reverse
|
172
|
+
relation_db.finish_flag[reverse] = true
|
173
|
+
else
|
174
|
+
unless @finish_flag[forward]
|
175
|
+
property.replace_relation_database database_id: db_id
|
176
|
+
relation_db.append_reverse_name_queue self, forward, reverse
|
177
|
+
end
|
178
|
+
@working << forward
|
179
|
+
add_property "relation", forward
|
180
|
+
end
|
181
|
+
relation_db.relations[reverse] = self
|
111
182
|
else
|
112
|
-
|
113
|
-
|
114
|
-
|
183
|
+
unless property.database_id == db_id
|
184
|
+
property.replace_relation_database database_id: db_id, type: "single_property"
|
185
|
+
@working << forward
|
186
|
+
add_property "relation", forward
|
187
|
+
end
|
115
188
|
end
|
189
|
+
@relations[forward] = relation_db
|
116
190
|
else
|
117
191
|
@real_db.add_property(RelationProperty, forward) do |p|
|
118
192
|
if reverse
|
119
193
|
p.replace_relation_database database_id: relation_db.real_db.id
|
120
194
|
relation_db.append_reverse_name_queue self, forward, reverse
|
195
|
+
relation_db.relations[reverse] = self
|
121
196
|
else
|
122
197
|
p.replace_relation_database database_id: relation_db.real_db.id, type: "single_property"
|
123
198
|
end
|
124
199
|
end
|
200
|
+
@relations[forward] = relation_db
|
201
|
+
@working << forward
|
202
|
+
add_property "relation", forward
|
125
203
|
end
|
126
204
|
end
|
127
205
|
@real_db.property_schema_json
|
@@ -129,54 +207,39 @@ module NotionRubyMapping
|
|
129
207
|
|
130
208
|
def append_reverse_name_queue(other_db, forward, reverse)
|
131
209
|
@reverse_name_queue[reverse] = [other_db, forward]
|
210
|
+
add_property "relation", reverse
|
132
211
|
end
|
133
212
|
|
134
213
|
def update_database
|
135
214
|
update_properties
|
136
215
|
@real_db.save
|
216
|
+
while (name = @working.shift)
|
217
|
+
@finish_flag[name] = true
|
218
|
+
end
|
137
219
|
end
|
138
220
|
|
139
221
|
def rename_reverse_name
|
140
222
|
save = false
|
223
|
+
reverses = []
|
224
|
+
clears = []
|
141
225
|
@reverse_name_queue.each do |reverse, (other_db, forward)|
|
142
226
|
frp = other_db.real_db.properties[forward]
|
143
227
|
rp_id = frp.synced_property_id
|
144
228
|
rrp = @real_db.properties.filter { |pp| pp.property_id == rp_id }.first
|
145
229
|
if rrp && rrp.name != reverse
|
146
230
|
rrp.new_name = reverse
|
231
|
+
reverses << other_db.real_db
|
232
|
+
clears << rrp
|
147
233
|
save = true
|
148
234
|
end
|
235
|
+
@finish_flag[reverse] = true
|
149
236
|
end
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
ps = @real_db.properties
|
155
|
-
@properties.each do |(value, key)|
|
156
|
-
next unless key == "rollup"
|
157
|
-
|
158
|
-
name, *options = value.split("|")
|
159
|
-
property = ps.values_at(name).first
|
160
|
-
|
161
|
-
relation_name, rollup_name, function = options
|
162
|
-
if property
|
163
|
-
property.function = function unless property.function == function
|
164
|
-
property.relation_property_name = relation_name unless property.relation_property_name == relation_name
|
165
|
-
property.rollup_property_name = rollup_name unless property.rollup_property_name == rollup_name
|
166
|
-
else
|
167
|
-
@real_db.add_property(RollupProperty, name) do |dp|
|
168
|
-
dp.function = function
|
169
|
-
dp.relation_property_name = relation_name
|
170
|
-
dp.rollup_property_name = rollup_name
|
171
|
-
end
|
172
|
-
end
|
237
|
+
if save
|
238
|
+
@real_db.save
|
239
|
+
clears.map(&:clear_will_update)
|
240
|
+
reverses.map(&:reload)
|
173
241
|
end
|
174
|
-
@
|
175
|
-
end
|
176
|
-
|
177
|
-
def update_rollup
|
178
|
-
update_rollup_schema
|
179
|
-
@real_db.save
|
242
|
+
@reverse_name_queue = {}
|
180
243
|
end
|
181
244
|
end
|
182
245
|
end
|
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.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroyuki KOBAYASHI
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|