notion_ruby_mapping 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -14
- data/examples/change_title.md +1 -1
- data/examples/renumbering_pages.md +3 -3
- data/examples/set_icon_to_all_icon_unsettled_pages.md +4 -4
- data/lib/notion_ruby_mapping/blocks/base.rb +11 -13
- data/lib/notion_ruby_mapping/blocks/block.rb +67 -487
- data/lib/notion_ruby_mapping/blocks/bookmark_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/breadcrumb_block.rb +19 -0
- data/lib/notion_ruby_mapping/blocks/bulleted_list_item_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/callout_block.rb +82 -0
- data/lib/notion_ruby_mapping/blocks/child_base_block.rb +21 -0
- data/lib/notion_ruby_mapping/blocks/child_database_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/child_page_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/code_block.rb +50 -0
- data/lib/notion_ruby_mapping/blocks/column_block.rb +29 -0
- data/lib/notion_ruby_mapping/blocks/column_list_block.rb +33 -0
- data/lib/notion_ruby_mapping/blocks/database.rb +7 -1
- data/lib/notion_ruby_mapping/blocks/divider_block.rb +19 -0
- data/lib/notion_ruby_mapping/blocks/embed_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/equation_block.rb +43 -0
- data/lib/notion_ruby_mapping/blocks/file_base_block.rb +50 -0
- data/lib/notion_ruby_mapping/blocks/file_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/heading1_block.rb +18 -0
- data/lib/notion_ruby_mapping/blocks/heading2_block.rb +18 -0
- data/lib/notion_ruby_mapping/blocks/heading3_block.rb +18 -0
- data/lib/notion_ruby_mapping/blocks/image_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/link_preview_block.rb +16 -0
- data/lib/notion_ruby_mapping/blocks/link_to_page_block.rb +40 -0
- data/lib/notion_ruby_mapping/blocks/list.rb +2 -3
- data/lib/notion_ruby_mapping/blocks/numbered_list_item_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/page.rb +6 -0
- data/lib/notion_ruby_mapping/blocks/paragraph_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/pdf_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/quote_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/synced_block.rb +44 -0
- data/lib/notion_ruby_mapping/blocks/table_block.rb +50 -0
- data/lib/notion_ruby_mapping/blocks/table_of_contents_block.rb +34 -0
- data/lib/notion_ruby_mapping/blocks/table_row_block.rb +34 -0
- data/lib/notion_ruby_mapping/blocks/template_block.rb +34 -0
- data/lib/notion_ruby_mapping/blocks/text_sub_block_color_base_block.rb +45 -0
- data/lib/notion_ruby_mapping/blocks/to_do_block.rb +42 -0
- data/lib/notion_ruby_mapping/blocks/toggle_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/toggle_heading1_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/toggle_heading2_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/toggle_heading3_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/url_base_block.rb +34 -0
- data/lib/notion_ruby_mapping/blocks/url_caption_base_block.rb +46 -0
- data/lib/notion_ruby_mapping/blocks/video_block.rb +11 -0
- data/lib/notion_ruby_mapping/controllers/notion_cache.rb +26 -20
- data/lib/notion_ruby_mapping/controllers/payload.rb +32 -18
- data/lib/notion_ruby_mapping/controllers/query.rb +1 -1
- data/lib/notion_ruby_mapping/controllers/rich_text_array.rb +13 -2
- data/lib/notion_ruby_mapping/objects/rich_text_object.rb +2 -5
- data/lib/notion_ruby_mapping/properties/created_by_property.rb +1 -0
- data/lib/notion_ruby_mapping/properties/date_base_property.rb +24 -11
- data/lib/notion_ruby_mapping/properties/email_property.rb +1 -2
- data/lib/notion_ruby_mapping/properties/files_property.rb +1 -1
- data/lib/notion_ruby_mapping/properties/formula_property.rb +1 -1
- data/lib/notion_ruby_mapping/properties/multi_select_property.rb +2 -0
- data/lib/notion_ruby_mapping/properties/phone_number_property.rb +0 -1
- data/lib/notion_ruby_mapping/properties/select_property.rb +2 -1
- data/lib/notion_ruby_mapping/properties/url_property.rb +0 -2
- data/lib/notion_ruby_mapping/version.rb +1 -1
- data/lib/notion_ruby_mapping.rb +8 -1
- metadata +41 -2
@@ -5,12 +5,62 @@ module NotionRubyMapping
|
|
5
5
|
class Block < Base
|
6
6
|
### Public announced methods
|
7
7
|
|
8
|
+
# @see https://www.notion.so/hkob/BreadcrumbBlock-3d0905b858524cdd8c868f80fd5d089a#d3b517be0c4b4825bed98206ce3ef41a
|
9
|
+
# @see https://www.notion.so/hkob/DividerBlock-d943b964dc4d4eff8f1d24ee0684e29e#f0ac8179c9a044bf95b87de1eb338413
|
8
10
|
def initialize(json: nil, id: nil, parent: nil)
|
9
11
|
super
|
10
12
|
@can_have_children = false
|
11
13
|
@can_append = true
|
12
14
|
end
|
13
|
-
attr_reader :can_have_children, :can_append, :type
|
15
|
+
attr_reader :can_have_children, :can_append, :type, :rich_text_array, :url, :caption, :color, :language
|
16
|
+
|
17
|
+
def self.type2class(type, has_children = false)
|
18
|
+
@type2class ||= {
|
19
|
+
false => {
|
20
|
+
"bookmark" => BookmarkBlock,
|
21
|
+
"breadcrumb" => BreadcrumbBlock,
|
22
|
+
"bulleted_list_item" => BulletedListItemBlock,
|
23
|
+
"callout" => CalloutBlock,
|
24
|
+
"child_database" => ChildDatabaseBlock,
|
25
|
+
"child_page" => ChildPageBlock,
|
26
|
+
"code" => CodeBlock,
|
27
|
+
"column" => ColumnBlock,
|
28
|
+
"column_list" => ColumnListBlock,
|
29
|
+
"divider" => DividerBlock,
|
30
|
+
"embed" => EmbedBlock,
|
31
|
+
"equation" => EquationBlock,
|
32
|
+
"file" => FileBlock,
|
33
|
+
"heading_1" => Heading1Block,
|
34
|
+
"heading_2" => Heading2Block,
|
35
|
+
"heading_3" => Heading3Block,
|
36
|
+
"image" => ImageBlock,
|
37
|
+
"link_preview" => LinkPreviewBlock,
|
38
|
+
"link_to_page" => LinkToPageBlock,
|
39
|
+
"numbered_list_item" => NumberedListItemBlock,
|
40
|
+
"paragraph" => ParagraphBlock,
|
41
|
+
"pdf" => PdfBlock,
|
42
|
+
"quote" => QuoteBlock,
|
43
|
+
"synced_block" => SyncedBlock,
|
44
|
+
"table" => TableBlock,
|
45
|
+
"table_row" => TableRowBlock,
|
46
|
+
"table_of_contents" => TableOfContentsBlock,
|
47
|
+
"template" => TemplateBlock,
|
48
|
+
"to_do" => ToDoBlock,
|
49
|
+
"toggle" => ToggleBlock,
|
50
|
+
"video" => VideoBlock,
|
51
|
+
},
|
52
|
+
true => {
|
53
|
+
"heading_1" => ToggleHeading1Block,
|
54
|
+
"heading_2" => ToggleHeading2Block,
|
55
|
+
"heading_3" => ToggleHeading3Block,
|
56
|
+
}
|
57
|
+
}
|
58
|
+
@klass = @type2class[has_children][type] || @type2class[false][type] || Block
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.decode_block(json)
|
62
|
+
type2class(json["type"], json["has_children"]).new json: json
|
63
|
+
end
|
14
64
|
|
15
65
|
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#298916c7c379424682f39ff09ee38544
|
16
66
|
# @param [String] id
|
@@ -24,254 +74,33 @@ module NotionRubyMapping
|
|
24
74
|
end
|
25
75
|
end
|
26
76
|
|
27
|
-
# @
|
28
|
-
|
29
|
-
|
77
|
+
# @param [Boolean] not_update false when update
|
78
|
+
# @return [Hash{String (frozen)->Hash}]
|
79
|
+
def block_json(not_update: true)
|
80
|
+
ans = {"type" => type}
|
30
81
|
ans["object"] = "block"
|
31
82
|
ans["archived"] = true if @archived
|
32
|
-
ans["has_children"] = true if @has_children
|
33
|
-
case @type
|
34
|
-
when "bookmark", "embed"
|
35
|
-
@caption.will_update = true
|
36
|
-
ans[@type] = @caption.update_property_schema_json
|
37
|
-
ans[@type]["url"] = @url
|
38
|
-
when "breadcrumb", "divider"
|
39
|
-
ans[@type] = {}
|
40
|
-
when "callout"
|
41
|
-
@rich_text_array.will_update = true
|
42
|
-
ans[@type] = @rich_text_array.update_property_schema_json
|
43
|
-
ans[@type]["color"] = @color
|
44
|
-
ans[@type]["icon"] = @emoji.property_values_json if @emoji
|
45
|
-
ans[@type]["icon"] = @file.property_values_json if @file
|
46
|
-
ans[@type]["children"] = @sub_blocks.map(&:block_json) if @sub_blocks
|
47
|
-
when "child_database", "child_page"
|
48
|
-
ans[@type] = {"title" => @title}
|
49
|
-
when "code"
|
50
|
-
@rich_text_array.will_update = true
|
51
|
-
@caption.will_update = true
|
52
|
-
ans[@type] = @rich_text_array.update_property_schema_json.merge @caption.update_property_schema_json
|
53
|
-
ans[@type]["language"] = @language
|
54
|
-
when "column"
|
55
|
-
ans[@type] = {}
|
56
|
-
ans[@type]["children"] = @sub_blocks.map(&:block_json) if @sub_blocks
|
57
|
-
@can_append = false
|
58
|
-
when "column_list"
|
59
|
-
ans[@type] = {}
|
60
|
-
ans[@type]["children"] = @columns.map(&:block_json) if @columns
|
61
|
-
when "paragraph", "bulleted_list_item", "heading_1", "heading_2", "heading_3", "numbered_list_item", "quote",
|
62
|
-
"toggle"
|
63
|
-
@rich_text_array.will_update = true
|
64
|
-
ans[@type] = @rich_text_array.update_property_schema_json
|
65
|
-
ans[@type]["color"] = @color
|
66
|
-
ans[@type]["children"] = @sub_blocks.map(&:block_json) if @sub_blocks
|
67
|
-
when "equation"
|
68
|
-
ans[@type] = {"expression" => @equation_object.expression}
|
69
|
-
when "file", "image", "pdf", "video"
|
70
|
-
@caption.will_update = true if @caption
|
71
|
-
ans[@type] = @file_object.property_values_json
|
72
|
-
ans[@type].merge! @caption.update_property_schema_json if @caption
|
73
|
-
when "link_preview"
|
74
|
-
ans[@type] = {"url" => @url}
|
75
|
-
when "link_to_page"
|
76
|
-
ans[@type] = if @page_id
|
77
|
-
{"type" => "page_id", "page_id" => @page_id}
|
78
|
-
else
|
79
|
-
{"type" => "database_id", "database_id" => @database_id}
|
80
|
-
end
|
81
|
-
when "synced_block"
|
82
|
-
ans[@type] = {"synced_from" => @block_id ? {"type" => "block_id", "block_id" => @block_id} : nil}
|
83
|
-
ans[@type]["children"] = @sub_blocks.map(&:block_json) if @sub_blocks
|
84
|
-
when "table"
|
85
|
-
ans[@type] = {
|
86
|
-
"has_column_header" => @has_column_header,
|
87
|
-
"has_row_header" => @has_row_header,
|
88
|
-
"table_width" => @table_width,
|
89
|
-
}
|
90
|
-
ans[@type]["children"] = @table_rows.map(&:block_json) if @table_rows
|
91
|
-
when "table_of_contents"
|
92
|
-
ans[@type] = {"color" => @color}
|
93
|
-
when "table_row"
|
94
|
-
ans[@type] = {"cells" => @cells.map { |cell| Array(cell).map(&:property_values_json) }}
|
95
|
-
when "template"
|
96
|
-
@rich_text_array.will_update = true
|
97
|
-
ans[@type] = @rich_text_array.update_property_schema_json
|
98
|
-
ans[@type]["children"] = @sub_blocks.map(&:block_json) if @sub_blocks
|
99
|
-
when "to_do"
|
100
|
-
@rich_text_array.will_update = true
|
101
|
-
ans[@type] = @rich_text_array.update_property_schema_json
|
102
|
-
ans[@type]["checked"] = @checked
|
103
|
-
ans[@type]["color"] = @color
|
104
|
-
ans[@type]["children"] = @sub_blocks.map(&:block_json) if @sub_blocks
|
105
|
-
else
|
106
|
-
print "not yet implemented"
|
107
|
-
end
|
108
83
|
ans
|
109
84
|
end
|
110
85
|
|
111
|
-
# @param [Sting] url
|
112
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] caption
|
113
|
-
# @return [NotionRubyMapping::Block]
|
114
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#ff5299524c434c27bd79e4d942922928
|
115
|
-
def bookmark(url, caption: [])
|
116
|
-
@type = __method__.to_s
|
117
|
-
@url = url
|
118
|
-
@caption = RichTextArray.rich_text_array "caption", caption
|
119
|
-
self
|
120
|
-
end
|
121
|
-
|
122
|
-
# @return [NotionRubyMapping::Block]
|
123
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#f0a9dc4e0823485abe5b76051053e877
|
124
|
-
def breadcrumb
|
125
|
-
@type = __method__.to_s
|
126
|
-
self
|
127
|
-
end
|
128
|
-
|
129
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
130
|
-
# @param [String] color
|
131
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
132
|
-
# @return [NotionRubyMapping::Block]
|
133
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#a97ff4121e724ee1aa45e194d0a76099
|
134
|
-
def bulleted_list_item(text_info, sub_blocks: nil, color: "default")
|
135
|
-
@type = __method__.to_s
|
136
|
-
rich_text_array_and_color "rich_text", text_info, color
|
137
|
-
add_sub_blocks sub_blocks
|
138
|
-
self
|
139
|
-
end
|
140
|
-
|
141
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
142
|
-
# @param [String] emoji
|
143
|
-
# @param [String] file_url
|
144
|
-
# @param [String] color
|
145
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
146
|
-
# @return [NotionRubyMapping::Block]
|
147
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#39b874d7b97749a49eebb9a5f48747a1
|
148
|
-
def callout(text_info, emoji: nil, file_url: nil, sub_blocks: nil, color: "default")
|
149
|
-
@type = __method__.to_s
|
150
|
-
rich_text_array_and_color "rich_text", text_info, color
|
151
|
-
@emoji = EmojiObject.emoji_object emoji if emoji
|
152
|
-
@file = FileObject.file_object file_url if file_url
|
153
|
-
add_sub_blocks sub_blocks
|
154
|
-
self
|
155
|
-
end
|
156
|
-
|
157
86
|
# @return [Hash{String (frozen)->Array<Hash{String (frozen)->Hash}>}]
|
158
87
|
def children_block_json
|
159
88
|
{"children" => [block_json]}
|
160
89
|
end
|
161
90
|
|
162
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
163
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] caption
|
164
|
-
# @param [String] language
|
165
|
-
# @return [NotionRubyMapping::Block]
|
166
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#90f1ebf5ca3f4b479471e6a76ef8c169
|
167
|
-
def code(text_info, caption: [], language: "shell")
|
168
|
-
@type = __method__.to_s
|
169
|
-
rich_text_array_and_color "rich_text", text_info
|
170
|
-
@caption = RichTextArray.rich_text_array "caption", caption
|
171
|
-
@language = language
|
172
|
-
self
|
173
|
-
end
|
174
|
-
|
175
|
-
# @return [NotionRubyMapping::Block]
|
176
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
177
|
-
# @note created by column_list only
|
178
|
-
def column(sub_blocks)
|
179
|
-
@type = __method__.to_s
|
180
|
-
add_sub_blocks sub_blocks
|
181
|
-
self
|
182
|
-
end
|
183
|
-
|
184
|
-
# @param [Array<Array<NotionRubyMapping::Block, Array<NotionRubyMapping::Block>>>] array_of_sub_blocks
|
185
|
-
# @return [NotionRubyMapping::Block]
|
186
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#5413288d6d2b4f0f8fe331b0e8e643ca
|
187
|
-
def column_list(array_of_sub_blocks)
|
188
|
-
@type = __method__.to_s
|
189
|
-
raise StandardError, "The column_list must have at least 2 columns." if array_of_sub_blocks.count < 2
|
190
|
-
|
191
|
-
@columns = array_of_sub_blocks.map { |sub_blocks| Block.new.column(sub_blocks) }
|
192
|
-
self
|
193
|
-
end
|
194
|
-
|
195
|
-
# @return [NotionRubyMapping::Block]
|
196
|
-
def decode_block
|
197
|
-
@type = @json["type"]
|
198
|
-
sub_json = @json[@type]
|
199
|
-
case @type
|
200
|
-
when "bookmark", "embed"
|
201
|
-
@url = sub_json["url"]
|
202
|
-
decode_block_caption
|
203
|
-
when "bulleted_list_item", "paragraph", "numbered_list_item", "toggle", "heading_1", "heading_2", "heading_3"
|
204
|
-
decode_block_rich_text_array
|
205
|
-
decode_color
|
206
|
-
@can_have_children = true
|
207
|
-
when "quote"
|
208
|
-
decode_block_rich_text_array
|
209
|
-
decode_color
|
210
|
-
@can_have_children = true
|
211
|
-
when "callout"
|
212
|
-
decode_block_rich_text_array
|
213
|
-
decode_color
|
214
|
-
@can_have_children = true
|
215
|
-
when "child_database", "child_page"
|
216
|
-
@title = sub_json["title"]
|
217
|
-
@can_append = false
|
218
|
-
when "code"
|
219
|
-
decode_block_rich_text_array
|
220
|
-
decode_block_caption
|
221
|
-
@language = sub_json["language"] || "shell"
|
222
|
-
when "equation"
|
223
|
-
@equation_object = EquationObject.equation_object sub_json["expression"]
|
224
|
-
when "file", "image", "pdf", "video"
|
225
|
-
@file_object = FileObject.new json: sub_json
|
226
|
-
decode_block_caption
|
227
|
-
@can_append = @file_object.external?
|
228
|
-
when "link_preview"
|
229
|
-
@url = sub_json["url"]
|
230
|
-
@can_append = false
|
231
|
-
when "link_to_page"
|
232
|
-
@page_id, @database_id = sub_json.values_at(*%w[page_id database_id])
|
233
|
-
when "synced_block"
|
234
|
-
@block_id = sub_json["synced_from"] && sub_json["synced_from"]["block_id"]
|
235
|
-
@can_have_children = @block_id.nil?
|
236
|
-
when "table"
|
237
|
-
@has_column_header = sub_json["has_column_header"]
|
238
|
-
@has_row_header = sub_json["has_row_header"]
|
239
|
-
@table_width = sub_json["table_width"]
|
240
|
-
@can_have_children = true
|
241
|
-
when "table_of_contents"
|
242
|
-
decode_color
|
243
|
-
when "table_row"
|
244
|
-
print sub_json["cells"]
|
245
|
-
@cells = sub_json["cells"].map { |cell| cell.map { |to| RichTextObject.create_from_json to } }
|
246
|
-
when "template"
|
247
|
-
decode_block_rich_text_array
|
248
|
-
@can_have_children = true
|
249
|
-
when "to_do"
|
250
|
-
decode_block_rich_text_array
|
251
|
-
decode_color
|
252
|
-
@checked = sub_json["checked"]
|
253
|
-
@can_have_children = true
|
254
|
-
else
|
255
|
-
print "not yet implemented"
|
256
|
-
end
|
257
|
-
@has_children = @json["has_children"] == "true"
|
258
|
-
@archived = @json["archived"] == "true"
|
259
|
-
self
|
260
|
-
end
|
261
|
-
|
262
91
|
# @return [NotionRubyMapping::RichTextArray]
|
263
92
|
def decode_block_caption
|
264
|
-
@caption = RichTextArray.new "caption", json: @json[
|
93
|
+
@caption = RichTextArray.new "caption", json: @json[type]["caption"]
|
265
94
|
end
|
266
95
|
|
267
96
|
# @return [String]
|
268
97
|
def decode_color
|
269
|
-
@color = @json[
|
98
|
+
@color = @json[type]["color"]
|
270
99
|
end
|
271
100
|
|
272
101
|
# @return [NotionRubyMapping::RichTextArray]
|
273
102
|
def decode_block_rich_text_array
|
274
|
-
@rich_text_array = RichTextArray.new "rich_text", json: @json[
|
103
|
+
@rich_text_array = RichTextArray.new "rich_text", json: @json[type]["rich_text"]
|
275
104
|
end
|
276
105
|
|
277
106
|
# @param [Boolean] dry_run
|
@@ -284,267 +113,18 @@ module NotionRubyMapping
|
|
284
113
|
end
|
285
114
|
end
|
286
115
|
|
287
|
-
# @return [NotionRubyMapping::
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
# @param [String] url
|
295
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] caption
|
296
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#1a69571806c24035b93adec8c8480d87
|
297
|
-
def embed(url, caption: [])
|
298
|
-
@type = __method__.to_s
|
299
|
-
@url = url
|
300
|
-
@caption = RichTextArray.rich_text_array "caption", caption
|
301
|
-
self
|
302
|
-
end
|
303
|
-
|
304
|
-
# @param [String, NotionRubyMapping::EquationObject] expression
|
305
|
-
# @return [NotionRubyMapping::Block]
|
306
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#7e284283779c443a9e26a7bfd10f1b98
|
307
|
-
def equation(expression)
|
308
|
-
@type = __method__.to_s
|
309
|
-
@equation_object = EquationObject.equation_object expression
|
310
|
-
self
|
311
|
-
end
|
312
|
-
|
313
|
-
# @param [String] url
|
314
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] caption
|
315
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#6177fa62ef1e408ca498ebe8d8580d65
|
316
|
-
def file(url, caption: [])
|
317
|
-
@type = __method__.to_s
|
318
|
-
@file_object = FileObject.file_object url
|
319
|
-
@caption = RichTextArray.rich_text_array "caption", caption
|
320
|
-
self
|
321
|
-
end
|
322
|
-
|
323
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
324
|
-
# @param [String] color
|
325
|
-
# @return [NotionRubyMapping::Block]
|
326
|
-
def heading_1(text_info, color: "default")
|
327
|
-
@type = __method__.to_s
|
328
|
-
rich_text_array_and_color "rich_text", text_info, color
|
329
|
-
@can_have_children = true
|
330
|
-
self
|
331
|
-
end
|
332
|
-
|
333
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
334
|
-
# @param [String] color
|
335
|
-
# @return [NotionRubyMapping::Block]
|
336
|
-
def heading_2(text_info, color: "default")
|
337
|
-
@type = __method__.to_s
|
338
|
-
rich_text_array_and_color "rich_text", text_info, color
|
339
|
-
@can_have_children = true
|
340
|
-
self
|
341
|
-
end
|
342
|
-
|
343
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
344
|
-
# @param [String] color
|
345
|
-
# @return [NotionRubyMapping::Block]
|
346
|
-
def heading_3(text_info, color: "default")
|
347
|
-
@type = __method__.to_s
|
348
|
-
rich_text_array_and_color "rich_text", text_info, color
|
349
|
-
@can_have_children = true
|
350
|
-
self
|
351
|
-
end
|
352
|
-
|
353
|
-
# @param [String] url
|
354
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] caption
|
355
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#7aad77515ce14e3bbc7e0a7a5427820b
|
356
|
-
def image(url, caption: [])
|
357
|
-
@type = __method__.to_s
|
358
|
-
@file_object = FileObject.file_object url
|
359
|
-
@caption = RichTextArray.rich_text_array "caption", caption
|
360
|
-
self
|
361
|
-
end
|
362
|
-
|
363
|
-
# @param [String] page_id
|
364
|
-
# @param [String] database_id
|
365
|
-
# @return [NotionRubyMapping::Block]
|
366
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#aabda81c11a949d5ba2e73cf9b50d0ad
|
367
|
-
def link_to_page(page_id: nil, database_id: nil)
|
368
|
-
raise StandardError, "page_id or database_id is required." if page_id.nil? && database_id.nil?
|
369
|
-
|
370
|
-
@type = __method__.to_s
|
371
|
-
@page_id = page_id
|
372
|
-
@database_id = database_id
|
373
|
-
self
|
374
|
-
end
|
375
|
-
|
376
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
377
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
378
|
-
# @param [String] color
|
379
|
-
# @return [NotionRubyMapping::Block]
|
380
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#186bfd02b51946bcbc732063e6c3af1c
|
381
|
-
def numbered_list_item(text_info, sub_blocks: nil, color: "default")
|
382
|
-
@type = __method__.to_s
|
383
|
-
rich_text_array_and_color "rich_text", text_info, color
|
384
|
-
add_sub_blocks sub_blocks
|
385
|
-
self
|
386
|
-
end
|
387
|
-
|
388
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
389
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
390
|
-
# @param [String] color
|
391
|
-
# @return [NotionRubyMapping::Block]
|
392
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#f3c4fd6a1578429680a5921cbe03c560
|
393
|
-
def paragraph(text_info, sub_blocks: nil, color: "default")
|
394
|
-
@type = __method__.to_s
|
395
|
-
rich_text_array_and_color "rich_text", text_info, color
|
396
|
-
add_sub_blocks sub_blocks
|
397
|
-
self
|
398
|
-
end
|
399
|
-
|
400
|
-
# @param [String] url
|
401
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#cd22a466ded048f686ad1f201588d42a
|
402
|
-
def pdf(url)
|
403
|
-
@type = __method__.to_s
|
404
|
-
@file_object = FileObject.file_object url
|
405
|
-
self
|
406
|
-
end
|
407
|
-
|
408
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
409
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
410
|
-
# @param [String] color
|
411
|
-
# @return [NotionRubyMapping::Block]
|
412
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#0a1ed3fc49d544d18606b84d59727b27
|
413
|
-
def quote(text_info, sub_blocks: nil, color: "default")
|
414
|
-
@type = __method__.to_s
|
415
|
-
rich_text_array_and_color "rich_text", text_info, color
|
416
|
-
add_sub_blocks sub_blocks
|
417
|
-
self
|
418
|
-
end
|
419
|
-
|
420
|
-
# @param [Array<Block>] sub_blocks
|
421
|
-
# @param [String] block_id
|
422
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#69fa1e60d151454aac3c7209a1c41793
|
423
|
-
def synced_block(sub_blocks: nil, block_id: nil)
|
424
|
-
raise StandardError, "blocks or block_id cannot set at the same time." if !sub_blocks.nil? && !block_id.nil?
|
425
|
-
|
426
|
-
@type = __method__.to_s
|
427
|
-
@sub_blocks = Array(sub_blocks) if sub_blocks
|
428
|
-
@block_id = block_id
|
429
|
-
@can_have_children = @block_id.nil?
|
430
|
-
self
|
431
|
-
end
|
432
|
-
|
433
|
-
# @return [Boolean] true if synced_block & block_id is nil
|
434
|
-
def synced_block_original?
|
435
|
-
@type == "synced_block" && @block_id.nil?
|
436
|
-
end
|
437
|
-
|
438
|
-
def table(table_width:, has_column_header: false, has_row_header: false, table_rows: nil)
|
439
|
-
@type = __method__.to_s
|
440
|
-
@table_width = table_width
|
441
|
-
@has_column_header = has_column_header
|
442
|
-
@has_row_header = has_row_header
|
443
|
-
if table_rows
|
444
|
-
@table_rows = table_rows.map do |table_row|
|
445
|
-
Block.new.table_row table_row, @table_width
|
446
|
-
end
|
447
|
-
end
|
448
|
-
self
|
449
|
-
end
|
450
|
-
|
451
|
-
# @param [String] color
|
452
|
-
# @return [NotionRubyMapping::Block]
|
453
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#272b41e76bef4f3d8e7386369475910e
|
454
|
-
def table_of_contents(color: "default")
|
455
|
-
@type = __method__.to_s
|
456
|
-
@color = color
|
457
|
-
self
|
458
|
-
end
|
459
|
-
|
460
|
-
# @param [Array<String, Array<String>, TextObject, Array<TextObject>>] array_array_of_text_objects
|
461
|
-
# @return [NotionRubyMapping::Block]
|
462
|
-
def table_row(array_array_of_text_objects, table_width)
|
463
|
-
@type = __method__.to_s
|
464
|
-
cc = array_array_of_text_objects.count
|
465
|
-
raise StandardError, "table width must be #{table_width} (given array size is #{cc}" unless table_width == cc
|
466
|
-
|
467
|
-
@cells = array_array_of_text_objects.map do |cell|
|
468
|
-
Array(cell).map { |text_info| TextObject.text_object text_info }
|
116
|
+
# @return [NotionRubyMapping::Base, String]
|
117
|
+
def update(dry_run: false)
|
118
|
+
if dry_run
|
119
|
+
dry_run_script :patch, @nc.block_path(@id), :update_block_json
|
120
|
+
else
|
121
|
+
update_json @nc.update_block_request(@id, update_block_json)
|
469
122
|
end
|
470
|
-
self
|
471
|
-
end
|
472
|
-
|
473
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
474
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
475
|
-
# @return [NotionRubyMapping::Block]
|
476
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#840eefedd571423e8532ab9042cc0fc1
|
477
|
-
def template(text_info, sub_blocks: nil)
|
478
|
-
@type = __method__.to_s
|
479
|
-
rich_text_array_and_color "rich_text", text_info, nil
|
480
|
-
add_sub_blocks sub_blocks
|
481
|
-
self
|
482
|
-
end
|
483
|
-
|
484
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
485
|
-
# @param [Boolean] checked
|
486
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
487
|
-
# @param [String] color
|
488
|
-
# @return [NotionRubyMapping::Block]
|
489
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#386e74f3760b43b49a1c3316532f252d
|
490
|
-
def to_do(text_info, checked: false, sub_blocks: nil, color: "default")
|
491
|
-
@type = __method__.to_s
|
492
|
-
rich_text_array_and_color "rich_text", text_info, color
|
493
|
-
add_sub_blocks sub_blocks
|
494
|
-
@checked = checked
|
495
|
-
self
|
496
|
-
end
|
497
|
-
|
498
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
499
|
-
# @param [Boolean] checked
|
500
|
-
# @param [String] color
|
501
|
-
# @return [NotionRubyMapping::Block]
|
502
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#5a156ee95d0f4a7a83689f7ce5830296
|
503
|
-
def toggle(text_info, checked: false, sub_blocks: nil, color: "default")
|
504
|
-
@type = __method__.to_s
|
505
|
-
rich_text_array_and_color "rich_text", text_info, color
|
506
|
-
@checked = checked
|
507
|
-
add_sub_blocks sub_blocks
|
508
|
-
self
|
509
|
-
end
|
510
|
-
|
511
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
512
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
513
|
-
# @param [String] color
|
514
|
-
# @return [NotionRubyMapping::Block]
|
515
|
-
# @see
|
516
|
-
def toggle_heading_1(text_info, sub_blocks:, color: "default")
|
517
|
-
heading_1 text_info, color: color
|
518
|
-
add_sub_blocks sub_blocks
|
519
|
-
self
|
520
123
|
end
|
521
124
|
|
522
|
-
# @
|
523
|
-
|
524
|
-
|
525
|
-
# @return [NotionRubyMapping::Block]
|
526
|
-
def toggle_heading_2(text_info, sub_blocks:, color: "default")
|
527
|
-
heading_2 text_info, color: color
|
528
|
-
add_sub_blocks sub_blocks
|
529
|
-
self
|
530
|
-
end
|
531
|
-
|
532
|
-
# @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] text_info
|
533
|
-
# @param [NotionRubyMapping::Block, Array<NotionRubyMapping::Block>, nil] sub_blocks
|
534
|
-
# @param [String] color
|
535
|
-
# @return [NotionRubyMapping::Block]
|
536
|
-
def toggle_heading_3(text_info, sub_blocks:, color: "default")
|
537
|
-
heading_3 text_info, color: color
|
538
|
-
add_sub_blocks sub_blocks
|
539
|
-
self
|
540
|
-
end
|
541
|
-
|
542
|
-
# @param [String] url
|
543
|
-
# @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#7aad77515ce14e3bbc7e0a7a5427820b
|
544
|
-
def video(url)
|
545
|
-
@type = __method__.to_s
|
546
|
-
@file_object = FileObject.file_object url
|
547
|
-
self
|
125
|
+
# @return [Hash]
|
126
|
+
def update_block_json
|
127
|
+
@payload.update_block_json type, block_json(not_update: false)
|
548
128
|
end
|
549
129
|
|
550
130
|
protected
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NotionRubyMapping
|
4
|
+
# Notion block
|
5
|
+
class BreadcrumbBlock < Block
|
6
|
+
# @return [String (frozen)]
|
7
|
+
def type
|
8
|
+
"breadcrumb"
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param [Boolean] not_update false when update
|
12
|
+
# @return [Hash{String (frozen)->Hash}]
|
13
|
+
def block_json(not_update: true)
|
14
|
+
ans = super
|
15
|
+
ans[type] = {}
|
16
|
+
ans
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|