notion_ruby_mapping 0.3.3 → 0.5.0
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 +44 -1237
- data/env.yml.sample +0 -13
- 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/{base.rb → blocks/base.rb} +163 -92
- data/lib/notion_ruby_mapping/blocks/block.rb +145 -0
- 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/{database.rb → blocks/database.rb} +41 -8
- 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/{list.rb → blocks/list.rb} +37 -6
- data/lib/notion_ruby_mapping/blocks/numbered_list_item_block.rb +11 -0
- data/lib/notion_ruby_mapping/blocks/page.rb +77 -0
- data/lib/notion_ruby_mapping/blocks/paragraph_block.rb +11 -0
- data/lib/notion_ruby_mapping/{block.rb → blocks/pdf_block.rb} +4 -3
- 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/{notion_cache.rb → controllers/notion_cache.rb} +144 -102
- data/lib/notion_ruby_mapping/{payload.rb → controllers/payload.rb} +32 -18
- data/lib/notion_ruby_mapping/{property_cache.rb → controllers/property_cache.rb} +21 -20
- data/lib/notion_ruby_mapping/{query.rb → controllers/query.rb} +27 -19
- data/lib/notion_ruby_mapping/{rich_text_array.rb → controllers/rich_text_array.rb} +39 -17
- data/lib/notion_ruby_mapping/objects/emoji_object.rb +40 -0
- data/lib/notion_ruby_mapping/objects/equation_object.rb +43 -0
- data/lib/notion_ruby_mapping/objects/file_object.rb +60 -0
- data/lib/notion_ruby_mapping/{mention_object.rb → objects/mention_object.rb} +11 -0
- data/lib/notion_ruby_mapping/{rich_text_object.rb → objects/rich_text_object.rb} +12 -4
- data/lib/notion_ruby_mapping/{text_object.rb → objects/text_object.rb} +0 -1
- data/lib/notion_ruby_mapping/{user_object.rb → objects/user_object.rb} +9 -4
- data/lib/notion_ruby_mapping/{checkbox_property.rb → properties/checkbox_property.rb} +3 -0
- data/lib/notion_ruby_mapping/{created_by_property.rb → properties/created_by_property.rb} +1 -0
- data/lib/notion_ruby_mapping/{created_time_property.rb → properties/created_time_property.rb} +1 -0
- data/lib/notion_ruby_mapping/properties/date_base_property.rb +135 -0
- data/lib/notion_ruby_mapping/{date_property.rb → properties/date_property.rb} +13 -0
- data/lib/notion_ruby_mapping/{email_property.rb → properties/email_property.rb} +2 -2
- data/lib/notion_ruby_mapping/{files_property.rb → properties/files_property.rb} +26 -13
- data/lib/notion_ruby_mapping/{formula_property.rb → properties/formula_property.rb} +5 -1
- data/lib/notion_ruby_mapping/{last_edited_by_property.rb → properties/last_edited_by_property.rb} +1 -0
- data/lib/notion_ruby_mapping/{last_edited_time_property.rb → properties/last_edited_time_property.rb} +1 -0
- data/lib/notion_ruby_mapping/{multi_property.rb → properties/multi_property.rb} +0 -0
- data/lib/notion_ruby_mapping/{multi_select_property.rb → properties/multi_select_property.rb} +4 -3
- data/lib/notion_ruby_mapping/{number_property.rb → properties/number_property.rb} +4 -0
- data/lib/notion_ruby_mapping/{people_property.rb → properties/people_property.rb} +8 -3
- data/lib/notion_ruby_mapping/{phone_number_property.rb → properties/phone_number_property.rb} +4 -1
- data/lib/notion_ruby_mapping/{property.rb → properties/property.rb} +33 -0
- data/lib/notion_ruby_mapping/{relation_property.rb → properties/relation_property.rb} +30 -10
- data/lib/notion_ruby_mapping/{rich_text_property.rb → properties/rich_text_property.rb} +0 -0
- data/lib/notion_ruby_mapping/{rollup_property.rb → properties/rollup_property.rb} +7 -0
- data/lib/notion_ruby_mapping/{select_property.rb → properties/select_property.rb} +8 -2
- data/lib/notion_ruby_mapping/{text_property.rb → properties/text_property.rb} +0 -0
- data/lib/notion_ruby_mapping/{title_property.rb → properties/title_property.rb} +0 -0
- data/lib/notion_ruby_mapping/{url_property.rb → properties/url_property.rb} +4 -1
- data/lib/notion_ruby_mapping/version.rb +1 -1
- data/lib/notion_ruby_mapping.rb +21 -7
- metadata +82 -40
- data/lib/notion_ruby_mapping/date_base_property.rb +0 -75
- data/lib/notion_ruby_mapping/page.rb +0 -50
|
@@ -11,6 +11,7 @@ module NotionRubyMapping
|
|
|
11
11
|
|
|
12
12
|
### initialize
|
|
13
13
|
|
|
14
|
+
# @see https://www.notion.so/hkob/NotionCache-65e1599864d6425686d495a5a4b3a623#dca210788f114cf59464090782c073bf
|
|
14
15
|
def initialize
|
|
15
16
|
@object_hash = {}
|
|
16
17
|
@client = Faraday::Connection.new "https://api.notion.com" do |builder|
|
|
@@ -25,38 +26,42 @@ module NotionRubyMapping
|
|
|
25
26
|
attr_reader :object_hash
|
|
26
27
|
attr_writer :client # for test only
|
|
27
28
|
|
|
28
|
-
# @param [String]
|
|
29
|
-
# @return [
|
|
30
|
-
def
|
|
31
|
-
|
|
32
|
-
@wait = wait
|
|
33
|
-
@debug = debug
|
|
34
|
-
self
|
|
29
|
+
# @param [String] block_id
|
|
30
|
+
# @return [String (frozen)] block_path
|
|
31
|
+
def append_block_children_block_path(block_id)
|
|
32
|
+
"v1/blocks/#{block_id}/children"
|
|
35
33
|
end
|
|
36
34
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
# @param [String] database_id
|
|
35
|
+
# @param [String] page_id
|
|
40
36
|
# @return [String (frozen)] page_path
|
|
41
|
-
def
|
|
42
|
-
"v1/
|
|
37
|
+
def append_block_children_page_path(page_id)
|
|
38
|
+
"v1/blocks/#{page_id}/children"
|
|
43
39
|
end
|
|
44
40
|
|
|
45
|
-
# @param [String]
|
|
46
|
-
# @
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
# @param [String] id
|
|
42
|
+
# @param [Hash] payload
|
|
43
|
+
# @return [Hash]
|
|
44
|
+
def append_block_children_request(id, payload)
|
|
45
|
+
request :patch, append_block_children_block_path(id), payload
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# @param [String] id block_id (with or without "-")
|
|
49
|
+
# @return [NotionRubyMapping::Base] Block object or nil
|
|
50
|
+
def block(id)
|
|
51
|
+
object_for_key(id) { block_request id }
|
|
49
52
|
end
|
|
50
53
|
|
|
51
54
|
# @param [String] page_id
|
|
52
55
|
# @return [String (frozen)] page_path
|
|
53
|
-
def
|
|
54
|
-
"v1/
|
|
56
|
+
def block_children_page_path(page_id, query_string = "")
|
|
57
|
+
"v1/blocks/#{page_id}/children#{query_string}"
|
|
55
58
|
end
|
|
56
59
|
|
|
57
|
-
# @
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
# @param [String] id
|
|
61
|
+
# @param [String] query_string
|
|
62
|
+
# @return [Hash]
|
|
63
|
+
def block_children_request(id, query_string)
|
|
64
|
+
request :get, block_children_page_path(id, query_string)
|
|
60
65
|
end
|
|
61
66
|
|
|
62
67
|
# @param [String] block_id
|
|
@@ -65,92 +70,97 @@ module NotionRubyMapping
|
|
|
65
70
|
"v1/blocks/#{block_id}"
|
|
66
71
|
end
|
|
67
72
|
|
|
68
|
-
# @param [String]
|
|
69
|
-
# @return [
|
|
70
|
-
def
|
|
71
|
-
|
|
73
|
+
# @param [String] block_id
|
|
74
|
+
# @return [Hash] response
|
|
75
|
+
def block_request(block_id)
|
|
76
|
+
request :get, block_path(block_id)
|
|
72
77
|
end
|
|
73
78
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
# @param [Hash] options
|
|
79
|
-
# @return [Hash] response hash
|
|
80
|
-
def request(method, path, options = {})
|
|
81
|
-
raise "Please call `NotionCache.create_client' before using other methods" unless @notion_token
|
|
79
|
+
# @return [Hash]
|
|
80
|
+
def clear_object_hash
|
|
81
|
+
@object_hash = {}
|
|
82
|
+
end
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
when :post, :put, :patch
|
|
91
|
-
request.headers["Content-Type"] = "application/json"
|
|
92
|
-
request.path = path
|
|
93
|
-
request.body = options.to_json unless options.empty?
|
|
94
|
-
else
|
|
95
|
-
raise StandardError, "Unknown method: #{method}"
|
|
96
|
-
end
|
|
97
|
-
request.options.merge!(options.delete(:request)) if options.key? :request
|
|
98
|
-
end
|
|
99
|
-
p response.body if @debug
|
|
100
|
-
response.body
|
|
84
|
+
# @param [String] notion_token
|
|
85
|
+
# @return [NotionRubyMapping::NotionCache] self (NotionCache.instance)
|
|
86
|
+
def create_client(notion_token, wait: 0.3333, debug: false)
|
|
87
|
+
@notion_token = notion_token
|
|
88
|
+
@wait = wait
|
|
89
|
+
@debug = debug
|
|
90
|
+
self
|
|
101
91
|
end
|
|
102
92
|
|
|
103
|
-
# @param [
|
|
93
|
+
# @param [Hash] payload
|
|
104
94
|
# @return [Hash] response
|
|
105
|
-
def
|
|
106
|
-
request :
|
|
95
|
+
def create_database_request(payload)
|
|
96
|
+
request :post, databases_path, payload
|
|
107
97
|
end
|
|
108
98
|
|
|
109
|
-
# @param [
|
|
99
|
+
# @param [Hash] payload
|
|
110
100
|
# @return [Hash] response
|
|
111
|
-
def
|
|
112
|
-
request :
|
|
101
|
+
def create_page_request(payload)
|
|
102
|
+
request :post, "v1/pages", payload
|
|
113
103
|
end
|
|
114
104
|
|
|
115
|
-
|
|
116
|
-
|
|
105
|
+
# @param [String] id database_id (with or without "-")
|
|
106
|
+
# @return [NotionRubyMapping::Base] Database object or nil
|
|
107
|
+
def database(id)
|
|
108
|
+
object_for_key(id) { database_request id }
|
|
117
109
|
end
|
|
118
110
|
|
|
119
|
-
# @param [String]
|
|
120
|
-
# @return [
|
|
121
|
-
def
|
|
122
|
-
|
|
111
|
+
# @param [String] database_id
|
|
112
|
+
# @return [String (frozen)] page_path
|
|
113
|
+
def database_path(database_id)
|
|
114
|
+
"v1/databases/#{database_id}"
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# @param [String] id page_id / block_id (with or without "-")
|
|
118
|
+
# @param [NotionRubyMapping::Query] query query object
|
|
119
|
+
# @return [NotionRubyMapping::Base] List object
|
|
120
|
+
# def database_query(id, query)
|
|
121
|
+
# Base.create_from_json database_query_request(id, query.query_json)
|
|
122
|
+
# end
|
|
123
|
+
|
|
124
|
+
# @param [String] database_id (with or without "-")
|
|
125
|
+
# @param [NotionRubyMapping::Query] query query object
|
|
126
|
+
def database_query_request(database_id, query)
|
|
127
|
+
request :post, "v1/databases/#{database_id}/query", query.query_json
|
|
123
128
|
end
|
|
124
129
|
|
|
125
130
|
# @param [String] database_id
|
|
126
131
|
# @return [Hash] response
|
|
127
|
-
def
|
|
128
|
-
request :
|
|
132
|
+
def database_request(database_id)
|
|
133
|
+
request :get, database_path(database_id)
|
|
129
134
|
end
|
|
130
135
|
|
|
131
|
-
# @
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
def update_page_request(page_id, payload)
|
|
135
|
-
request :patch, "v1/pages/#{page_id}", payload
|
|
136
|
+
# @return [String (frozen)] page_path
|
|
137
|
+
def databases_path
|
|
138
|
+
"v1/databases"
|
|
136
139
|
end
|
|
137
140
|
|
|
138
|
-
# @param [
|
|
139
|
-
# @return [
|
|
140
|
-
def
|
|
141
|
-
|
|
141
|
+
# @param [String] id
|
|
142
|
+
# @return [NotionRubyMapping::Base]
|
|
143
|
+
def destroy_block(id)
|
|
144
|
+
Base.create_from_json destroy_block_request(id)
|
|
142
145
|
end
|
|
143
146
|
|
|
144
|
-
|
|
145
|
-
|
|
147
|
+
# @param [String] id
|
|
148
|
+
# @return [Hash]
|
|
149
|
+
def destroy_block_request(id)
|
|
150
|
+
request :delete, block_path(id)
|
|
146
151
|
end
|
|
147
152
|
|
|
148
153
|
# @param [String] id id string with "-"
|
|
149
154
|
# @return [String] id without "-"
|
|
155
|
+
# @see https://www.notion.so/hkob/NotionCache-65e1599864d6425686d495a5a4b3a623#a2d70a2e019c4c17898aaa1a36580f1d
|
|
150
156
|
def hex_id(id)
|
|
151
157
|
id&.gsub "-", ""
|
|
152
158
|
end
|
|
153
159
|
|
|
160
|
+
def inspect
|
|
161
|
+
"NotionCache"
|
|
162
|
+
end
|
|
163
|
+
|
|
154
164
|
# @param [String] id id (with or without "-")
|
|
155
165
|
# @return [NotionRubyMapping::Base]
|
|
156
166
|
def object_for_key(id)
|
|
@@ -167,46 +177,78 @@ module NotionRubyMapping
|
|
|
167
177
|
object_for_key(id) { page_request id }
|
|
168
178
|
end
|
|
169
179
|
|
|
170
|
-
# @param [String]
|
|
171
|
-
# @return [
|
|
172
|
-
def
|
|
173
|
-
|
|
180
|
+
# @param [String] page_id
|
|
181
|
+
# @return [String (frozen)] page_path
|
|
182
|
+
def page_path(page_id)
|
|
183
|
+
"v1/pages/#{page_id}"
|
|
174
184
|
end
|
|
175
185
|
|
|
176
|
-
# @param [String]
|
|
177
|
-
# @return [
|
|
178
|
-
def
|
|
179
|
-
|
|
186
|
+
# @param [String] page_id
|
|
187
|
+
# @return [Hash] response
|
|
188
|
+
def page_request(page_id)
|
|
189
|
+
request :get, page_path(page_id)
|
|
180
190
|
end
|
|
181
191
|
|
|
182
|
-
# @
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
192
|
+
# @return [String (frozen)] page_path
|
|
193
|
+
def pages_path
|
|
194
|
+
"v1/pages"
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# @param [String] database_id
|
|
198
|
+
# @return [String (frozen)] page_path
|
|
199
|
+
def query_database_path(database_id)
|
|
200
|
+
"v1/databases/#{database_id}/query"
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# @param [Symbol] method
|
|
204
|
+
# @param [String] path
|
|
205
|
+
# @param [Hash] options
|
|
206
|
+
# @return [Hash] response hash
|
|
207
|
+
def request(method, path, options = {})
|
|
208
|
+
raise "Please call `NotionCache.create_client' before using other methods" unless @notion_token
|
|
209
|
+
|
|
186
210
|
sleep @wait
|
|
187
|
-
@client.
|
|
188
|
-
|
|
211
|
+
response = @client.send(method) do |request|
|
|
212
|
+
request.headers["Authorization"] = "Bearer #{@notion_token}"
|
|
213
|
+
request.headers["Notion-Version"] = NotionRubyMapping::NOTION_VERSION
|
|
214
|
+
case method
|
|
215
|
+
when :get, :delete
|
|
216
|
+
request.url path, options
|
|
217
|
+
when :post, :put, :patch
|
|
218
|
+
request.headers["Content-Type"] = "application/json"
|
|
219
|
+
request.path = path
|
|
220
|
+
request.body = options.to_json unless options.empty?
|
|
221
|
+
else
|
|
222
|
+
raise StandardError, "Unknown method: #{method}"
|
|
223
|
+
end
|
|
224
|
+
request.options.merge!(options.delete(:request)) if options.key? :request
|
|
189
225
|
end
|
|
190
|
-
|
|
226
|
+
p response.body if @debug
|
|
227
|
+
response.body
|
|
191
228
|
end
|
|
192
229
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
# @return [NotionRubyMapping::Base] List object
|
|
196
|
-
def database_query(id, query)
|
|
197
|
-
Base.create_from_json database_query_request(id, query.query_json)
|
|
230
|
+
def update_block_request(block_id, payload)
|
|
231
|
+
request :patch, block_path(block_id), payload
|
|
198
232
|
end
|
|
199
233
|
|
|
200
234
|
# @param [String] id page_id (with or without "-")
|
|
201
235
|
# @param [Hash] payload
|
|
202
|
-
def update_database(id, payload)
|
|
203
|
-
|
|
204
|
-
|
|
236
|
+
# def update_database(id, payload)
|
|
237
|
+
# sleep @wait
|
|
238
|
+
# @client.update_database payload.merge({database_id: id})
|
|
239
|
+
# end
|
|
240
|
+
|
|
241
|
+
# @param [String] database_id
|
|
242
|
+
# @return [Hash] response
|
|
243
|
+
def update_database_request(database_id, payload)
|
|
244
|
+
request :patch, database_path(database_id), payload
|
|
205
245
|
end
|
|
206
246
|
|
|
207
|
-
# @
|
|
208
|
-
|
|
209
|
-
|
|
247
|
+
# @param [String] page_id
|
|
248
|
+
# @param [Hash] payload
|
|
249
|
+
# @return [Hash] response
|
|
250
|
+
def update_page_request(page_id, payload)
|
|
251
|
+
request :patch, page_path(page_id), payload
|
|
210
252
|
end
|
|
211
253
|
end
|
|
212
254
|
end
|
|
@@ -5,21 +5,17 @@ module NotionRubyMapping
|
|
|
5
5
|
class Payload
|
|
6
6
|
def initialize(json)
|
|
7
7
|
@json = json || {}
|
|
8
|
+
@update_block_key = []
|
|
8
9
|
end
|
|
9
10
|
|
|
10
|
-
# @param [String]
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
else
|
|
19
|
-
{}
|
|
20
|
-
end
|
|
21
|
-
@json["icon"] = payload
|
|
22
|
-
self
|
|
11
|
+
# @param [String] key
|
|
12
|
+
def add_update_block_key(key)
|
|
13
|
+
@update_block_key << key
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @return [Hash] {}
|
|
17
|
+
def clear
|
|
18
|
+
@json = {}
|
|
23
19
|
end
|
|
24
20
|
|
|
25
21
|
# @param [Hash] json
|
|
@@ -40,15 +36,33 @@ module NotionRubyMapping
|
|
|
40
36
|
others.compact.reduce({}) { |hash, o| hash.merge o.property_schema_json }.merge @json
|
|
41
37
|
end
|
|
42
38
|
|
|
39
|
+
# @param [String] emoji
|
|
40
|
+
# @param [String] url
|
|
41
|
+
# @return [NotionRubyMapping::Payload] updated Payload
|
|
42
|
+
def set_icon(emoji: nil, url: nil)
|
|
43
|
+
payload = if emoji
|
|
44
|
+
{"type" => "emoji", "emoji" => emoji}
|
|
45
|
+
elsif url
|
|
46
|
+
{"type" => "external", "external" => {"url" => url}}
|
|
47
|
+
else
|
|
48
|
+
{}
|
|
49
|
+
end
|
|
50
|
+
@json["icon"] = payload
|
|
51
|
+
self
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def update_block_json(type, json)
|
|
55
|
+
sub_json = json[type]
|
|
56
|
+
ans = {type => sub_json.slice(*@update_block_key)}
|
|
57
|
+
ans[type]["caption"] = sub_json["caption"] if sub_json["caption"]
|
|
58
|
+
ans[type]["rich_text"] = sub_json["rich_text"] if sub_json["rich_text"]
|
|
59
|
+
ans
|
|
60
|
+
end
|
|
61
|
+
|
|
43
62
|
# @return [Hash] created json
|
|
44
63
|
# @param [Object] others
|
|
45
64
|
def update_property_schema_json(*others)
|
|
46
65
|
others.compact.reduce({}) { |hash, o| hash.merge o.update_property_schema_json }.merge @json
|
|
47
66
|
end
|
|
48
|
-
|
|
49
|
-
# @return [Hash] {}
|
|
50
|
-
def clear
|
|
51
|
-
@json = {}
|
|
52
|
-
end
|
|
53
67
|
end
|
|
54
68
|
end
|
|
@@ -13,22 +13,20 @@ module NotionRubyMapping
|
|
|
13
13
|
|
|
14
14
|
# @param [String] key
|
|
15
15
|
# @return [Property] Property for key
|
|
16
|
+
# @see https://www.notion.so/hkob/PropertyCache-2451fa64a814432db4809831cc77ba25#9709e2b2a7a0479f9951291a501f65c8
|
|
16
17
|
def [](key)
|
|
17
18
|
@properties[key] ||= Property.create_from_json key, @json[key], @base_type
|
|
18
19
|
end
|
|
19
20
|
|
|
20
|
-
# @param [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
@properties.values_at(*key)
|
|
21
|
+
# @param [Property] property added Property
|
|
22
|
+
def add_property(property)
|
|
23
|
+
@properties[property.name] = property
|
|
24
|
+
self
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
def
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
else
|
|
31
|
-
@json.keys.map { |key| self[key] }
|
|
27
|
+
def clear_will_update
|
|
28
|
+
@properties.each do |_, property|
|
|
29
|
+
property.clear_will_update
|
|
32
30
|
end
|
|
33
31
|
end
|
|
34
32
|
|
|
@@ -39,16 +37,11 @@ module NotionRubyMapping
|
|
|
39
37
|
generate_all_properties.each(&block)
|
|
40
38
|
end
|
|
41
39
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def clear_will_update
|
|
50
|
-
@properties.each do |_, property|
|
|
51
|
-
property.clear_will_update
|
|
40
|
+
def generate_all_properties
|
|
41
|
+
if @json.empty?
|
|
42
|
+
@properties.values
|
|
43
|
+
else
|
|
44
|
+
@json.keys.map { |key| self[key] }
|
|
52
45
|
end
|
|
53
46
|
end
|
|
54
47
|
|
|
@@ -81,5 +74,13 @@ module NotionRubyMapping
|
|
|
81
74
|
end
|
|
82
75
|
end
|
|
83
76
|
end
|
|
77
|
+
|
|
78
|
+
# @param [Array] key
|
|
79
|
+
# @return [Array]
|
|
80
|
+
# @see https://www.notion.so/hkob/PropertyCache-2451fa64a814432db4809831cc77ba25#6eb10d1d85784063a30feb225f47ede3
|
|
81
|
+
def values_at(*key)
|
|
82
|
+
generate_all_properties
|
|
83
|
+
@properties.values_at(*key)
|
|
84
|
+
end
|
|
84
85
|
end
|
|
85
86
|
end
|
|
@@ -12,24 +12,13 @@ module NotionRubyMapping
|
|
|
12
12
|
attr_reader :filter, :sort, :page_size
|
|
13
13
|
attr_accessor :start_cursor
|
|
14
14
|
|
|
15
|
-
# @param [Query]
|
|
15
|
+
# @param [Query] another_query other query
|
|
16
16
|
# @return [NotionRubyMapping::Query] updated self (Query object)
|
|
17
|
-
def and(
|
|
17
|
+
def and(another_query)
|
|
18
18
|
if @filter.key? "and"
|
|
19
|
-
@filter["and"] <<
|
|
19
|
+
@filter["and"] << another_query.filter
|
|
20
20
|
else
|
|
21
|
-
@filter = {"and" => [@filter,
|
|
22
|
-
end
|
|
23
|
-
self
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# @param [Query] other_query other query
|
|
27
|
-
# @return [NotionRubyMapping::Query] updated self (Query object)
|
|
28
|
-
def or(other_query)
|
|
29
|
-
if @filter.key? "or"
|
|
30
|
-
@filter["or"] << other_query.filter
|
|
31
|
-
else
|
|
32
|
-
@filter = {"or" => [@filter, other_query.filter]}
|
|
21
|
+
@filter = {"and" => [@filter, another_query.filter]}
|
|
33
22
|
end
|
|
34
23
|
self
|
|
35
24
|
end
|
|
@@ -50,14 +39,33 @@ module NotionRubyMapping
|
|
|
50
39
|
self
|
|
51
40
|
end
|
|
52
41
|
|
|
42
|
+
# @param [Query] other_query other query
|
|
43
|
+
# @return [NotionRubyMapping::Query] updated self (Query object)
|
|
44
|
+
def or(other_query)
|
|
45
|
+
if @filter.key? "or"
|
|
46
|
+
@filter["or"] << other_query.filter
|
|
47
|
+
else
|
|
48
|
+
@filter = {"or" => [@filter, other_query.filter]}
|
|
49
|
+
end
|
|
50
|
+
self
|
|
51
|
+
end
|
|
52
|
+
|
|
53
53
|
# @return [Hash]
|
|
54
54
|
def query_json
|
|
55
55
|
parameters = {}
|
|
56
|
-
parameters[:filter] = filter unless filter.empty?
|
|
57
|
-
parameters[:sorts] = sort unless sort.empty?
|
|
58
|
-
parameters[:start_cursor] = start_cursor if start_cursor
|
|
59
|
-
parameters[:page_size] = page_size if page_size
|
|
56
|
+
parameters[:filter] = @filter unless @filter.empty?
|
|
57
|
+
parameters[:sorts] = @sort unless @sort.empty?
|
|
58
|
+
parameters[:start_cursor] = @start_cursor if @start_cursor
|
|
59
|
+
parameters[:page_size] = @page_size if @page_size
|
|
60
60
|
parameters
|
|
61
61
|
end
|
|
62
|
+
|
|
63
|
+
# @return [String (frozen)]
|
|
64
|
+
def query_string
|
|
65
|
+
ans = []
|
|
66
|
+
ans << "page_size=#{@page_size}" if @page_size
|
|
67
|
+
ans << "start_cursor=#{@start_cursor}" if @start_cursor
|
|
68
|
+
ans.empty? ? "" : "?#{ans.join("&")}"
|
|
69
|
+
end
|
|
62
70
|
end
|
|
63
71
|
end
|
|
@@ -19,6 +19,32 @@ module NotionRubyMapping
|
|
|
19
19
|
end
|
|
20
20
|
@will_update = will_update
|
|
21
21
|
end
|
|
22
|
+
attr_writer :will_update
|
|
23
|
+
|
|
24
|
+
def self.rich_text_array(key, text_objects = nil)
|
|
25
|
+
if text_objects.nil?
|
|
26
|
+
RichTextArray.new key
|
|
27
|
+
elsif text_objects.is_a? RichTextArray
|
|
28
|
+
text_objects
|
|
29
|
+
else
|
|
30
|
+
RichTextArray.new key, text_objects: text_objects
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @param [String, RichTextObject] to
|
|
35
|
+
# @return [NotionRubyMapping::RichTextObject] added RichTextObject
|
|
36
|
+
def <<(to)
|
|
37
|
+
@will_update = true
|
|
38
|
+
rto = RichTextObject.text_object(to)
|
|
39
|
+
@rich_text_objects << rto
|
|
40
|
+
rto
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @param [Numeric] index index number
|
|
44
|
+
# @return [RichTextObject] selected RichTextObject
|
|
45
|
+
def [](index)
|
|
46
|
+
@rich_text_objects[index]
|
|
47
|
+
end
|
|
22
48
|
|
|
23
49
|
# @param [Array] json
|
|
24
50
|
# @return [Array] RichTextArray
|
|
@@ -46,6 +72,17 @@ module NotionRubyMapping
|
|
|
46
72
|
map(&:text).join ""
|
|
47
73
|
end
|
|
48
74
|
|
|
75
|
+
def rich_text_objects=(text_info)
|
|
76
|
+
@will_update = true
|
|
77
|
+
@rich_text_objects = if text_info.is_a? RichTextArray
|
|
78
|
+
text_info.filter { true }
|
|
79
|
+
else
|
|
80
|
+
Array(text_info).map do |to|
|
|
81
|
+
RichTextObject.text_object to
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
49
86
|
def property_values_json
|
|
50
87
|
will_update ? @rich_text_objects.map(&:property_values_json) : []
|
|
51
88
|
end
|
|
@@ -54,28 +91,13 @@ module NotionRubyMapping
|
|
|
54
91
|
will_update ? {@key => @rich_text_objects.map(&:property_values_json)} : {}
|
|
55
92
|
end
|
|
56
93
|
|
|
57
|
-
def update_property_schema_json
|
|
58
|
-
will_update ? {@key => @rich_text_objects.map(&:property_values_json)} : {}
|
|
94
|
+
def update_property_schema_json(flag = false)
|
|
95
|
+
flag || will_update ? {@key => @rich_text_objects.map(&:property_values_json)} : {}
|
|
59
96
|
end
|
|
60
97
|
|
|
61
98
|
# @return [TrueClass, FalseClass] true if it will update
|
|
62
99
|
def will_update
|
|
63
100
|
@will_update || @rich_text_objects.map(&:will_update).any?
|
|
64
101
|
end
|
|
65
|
-
|
|
66
|
-
# @param [String, RichTextObject] to
|
|
67
|
-
# @return [NotionRubyMapping::RichTextObject] added RichTextObject
|
|
68
|
-
def <<(to)
|
|
69
|
-
@will_update = true
|
|
70
|
-
rto = RichTextObject.text_object(to)
|
|
71
|
-
@rich_text_objects << rto
|
|
72
|
-
rto
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# @param [Numeric] index index number
|
|
76
|
-
# @return [RichTextObject] selected RichTextObject
|
|
77
|
-
def [](index)
|
|
78
|
-
@rich_text_objects[index]
|
|
79
|
-
end
|
|
80
102
|
end
|
|
81
103
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NotionRubyMapping
|
|
4
|
+
# TextObject
|
|
5
|
+
class EmojiObject
|
|
6
|
+
# @param [String] emoji
|
|
7
|
+
# @return [TextObject]
|
|
8
|
+
def initialize(emoji: nil, json: {})
|
|
9
|
+
@emoji = emoji || json && json["emoji"]
|
|
10
|
+
@will_update = false
|
|
11
|
+
end
|
|
12
|
+
attr_reader :will_update, :emoji
|
|
13
|
+
|
|
14
|
+
# @param [EmojiObject, String] uo
|
|
15
|
+
# @return [EmojiObject] self or created EmojiObject
|
|
16
|
+
# @see https://www.notion.so/hkob/EmojiObject-4a0d41a10a81490f82471059c5b39b1b#959b7d74c1a54e488b39a96ac8f634e5
|
|
17
|
+
def self.emoji_object(emoji_or_eo)
|
|
18
|
+
if emoji_or_eo.is_a? EmojiObject
|
|
19
|
+
emoji_or_eo
|
|
20
|
+
else
|
|
21
|
+
EmojiObject.new emoji: emoji_or_eo
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @param [String] emoji
|
|
26
|
+
# @see https://www.notion.so/hkob/EmojiObject-4a0d41a10a81490f82471059c5b39b1b#b0520d80de084c1c99e8595db9d36542
|
|
27
|
+
def emoji=(emoji)
|
|
28
|
+
@emoji = emoji
|
|
29
|
+
@will_update = true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @return [Hash]
|
|
33
|
+
def property_values_json
|
|
34
|
+
{
|
|
35
|
+
"type" => "emoji",
|
|
36
|
+
"emoji" => @emoji,
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|