notion_ruby_mapping 0.7.2 → 0.7.4
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 -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 +108 -44
- data/lib/notion_ruby_mapping/properties/property.rb +2 -0
- data/lib/notion_ruby_mapping/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fc53f7256d1ce820695e6f2dc28149ef945dd0ddf765fd933b90882212335d0c
|
|
4
|
+
data.tar.gz: 625c42250124c4e66d8016812c8a8bd53d02cef88c0061320fdd2ea8c996cd28
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 573470cad7c6c10bb683417cb0ae62ed33819cb3471db31f3eb9b10d5718204c801fd7e42a063a69c1753dd7739f80777fa265fee073d5bd1abd1f17b29320ff
|
|
7
|
+
data.tar.gz: 2b76551f53c23564645aff1c027fe8521d13f0451e6cb43bbd7f66551e784a35bbcc0b1aa0ca4d12df5f35aa5d277570ae12415963a8c51de098574d67c66804
|
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,8 @@ NotionRubyMapping.configuration { |c| c.notion_token = ENV["NOTION_API_TOKEN"] }
|
|
|
125
126
|
|
|
126
127
|
## 3. ChangeLog
|
|
127
128
|
|
|
129
|
+
- 2023/2/9 [v0.7.4] bug fix for rollup property of erdToNotionRb.rb script
|
|
130
|
+
- 2023/1/26 [v0.7.3] release beta version of erdToNotionRb.rb script
|
|
128
131
|
- 2023/1/25 [v0.7.2] bug fix for creating relation property / add erdToNotionRb.rb script
|
|
129
132
|
- 2022/12/16 [v0.7.1] bug fix for query rollup property
|
|
130
133
|
- 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,31 @@ 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 + 1
|
|
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
|
+
@finish_flag[@title] = true
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def update_properties
|
|
66
|
+
ps = @real_db.properties
|
|
47
67
|
@properties.each do |(value, key)|
|
|
48
68
|
name, *options = value.split("|")
|
|
69
|
+
next if @finish_flag[name]
|
|
70
|
+
|
|
49
71
|
property = ps.values_at(name).first
|
|
50
72
|
case key
|
|
51
73
|
when /checkbox|created_by|created_time|date|email|files|last_edited_by|last_edited_time|people|phone_number|text|url|status/
|
|
@@ -56,13 +78,23 @@ module NotionRubyMapping
|
|
|
56
78
|
rich_text: RichTextProperty, url: UrlProperty, status: StatusProperty
|
|
57
79
|
}[key.to_sym]
|
|
58
80
|
@real_db.add_property klass, name unless property
|
|
81
|
+
@working << name
|
|
59
82
|
when "formula"
|
|
60
83
|
f_e = options.first&.gsub "@", '"'
|
|
61
|
-
|
|
62
|
-
|
|
84
|
+
dependencies = f_e&.scan(/prop\("([^"]+)"\)/) || []
|
|
85
|
+
blocked_key = dependencies.select { |k| blocked? k.first }
|
|
86
|
+
if blocked_key.empty?
|
|
87
|
+
if property
|
|
88
|
+
property.formula_expression = f_e unless property.formula_expression == f_e
|
|
89
|
+
else
|
|
90
|
+
@real_db.add_property(FormulaProperty, name) { |dp| dp.formula_expression = f_e }
|
|
91
|
+
end
|
|
92
|
+
@working << name
|
|
63
93
|
else
|
|
64
|
-
|
|
94
|
+
print("#{name} blocked by #{blocked_key.flatten}\n")
|
|
95
|
+
next
|
|
65
96
|
end
|
|
97
|
+
|
|
66
98
|
when "multi_select"
|
|
67
99
|
if property
|
|
68
100
|
(options - (property.multi_select_options.map { |h| h["name"] })).each do |select_name|
|
|
@@ -75,6 +107,7 @@ module NotionRubyMapping
|
|
|
75
107
|
end
|
|
76
108
|
end
|
|
77
109
|
end
|
|
110
|
+
@working << name
|
|
78
111
|
when "number"
|
|
79
112
|
format_value = options.empty? ? "number" : options.first
|
|
80
113
|
if property
|
|
@@ -82,6 +115,35 @@ module NotionRubyMapping
|
|
|
82
115
|
else
|
|
83
116
|
@real_db.add_property(NumberProperty, name) { |p| p.format = format_value }
|
|
84
117
|
end
|
|
118
|
+
@working << name
|
|
119
|
+
when "rollup"
|
|
120
|
+
name, *options = value.split("|")
|
|
121
|
+
relation_name, rollup_name, function = options
|
|
122
|
+
if blocked? relation_name
|
|
123
|
+
print("#{name} blocked by #{relation_name}\n")
|
|
124
|
+
next
|
|
125
|
+
else
|
|
126
|
+
relation_db = @relations[relation_name]
|
|
127
|
+
if relation_db.nil? || relation_db.blocked?(rollup_name)
|
|
128
|
+
print "#{name} blocked by #{relation_name}-#{rollup_name}\n"
|
|
129
|
+
next
|
|
130
|
+
else
|
|
131
|
+
property = ps.values_at(name).first
|
|
132
|
+
|
|
133
|
+
if property
|
|
134
|
+
property.function = function unless property.function == function
|
|
135
|
+
property.relation_property_name = relation_name unless property.relation_property_name == relation_name
|
|
136
|
+
property.rollup_property_name = rollup_name unless property.rollup_property_name == rollup_name
|
|
137
|
+
else
|
|
138
|
+
@real_db.add_property(RollupProperty, name) do |dp|
|
|
139
|
+
dp.function = function
|
|
140
|
+
dp.relation_property_name = relation_name
|
|
141
|
+
dp.rollup_property_name = rollup_name
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
@working << name
|
|
145
|
+
end
|
|
146
|
+
end
|
|
85
147
|
when "select"
|
|
86
148
|
if property
|
|
87
149
|
(options - (property.select_options.map { |h| h["name"] })).each do |select_name|
|
|
@@ -94,34 +156,51 @@ module NotionRubyMapping
|
|
|
94
156
|
end
|
|
95
157
|
end
|
|
96
158
|
end
|
|
159
|
+
@working << name
|
|
97
160
|
else
|
|
98
161
|
nil
|
|
99
162
|
end
|
|
100
163
|
end
|
|
101
|
-
@
|
|
164
|
+
while (array = @relation_queue.shift) do
|
|
165
|
+
value, relation_db = array
|
|
102
166
|
db_id = relation_db.real_db.id
|
|
103
167
|
forward, reverse = value.split "|"
|
|
104
168
|
property = ps.values_at(forward).first
|
|
105
169
|
if property
|
|
106
170
|
if reverse
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
171
|
+
if property.database_id == db_id && property.synced_property_name == reverse
|
|
172
|
+
relation_db.add_property "relation", reverse
|
|
173
|
+
relation_db.finish_flag[reverse] = true
|
|
174
|
+
else
|
|
175
|
+
unless @finish_flag[forward]
|
|
176
|
+
property.replace_relation_database database_id: db_id
|
|
177
|
+
relation_db.append_reverse_name_queue self, forward, reverse
|
|
178
|
+
end
|
|
179
|
+
@working << forward
|
|
180
|
+
add_property "relation", forward
|
|
181
|
+
end
|
|
182
|
+
relation_db.relations[reverse] = self
|
|
111
183
|
else
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
184
|
+
unless property.database_id == db_id
|
|
185
|
+
property.replace_relation_database database_id: db_id, type: "single_property"
|
|
186
|
+
@working << forward
|
|
187
|
+
add_property "relation", forward
|
|
188
|
+
end
|
|
115
189
|
end
|
|
190
|
+
@relations[forward] = relation_db
|
|
116
191
|
else
|
|
117
192
|
@real_db.add_property(RelationProperty, forward) do |p|
|
|
118
193
|
if reverse
|
|
119
194
|
p.replace_relation_database database_id: relation_db.real_db.id
|
|
120
195
|
relation_db.append_reverse_name_queue self, forward, reverse
|
|
196
|
+
relation_db.relations[reverse] = self
|
|
121
197
|
else
|
|
122
198
|
p.replace_relation_database database_id: relation_db.real_db.id, type: "single_property"
|
|
123
199
|
end
|
|
124
200
|
end
|
|
201
|
+
@relations[forward] = relation_db
|
|
202
|
+
@working << forward
|
|
203
|
+
add_property "relation", forward
|
|
125
204
|
end
|
|
126
205
|
end
|
|
127
206
|
@real_db.property_schema_json
|
|
@@ -129,54 +208,39 @@ module NotionRubyMapping
|
|
|
129
208
|
|
|
130
209
|
def append_reverse_name_queue(other_db, forward, reverse)
|
|
131
210
|
@reverse_name_queue[reverse] = [other_db, forward]
|
|
211
|
+
add_property "relation", reverse
|
|
132
212
|
end
|
|
133
213
|
|
|
134
214
|
def update_database
|
|
135
215
|
update_properties
|
|
136
216
|
@real_db.save
|
|
217
|
+
while (name = @working.shift)
|
|
218
|
+
@finish_flag[name] = true
|
|
219
|
+
end
|
|
137
220
|
end
|
|
138
221
|
|
|
139
222
|
def rename_reverse_name
|
|
140
223
|
save = false
|
|
224
|
+
reverses = []
|
|
225
|
+
clears = []
|
|
141
226
|
@reverse_name_queue.each do |reverse, (other_db, forward)|
|
|
142
227
|
frp = other_db.real_db.properties[forward]
|
|
143
228
|
rp_id = frp.synced_property_id
|
|
144
229
|
rrp = @real_db.properties.filter { |pp| pp.property_id == rp_id }.first
|
|
145
230
|
if rrp && rrp.name != reverse
|
|
146
231
|
rrp.new_name = reverse
|
|
232
|
+
reverses << other_db.real_db
|
|
233
|
+
clears << rrp
|
|
147
234
|
save = true
|
|
148
235
|
end
|
|
236
|
+
@finish_flag[reverse] = true
|
|
149
237
|
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
|
|
238
|
+
if save
|
|
239
|
+
@real_db.save
|
|
240
|
+
clears.map(&:clear_will_update)
|
|
241
|
+
reverses.map(&:reload)
|
|
173
242
|
end
|
|
174
|
-
@
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
def update_rollup
|
|
178
|
-
update_rollup_schema
|
|
179
|
-
@real_db.save
|
|
243
|
+
@reverse_name_queue = {}
|
|
180
244
|
end
|
|
181
245
|
end
|
|
182
246
|
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.4
|
|
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-
|
|
11
|
+
date: 2023-02-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -276,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
276
276
|
- !ruby/object:Gem::Version
|
|
277
277
|
version: '0'
|
|
278
278
|
requirements: []
|
|
279
|
-
rubygems_version: 3.4.
|
|
279
|
+
rubygems_version: 3.4.6
|
|
280
280
|
signing_key:
|
|
281
281
|
specification_version: 4
|
|
282
282
|
summary: Notion Ruby mapping tool
|