notion_ruby_mapping 0.5.5 → 0.6.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 +19 -3
- data/lib/notion_ruby_mapping/blocks/base.rb +37 -7
- data/lib/notion_ruby_mapping/blocks/list.rb +34 -1
- data/lib/notion_ruby_mapping/blocks/page.rb +8 -7
- data/lib/notion_ruby_mapping/controllers/notion_cache.rb +14 -0
- data/lib/notion_ruby_mapping/controllers/payload.rb +1 -0
- data/lib/notion_ruby_mapping/controllers/property_cache.rb +5 -2
- data/lib/notion_ruby_mapping/controllers/rich_text_array.rb +7 -0
- data/lib/notion_ruby_mapping/objects/rich_text_object.rb +5 -0
- data/lib/notion_ruby_mapping/properties/checkbox_property.rb +2 -2
- data/lib/notion_ruby_mapping/properties/created_by_property.rb +9 -2
- data/lib/notion_ruby_mapping/properties/created_time_property.rb +9 -2
- data/lib/notion_ruby_mapping/properties/date_property.rb +2 -2
- data/lib/notion_ruby_mapping/properties/email_property.rb +2 -2
- data/lib/notion_ruby_mapping/properties/files_property.rb +3 -3
- data/lib/notion_ruby_mapping/properties/formula_property.rb +9 -2
- data/lib/notion_ruby_mapping/properties/last_edited_by_property.rb +9 -2
- data/lib/notion_ruby_mapping/properties/last_edited_time_property.rb +9 -2
- data/lib/notion_ruby_mapping/properties/multi_select_property.rb +2 -2
- data/lib/notion_ruby_mapping/properties/number_property.rb +2 -2
- data/lib/notion_ruby_mapping/properties/people_property.rb +8 -4
- data/lib/notion_ruby_mapping/properties/phone_number_property.rb +2 -3
- data/lib/notion_ruby_mapping/properties/property.rb +86 -33
- data/lib/notion_ruby_mapping/properties/relation_property.rb +4 -3
- data/lib/notion_ruby_mapping/properties/rollup_property.rb +9 -2
- data/lib/notion_ruby_mapping/properties/select_property.rb +2 -2
- data/lib/notion_ruby_mapping/properties/text_property.rb +9 -2
- data/lib/notion_ruby_mapping/properties/title_property.rb +13 -1
- data/lib/notion_ruby_mapping/properties/url_property.rb +2 -2
- data/lib/notion_ruby_mapping/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edf72d3f2ccbc741e909ce3c8eb1a8604da6404730862751a9fb2bea1af9865c
|
4
|
+
data.tar.gz: de74bbb3f8821f93ec806f5e6854d54fa42fc5e3b915d33975b3ae8b2f4d4a28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 410633c4128a8b41182c40527fde6df1752d199ef6921e8f3b9416537979f3b3bf42eb40434a6c4ecf022c7da919c5d6431b327dfdf3def302bb645c0e2d458c
|
7
|
+
data.tar.gz: c5a6d6211363c59a2e8c14d9f27526a73b3537ab588ba4d81b7307a852cb376f209beac3ef49cb9d7028e0f59a193ce3aadd9d37a2a3433443959ba4ea6ba55e
|
data/README.md
CHANGED
@@ -8,7 +8,9 @@ Development note is here. → [Idea note of "notion_ruby_mapping"](https://www.n
|
|
8
8
|
|
9
9
|
- [notion_ruby_mapping](#notion_ruby_mapping)
|
10
10
|
- [Table of Contents](#table-of-contents)
|
11
|
-
- [0. Changes
|
11
|
+
- [0. Changes](#0-changes)
|
12
|
+
- [0.1 Changes in v0.6.0](#01-changes-in-v060)
|
13
|
+
- [0.2 Changes in v0.5.0](#02-changes-in-v050)
|
12
14
|
- [1. Installation](#1-installation)
|
13
15
|
- [2. How to use](#2-how-to-use)
|
14
16
|
- [2.1 Create a New Integration](#21-create-a-new-integration)
|
@@ -21,9 +23,18 @@ Development note is here. → [Idea note of "notion_ruby_mapping"](https://www.n
|
|
21
23
|
- [5. License](#5-license)
|
22
24
|
- [6. Code of Conduct](#6-code-of-conduct)
|
23
25
|
|
24
|
-
## 0. Changes
|
26
|
+
## 0. Changes
|
25
27
|
|
26
|
-
|
28
|
+
### 0.1 Changes in v0.6.0
|
29
|
+
|
30
|
+
NotionRubyMapping v0.6.0 now supports Notion-Version 2022-06-28.
|
31
|
+
In 2022-06-28, property values are no longer returned when retrieving pages.
|
32
|
+
NotionRubyMapping temporarily creates a Property Object and calls the retrieve a property item API when a value is needed.
|
33
|
+
Therefore, users do not need to be aware of any differences, and existing scripts should work as they are.
|
34
|
+
|
35
|
+
### 0.2 Changes in v0.5.0
|
36
|
+
|
37
|
+
NotionRubyMapping v0.5.0 now supports block updates.
|
27
38
|
For efficiency, subclasses are provided under Block class. As a result, they are no longer compatible with the scripts used in v0.4.0.
|
28
39
|
|
29
40
|
## 1. Installation
|
@@ -79,6 +90,11 @@ NotionCache.instance.create_client ENV["NOTION_API_TOKEN"] # from environment
|
|
79
90
|
|
80
91
|
## 3. ChangeLog
|
81
92
|
|
93
|
+
- 2022/7/22 [v0.6.0] updates for Notion-Version 2022-06-28 (lazy retrieve property values, retrieve page/database/block parent, single_property/dual_property for RelationProperty)
|
94
|
+
- 2022/6/24 [v0.5.5] add file_names= to FileProperty
|
95
|
+
- 2022/6/23 [v0.5.4] add update 'is_inline' and 'description' for database object
|
96
|
+
- 2022/6/14 [v0.5.3] add time zone for query database by Date (before, after, on_or_before, on_or_after)
|
97
|
+
- 2022/6/8 [v0.5.2] Change query database filter for date with time zone
|
82
98
|
- 2022/6/5 [v0.5.1] bug fix for append_block_children. added synced_block_original to SyncedBlock
|
83
99
|
- 2022/6/4 [v0.5.0] added subclasses of the block class and update_block API support
|
84
100
|
- 2022/5/19 [v0.4.1] added delete_block
|
@@ -50,7 +50,7 @@ module NotionRubyMapping
|
|
50
50
|
def self.dry_run_script(method, path, json = nil)
|
51
51
|
shell = [
|
52
52
|
"#!/bin/sh\ncurl #{method == :get ? "" : "-X #{method.to_s.upcase}"} 'https://api.notion.com/#{path}'",
|
53
|
-
" -H 'Notion-Version: 2022-
|
53
|
+
" -H 'Notion-Version: 2022-06-28'",
|
54
54
|
" -H 'Authorization: Bearer '\"$NOTION_API_KEY\"''",
|
55
55
|
]
|
56
56
|
shell << " -H 'Content-Type: application/json'" if %i[post patch].include?(method)
|
@@ -120,11 +120,13 @@ module NotionRubyMapping
|
|
120
120
|
# @param [String] title
|
121
121
|
# @return [NotionRubyMapping::Property] generated property
|
122
122
|
def assign_property(klass, title)
|
123
|
-
@property_cache ||= PropertyCache.new({},
|
123
|
+
@property_cache ||= PropertyCache.new({},
|
124
|
+
base_type: database? ? :database : :page,
|
125
|
+
page_id: page? ? @id : nil)
|
124
126
|
property = if database?
|
125
127
|
klass.new(title, will_update: new_record?, base_type: :database)
|
126
128
|
else
|
127
|
-
klass.new(title, will_update: true, base_type: :page)
|
129
|
+
klass.new(title, will_update: true, base_type: :page, property_cache: @property_cache)
|
128
130
|
end
|
129
131
|
@property_cache.add_property property
|
130
132
|
property
|
@@ -192,6 +194,24 @@ module NotionRubyMapping
|
|
192
194
|
is_a? Page
|
193
195
|
end
|
194
196
|
|
197
|
+
def parent(dry_run: false)
|
198
|
+
parent_json = @json && @json["parent"]
|
199
|
+
raise StandardError, "Unknown parent" if parent_json.nil?
|
200
|
+
|
201
|
+
type = parent_json["type"]
|
202
|
+
klass = case type
|
203
|
+
when "database_id"
|
204
|
+
Database
|
205
|
+
when "page_id"
|
206
|
+
Page
|
207
|
+
when "block_id"
|
208
|
+
Block
|
209
|
+
else
|
210
|
+
raise StandardError, "List does not have any parent"
|
211
|
+
end
|
212
|
+
klass.find parent_json[type], dry_run: dry_run
|
213
|
+
end
|
214
|
+
|
195
215
|
# @return [NotionRubyMapping::PropertyCache] get or created PropertyCache object
|
196
216
|
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#8f0b28e09dd74e2a9ff06126c48d64d4
|
197
217
|
def properties
|
@@ -201,7 +221,9 @@ module NotionRubyMapping
|
|
201
221
|
|
202
222
|
reload
|
203
223
|
end
|
204
|
-
@property_cache = PropertyCache.new json_properties,
|
224
|
+
@property_cache = PropertyCache.new json_properties,
|
225
|
+
base_type: database? ? :database : :page,
|
226
|
+
page_id: page? ? @id : nil
|
205
227
|
end
|
206
228
|
@property_cache
|
207
229
|
end
|
@@ -225,20 +247,28 @@ module NotionRubyMapping
|
|
225
247
|
return unless is_a?(Page) || is_a?(Database)
|
226
248
|
|
227
249
|
ps.each do |key, json|
|
228
|
-
|
250
|
+
if json["type"]
|
251
|
+
properties[key].update_from_json json
|
252
|
+
else
|
253
|
+
properties[key]&.clear_will_update
|
254
|
+
end
|
229
255
|
end
|
230
256
|
self
|
231
257
|
end
|
232
258
|
|
233
259
|
# @param [Boolean] dry_run
|
234
|
-
# @return [NotionRubyMapping::Base, String]
|
260
|
+
# @return [NotionRubyMapping::Base, NotionRubyMapping::Database, String]
|
235
261
|
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#277085c8439841c798a4b94eae9a7326
|
236
262
|
def save(dry_run: false)
|
237
263
|
if dry_run
|
238
264
|
@new_record ? create(dry_run: true) : update(dry_run: true)
|
239
265
|
else
|
240
266
|
@new_record ? create : update
|
241
|
-
|
267
|
+
if block?
|
268
|
+
|
269
|
+
else
|
270
|
+
@property_cache.clear_will_update
|
271
|
+
end
|
242
272
|
@payload.clear
|
243
273
|
self
|
244
274
|
end
|
@@ -5,12 +5,13 @@ module NotionRubyMapping
|
|
5
5
|
class List < Base
|
6
6
|
include Enumerable
|
7
7
|
|
8
|
-
def initialize(json: nil, id: nil, database: nil, parent: nil, query: nil)
|
8
|
+
def initialize(json: nil, id: nil, database: nil, parent: nil, property: 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
13
|
@parent = parent
|
14
|
+
@property = property
|
14
15
|
@query = query
|
15
16
|
@index = 0
|
16
17
|
@has_content = true
|
@@ -80,6 +81,38 @@ module NotionRubyMapping
|
|
80
81
|
@has_content = false
|
81
82
|
end
|
82
83
|
end
|
84
|
+
elsif @property
|
85
|
+
while @has_content
|
86
|
+
if @index < results.length
|
87
|
+
json = results[@index]
|
88
|
+
object = case json["type"]
|
89
|
+
when "people"
|
90
|
+
UserObject.new json: json["people"]
|
91
|
+
when "relation"
|
92
|
+
json["relation"]["id"]
|
93
|
+
when "rich_text"
|
94
|
+
RichTextObject.create_from_json json["rich_text"]
|
95
|
+
when "title"
|
96
|
+
RichTextObject.create_from_json json["title"]
|
97
|
+
else
|
98
|
+
json
|
99
|
+
end
|
100
|
+
@index += 1
|
101
|
+
yield object
|
102
|
+
elsif @has_more
|
103
|
+
if @property
|
104
|
+
@query ||= Query.new
|
105
|
+
@query.start_cursor = @json["next_cursor"]
|
106
|
+
@json = NotionCache.instance.page_property_request @property.property_cache.page_id, @property.property_id, @query.query_json
|
107
|
+
@index = 0
|
108
|
+
@has_more = @json["has_more"]
|
109
|
+
else
|
110
|
+
@has_content = false
|
111
|
+
end
|
112
|
+
else
|
113
|
+
@has_content = false
|
114
|
+
end
|
115
|
+
end
|
83
116
|
end
|
84
117
|
self
|
85
118
|
end
|
@@ -26,7 +26,7 @@ module NotionRubyMapping
|
|
26
26
|
# @param [String] title
|
27
27
|
# @param [Array<String, Property>] assigns
|
28
28
|
# @return [NotionRubyMapping::Database]
|
29
|
-
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#
|
29
|
+
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#71f680d59b874930bf9f488a7cd6a49e
|
30
30
|
def build_child_database(title, *assigns)
|
31
31
|
db = Database.new json: {"title" => [TextObject.new(title).property_values_json]},
|
32
32
|
assign: assigns, parent: {"type" => "page_id", "page_id" => @id}
|
@@ -34,18 +34,19 @@ module NotionRubyMapping
|
|
34
34
|
db
|
35
35
|
end
|
36
36
|
|
37
|
+
# @param [String] title
|
38
|
+
# @param [Array<String, Property>] assigns
|
39
|
+
# @return [NotionRubyMapping::Database]
|
40
|
+
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#e3f1d21e0f724f589e48431468772eed
|
37
41
|
def create_child_database(title, *assigns, dry_run: false)
|
38
|
-
build_child_database
|
39
|
-
db = Database.new json: {"title" => [TextObject.new(title).property_values_json]},
|
40
|
-
assign: assigns, parent: {"type" => "page_id", "page_id" => @id}
|
41
|
-
yield db, db.properties
|
42
|
-
db.save dry_run: dry_run
|
42
|
+
build_child_database(title, *assigns).save dry_run: dry_run
|
43
43
|
end
|
44
44
|
|
45
45
|
# @return [String] title
|
46
46
|
# @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#2ff7209055f346fbbda454cdbb40b1c8
|
47
47
|
def title
|
48
|
-
properties.select { |p| p.is_a?
|
48
|
+
tp = properties.select { |p| (p.is_a?(TitleProperty)) || (p.is_a?(Property) && p.property_id == "title") }
|
49
|
+
tp.map(&:full_text).join ""
|
49
50
|
end
|
50
51
|
|
51
52
|
protected
|
@@ -183,6 +183,20 @@ module NotionRubyMapping
|
|
183
183
|
"v1/pages/#{page_id}"
|
184
184
|
end
|
185
185
|
|
186
|
+
# @param [String] page_id
|
187
|
+
# @param [String] property_id
|
188
|
+
# @return [String (frozen)] page_property_path
|
189
|
+
def page_property_path(page_id, property_id)
|
190
|
+
[page_path(page_id), "properties/#{property_id}"].join "/"
|
191
|
+
end
|
192
|
+
|
193
|
+
# @param [String] page_id
|
194
|
+
# @param [String] property_id
|
195
|
+
# @return [Hash] response
|
196
|
+
def page_property_request(page_id, property_id, query = {})
|
197
|
+
request :get, page_property_path(page_id, property_id), query
|
198
|
+
end
|
199
|
+
|
186
200
|
# @param [String] page_id
|
187
201
|
# @return [Hash] response
|
188
202
|
def page_request(page_id)
|
@@ -4,23 +4,26 @@ module NotionRubyMapping
|
|
4
4
|
# PropertyCache class
|
5
5
|
class PropertyCache
|
6
6
|
include Enumerable
|
7
|
-
def initialize(json = {}, base_type: :page)
|
7
|
+
def initialize(json = {}, base_type: :page, page_id: nil)
|
8
8
|
@properties = {}
|
9
9
|
@json = json
|
10
10
|
@base_type = base_type
|
11
|
+
@page_id = page_id
|
11
12
|
end
|
12
13
|
attr_writer :json
|
14
|
+
attr_reader :page_id
|
13
15
|
|
14
16
|
# @param [String] key
|
15
17
|
# @return [Property] Property for key
|
16
18
|
# @see https://www.notion.so/hkob/PropertyCache-2451fa64a814432db4809831cc77ba25#9709e2b2a7a0479f9951291a501f65c8
|
17
19
|
def [](key)
|
18
|
-
@properties[key] ||= Property.create_from_json key, @json[key], @base_type
|
20
|
+
@properties[key] ||= Property.create_from_json key, @json[key], @base_type, self
|
19
21
|
end
|
20
22
|
|
21
23
|
# @param [Property] property added Property
|
22
24
|
def add_property(property)
|
23
25
|
@properties[property.name] = property
|
26
|
+
property.property_cache = self
|
24
27
|
self
|
25
28
|
end
|
26
29
|
|
@@ -46,6 +46,13 @@ module NotionRubyMapping
|
|
46
46
|
@rich_text_objects[index]
|
47
47
|
end
|
48
48
|
|
49
|
+
# @return [FalseClass]
|
50
|
+
def clear_will_update
|
51
|
+
@will_update = false
|
52
|
+
@rich_text_objects.each(&:clear_will_update)
|
53
|
+
false
|
54
|
+
end
|
55
|
+
|
49
56
|
# @param [Array] json
|
50
57
|
# @return [Array] RichTextArray
|
51
58
|
def create_from_json(json = [])
|
@@ -33,8 +33,8 @@ module NotionRubyMapping
|
|
33
33
|
|
34
34
|
# @param [String] name Property name
|
35
35
|
# @param [Boolean, Hash] json
|
36
|
-
def initialize(name, will_update: false, base_type: :page, json: nil)
|
37
|
-
super name, will_update: will_update, base_type: base_type
|
36
|
+
def initialize(name, will_update: false, base_type: :page, property_cache: nil, json: nil)
|
37
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
38
38
|
@json = if database?
|
39
39
|
json || {}
|
40
40
|
else
|
@@ -22,8 +22,8 @@ module NotionRubyMapping
|
|
22
22
|
# @param [String] name Property name
|
23
23
|
# @param [String] user_id user_id (optional)
|
24
24
|
# @param [Hash] json json (optional)
|
25
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, user_id: nil)
|
26
|
-
super name, will_update: will_update, base_type: base_type
|
25
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, user_id: nil, property_cache: nil)
|
26
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
27
27
|
@json = if database?
|
28
28
|
json || {}
|
29
29
|
else
|
@@ -37,5 +37,12 @@ module NotionRubyMapping
|
|
37
37
|
cb = json["created_by"]
|
38
38
|
@json = database? ? cb : UserObject.new(json: cb)
|
39
39
|
end
|
40
|
+
|
41
|
+
## Page property only methods
|
42
|
+
# @return [Hash]
|
43
|
+
def property_values_json
|
44
|
+
assert_page_property __method__
|
45
|
+
{}
|
46
|
+
end
|
40
47
|
end
|
41
48
|
end
|
@@ -21,10 +21,17 @@ module NotionRubyMapping
|
|
21
21
|
|
22
22
|
# @param [String] name Property name
|
23
23
|
# @param [String] json created_time value (optional)
|
24
|
-
def initialize(name, will_update: false, base_type: :page, json: nil)
|
25
|
-
super name, will_update: will_update, base_type: base_type
|
24
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, property_cache: nil)
|
25
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
26
26
|
@json = json
|
27
27
|
@json ||= {} if database?
|
28
28
|
end
|
29
|
+
|
30
|
+
## Page property only methods
|
31
|
+
# @return [Hash]
|
32
|
+
def property_values_json
|
33
|
+
assert_page_property __method__
|
34
|
+
{}
|
35
|
+
end
|
29
36
|
end
|
30
37
|
end
|
@@ -75,8 +75,8 @@ module NotionRubyMapping
|
|
75
75
|
# @param [Date, Time, DateTime, String, nil] start_date
|
76
76
|
# @param [Date, Time, DateTime, String, nil] end_date
|
77
77
|
# @param [String, nil] time_zone
|
78
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, start_date: nil, end_date: nil, time_zone: nil)
|
79
|
-
super name, will_update: will_update, base_type: base_type
|
78
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, start_date: nil, end_date: nil, time_zone: nil, property_cache: nil)
|
79
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
80
80
|
@json = json || {}
|
81
81
|
return if database?
|
82
82
|
|
@@ -32,8 +32,8 @@ module NotionRubyMapping
|
|
32
32
|
## Common methods
|
33
33
|
|
34
34
|
# @param [String] name Property name
|
35
|
-
def initialize(name, will_update: false, base_type: :page, json: nil)
|
36
|
-
super name, will_update: will_update, base_type: base_type
|
35
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, property_cache: nil)
|
36
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
37
37
|
@json = json || {}
|
38
38
|
end
|
39
39
|
|
@@ -33,8 +33,8 @@ module NotionRubyMapping
|
|
33
33
|
|
34
34
|
# @param [String] name Property name
|
35
35
|
# @param [String] files files value (optional)
|
36
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, files: [])
|
37
|
-
super name, will_update: will_update, base_type: base_type
|
36
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, files: [], property_cache: nil)
|
37
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
38
38
|
if database?
|
39
39
|
@files = json || {}
|
40
40
|
elsif json
|
@@ -66,7 +66,7 @@ module NotionRubyMapping
|
|
66
66
|
@files = json["files"].map { |sub_json| FileObject.new json: sub_json }
|
67
67
|
@file_names = json["files"].map { |sub_json| sub_json["name"] }
|
68
68
|
@will_update = false
|
69
|
-
|
69
|
+
self
|
70
70
|
end
|
71
71
|
|
72
72
|
protected
|
@@ -41,8 +41,8 @@ module NotionRubyMapping
|
|
41
41
|
|
42
42
|
# @param [String] name
|
43
43
|
# @param [Hash] json
|
44
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, formula: nil)
|
45
|
-
super name, will_update: will_update, base_type: base_type
|
44
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, formula: nil, property_cache: nil)
|
45
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
46
46
|
@json = json || {}
|
47
47
|
return unless database?
|
48
48
|
|
@@ -62,6 +62,13 @@ module NotionRubyMapping
|
|
62
62
|
ans
|
63
63
|
end
|
64
64
|
|
65
|
+
## Page property only methods
|
66
|
+
# @return [Hash]
|
67
|
+
def property_values_json
|
68
|
+
assert_page_property __method__
|
69
|
+
{}
|
70
|
+
end
|
71
|
+
|
65
72
|
protected
|
66
73
|
|
67
74
|
## Database property only methods
|
@@ -22,8 +22,8 @@ module NotionRubyMapping
|
|
22
22
|
# @param [String] name Property name
|
23
23
|
# @param [String] user_id user_id (optional)
|
24
24
|
# @param [Hash] json json (optional)
|
25
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, user_id: nil)
|
26
|
-
super name, will_update: will_update, base_type: base_type
|
25
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, user_id: nil, property_cache: nil)
|
26
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
27
27
|
@json = if database?
|
28
28
|
json || {}
|
29
29
|
else
|
@@ -38,5 +38,12 @@ module NotionRubyMapping
|
|
38
38
|
leb = json["last_edited_by"]
|
39
39
|
@json = database? ? leb : UserObject.new(json: leb)
|
40
40
|
end
|
41
|
+
|
42
|
+
## Page property only methods
|
43
|
+
# @return [Hash]
|
44
|
+
def property_values_json
|
45
|
+
assert_page_property __method__
|
46
|
+
{}
|
47
|
+
end
|
41
48
|
end
|
42
49
|
end
|
@@ -21,10 +21,17 @@ module NotionRubyMapping
|
|
21
21
|
|
22
22
|
# @param [String] name Property name
|
23
23
|
# @param [String] json last_edited_time value (optional)
|
24
|
-
def initialize(name, will_update: false, base_type: :page, json: nil)
|
25
|
-
super name, will_update: will_update, base_type: base_type
|
24
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, property_cache: nil)
|
25
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
26
26
|
@json = json
|
27
27
|
@json ||= {} if database?
|
28
28
|
end
|
29
|
+
|
30
|
+
## Page property only methods
|
31
|
+
# @return [Hash]
|
32
|
+
def property_values_json
|
33
|
+
assert_page_property __method__
|
34
|
+
{}
|
35
|
+
end
|
29
36
|
end
|
30
37
|
end
|
@@ -61,8 +61,8 @@ module NotionRubyMapping
|
|
61
61
|
# @param [String] name
|
62
62
|
# @param [Hash] json
|
63
63
|
# @param [Array<String>, String] multi_select
|
64
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, multi_select: nil)
|
65
|
-
super name, will_update: will_update, base_type: base_type
|
64
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, multi_select: nil, property_cache: nil)
|
65
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
66
66
|
if database?
|
67
67
|
@json = json || {"options" => []}
|
68
68
|
else
|
@@ -53,8 +53,8 @@ module NotionRubyMapping
|
|
53
53
|
|
54
54
|
# @param [String] name Property name
|
55
55
|
# @param [Float, Integer, Hash] json Number value or format Hash
|
56
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, format: nil)
|
57
|
-
super name, will_update: will_update, base_type: base_type
|
56
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, format: nil, property_cache: nil)
|
57
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
58
58
|
@json = json
|
59
59
|
@json ||= {"format" => (format || "number")} if database?
|
60
60
|
end
|
@@ -39,17 +39,21 @@ module NotionRubyMapping
|
|
39
39
|
|
40
40
|
## Common methods
|
41
41
|
|
42
|
+
def self.people_from_json(json)
|
43
|
+
List.new(json: json, property: self).select { true }
|
44
|
+
end
|
45
|
+
|
42
46
|
# @param [String] name
|
43
47
|
# @param [Hash] json
|
44
48
|
# @param [Array] people ids for people
|
45
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, people: nil)
|
46
|
-
super name, will_update: will_update, base_type: base_type
|
49
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, people: nil, property_cache: nil, query: nil)
|
50
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache, query: query
|
47
51
|
@json = if database?
|
48
52
|
{}
|
49
53
|
elsif people
|
50
54
|
Array(people).map { |uo| UserObject.user_object(uo) }
|
51
55
|
elsif json
|
52
|
-
|
56
|
+
PeopleProperty.people_from_json json
|
53
57
|
else
|
54
58
|
[]
|
55
59
|
end
|
@@ -72,7 +76,7 @@ module NotionRubyMapping
|
|
72
76
|
# @return [Hash, Array]
|
73
77
|
def update_from_json(json)
|
74
78
|
@will_update = false
|
75
|
-
@json = database? ? {} :
|
79
|
+
@json = database? ? {} : PeopleProperty.people_from_json(json)
|
76
80
|
end
|
77
81
|
end
|
78
82
|
end
|
@@ -34,13 +34,12 @@ module NotionRubyMapping
|
|
34
34
|
## Common methods
|
35
35
|
|
36
36
|
# @param [String] name Property name
|
37
|
-
def initialize(name, will_update: false, base_type: :page, json: nil)
|
38
|
-
super name, will_update: will_update, base_type: base_type
|
37
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, property_cache: nil)
|
38
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
39
39
|
@json = database? ? {} : json
|
40
40
|
end
|
41
41
|
|
42
42
|
## Page property only methods
|
43
|
-
|
44
43
|
# @return [Hash]
|
45
44
|
def property_values_json
|
46
45
|
assert_page_property __method__
|
@@ -1,13 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
require "forwardable"
|
2
4
|
|
3
5
|
module NotionRubyMapping
|
4
6
|
# abstract class for property
|
5
7
|
class Property
|
8
|
+
extend Forwardable
|
9
|
+
|
6
10
|
### Public announced methods
|
7
11
|
|
8
12
|
## Common methods
|
9
13
|
|
10
|
-
attr_reader :name, :will_update
|
14
|
+
attr_reader :name, :will_update, :property_id
|
15
|
+
attr_accessor :property_cache
|
16
|
+
|
17
|
+
def_delegators :retrieve_page_property, :<<, :[], :add_person, :add_relation, :checkbox, :checkbox=, :created_by,
|
18
|
+
:created_time, :date, :each, :email, :email=, :end_date, :end_date=, :files, :files=, :filter_after,
|
19
|
+
:filter_before, :filter_contains, :filter_does_not_contain, :filter_does_not_equal,
|
20
|
+
:filter_ends_with, :filter_equals, :filter_greater_than, :filter_greater_than_or_equal_to,
|
21
|
+
:filter_is_empty, :filter_is_not_empty, :filter_less_than, :filter_less_than_or_equal_to,
|
22
|
+
:filter_next_month, :filter_next_week, :filter_next_year, :filter_on_or_after, :filter_on_or_before,
|
23
|
+
:filter_past_month, :filter_past_week, :filter_past_year, :filter_starts_with, :formula, :full_text,
|
24
|
+
:last_edited_by, :last_edited_time, :multi_select, :multi_select=, :multi_select_names, :number,
|
25
|
+
:number=, :people, :people=, :phone_number, :phone_number=, :property_values_json, :relation=,
|
26
|
+
:rollup, :start_date, :start_date=, :time_zone, :time_zone=, :select, :select=, :select_name, :url,
|
27
|
+
:url=
|
11
28
|
|
12
29
|
## Database property only methods
|
13
30
|
|
@@ -32,7 +49,7 @@ module NotionRubyMapping
|
|
32
49
|
|
33
50
|
# @param [String] name Property name
|
34
51
|
# @return [Property] generated Property object
|
35
|
-
def initialize(name, will_update: false, base_type: :page)
|
52
|
+
def initialize(name, will_update: false, base_type: :page, property_id: nil, property_cache: nil, query: nil)
|
36
53
|
@name = name
|
37
54
|
@will_update = will_update
|
38
55
|
@base_type = base_type
|
@@ -40,39 +57,64 @@ module NotionRubyMapping
|
|
40
57
|
@remove = false
|
41
58
|
@new_name = nil
|
42
59
|
@json = nil
|
60
|
+
@property_id = property_id
|
61
|
+
@property_cache = property_cache
|
62
|
+
@query = query
|
43
63
|
end
|
44
64
|
|
45
65
|
# @param [String] name
|
46
66
|
# @param [Hash] input_json
|
47
67
|
# @return [NotionRubyMapping::Property, nil] generated Property object
|
48
|
-
|
68
|
+
# @param [Symbol] base_type :page or :database
|
69
|
+
# @param [String, nil] page_id
|
70
|
+
def self.create_from_json(name, input_json, base_type = :page, property_cache = nil, query = nil)
|
49
71
|
raise StandardError, "Property not found: #{name}:#{input_json}" if input_json.nil?
|
50
72
|
|
51
73
|
type = input_json["type"]
|
52
|
-
|
53
|
-
"
|
54
|
-
|
55
|
-
"
|
56
|
-
|
57
|
-
|
58
|
-
"
|
59
|
-
"
|
60
|
-
|
61
|
-
"
|
62
|
-
|
63
|
-
"
|
64
|
-
|
65
|
-
"
|
66
|
-
|
67
|
-
"
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
74
|
+
if type.nil?
|
75
|
+
new name, property_id: input_json["id"], base_type: base_type, property_cache: property_cache, query: query
|
76
|
+
elsif type == "property_item"
|
77
|
+
tmp = new name, property_id: input_json["property_item"]["id"], base_type: base_type,
|
78
|
+
property_cache: property_cache, query: query
|
79
|
+
objects = List.new(json: input_json, property: tmp, query: query).select { true }
|
80
|
+
case input_json["property_item"]["type"]
|
81
|
+
when "people"
|
82
|
+
PeopleProperty.new name, people: objects, base_type: base_type, property_cache: property_cache, query: query
|
83
|
+
when "relation"
|
84
|
+
RelationProperty.new name, relation: objects, base_type: base_type, property_cache: property_cache, query: query
|
85
|
+
when "rich_text"
|
86
|
+
RichTextProperty.new name, text_objects: objects, base_type: base_type, property_cache: property_cache, query: query
|
87
|
+
when "rollup"
|
88
|
+
RollupProperty.new name, json: objects, base_type: base_type, property_cache: property_cache, query: query
|
89
|
+
when "title"
|
90
|
+
TitleProperty.new name, text_objects: objects, base_type: base_type, property_cache: property_cache, query: query
|
91
|
+
end
|
92
|
+
else
|
93
|
+
klass = {
|
94
|
+
"checkbox" => CheckboxProperty,
|
95
|
+
"created_time" => CreatedTimeProperty,
|
96
|
+
"date" => DateProperty,
|
97
|
+
"formula" => FormulaProperty,
|
98
|
+
"last_edited_time" => LastEditedTimeProperty,
|
99
|
+
"rollup" => RollupProperty,
|
100
|
+
"email" => EmailProperty,
|
101
|
+
"files" => FilesProperty,
|
102
|
+
"created_by" => CreatedByProperty,
|
103
|
+
"last_edited_by" => LastEditedByProperty,
|
104
|
+
"multi_select" => MultiSelectProperty,
|
105
|
+
"relation" => RelationProperty,
|
106
|
+
"number" => NumberProperty,
|
107
|
+
"people" => PeopleProperty,
|
108
|
+
"phone_number" => PhoneNumberProperty,
|
109
|
+
"select" => SelectProperty,
|
110
|
+
"title" => TitleProperty,
|
111
|
+
"rich_text" => RichTextProperty,
|
112
|
+
"url" => UrlProperty,
|
113
|
+
}[type]
|
114
|
+
raise StandardError, "Irregular property type: #{type}" unless klass
|
115
|
+
|
116
|
+
klass.new name, json: input_json[type], base_type: base_type, property_cache: property_cache
|
117
|
+
end
|
76
118
|
end
|
77
119
|
|
78
120
|
# @return [FalseClass]
|
@@ -85,6 +127,11 @@ module NotionRubyMapping
|
|
85
127
|
@base_type == :database
|
86
128
|
end
|
87
129
|
|
130
|
+
# @return [TrueClass, FalseClass] true if it has Property contents
|
131
|
+
def contents?
|
132
|
+
!instance_of? Property
|
133
|
+
end
|
134
|
+
|
88
135
|
# @param [String] key query parameter
|
89
136
|
# @param [Object] value query value
|
90
137
|
# @return [NotionRubyMapping::Query] generated Query object
|
@@ -108,7 +155,9 @@ module NotionRubyMapping
|
|
108
155
|
# @param [Hash] json
|
109
156
|
def update_from_json(json)
|
110
157
|
@will_update = false
|
111
|
-
|
158
|
+
return unless contents?
|
159
|
+
|
160
|
+
@json = json[type] if json[type] && json[type] != "property_item"
|
112
161
|
end
|
113
162
|
|
114
163
|
# @return [Symbol] property type
|
@@ -148,12 +197,16 @@ module NotionRubyMapping
|
|
148
197
|
raise StandardError, "#{method} can execute only Page property." unless @base_type == :page
|
149
198
|
end
|
150
199
|
|
151
|
-
|
152
|
-
|
153
|
-
# @return [Hash] {} created_time cannot be updated
|
154
|
-
def property_values_json
|
200
|
+
# @return [NotionRubyMapping::Property, Array<UserObject>, nil]
|
201
|
+
def retrieve_page_property
|
155
202
|
assert_page_property __method__
|
156
|
-
|
203
|
+
raise StandardError, "property_cache.page_id is empty" if @property_cache.page_id.nil?
|
204
|
+
|
205
|
+
json = NotionCache.instance.page_property_request @property_cache.page_id, @property_id,
|
206
|
+
(@query&.query_json || {})
|
207
|
+
new_property = self.class.create_from_json @name, json, :page, @property_cache, @query
|
208
|
+
@property_cache.add_property new_property
|
209
|
+
new_property
|
157
210
|
end
|
158
211
|
|
159
212
|
protected
|
@@ -54,10 +54,11 @@ module NotionRubyMapping
|
|
54
54
|
# @param [String] database_id
|
55
55
|
# @param [String] synced_property_name
|
56
56
|
# @see https://www.notion.so/hkob/RelationProperty-f608ab41a1f0476b98456620346fba03#7f5029fb7f6e4c009f22888b233e6f64
|
57
|
-
def replace_relation_database(database_id: nil, synced_property_name: nil)
|
57
|
+
def replace_relation_database(database_id: nil, type: "dual_property", synced_property_name: nil)
|
58
58
|
assert_database_property __method__
|
59
59
|
@will_update = true
|
60
60
|
@json["database_id"] = database_id if database_id
|
61
|
+
@json["type"] = type
|
61
62
|
@json["synced_property_name"] = synced_property_name if synced_property_name
|
62
63
|
@json
|
63
64
|
end
|
@@ -69,8 +70,8 @@ module NotionRubyMapping
|
|
69
70
|
# @param [String] name
|
70
71
|
# @param [Hash, Array] json
|
71
72
|
# @param [String, Array] relation
|
72
|
-
def initialize(name, will_update: false, json: nil, relation: nil, base_type: :page)
|
73
|
-
super name, will_update: will_update, base_type: base_type
|
73
|
+
def initialize(name, will_update: false, json: nil, relation: nil, base_type: :page, property_cache: nil, query: nil)
|
74
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache, query: query
|
74
75
|
@json = if database?
|
75
76
|
json || {}
|
76
77
|
elsif relation
|
@@ -71,8 +71,8 @@ module NotionRubyMapping
|
|
71
71
|
|
72
72
|
# @param [String] name
|
73
73
|
# @param [Hash] json
|
74
|
-
def initialize(name, will_update: false, json: nil, base_type: :page)
|
75
|
-
super name, will_update: will_update, base_type: base_type
|
74
|
+
def initialize(name, will_update: false, json: nil, base_type: :page, property_cache: nil, query: nil)
|
75
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache, query: query
|
76
76
|
@json = json || {}
|
77
77
|
end
|
78
78
|
|
@@ -92,6 +92,13 @@ module NotionRubyMapping
|
|
92
92
|
ans
|
93
93
|
end
|
94
94
|
|
95
|
+
## Page property only methods
|
96
|
+
|
97
|
+
def property_values_json
|
98
|
+
assert_page_property __method__
|
99
|
+
{}
|
100
|
+
end
|
101
|
+
|
95
102
|
protected
|
96
103
|
|
97
104
|
## Database property only methods
|
@@ -74,8 +74,8 @@ module NotionRubyMapping
|
|
74
74
|
# @param [String] name Property name
|
75
75
|
# @param [Hash] json
|
76
76
|
# @param [String] select String value (optional)
|
77
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, select: nil)
|
78
|
-
super name, will_update: will_update, base_type: base_type
|
77
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, select: nil, property_cache: nil)
|
78
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
79
79
|
@json = if database?
|
80
80
|
json || {"options" => []}
|
81
81
|
else
|
@@ -27,10 +27,10 @@ module NotionRubyMapping
|
|
27
27
|
# @param [String] name
|
28
28
|
# @param [Hash, Array] json
|
29
29
|
# @param [Array<RichTextObject>] text_objects
|
30
|
-
def initialize(name, will_update: false, base_type: :page, json: nil, text_objects: nil)
|
30
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, text_objects: nil, property_cache: nil, query: nil)
|
31
31
|
raise StandardError, "TextObject is abstract class. Please use RichTextProperty." if instance_of? TextProperty
|
32
32
|
|
33
|
-
super name, will_update: will_update, base_type: base_type
|
33
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache, query: query
|
34
34
|
@text_objects = if database?
|
35
35
|
json || {}
|
36
36
|
else
|
@@ -38,6 +38,13 @@ module NotionRubyMapping
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
# @return [FalseClass]
|
42
|
+
def clear_will_update
|
43
|
+
super
|
44
|
+
@text_objects.clear_will_update
|
45
|
+
false
|
46
|
+
end
|
47
|
+
|
41
48
|
# @return [TrueClass, FalseClass] will update?
|
42
49
|
def will_update
|
43
50
|
@will_update || page? && @text_objects.will_update
|
@@ -9,18 +9,30 @@ module NotionRubyMapping
|
|
9
9
|
|
10
10
|
## Common methods
|
11
11
|
|
12
|
+
def self.rich_text_array_from_json(json)
|
13
|
+
rich_text_objects = List.new(json: json, property: self).select { true }
|
14
|
+
RichTextArray.rich_text_array "title", rich_text_objects
|
15
|
+
end
|
16
|
+
|
12
17
|
# @param [Hash] json
|
13
18
|
def update_from_json(json)
|
14
19
|
@will_update = false
|
15
20
|
if database?
|
16
21
|
@json = json || {}
|
17
22
|
else
|
18
|
-
@text_objects =
|
23
|
+
@text_objects = TitleProperty.rich_text_array_from_json json
|
19
24
|
end
|
20
25
|
end
|
21
26
|
|
22
27
|
## Page property only methods
|
23
28
|
|
29
|
+
# @return [FalseClass]
|
30
|
+
def clear_will_update
|
31
|
+
super
|
32
|
+
@text_objects.clear_will_update
|
33
|
+
false
|
34
|
+
end
|
35
|
+
|
24
36
|
# @return [Hash] created json
|
25
37
|
def property_values_json
|
26
38
|
assert_page_property __method__
|
@@ -34,8 +34,8 @@ module NotionRubyMapping
|
|
34
34
|
## Common methods
|
35
35
|
|
36
36
|
# @param [String] name Property name
|
37
|
-
def initialize(name, will_update: false, base_type: :page, json: nil)
|
38
|
-
super name, will_update: will_update, base_type: base_type
|
37
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, property_cache: nil)
|
38
|
+
super name, will_update: will_update, base_type: base_type, property_cache: property_cache
|
39
39
|
@json = json || (database? ? {} : nil)
|
40
40
|
end
|
41
41
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notion_ruby_mapping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroyuki KOBAYASHI
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|