notion_ruby_mapping 0.3.3 → 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 +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
|