notion_ruby_mapping 0.3.2 → 0.4.1
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 +34 -1224
- data/env.yml.sample +0 -13
- data/lib/notion_ruby_mapping/{base.rb → blocks/base.rb} +166 -90
- data/lib/notion_ruby_mapping/blocks/block.rb +565 -0
- data/lib/notion_ruby_mapping/{database.rb → blocks/database.rb} +40 -9
- data/lib/notion_ruby_mapping/{list.rb → blocks/list.rb} +35 -3
- data/lib/notion_ruby_mapping/blocks/page.rb +71 -0
- data/lib/notion_ruby_mapping/{notion_cache.rb → controllers/notion_cache.rb} +134 -98
- data/lib/notion_ruby_mapping/{payload.rb → controllers/payload.rb} +0 -0
- data/lib/notion_ruby_mapping/{property_cache.rb → controllers/property_cache.rb} +21 -20
- data/lib/notion_ruby_mapping/{query.rb → controllers/query.rb} +26 -18
- data/lib/notion_ruby_mapping/{rich_text_array.rb → controllers/rich_text_array.rb} +26 -15
- 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} +11 -0
- 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} +0 -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 +122 -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} +1 -0
- 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} +4 -0
- 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} +2 -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 -0
- 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} +6 -1
- 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} +5 -0
- data/lib/notion_ruby_mapping/version.rb +1 -1
- data/lib/notion_ruby_mapping.rb +14 -7
- metadata +43 -40
- data/lib/notion_ruby_mapping/block.rb +0 -10
- data/lib/notion_ruby_mapping/date_base_property.rb +0 -75
- data/lib/notion_ruby_mapping/page.rb +0 -50
@@ -5,23 +5,54 @@ module NotionRubyMapping
|
|
5
5
|
class List < Base
|
6
6
|
include Enumerable
|
7
7
|
|
8
|
-
def initialize(json: nil, id: nil, database: nil, query: nil)
|
8
|
+
def initialize(json: nil, id: nil, database: nil, parent: nil, query: nil)
|
9
9
|
super(json: json, id: id)
|
10
10
|
@has_more = @json["has_more"]
|
11
11
|
@load_all_contents = !@has_more
|
12
12
|
@database = database
|
13
|
+
@parent = parent
|
13
14
|
@query = query
|
14
15
|
@index = 0
|
15
16
|
@has_content = true
|
16
17
|
end
|
17
18
|
attr_reader :has_more
|
18
19
|
|
19
|
-
### Public announced methods
|
20
20
|
|
21
|
+
# @return [NotionRubyMapping::List, Enumerator]
|
22
|
+
# @see https://www.notion.so/hkob/List-9a0b32335e0d48849a785ce5e162c760#12e1c261a0944a4095776b7515bef4a1
|
21
23
|
def each
|
22
24
|
return enum_for(:each) unless block_given?
|
23
25
|
|
24
|
-
if @
|
26
|
+
if @parent
|
27
|
+
unless @has_content
|
28
|
+
unless @load_all_contents
|
29
|
+
@query.start_cursor = nil
|
30
|
+
@json = @parent.children @query
|
31
|
+
@has_more = @json["has_more"]
|
32
|
+
end
|
33
|
+
@index = 0
|
34
|
+
@has_content = true
|
35
|
+
end
|
36
|
+
|
37
|
+
while @has_content
|
38
|
+
if @index < results.length
|
39
|
+
object = Base.create_from_json(results[@index])
|
40
|
+
@index += 1
|
41
|
+
yield object
|
42
|
+
elsif @has_more
|
43
|
+
if @parent
|
44
|
+
@query.start_cursor = @json["next_cursor"]
|
45
|
+
@json = @parent.children @query
|
46
|
+
@index = 0
|
47
|
+
@has_more = @json["has_more"]
|
48
|
+
else
|
49
|
+
@has_content = false
|
50
|
+
end
|
51
|
+
else
|
52
|
+
@has_content = false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
elsif @database
|
25
56
|
unless @has_content # re-exec
|
26
57
|
unless @load_all_contents
|
27
58
|
@query.start_cursor = nil
|
@@ -51,6 +82,7 @@ module NotionRubyMapping
|
|
51
82
|
end
|
52
83
|
end
|
53
84
|
end
|
85
|
+
self
|
54
86
|
end
|
55
87
|
|
56
88
|
private
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module NotionRubyMapping
|
4
|
+
# Notion page object
|
5
|
+
class Page < Base
|
6
|
+
### Public announced methods
|
7
|
+
|
8
|
+
# @param [String] id
|
9
|
+
# @return [NotionRubyMapping::Page, String]
|
10
|
+
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#7d868b8b81c3473082bbdc7370813a4a
|
11
|
+
def self.find(id, dry_run: false)
|
12
|
+
nc = NotionCache.instance
|
13
|
+
if dry_run
|
14
|
+
Base.dry_run_script :get, nc.page_path(id)
|
15
|
+
else
|
16
|
+
nc.page id
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# @param [String] title
|
21
|
+
# @param [Array<String, Property>] assigns
|
22
|
+
# @return [NotionRubyMapping::Database]
|
23
|
+
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#2e8ca5408afb4f83a92b7b84c0dc9903
|
24
|
+
def build_child_database(title, *assigns)
|
25
|
+
db = Database.new json: {"title" => [TextObject.new(title).property_values_json]},
|
26
|
+
assign: assigns, parent: {"type" => "page_id", "page_id" => @id}
|
27
|
+
yield db, db.properties if block_given?
|
28
|
+
db
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_child_database(title, *assigns, dry_run: false)
|
32
|
+
build_child_database title, *assigns
|
33
|
+
db = Database.new json: {"title" => [TextObject.new(title).property_values_json]},
|
34
|
+
assign: assigns, parent: {"type" => "page_id", "page_id" => @id}
|
35
|
+
yield db, db.properties
|
36
|
+
db.save dry_run: dry_run
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [String] title
|
40
|
+
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#2ff7209055f346fbbda454cdbb40b1c8
|
41
|
+
def title
|
42
|
+
properties.select { |p| p.is_a? TitleProperty }.map(&:full_text).join ""
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
# @return [NotionRubyMapping::Base, String]
|
48
|
+
def create(dry_run: false)
|
49
|
+
if dry_run
|
50
|
+
dry_run_script :post, @nc.pages_path, :property_values_json
|
51
|
+
else
|
52
|
+
@new_record = false
|
53
|
+
update_json @nc.create_page_request(property_values_json)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Hash]
|
58
|
+
def reload_json
|
59
|
+
@nc.page_request @id
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return [NotionRubyMapping::Base, String]
|
63
|
+
def update(dry_run: false)
|
64
|
+
if dry_run
|
65
|
+
dry_run_script :patch, @nc.page_path(@id), :property_values_json
|
66
|
+
else
|
67
|
+
update_json @nc.update_page_request(@id, property_values_json)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -11,6 +11,8 @@ module NotionRubyMapping
|
|
11
11
|
|
12
12
|
### initialize
|
13
13
|
|
14
|
+
|
15
|
+
# @see https://www.notion.so/hkob/NotionCache-65e1599864d6425686d495a5a4b3a623#dca210788f114cf59464090782c073bf
|
14
16
|
def initialize
|
15
17
|
@object_hash = {}
|
16
18
|
@client = Faraday::Connection.new "https://api.notion.com" do |builder|
|
@@ -25,38 +27,42 @@ module NotionRubyMapping
|
|
25
27
|
attr_reader :object_hash
|
26
28
|
attr_writer :client # for test only
|
27
29
|
|
28
|
-
# @param [String]
|
29
|
-
# @return [
|
30
|
-
def
|
31
|
-
|
32
|
-
@wait = wait
|
33
|
-
@debug = debug
|
34
|
-
self
|
30
|
+
# @param [String] page_id
|
31
|
+
# @return [String (frozen)] block_path
|
32
|
+
def append_block_children_block_path(block_id)
|
33
|
+
"v1/blocks/#{block_id}/children"
|
35
34
|
end
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
# @param [String] database_id
|
36
|
+
# @param [String] page_id
|
40
37
|
# @return [String (frozen)] page_path
|
41
|
-
def
|
42
|
-
"v1/
|
38
|
+
def append_block_children_page_path(page_id)
|
39
|
+
"v1/blocks/#{page_id}/children"
|
43
40
|
end
|
44
41
|
|
45
|
-
# @param [String]
|
46
|
-
# @
|
47
|
-
|
48
|
-
|
42
|
+
# @param [String] id
|
43
|
+
# @param [Hash] payload
|
44
|
+
# @return [Hash]
|
45
|
+
def append_block_children_request(id, payload)
|
46
|
+
request :patch, append_block_children_block_path(id), payload
|
47
|
+
end
|
48
|
+
|
49
|
+
# @param [String] id block_id (with or without "-")
|
50
|
+
# @return [NotionRubyMapping::Base] Block object or nil
|
51
|
+
def block(id)
|
52
|
+
object_for_key(id) { block_request id }
|
49
53
|
end
|
50
54
|
|
51
55
|
# @param [String] page_id
|
52
56
|
# @return [String (frozen)] page_path
|
53
|
-
def
|
54
|
-
"v1/
|
57
|
+
def block_children_page_path(page_id, query_string = "")
|
58
|
+
"v1/blocks/#{page_id}/children#{query_string}"
|
55
59
|
end
|
56
60
|
|
57
|
-
# @
|
58
|
-
|
59
|
-
|
61
|
+
# @param [String] id
|
62
|
+
# @param [String] query_string
|
63
|
+
# @return [Hash]
|
64
|
+
def block_children_request(id, query_string)
|
65
|
+
request :get, block_children_page_path(id, query_string)
|
60
66
|
end
|
61
67
|
|
62
68
|
# @param [String] block_id
|
@@ -65,84 +71,85 @@ module NotionRubyMapping
|
|
65
71
|
"v1/blocks/#{block_id}"
|
66
72
|
end
|
67
73
|
|
68
|
-
# @param [String]
|
69
|
-
# @return [
|
70
|
-
def
|
71
|
-
|
74
|
+
# @param [String] block_id
|
75
|
+
# @return [Hash] response
|
76
|
+
def block_request(block_id)
|
77
|
+
request :get, block_path(block_id)
|
72
78
|
end
|
73
79
|
|
74
|
-
|
80
|
+
# @return [Hash]
|
81
|
+
def clear_object_hash
|
82
|
+
@object_hash = {}
|
83
|
+
end
|
75
84
|
|
76
|
-
# @param [
|
77
|
-
# @
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
85
|
+
# @param [String] notion_token
|
86
|
+
# @return [NotionRubyMapping::NotionCache] self (NotionCache.instance)
|
87
|
+
def create_client(notion_token, wait: 0.3333, debug: false)
|
88
|
+
@notion_token = notion_token
|
89
|
+
@wait = wait
|
90
|
+
@debug = debug
|
91
|
+
self
|
92
|
+
end
|
82
93
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
case method
|
88
|
-
when :get, :delete
|
89
|
-
request.url path, options
|
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
|
94
|
+
# @param [Hash] payload
|
95
|
+
# @return [Hash] response
|
96
|
+
def create_database_request(payload)
|
97
|
+
request :post, databases_path, payload
|
101
98
|
end
|
102
99
|
|
103
|
-
# @param [
|
100
|
+
# @param [Hash] payload
|
104
101
|
# @return [Hash] response
|
105
|
-
def
|
106
|
-
request :
|
102
|
+
def create_page_request(payload)
|
103
|
+
request :post, "v1/pages", payload
|
104
|
+
end
|
105
|
+
|
106
|
+
# @param [String] id database_id (with or without "-")
|
107
|
+
# @return [NotionRubyMapping::Base] Database object or nil
|
108
|
+
def database(id)
|
109
|
+
object_for_key(id) { database_request id }
|
107
110
|
end
|
108
111
|
|
109
112
|
# @param [String] database_id
|
110
|
-
# @return [
|
111
|
-
def
|
112
|
-
|
113
|
+
# @return [String (frozen)] page_path
|
114
|
+
def database_path(database_id)
|
115
|
+
"v1/databases/#{database_id}"
|
116
|
+
end
|
117
|
+
|
118
|
+
# @param [String] id page_id / block_id (with or without "-")
|
119
|
+
# @param [NotionRubyMapping::Query] query query object
|
120
|
+
# @return [NotionRubyMapping::Base] List object
|
121
|
+
def database_query(id, query)
|
122
|
+
Base.create_from_json database_query_request(id, query.query_json)
|
113
123
|
end
|
114
124
|
|
115
125
|
def database_query_request(database_id, payload)
|
116
126
|
request :post, "v1/databases/#{database_id}/query", payload
|
117
127
|
end
|
118
128
|
|
119
|
-
# @param [String]
|
129
|
+
# @param [String] database_id
|
120
130
|
# @return [Hash] response
|
121
|
-
def
|
122
|
-
request :get,
|
131
|
+
def database_request(database_id)
|
132
|
+
request :get, database_path(database_id)
|
123
133
|
end
|
124
134
|
|
125
135
|
# @param [String] database_id
|
126
|
-
# @return [
|
127
|
-
def
|
128
|
-
|
136
|
+
# @return [String (frozen)] page_path
|
137
|
+
def databases_path
|
138
|
+
"v1/databases"
|
129
139
|
end
|
130
140
|
|
131
|
-
# @
|
132
|
-
|
133
|
-
|
134
|
-
def update_page_request(page_id, payload)
|
135
|
-
request :patch, "v1/pages/#{page_id}", payload
|
141
|
+
# @return [NotionRubyMapping::Base]
|
142
|
+
def destroy_block(id)
|
143
|
+
Base.create_from_json destroy_block_request(id)
|
136
144
|
end
|
137
145
|
|
138
|
-
# @param [Hash]
|
139
|
-
|
140
|
-
|
141
|
-
request :post, "v1/pages", payload
|
146
|
+
# @param [Hash] response
|
147
|
+
def destroy_block_request(id)
|
148
|
+
request :delete, block_path(id)
|
142
149
|
end
|
143
150
|
|
144
|
-
def
|
145
|
-
|
151
|
+
def inspect
|
152
|
+
"NotionCache"
|
146
153
|
end
|
147
154
|
|
148
155
|
# @param [String] id id string with "-"
|
@@ -167,34 +174,54 @@ module NotionRubyMapping
|
|
167
174
|
object_for_key(id) { page_request id }
|
168
175
|
end
|
169
176
|
|
170
|
-
# @param [String]
|
171
|
-
# @return [
|
172
|
-
def
|
173
|
-
|
177
|
+
# @param [String] page_id
|
178
|
+
# @return [String (frozen)] page_path
|
179
|
+
def page_path(page_id)
|
180
|
+
"v1/pages/#{page_id}"
|
174
181
|
end
|
175
182
|
|
176
|
-
# @param [String]
|
177
|
-
# @return [
|
178
|
-
def
|
179
|
-
|
183
|
+
# @param [String] page_id
|
184
|
+
# @return [Hash] response
|
185
|
+
def page_request(page_id)
|
186
|
+
request :get, page_path(page_id)
|
180
187
|
end
|
181
188
|
|
182
|
-
# @
|
183
|
-
|
184
|
-
|
185
|
-
array = []
|
186
|
-
sleep @wait
|
187
|
-
@client.block_children(block_id: id, sleep_interval: @wait, max_retries: 20) do |page|
|
188
|
-
array.concat page.results
|
189
|
-
end
|
190
|
-
Base.create_from_json({"object" => "list", "results" => array})
|
189
|
+
# @return [String (frozen)] page_path
|
190
|
+
def pages_path
|
191
|
+
"v1/pages"
|
191
192
|
end
|
192
193
|
|
193
|
-
# @param [String]
|
194
|
-
# @
|
195
|
-
|
196
|
-
|
197
|
-
|
194
|
+
# @param [String] database_id
|
195
|
+
# @return [String (frozen)] page_path
|
196
|
+
def query_database_path(database_id)
|
197
|
+
"v1/databases/#{database_id}/query"
|
198
|
+
end
|
199
|
+
|
200
|
+
# @param [Symbol] method
|
201
|
+
# @param [String] path
|
202
|
+
# @param [Hash] options
|
203
|
+
# @return [Hash] response hash
|
204
|
+
def request(method, path, options = {})
|
205
|
+
raise "Please call `NotionCache.create_client' before using other methods" unless @notion_token
|
206
|
+
|
207
|
+
sleep @wait
|
208
|
+
response = @client.send(method) do |request|
|
209
|
+
request.headers["Authorization"] = "Bearer #{@notion_token}"
|
210
|
+
request.headers["Notion-Version"] = NotionRubyMapping::NOTION_VERSION
|
211
|
+
case method
|
212
|
+
when :get, :delete
|
213
|
+
request.url path, options
|
214
|
+
when :post, :put, :patch
|
215
|
+
request.headers["Content-Type"] = "application/json"
|
216
|
+
request.path = path
|
217
|
+
request.body = options.to_json unless options.empty?
|
218
|
+
else
|
219
|
+
raise StandardError, "Unknown method: #{method}"
|
220
|
+
end
|
221
|
+
request.options.merge!(options.delete(:request)) if options.key? :request
|
222
|
+
end
|
223
|
+
p response.body if @debug
|
224
|
+
response.body
|
198
225
|
end
|
199
226
|
|
200
227
|
# @param [String] id page_id (with or without "-")
|
@@ -204,9 +231,18 @@ module NotionRubyMapping
|
|
204
231
|
@client.update_database payload.merge({database_id: id})
|
205
232
|
end
|
206
233
|
|
207
|
-
# @
|
208
|
-
|
209
|
-
|
234
|
+
# @param [String] database_id
|
235
|
+
# @return [Hash] response
|
236
|
+
def update_database_request(database_id, payload)
|
237
|
+
request :patch, "v1/databases/#{database_id}", payload
|
238
|
+
end
|
239
|
+
|
240
|
+
# @param [String] page_id
|
241
|
+
# @param [Hash] payload
|
242
|
+
# @return [Hash] response
|
243
|
+
def update_page_request(page_id, payload)
|
244
|
+
request :patch, "v1/pages/#{page_id}", payload
|
210
245
|
end
|
246
|
+
|
211
247
|
end
|
212
248
|
end
|
File without changes
|
@@ -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
|
@@ -14,22 +14,11 @@ module NotionRubyMapping
|
|
14
14
|
|
15
15
|
# @param [Query] other_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
|
@@ -62,20 +88,5 @@ module NotionRubyMapping
|
|
62
88
|
def will_update
|
63
89
|
@will_update || @rich_text_objects.map(&:will_update).any?
|
64
90
|
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
91
|
end
|
81
92
|
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
|