notion_ruby_mapping 0.1.3 → 0.1.4
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 +238 -111
- data/lib/notion_ruby_mapping/base.rb +15 -2
- data/lib/notion_ruby_mapping/version.rb +1 -1
- 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: 5aef3ce3be5f734faf9803496c1196e715ad8513fbabc143abe43b4d4780a274
|
4
|
+
data.tar.gz: 1384fc70512cc6a396693fb7a37f8a80311bac85e26616a22ea8a5b3c491e28e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf783b7b53434fefb0f556a9f0fd17ca4dc4bac220e90bb609abf454a1e05ec0de37f4937998cd04fc34c037e87bea9ca3c454593a53a1a0de7998fea7009c9f
|
7
|
+
data.tar.gz: ea70aa30d1f9d082cab295320d79b4a975a67255fc61ce4956379e98ca4b4996093ac9e0b1c19e80815b233792be5ff5d29b50a49115d0d1e68461237dfefdfd
|
data/README.md
CHANGED
@@ -6,25 +6,41 @@ Development note is here. → [Idea note of "notion_ruby_mapping"](https://www.n
|
|
6
6
|
|
7
7
|
## Table of Contents
|
8
8
|
- [NotionRubyMapping](#notionrubymapping)
|
9
|
-
- [
|
10
|
-
- [
|
11
|
-
- [
|
12
|
-
|
13
|
-
- [Create
|
14
|
-
- [
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
- [
|
19
|
-
- [
|
20
|
-
- [
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
- [
|
25
|
-
- [
|
26
|
-
|
27
|
-
|
9
|
+
- [Table of Contents](#table-of-contents)
|
10
|
+
- [1. Installation](#1-installation)
|
11
|
+
- [2. Example code](#2-example-code)
|
12
|
+
- [3. Usage](#3-usage)
|
13
|
+
- [3.1 Create a New Integration](#31-create-a-new-integration)
|
14
|
+
- [3.2 Create client](#32-create-client)
|
15
|
+
- [3.3 Retrieve a database](#33-retrieve-a-database)
|
16
|
+
- [3.4 Retrieve a page](#34-retrieve-a-page)
|
17
|
+
- [3.5 Query a database](#35-query-a-database)
|
18
|
+
- [3.5.1 A simple example](#351-a-simple-example)
|
19
|
+
- [3.5.2 Property classes](#352-property-classes)
|
20
|
+
- [3.5.3 Query object generator of property objects](#353-query-object-generator-of-property-objects)
|
21
|
+
- [3.5.4 Complex conditions](#354-complex-conditions)
|
22
|
+
- [3.5.5 Sort criteria](#355-sort-criteria)
|
23
|
+
- [3.6 Access the database or page values and properties](#36-access-the-database-or-page-values-and-properties)
|
24
|
+
- [3.7 Set icon (Database / Page)](#37-set-icon-database--page)
|
25
|
+
- [3.8 Update page property values](#38-update-page-property-values)
|
26
|
+
- [3.8.1 Assign property and update it (fastest: one API call only)](#381-assign-property-and-update-it-fastest-one-api-call-only)
|
27
|
+
- [3.8.2 Update the loaded page (easy but slow: two API calls)](#382-update-the-loaded-page-easy-but-slow-two-api-calls)
|
28
|
+
- [3.8.3 Update the unloaded page with auto-load (easy but slow: two API calls)](#383-update-the-unloaded-page-with-auto-load-easy-but-slow-two-api-calls)
|
29
|
+
- [3.8.4 Explanation of how to update each property](#384-explanation-of-how-to-update-each-property)
|
30
|
+
- [3.8.4.1 NumberProperty](#3841-numberproperty)
|
31
|
+
- [3.8.4.2 SelectProperty](#3842-selectproperty)
|
32
|
+
- [3.8.4.3 MultiSelectProperty](#3843-multiselectproperty)
|
33
|
+
- [3.8.4.4 DateProperty](#3844-dateproperty)
|
34
|
+
- [3.9 Iteration of list object](#39-iteration-of-list-object)
|
35
|
+
- [4. ChangeLog](#4-changelog)
|
36
|
+
- [5. Contributing](#5-contributing)
|
37
|
+
- [6. License](#6-license)
|
38
|
+
- [7. Code of Conduct](#7-code-of-conduct)
|
39
|
+
- [8. Acknowledgements](#8-acknowledgements)
|
40
|
+
|
41
|
+
<!-- @import "[TOC]" {cmd="toc" depthFrom=2 depthTo=4 orderedList=false} -->
|
42
|
+
|
43
|
+
## 1. Installation
|
28
44
|
|
29
45
|
Add this line to your application's Gemfile:
|
30
46
|
|
@@ -40,7 +56,7 @@ Or install it yourself as:
|
|
40
56
|
|
41
57
|
$ gem install notion_ruby_mapping
|
42
58
|
|
43
|
-
## Example code
|
59
|
+
## 2. Example code
|
44
60
|
|
45
61
|
The following code sets a "💿" icon on all unset pages in the database.
|
46
62
|
```Ruby
|
@@ -74,45 +90,54 @@ end
|
|
74
90
|
|-----------------------------------------------|
|
75
91
|
|  |
|
76
92
|
|
77
|
-
## Usage
|
93
|
+
## 3. Usage
|
78
94
|
|
79
|
-
### Create a New Integration
|
95
|
+
### 3.1 Create a New Integration
|
80
96
|
|
81
97
|
Please check [Notion documentation](https://developers.notion.com/docs#getting-started).
|
82
98
|
|
83
|
-
### Create client
|
99
|
+
### 3.2 Create client
|
84
100
|
|
101
|
+
Please create a client (notion-ruby-client) before you use the following class.
|
85
102
|
```Ruby
|
86
103
|
NotionCache.instance.create_client ENV["NOTION_API_TOKEN"]
|
87
104
|
```
|
88
|
-
Please create a client (notion-ruby-client) before you use the following class.
|
89
105
|
|
90
|
-
###
|
106
|
+
### 3.3 Retrieve a database
|
91
107
|
|
92
|
-
|
108
|
+
Database.find(id) creates a Database object from the results of Notion API.
|
93
109
|
|
94
|
-
|
110
|
+
```Ruby
|
111
|
+
db = Database.find("c37a2c66-e3aa-4a0d-a447-73de3b80c253")
|
112
|
+
```
|
113
|
+
|
114
|
+
Database.new(id) creates a Database object without accessing to Notion.
|
115
|
+
If you want to retrieve the contents after creation, please use a `reload` method.
|
95
116
|
|
96
117
|
```Ruby
|
97
|
-
|
98
|
-
|
118
|
+
db = Database.new("c37a2c66-e3aa-4a0d-a447-73de3b80c253")
|
119
|
+
db.reload
|
99
120
|
```
|
100
121
|
|
101
|
-
|
122
|
+
### 3.4 Retrieve a page
|
123
|
+
|
124
|
+
Page.find(id) creates a Page object from the results of Notion API.
|
102
125
|
|
103
126
|
```Ruby
|
104
|
-
|
105
|
-
obj["icon"] # same as obj.icon
|
106
|
-
obj.properties["NumberTitle"]
|
127
|
+
page = Page.find("c01166c6-13ae-45cb-b968-18b4ef2f5a77")
|
107
128
|
```
|
108
129
|
|
109
|
-
|
130
|
+
Page.new(id) creates a Page object without accessing to Notion.
|
131
|
+
If you want to retrieve the contents after creation, please use a `reload` method.
|
110
132
|
|
111
|
-
- Retrieve a database
|
112
133
|
```Ruby
|
113
|
-
|
134
|
+
page = Page.new("c01166c6-13ae-45cb-b968-18b4ef2f5a77")
|
135
|
+
page.reload
|
114
136
|
```
|
115
|
-
|
137
|
+
|
138
|
+
### 3.5 Query a database
|
139
|
+
|
140
|
+
#### 3.5.1 A simple example
|
116
141
|
|
117
142
|
Gets a List object of Page objects contained in the database.
|
118
143
|
You can obtain filtered and ordered pages using Query object.
|
@@ -121,8 +146,6 @@ Database.query("c37a2c66-e3aa-4a0d-a447-73de3b80c253") # retrieves all pages
|
|
121
146
|
Database.query("c37a2c66-e3aa-4a0d-a447-73de3b80c253", query) # retrieves using query
|
122
147
|
```
|
123
148
|
|
124
|
-
#### Query class and related *Property class
|
125
|
-
|
126
149
|
Query object can be generated from the following Property objects.
|
127
150
|
For example, in order to obtain the pages whose title starts with "A" and ordered by ascending,
|
128
151
|
the following code can be used.
|
@@ -132,6 +155,35 @@ query = tp.filter_starts_with("A").ascending(tp)
|
|
132
155
|
pages = Database.query database_id, query
|
133
156
|
```
|
134
157
|
|
158
|
+
#### 3.5.2 Property classes
|
159
|
+
|
160
|
+
There are the following 17 XXXProperty classes corresponding to Notion databases.
|
161
|
+
They are child classes of a `Property` class
|
162
|
+
and these constructor method has a common form where the first argument is the property name.
|
163
|
+
```Ruby
|
164
|
+
xp = XXXProperty.new "property name"
|
165
|
+
```
|
166
|
+
|
167
|
+
1. TitleProperty
|
168
|
+
2. RichTextProperty
|
169
|
+
3. UrlProperty
|
170
|
+
4. EmailProperty
|
171
|
+
5. PhoneNumberProperty
|
172
|
+
6. NumberProperty
|
173
|
+
7. CheckboxProperty
|
174
|
+
8. SelectProperty
|
175
|
+
9. MultiSelectProperty
|
176
|
+
10. PeopleProperty
|
177
|
+
11. CreatedByProperty
|
178
|
+
12. LastEditedByProperty
|
179
|
+
13. DateProperty
|
180
|
+
14. CreatedTimeProperty
|
181
|
+
15. LastEditedTimeProperty
|
182
|
+
16. FilesProperty
|
183
|
+
17. FormulaProperty
|
184
|
+
|
185
|
+
#### 3.5.3 Query object generator of property objects
|
186
|
+
|
135
187
|
The following methods for the Property objects generate a query object.
|
136
188
|
- TitleProperty, RichTextProperty, UrlProperty, EmailProperty, PhoneNumberProperty
|
137
189
|
- filter_equals(value)
|
@@ -204,16 +256,19 @@ The following methods for the Property objects generate a query object.
|
|
204
256
|
- filter_is_empty
|
205
257
|
- filter_is_not_empty
|
206
258
|
|
259
|
+
#### 3.5.4 Complex conditions
|
207
260
|
Complex filters can be generated `and` / `or` methods.
|
261
|
+
Here are some sample scripts and the json parameters created from them.
|
262
|
+
|
208
263
|
```Ruby
|
209
|
-
# Prepare sample properties
|
264
|
+
# Prepare some sample properties
|
210
265
|
tp = TitleProperty.new "tp"
|
211
266
|
np = NumberProperty.new "np"
|
212
267
|
cp = CheckboxProperty.new "cp"
|
213
268
|
letp = LastEditedTimeProperty.new "letp"
|
214
269
|
```
|
215
270
|
|
216
|
-
- (A and B) filter
|
271
|
+
- query1: (A and B) filter
|
217
272
|
```Ruby
|
218
273
|
query1 = tp.filter_starts_with("start")
|
219
274
|
.and(np.filter_greater_than(100))
|
@@ -233,7 +288,7 @@ query1 = tp.filter_starts_with("start")
|
|
233
288
|
}
|
234
289
|
```
|
235
290
|
|
236
|
-
- (A and B and C) filter
|
291
|
+
- query2: (A and B and C) filter
|
237
292
|
```Ruby
|
238
293
|
query2 = tp.filter_starts_with("start")
|
239
294
|
.and(np.filter_greater_than(100))
|
@@ -258,7 +313,7 @@ query2 = tp.filter_starts_with("start")
|
|
258
313
|
}
|
259
314
|
```
|
260
315
|
|
261
|
-
- (A or B) filter
|
316
|
+
- query3: (A or B) filter
|
262
317
|
```Ruby
|
263
318
|
query3 = tp.filter_starts_with("start")
|
264
319
|
.or(np.filter_greater_than(100))
|
@@ -278,7 +333,7 @@ query3 = tp.filter_starts_with("start")
|
|
278
333
|
}
|
279
334
|
```
|
280
335
|
|
281
|
-
- (A or B or C) filter
|
336
|
+
- query4: (A or B or C) filter
|
282
337
|
```Ruby
|
283
338
|
query4 = tp.filter_starts_with("start")
|
284
339
|
.or(np.filter_greater_than(100))
|
@@ -303,7 +358,7 @@ query4 = tp.filter_starts_with("start")
|
|
303
358
|
}
|
304
359
|
```
|
305
360
|
|
306
|
-
- ((A and B) or C) filter
|
361
|
+
- query5: ((A and B) or C) filter
|
307
362
|
```Ruby
|
308
363
|
query5 = tp.filter_starts_with("start")
|
309
364
|
.and(np.filter_greater_than(100))
|
@@ -332,7 +387,7 @@ query5 = tp.filter_starts_with("start")
|
|
332
387
|
}
|
333
388
|
```
|
334
389
|
|
335
|
-
- ((A or B) and C) filter
|
390
|
+
- query6: ((A or B) and C) filter
|
336
391
|
```Ruby
|
337
392
|
query6 = tp.filter_starts_with("start")
|
338
393
|
.or(np.filter_greater_than(100))
|
@@ -361,7 +416,7 @@ query6 = tp.filter_starts_with("start")
|
|
361
416
|
}
|
362
417
|
```
|
363
418
|
|
364
|
-
- ((A and B) or (C and D)) filter
|
419
|
+
- query7: ((A and B) or (C and D)) filter
|
365
420
|
```Ruby
|
366
421
|
query7 = np.filter_greater_than(100).and(np.filter_less_than(200))
|
367
422
|
.or(np.filter_greater_than(300).and(np.filter_less_than(400)))
|
@@ -397,7 +452,11 @@ query7 = np.filter_greater_than(100).and(np.filter_less_than(200))
|
|
397
452
|
}
|
398
453
|
```
|
399
454
|
|
400
|
-
|
455
|
+
#### 3.5.5 Sort criteria
|
456
|
+
Sort criteria can be appended to an existing query object.
|
457
|
+
If you don't use the previous filters, you can generate by `Query.new`.
|
458
|
+
|
459
|
+
- sort criteria only
|
401
460
|
```Ruby
|
402
461
|
query8 = Query.new.ascending tp
|
403
462
|
query9 = Query.new.ascending letp
|
@@ -435,116 +494,184 @@ query13 = tp.filter_starts_with("A").ascending(tp)
|
|
435
494
|
[{"property" => "tp", "direction" => "ascending"}]
|
436
495
|
```
|
437
496
|
|
438
|
-
|
497
|
+
### 3.6 Access the database or page values and properties
|
498
|
+
|
499
|
+
Database or Page values can be accessed by [] access with keywords.
|
439
500
|
|
440
|
-
- Retrieve a page
|
441
501
|
```Ruby
|
442
|
-
|
502
|
+
obj["icon"]
|
503
|
+
```
|
504
|
+
|
505
|
+
Almost values returns a hash or an array object except "properties".
|
506
|
+
`obj["properties"]` or `obj.properties` returns a PropertyCache object.
|
507
|
+
The PropertyCache object is created from json information on the first access and is cached to the Page or Database object.
|
508
|
+
If page or database object is generated by `.new` method, the object don't have json information.
|
509
|
+
In this case, the `.properties` method calls `reload` method automatically, then it creates the PropertyCache object from the loaded json information (called auto-load function).
|
510
|
+
|
511
|
+
```Ruby
|
512
|
+
obj["properties"]
|
513
|
+
# or
|
514
|
+
obj.properties
|
515
|
+
```
|
516
|
+
|
517
|
+
Each Property object is obtained by [] access with the property name.
|
518
|
+
The Property object is also created on the first access and is cached to the PropertyCache object.
|
519
|
+
|
520
|
+
```Ruby
|
521
|
+
np = obj.properties["NumberTitle"]
|
522
|
+
```
|
523
|
+
|
524
|
+
## 3.7 Set icon (Database / Page)
|
525
|
+
|
526
|
+
Database or Page icon can update by `obj.set_icon` method.
|
527
|
+
You can set icon as emoji or external url.
|
528
|
+
|
529
|
+
```Ruby
|
530
|
+
obj.set_icon emoji: "💿" # set emoji
|
531
|
+
obj.set_icon url: "https://cdn.profile-image.st-hatena.com/users/hkob/profile.png" # set external url
|
443
532
|
```
|
444
533
|
|
445
|
-
|
534
|
+
## 3.8 Update page property values
|
446
535
|
|
447
536
|
Page properties can update in the following three ways.
|
448
537
|
|
449
|
-
|
538
|
+
### 3.8.1 Assign property and update it (fastest: one API call only)
|
539
|
+
|
540
|
+
This is the fastest way using an empty Page object.
|
541
|
+
`page.assign_property` generates an empty PropertyCache and an empty XXXProperty.
|
542
|
+
After updating the property value, please call `page.update`.
|
543
|
+
Notion API will be called using a JSON payload generated from the PropertyCache object.
|
544
|
+
|
450
545
|
```Ruby
|
451
546
|
page = Page.new id: page_id
|
452
|
-
|
453
|
-
|
547
|
+
property = page.assign_property NumberProperty, "NumberTitle"
|
548
|
+
property.number = 2022
|
454
549
|
page.update # update page API call
|
455
550
|
print page
|
456
551
|
```
|
457
552
|
|
458
|
-
|
553
|
+
### 3.8.2 Update the loaded page (easy but slow: two API calls)
|
554
|
+
|
555
|
+
This is an easiest way using a loaded Page object.
|
556
|
+
A PropertyCache object is automatically generated by `page.properties`.
|
557
|
+
After updating the property value, please call `page.update`.
|
558
|
+
Notion API will be called using a JSON payload generated from the PropertyCache object.
|
559
|
+
There are two API calls (find and update).
|
560
|
+
|
459
561
|
```Ruby
|
460
562
|
page = Page.find first_page_id # retrieve page API call
|
461
|
-
page.properties["NumberTitle"]
|
563
|
+
property = page.properties["NumberTitle"]
|
564
|
+
property.number = 2022
|
462
565
|
page.update # update page API call
|
463
566
|
print page
|
464
567
|
```
|
465
568
|
|
466
|
-
|
569
|
+
### 3.8.3 Update the unloaded page with auto-load (easy but slow: two API calls)
|
570
|
+
|
571
|
+
This is also an easiest way using an auto-load function of the Page object.
|
572
|
+
A PropertyCache object is automatically generated by `page.properties` using the auto-load function of page objects.
|
573
|
+
After updating the property value, please call `page.update`.
|
574
|
+
Notion API will be called using a JSON payload generated from the PropertyCache object.
|
575
|
+
There are also two API calls (find and update).
|
576
|
+
|
467
577
|
```Ruby
|
468
578
|
page = Page.new id: first_page_id
|
469
|
-
page.properties["NumberTitle"]
|
579
|
+
property = page.properties["NumberTitle"] # retrieve page API call (auto-load)
|
580
|
+
property.number = 12345
|
470
581
|
page.update # update page API call
|
471
582
|
print page
|
472
583
|
```
|
473
584
|
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
```
|
585
|
+
### 3.8.4 Explanation of how to update each property
|
586
|
+
|
587
|
+
#### 3.8.4.1 NumberProperty
|
478
588
|
|
479
|
-
|
589
|
+
NumberProperty can set a number by `.number=`.
|
480
590
|
|
481
|
-
- access for each components
|
482
591
|
```Ruby
|
483
|
-
|
484
|
-
|
485
|
-
|
592
|
+
np = page.properties["NumberTitle"]
|
593
|
+
np.number = 456
|
594
|
+
p np.create_json
|
595
|
+
# Result => {"number" => 456}
|
486
596
|
```
|
487
597
|
|
488
|
-
####
|
489
|
-
|
490
|
-
Not implemented
|
598
|
+
#### 3.8.4.2 SelectProperty
|
491
599
|
|
492
|
-
|
600
|
+
NumberProperty can set a select name by `.select=`.
|
493
601
|
|
494
|
-
- constructor
|
495
602
|
```Ruby
|
496
|
-
|
603
|
+
sp = page.properties["SelectTitle"]
|
604
|
+
sp.select = "Select 2"
|
605
|
+
p sp.create_json
|
606
|
+
# Result => {"select" => {"name" => "Select 2"}}
|
497
607
|
```
|
498
608
|
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
```
|
609
|
+
#### 3.8.4.3 MultiSelectProperty
|
610
|
+
|
611
|
+
MultiSelectProperty can set a select value or Array of select values by `.multi_select=`.
|
503
612
|
|
504
|
-
- create json
|
505
613
|
```Ruby
|
506
|
-
|
614
|
+
msp = page.properties["MultiSelectTitle"]
|
615
|
+
msp.select = "MS2"
|
616
|
+
p msp.create_json
|
617
|
+
# Result => {"multi_select" => [{"name" => "MS2"}]}
|
618
|
+
|
619
|
+
msp.multi_select = %w[MS2 MS1]
|
620
|
+
p msp.create_json
|
621
|
+
# Result => {"multi_select" => [{"name" => "MS2"}, {"name" => "MS1"}]}
|
507
622
|
```
|
508
623
|
|
509
|
-
####
|
624
|
+
#### 3.8.4.4 DateProperty
|
510
625
|
|
511
|
-
|
512
|
-
|
513
|
-
sp = SelectProperty.new "sp", select: "Select 1"
|
514
|
-
```
|
626
|
+
DateProperty can set a start_date or end_date by `.start_date=` or `end_date=`.
|
627
|
+
Date, Time, DateTime or String object can be used to the argument.
|
515
628
|
|
516
|
-
- set value
|
517
629
|
```Ruby
|
518
|
-
|
519
|
-
|
630
|
+
dp = page.properties["DateTitle"]
|
631
|
+
dp.start_date = Date.new(2022, 2, 22)
|
632
|
+
p dp.create_json
|
633
|
+
# Result => {"start" => "2022-02-22"}
|
520
634
|
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
```
|
635
|
+
dp.start_date = Time.new(2022, 2, 22, 1, 23, 45, "+09:00")
|
636
|
+
p dp.create_json
|
637
|
+
# Result => {"start" => "2022-02-22T01:23:45+09:00"}
|
525
638
|
|
526
|
-
|
639
|
+
dp.start_date = DateTime.new(2022, 2, 23, 1, 23, 45, "+09:00")
|
640
|
+
p dp.create_json
|
641
|
+
# Result => {"start" => "2022-02-23T01:23:45+09:00"}
|
527
642
|
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
```
|
643
|
+
dp.start_date = Date.new(2022, 2, 20)
|
644
|
+
dp.end_date = Date.new(2022, 2, 22)
|
645
|
+
p dp.create_json
|
646
|
+
# Result => {"start" => "2022-02-20", "end" => "2022-02-22"}
|
533
647
|
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
648
|
+
dp.start_date = Time.new(2022, 2, 21, 1, 23, 45, "+09:00")
|
649
|
+
dp.end_date = Time.new(2022, 2, 22, 1, 23, 45, "+09:00")
|
650
|
+
p dp.create_json
|
651
|
+
# Result => {"start" => "2022-02-21T01:23:45+09:00", "end" => "2022-02-22T01:23:45+09:00"}
|
652
|
+
|
653
|
+
dp.start_date = DateTime.new(2022, 2, 21, 1, 23, 45, "+09:00")
|
654
|
+
dp.end_date = DateTime.new(2022, 2, 22, 1, 23, 45, "+09:00")
|
655
|
+
p dp.create_json
|
656
|
+
# result => {"start" => "2022-02-21T01:23:45+09:00", "end" => "2022-02-22T01:23:45+09:00"}
|
538
657
|
```
|
539
658
|
|
540
|
-
|
659
|
+
### 3.9 Iteration of list object
|
660
|
+
|
661
|
+
Some methods like as `Database.query` return a list object.
|
662
|
+
Since the list object also has a json array object, `Enumerable` module is implemented.
|
663
|
+
Each iteration creates a Page or Block object and calls the block with it as an argument.
|
664
|
+
|
541
665
|
```Ruby
|
542
|
-
|
543
|
-
|
666
|
+
pages = Database.query("c37a2c66-e3aa-4a0d-a447-73de3b80c253") # retrieves all pages
|
667
|
+
pages.each do |page| # obj's class is Page or Block
|
668
|
+
page.set_icon(emoji: "💿") unless page["icon"]
|
669
|
+
end
|
544
670
|
```
|
545
671
|
|
546
|
-
## ChangeLog
|
672
|
+
## 4. ChangeLog
|
547
673
|
|
674
|
+
- 2022/2/25 add_property_for_update -> assign_property, update README.md
|
548
675
|
- 2022/2/20 add support for MultiSelectProperty
|
549
676
|
- 2022/2/19 add support for SelectProperty
|
550
677
|
- 2022/2/17 added Page#properties, Page#add_property_for_update, Page#update
|
@@ -554,18 +681,18 @@ msp2.create_json # {"multi_select" => [{"name" => "MS2"}]}
|
|
554
681
|
- 2022/2/13 added Page#set_icon
|
555
682
|
- 2022/2/13 First commit
|
556
683
|
|
557
|
-
## Contributing
|
684
|
+
## 5. Contributing
|
558
685
|
|
559
686
|
Bug reports and pull requests are welcome on GitHub at https://github.com/hkob/notion_ruby_mapping. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/notion_ruby_mapping/blob/main/CODE_OF_CONDUCT.md).
|
560
687
|
|
561
|
-
## License
|
688
|
+
## 6. License
|
562
689
|
|
563
690
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
564
691
|
|
565
|
-
## Code of Conduct
|
692
|
+
## 7. Code of Conduct
|
566
693
|
|
567
694
|
Everyone interacting in the NotionRubyMapping project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/notion_ruby_mapping/blob/main/CODE_OF_CONDUCT.md).
|
568
695
|
|
569
|
-
## Acknowledgements
|
696
|
+
## 8. Acknowledgements
|
570
697
|
|
571
|
-
The code depends on [notion-ruby-client](https://github.com/orbit-love/notion-ruby-client).
|
698
|
+
The code depends on [notion-ruby-client](https://github.com/orbit-love/notion-ruby-client).
|
@@ -91,7 +91,7 @@ module NotionRubyMapping
|
|
91
91
|
end
|
92
92
|
self
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
# @param [String] key
|
96
96
|
# @return [NotionRubyMapping::PropertyCache, Hash] obtained Page value or PropertyCache
|
97
97
|
def [](key)
|
@@ -116,10 +116,23 @@ module NotionRubyMapping
|
|
116
116
|
# @param [Property] property Property object for udpate or create
|
117
117
|
# @return [NotionRubyMapping::Base]
|
118
118
|
def add_property_for_update(property)
|
119
|
-
|
119
|
+
@property_cache ||= PropertyCache.new {}
|
120
|
+
@property_cache.add_property property, will_update: true
|
120
121
|
self
|
121
122
|
end
|
122
123
|
|
124
|
+
# @param [Class] klass
|
125
|
+
# @param [String] title
|
126
|
+
# @return [Property] generated property
|
127
|
+
def assign_property(klass, title)
|
128
|
+
@property_cache ||= PropertyCache.new {}
|
129
|
+
|
130
|
+
property = klass.new(title)
|
131
|
+
property.will_update = true
|
132
|
+
@property_cache.add_property property
|
133
|
+
property
|
134
|
+
end
|
135
|
+
|
123
136
|
# @return [Hash] created json
|
124
137
|
def create_json
|
125
138
|
payload.create_json @property_cache&.create_json
|
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.1.
|
4
|
+
version: 0.1.4
|
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-02-
|
11
|
+
date: 2022-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: notion-ruby-client
|