notion-ruby-client 0.0.8 → 0.1.0.pre.beta1

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +1 -0
  3. data/.gitignore +7 -0
  4. data/.rubocop.yml +9 -0
  5. data/CHANGELOG.md +19 -0
  6. data/Gemfile.lock +29 -7
  7. data/README.md +245 -55
  8. data/bin/console +31 -0
  9. data/lib/notion/api/endpoints/blocks.rb +35 -7
  10. data/lib/notion/api/endpoints/databases.rb +65 -37
  11. data/lib/notion/api/endpoints/pages.rb +6 -6
  12. data/lib/notion/api/endpoints/search.rb +41 -0
  13. data/lib/notion/api/endpoints/users.rb +6 -3
  14. data/lib/notion/api/endpoints.rb +3 -1
  15. data/lib/notion/api/errors/too_many_requests.rb +15 -0
  16. data/lib/notion/api/errors.rb +0 -2
  17. data/lib/notion/config.rb +2 -0
  18. data/lib/notion/pagination/cursor.rb +5 -2
  19. data/lib/notion/version.rb +2 -2
  20. data/lib/notion-ruby-client.rb +2 -0
  21. data/notion-ruby-client.gemspec +3 -1
  22. data/spec/fixtures/notion/block.yml +146 -0
  23. data/spec/fixtures/notion/block_append_children.yml +76 -62
  24. data/spec/fixtures/notion/block_children.yml +80 -65
  25. data/spec/fixtures/notion/create_database.yml +67 -58
  26. data/spec/fixtures/notion/create_page.yml +68 -59
  27. data/spec/fixtures/notion/database.yml +78 -61
  28. data/spec/fixtures/notion/database_query.yml +81 -62
  29. data/spec/fixtures/notion/databases_list.yml +77 -60
  30. data/spec/fixtures/notion/page.yml +70 -57
  31. data/spec/fixtures/notion/paginated_block_children.yml +296 -242
  32. data/spec/fixtures/notion/paginated_database_query.yml +79 -62
  33. data/spec/fixtures/notion/paginated_databases_list.yml +78 -61
  34. data/spec/fixtures/notion/paginated_search.yml +301 -0
  35. data/spec/fixtures/notion/paginated_users_list.yml +143 -130
  36. data/spec/fixtures/notion/search.yml +160 -0
  37. data/spec/fixtures/notion/search_with_query.yml +152 -0
  38. data/spec/fixtures/notion/update_block.yml +148 -0
  39. data/spec/fixtures/notion/update_database.yml +152 -0
  40. data/spec/fixtures/notion/update_page.yml +71 -59
  41. data/spec/fixtures/notion/users.yml +69 -56
  42. data/spec/fixtures/notion/users_list.yml +143 -130
  43. data/spec/notion/api/endpoints/blocks_spec.rb +37 -11
  44. data/spec/notion/api/endpoints/databases_spec.rb +25 -17
  45. data/spec/notion/api/endpoints/pages_spec.rb +7 -16
  46. data/spec/notion/api/endpoints/search_spec.rb +26 -0
  47. data/spec/notion/api/endpoints/users_spec.rb +4 -4
  48. data/spec/notion/pagination/cursor_spec.rb +126 -0
  49. metadata +52 -8
  50. data/.rspec_status +0 -19
  51. data/notion-ruby-client-0.0.4.gem +0 -0
  52. data/scratchpad.rb +0 -22
  53. data/screenshots/create_notion_bot.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 819fe0911c48a9f09bb4a8e7c92b1c36f77fc61878944df6da74bfab0bd3a9cf
4
- data.tar.gz: 2c93279f5b48004a93b92e0a1268712472ac7e5534dcb57ab8003dd8507676ef
3
+ metadata.gz: a9b83ad4b81b6b52c55b8b65bf33f3075733116d91470d237d000a2428f933ea
4
+ data.tar.gz: f77c9065b91514bfd3acb7ab42c8a8916c022f6725918861ab5ffce47dedd2df
5
5
  SHA512:
6
- metadata.gz: 8d4a7d57457cdbb614eb9600b14e5f4460d0672631ff10f2525b87783f587ed251e4b3e3fc33d04420fe06cd086536b17acbfe008595a2f404cb513887365bdc
7
- data.tar.gz: ffdab9a3e8962cfd8f21fd75a274020eba721963d12b7cfbb010eff711e7b7ef7945b2763a8db6f75130f53dc2408e7eafb3f95b9d0e3281cbb2b041cfd57e19
6
+ metadata.gz: b080379a4840e4b925a6b7bcb5e4c5ea7a25a85856947281cc95eddcc718dd16bb14466d127fca2d2b02a028e4f5df62ea3225ac1a614057578144e43220288c
7
+ data.tar.gz: aebf1260e3c10c54abebf62259beb35ab0d4ad520c8f26de98a163ed26d5e1989b09ef3d2189622a0a9b34552ac0b0d0085c567d3cd3488fc4a788fd0ba082a9
@@ -1,4 +1,5 @@
1
1
  on: [push, pull_request]
2
+ name: Continuous Integration
2
3
  jobs:
3
4
  test:
4
5
  strategy:
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ .env
2
+ pkg
3
+ Gemfile.lock
4
+ .DS_Store
5
+ .bundle
6
+ .idea
7
+ .rspec_status
data/.rubocop.yml CHANGED
@@ -35,6 +35,15 @@ RSpec/ExampleLength:
35
35
  RSpec/MultipleExpectations:
36
36
  Enabled: false
37
37
 
38
+ RSpec/FilePath:
39
+ Enabled: false
40
+
41
+ RSpec/MessageSpies:
42
+ Enabled: false
43
+
44
+ RSpec/NestedGroups:
45
+ Max: 5
46
+
38
47
  Style/Documentation:
39
48
  Enabled: false
40
49
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ### 0.1.0-beta1 (2021-08-29)
2
+
3
+ #### New
4
+
5
+ - Add support for the following new endpoints:
6
+ - [Update database](https://developers.notion.com/reference/update-a-database)
7
+ - [Update page](https://developers.notion.com/reference/patch-page)
8
+ - [Retrieve a block](https://developers.notion.com/reference/retrieve-a-block)
9
+ - [Update a block](https://developers.notion.com/reference/update-a-block)
10
+ - [Search](https://developers.notion.com/reference/search)
11
+ - Update Notion API Version to `2021-08-16`
12
+ - Add `bin/console` command for better DX
13
+ - Overhauled documentation
14
+
15
+ #### Upgrade instructions
16
+
17
+ - Please refer to the Notion Changelog to see breaking changes for version `2021-08-16`
18
+ - Regarding this gem, a lot of `id` parameters got renamed to `block_id`, `page_id`, `user_id` and `database_id`. You might need to rename those in your code as well.
19
+
1
20
  ### 0.0.8 (2021-07-27)
2
21
 
3
22
  - Bump `Notion-Version` header to `2021-05-13` (@H0R15H0)
data/Gemfile.lock CHANGED
@@ -1,7 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- notion-ruby-client (0.0.8)
4
+ notion-ruby-client (0.1.0.pre.beta1)
5
+ activesupport
6
+ dotenv
5
7
  faraday (>= 1.0)
6
8
  faraday_middleware
7
9
  hashie
@@ -9,37 +11,54 @@ PATH
9
11
  GEM
10
12
  remote: http://rubygems.org/
11
13
  specs:
14
+ activesupport (6.1.4.1)
15
+ concurrent-ruby (~> 1.0, >= 1.0.2)
16
+ i18n (>= 1.6, < 2)
17
+ minitest (>= 5.1)
18
+ tzinfo (~> 2.0)
19
+ zeitwerk (~> 2.3)
12
20
  addressable (2.8.0)
13
21
  public_suffix (>= 2.0.2, < 5.0)
14
22
  ast (2.4.2)
23
+ concurrent-ruby (1.1.9)
15
24
  crack (0.4.5)
16
25
  rexml
17
26
  diff-lcs (1.4.4)
18
- faraday (1.4.2)
27
+ dotenv (2.7.6)
28
+ faraday (1.7.0)
19
29
  faraday-em_http (~> 1.0)
20
30
  faraday-em_synchrony (~> 1.0)
21
31
  faraday-excon (~> 1.1)
32
+ faraday-httpclient (~> 1.0.1)
22
33
  faraday-net_http (~> 1.0)
23
34
  faraday-net_http_persistent (~> 1.1)
35
+ faraday-patron (~> 1.0)
36
+ faraday-rack (~> 1.0)
24
37
  multipart-post (>= 1.2, < 3)
25
38
  ruby2_keywords (>= 0.0.4)
26
39
  faraday-em_http (1.0.0)
27
40
  faraday-em_synchrony (1.0.0)
28
41
  faraday-excon (1.1.0)
42
+ faraday-httpclient (1.0.1)
29
43
  faraday-net_http (1.0.1)
30
- faraday-net_http_persistent (1.1.0)
31
- faraday_middleware (1.0.0)
44
+ faraday-net_http_persistent (1.2.0)
45
+ faraday-patron (1.0.0)
46
+ faraday-rack (1.0.0)
47
+ faraday_middleware (1.1.0)
32
48
  faraday (~> 1.0)
33
49
  hashdiff (1.0.1)
34
50
  hashie (4.1.0)
51
+ i18n (1.8.10)
52
+ concurrent-ruby (~> 1.0)
35
53
  jaro_winkler (1.5.4)
54
+ minitest (5.14.4)
36
55
  multipart-post (2.1.1)
37
56
  parallel (1.20.1)
38
57
  parser (3.0.1.1)
39
58
  ast (~> 2.4.1)
40
59
  public_suffix (4.0.6)
41
60
  rainbow (3.0.0)
42
- rake (10.5.0)
61
+ rake (13.0.6)
43
62
  rexml (3.2.5)
44
63
  rspec (3.10.0)
45
64
  rspec-core (~> 3.10.0)
@@ -67,14 +86,17 @@ GEM
67
86
  rubocop-rspec (1.39.0)
68
87
  rubocop (>= 0.68.1)
69
88
  ruby-progressbar (1.11.0)
70
- ruby2_keywords (0.0.4)
89
+ ruby2_keywords (0.0.5)
71
90
  timecop (0.9.4)
91
+ tzinfo (2.0.4)
92
+ concurrent-ruby (~> 1.0)
72
93
  unicode-display_width (1.7.0)
73
94
  vcr (6.0.0)
74
95
  webmock (3.13.0)
75
96
  addressable (>= 2.3.6)
76
97
  crack (>= 0.3.2)
77
98
  hashdiff (>= 0.4.0, < 2.0.0)
99
+ zeitwerk (2.4.2)
78
100
 
79
101
  PLATFORMS
80
102
  arm64-darwin-20
@@ -82,7 +104,7 @@ PLATFORMS
82
104
 
83
105
  DEPENDENCIES
84
106
  notion-ruby-client!
85
- rake (~> 10)
107
+ rake (~> 13)
86
108
  rspec
87
109
  rubocop (~> 0.82.0)
88
110
  rubocop-performance (~> 1.5.2)
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Notion Ruby Client
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/notion-ruby-client.svg)](http://badge.fury.io/rb/notion-ruby-client)
4
+ [![CI workflow badge](https://github.com/orbit-love/notion-ruby-client/actions/workflows/ci.yml/badge.svg)](https://github.com/orbit-love/notion-ruby-client/actions/workflows/ci.yml)
5
+
3
6
  A Ruby client for the Notion API.
4
7
 
5
8
  ## Table of Contents
@@ -7,8 +10,28 @@ A Ruby client for the Notion API.
7
10
  - [Installation](#installation)
8
11
  - [Usage](#usage)
9
12
  - [Create a New Bot Integration](#create-a-new-bot-integration)
10
- - [Declare the API Token](#declare-the-api-token)
13
+ - [Declare the API token](#declare-the-api-token)
11
14
  - [API Client](#api-client)
15
+ - [Instantiating a new Notion API client](#instantiating-a-new-notion-api-client)
16
+ - [Pagination](#pagination)
17
+ - [Endpoints](#endpoints)
18
+ - [Databases](#databases)
19
+ - [Query a database](#query-a-database)
20
+ - [Create a Database](#create-a-database)
21
+ - [Retrieve a database](#retrieve-a-database)
22
+ - [List databases](#list-databases)
23
+ - [Pages](#pages)
24
+ - [Retrieve a page](#retrieve-a-page)
25
+ - [Create a page](#create-a-page)
26
+ - [Update page](#update-page)
27
+ - [Blocks](#blocks)
28
+ - [Retrieve block children](#retrieve-block-children)
29
+ - [Append block children](#append-block-children)
30
+ - [Users](#users)
31
+ - [Retrieve a user](#retrieve-a-user)
32
+ - [List all users](#list-all-users)
33
+ - [Search](#search)
34
+ - [Acknowledgements](#acknowledgements)
12
35
 
13
36
  ## Installation
14
37
 
@@ -22,15 +45,15 @@ Run `bundle install`.
22
45
 
23
46
  ## Usage
24
47
 
25
- ### Create a New Bot Integration
48
+ ### Create a New Integration
26
49
 
27
- To integrate your bot with Notion, you must first [create a new Notion Bot](https://www.notion.so/Getting-started-da32a6fc1bcc4403a6126ee735710d89).
50
+ > :blue_book: **Before you start**
51
+ >
52
+ > Make sure you are an **Admin** user in your Notion workspace. If you're not an Admin in your current workspace, [create a new personal workspace for free](https://www.notion.so/notion/Create-join-switch-workspaces-3b9be78982a940a7a27ce712ca6bdcf5#9332861c775543d0965f918924448a6d).
28
53
 
29
- 1. Log into the workspace that you want your integration to be associated with.
30
- 2. Confirm that you are an Admin in the workspace (see Settings & Members > Members).
31
- 3. Go to Settings & Members, and click API
54
+ To create a new integration, follow the steps 1 & 2 outlined in the [Notion documentation](https://developers.notion.com/docs#getting-started). The “_Internal Integration Token_” is what is going to be used to authenticate API calls (referred to here as the “API token”).
32
55
 
33
- ![A screenshot of the Notion page to create a bot](screenshots/create_notion_bot.png)
56
+ > :blue_book: Integrations don't have access to any pages (or databases) in the workspace at first. **A user must share specific pages with an integration in order for those pages to be accessed using the API.**
34
57
 
35
58
  ### Declare the API token
36
59
 
@@ -56,36 +79,46 @@ You can specify the token or logger on a per-client basis:
56
79
  client = Notion::Client.new(token: '<secret Notion API token>')
57
80
  ```
58
81
 
59
- #### Users
82
+ #### Pagination
60
83
 
61
- Get a paginated list of [User objects](https://www.notion.so/User-object-4f8d1a2fc1e54680b5f810ed0c6903a6) for the workspace:
84
+ The client natively supports [cursor pagination](https://developers.notion.com/reference/pagination) for methods that allow it, such as `users_list`. Supply a block and the client will make repeated requests adjusting the value of `start_cursor` with every response. The default page size is set to 100 (Notion’s current default and maximum) and can be adjusted via `Notion::Client.config.default_page_size` or by passing it directly into the API call.
62
85
 
63
86
  ```ruby
64
- client.users_list # retrieves the first page
65
-
66
- client.users_list(start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
67
-
68
- client.users_list do |page|
69
- # paginate through all users
87
+ all_users = []
88
+ client.users_list(page_size: 25) do |page|
89
+ all_users.concat(page.results)
70
90
  end
91
+ all_users # All users, retrieved 25 at a time
71
92
  ```
72
93
 
73
- Get a single User:
94
+ When using cursor pagination the client will automatically pause and then retry the request if it runs into [Notion rate limiting](https://developers.notion.com/reference/errors#request-limits). (It will pause for 10 seconds before retrying the request, a value that can be overriden with `Notion::Client.config.default_retry_after`.) If it receives too many rate-limited responses in a row it will give up and raise an error. The default number of retries is 100 and can be adjusted via `Notion::Client.config.default_max_retries` or by passing it directly into the method as `max_retries`.
95
+
96
+ You can also proactively avoid rate limiting by adding a pause between every paginated request with the `sleep_interval` parameter, which is given in seconds.
74
97
 
75
98
  ```ruby
76
- client.user(id: 'd40e767c-d7af-4b18-a86d-55c61f1e39a4')
99
+ all_users = []
100
+ client.users_list(sleep_interval: 5, max_retries: 20) do |page|
101
+ # pauses for 5 seconds between each request
102
+ # gives up after 20 consecutive rate-limited responses
103
+ all_users.concat(page.results)
104
+ end
105
+ all_users
77
106
  ```
78
107
 
79
- #### Databases
108
+ ## Endpoints
80
109
 
81
- Gets a paginated array of Page objects contained in the requested database, filtered and ordered according to the filter and sort references provided in the request.
110
+ ### Databases
111
+
112
+ #### Query a database
113
+
114
+ Gets a paginated array of [Page](https://developers.notion.com/reference/page) objects contained in the database, filtered and ordered according to the filter conditions and sort criteria provided in the request.
82
115
 
83
116
  ```ruby
84
- client.database_query(id: 'e383bcee-e0d8-4564-9c63-900d307abdb0') # retrieves the first page
117
+ client.database_query(database_id: 'e383bcee-e0d8-4564-9c63-900d307abdb0') # retrieves the first page
85
118
 
86
- client.database_query(id: 'e383bcee-e0d8-4564-9c63-900d307abdb0', start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
119
+ client.database_query(database_id: 'e383bcee-e0d8-4564-9c63-900d307abdb0', start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
87
120
 
88
- client.database_query((id: 'e383bcee-e0d8-4564-9c63-900d307abdb0') do |page|
121
+ client.database_query(database_id: 'e383bcee-e0d8-4564-9c63-900d307abdb0') do |page|
89
122
  # paginate through all pages
90
123
  end
91
124
 
@@ -112,28 +145,16 @@ filter = {
112
145
  }
113
146
  ]
114
147
  }
115
- client.database_query(id: 'e383bcee-e0d8-4564-9c63-900d307abdb0', sort: sort, filter: filter)
148
+ client.database_query(database_id: 'e383bcee-e0d8-4564-9c63-900d307abdb0', sort: sort, filter: filter)
116
149
  ```
117
150
 
118
- Get a single Database:
119
-
120
- ```ruby
121
- client.database(id: 'e383bcee-e0d8-4564-9c63-900d307abdb0')
122
- ```
151
+ See [Pagination](#pagination) for details about how to iterate through the list.
123
152
 
124
- Lists databases:
153
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/post-database-query).
125
154
 
126
- ```ruby
127
- client.databases_list # retrieves the first page
155
+ #### Create a Database
128
156
 
129
- client.databases_list(start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
130
-
131
- client.databases_list do |page|
132
- # paginate through all databases
133
- end
134
- ```
135
-
136
- Create a Database:
157
+ Creates a database as a subpage in the specified parent page, with the specified properties schema.
137
158
 
138
159
  ```ruby
139
160
  title = [
@@ -144,7 +165,7 @@ title = [
144
165
  "link": nil
145
166
  }
146
167
  }
147
- ],
168
+ ]
148
169
  properties = {
149
170
  "Name": {
150
171
  "title": {}
@@ -181,9 +202,76 @@ client.create_database(
181
202
  )
182
203
  ```
183
204
 
184
- #### Pages
205
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/create-a-database).
206
+
207
+ #### Update a Database
185
208
 
186
- Create a page:
209
+ Updates an existing database as specified by the parameters.
210
+
211
+ ```ruby
212
+ title = [
213
+ {
214
+ "text": {
215
+ "content": "Orbit 💜 Notion"
216
+ }
217
+ }
218
+ ]
219
+ client.update_database(database_id: 'dd428e9dd3fe4171870da7a1902c748b', title: title)
220
+ ```
221
+
222
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/update-a-database).
223
+
224
+ #### Retrieve a database
225
+
226
+ Retrieves a [Database object](https://developers.notion.com/reference-link/database) using the ID specified.
227
+
228
+ ```ruby
229
+ client.database(database_id: 'e383bcee-e0d8-4564-9c63-900d307abdb0')
230
+ ```
231
+
232
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/retrieve-a-database).
233
+
234
+ #### List databases
235
+
236
+ List all [Databases](https://developers.notion.com/reference-link/database) shared with the authenticated integration.
237
+
238
+ ```ruby
239
+ client.databases_list # retrieves the first page
240
+
241
+ client.databases_list(start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
242
+
243
+ client.databases_list do |page|
244
+ # paginate through all databases
245
+ end
246
+ ```
247
+
248
+ See [Pagination](#pagination) for details about how to iterate through the list.
249
+
250
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/list-databases).
251
+
252
+ ### Pages
253
+
254
+ #### Retrieve a page
255
+
256
+ Retrieves a [Page object](https://developers.notion.com/reference-link/page) using the ID specified.
257
+
258
+ > :blue_book: Responses contains page **properties**, not page content. To fetch page content, use the [retrieve block children](#retrieve-block-children) endpoint.
259
+
260
+ ```ruby
261
+ client.page(page_id: 'b55c9c91-384d-452b-81db-d1ef79372b75')
262
+ ```
263
+
264
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/retrieve-a-page).
265
+
266
+ #### Create a page
267
+
268
+ Creates a new page in the specified database or as a child of an existing page.
269
+
270
+ If the parent is a database, the [property values](https://developers.notion.com/reference-link/page-property-value) of the new page in the properties parameter must conform to the parent [database](https://developers.notion.com/reference-link/database)'s property schema.
271
+
272
+ If the parent is a page, the only valid property is `title`.
273
+
274
+ The new page may include page content, described as [blocks](https://developers.notion.com/reference-link/block) in the children parameter.
187
275
 
188
276
  ```ruby
189
277
  properties = {
@@ -241,36 +329,78 @@ client.create_page(
241
329
  )
242
330
  ```
243
331
 
244
- Retrieve a page:
332
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/post-page).
245
333
 
246
- ```ruby
247
- client.page(id: 'b55c9c91-384d-452b-81db-d1ef79372b75')
248
- ```
334
+ #### Update page
335
+
336
+ Updates [page property values](https://developers.notion.com/reference-link/page-property-value) for the specified page. Properties that are not set via the `properties` parameter will remain unchanged.
249
337
 
250
- Update page properties:
338
+ If the parent is a database, the new [property values](https://developers.notion.com/reference-link/page-property-value) in the `properties` parameter must conform to the parent [database](https://developers.notion.com/reference-link/database)'s property schema.
251
339
 
252
340
  ```ruby
253
341
  properties = {
254
342
  "In stock": true
255
343
  }
256
- client.update_page(id: 'b55c9c91-384d-452b-81db-d1ef79372b75', properties: properties)
344
+ client.update_page(page_id: 'b55c9c91-384d-452b-81db-d1ef79372b75', properties: properties)
345
+ ```
346
+
347
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/patch-page).
348
+
349
+ ### Blocks
350
+
351
+ #### Retrieve a block
352
+
353
+ Retrieves a [Block object](https://developers.notion.com/reference-link/block) using the ID specified.
354
+
355
+ > :blue_book: If a block contains the key `has_children: true`, use the [Retrieve block children](#retrieve-block-children) endpoint to get the list of children
356
+
357
+ ```ruby
358
+ client.block(block_id: '9bc30ad4-9373-46a5-84ab-0a7845ee52e6')
359
+ ```
360
+
361
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/retrieve-a-block).
362
+
363
+ #### Update a block
364
+
365
+ Updates the content for the specified block_id based on the block type. Supported fields based on the block object type (see [Block object](https://developers.notion.com/reference-link/block#block-type-object) for available fields and the expected input for each field).
366
+
367
+ **Note** The update replaces the entire value for a given field. If a field is omitted (ex: omitting checked when updating a to_do block), the value will not be changed.
368
+
369
+ ```ruby
370
+ to_do = {
371
+ 'text': [{
372
+ 'text': { 'content': 'Lacinato kale' }
373
+ }],
374
+ 'checked': false
375
+ }
376
+ client.update_block(block_id: '9bc30ad4-9373-46a5-84ab-0a7845ee52e6', 'to_do' => to_do)
257
377
  ```
258
378
 
259
- #### Blocks
379
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/retrieve-a-block).
260
380
 
261
- Retrieve children Block objects at the requested path:
381
+ #### Retrieve block children
382
+
383
+ Returns a paginated array of child [block objects](https://developers.notion.com/reference-link/block) contained in the block using the ID specified. In order to receive a complete representation of a block, you may need to recursively retrieve the block children of child blocks.
262
384
 
263
385
  ```ruby
264
- client.block_children(id: 'b55c9c91-384d-452b-81db-d1ef79372b75')
386
+ client.block_children(block_id: 'b55c9c91-384d-452b-81db-d1ef79372b75')
265
387
 
266
- client.block_children(start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
388
+ client.block_children(block_id: 'b55c9c91-384d-452b-81db-d1ef79372b75', start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
267
389
 
268
- client.block_children_list do |page|
390
+ client.block_children(block_id: 'b55c9c91-384d-452b-81db-d1ef79372b75') do |page|
269
391
  # paginate through all children
270
392
  end
271
393
  ```
272
394
 
273
- Creates and appends new children blocks to the parent block in the requested path:
395
+ See [Pagination](#pagination) for details about how to iterate through the list.
396
+
397
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/get-block-children).
398
+
399
+ #### Append block children
400
+
401
+ Creates and appends new children blocks to the parent block specified by `block_id`.
402
+
403
+ Returns a paginated list of newly created first level children block objects.
274
404
 
275
405
  ```ruby
276
406
  children = [
@@ -282,5 +412,65 @@ children = [
282
412
  }
283
413
  }
284
414
  ]
285
- client.block_append_children(id: 'b55c9c91-384d-452b-81db-d1ef79372b75', children: children)
415
+ client.block_append_children(block_id: 'b55c9c91-384d-452b-81db-d1ef79372b75', children: children)
416
+ ```
417
+
418
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/patch-block-children).
419
+
420
+ ### Users
421
+
422
+ #### Retrieve a user
423
+
424
+ Retrieves a [User](https://developers.notion.com/reference/user) using the ID specified.
425
+
426
+ ```ruby
427
+ client.user(user_id: 'd40e767c-d7af-4b18-a86d-55c61f1e39a4')
428
+ ```
429
+
430
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/get-user).
431
+
432
+ #### List all users
433
+
434
+ Returns a paginated list of [Users](https://developers.notion.com/reference/user) for the workspace.
435
+
436
+ ```ruby
437
+ client.users_list # retrieves the first page
438
+
439
+ client.users_list(start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
440
+
441
+ client.users_list do |page|
442
+ # paginate through all users
443
+ end
444
+ ```
445
+
446
+ See [Pagination](#pagination) for details about how to iterate through the list.
447
+
448
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/get-users).
449
+
450
+ ### Search
451
+
452
+ Searches all pages and child pages that are shared with the integration. The results may include databases.
453
+
454
+ ```ruby
455
+ client.search # search through every available page and database
456
+
457
+ client.search(query: 'Specific query') # limits which pages are returned by comparing the query to the page title
458
+
459
+ client.search(filter: { property: 'object', value: 'page' }) # only returns pages
460
+
461
+ client.search(sort: { direction: 'ascending', timestamp: 'last_edited_time' }) # sorts the results based on the provided criteria.
462
+
463
+ client.search(start_cursor: 'fe2cc560-036c-44cd-90e8-294d5a74cebc')
464
+
465
+ client.search do |page|
466
+ # paginate through all search pages
467
+ end
286
468
  ```
469
+
470
+ See [Pagination](#pagination) for details about how to iterate through the list.
471
+
472
+ See the full endpoint documentation on [Notion Developers](https://developers.notion.com/reference/post-search).
473
+
474
+ ## Acknowledgements
475
+
476
+ The code, specs and documentation of this gem are an adaptation of the fantastic [Slack Ruby Client](https://github.com/slack-ruby/slack-ruby-client) gem. Many thanks to its author and maintainer [@dblock](https://github.com/dblock) and [contributors](https://github.com/slack-ruby/slack-ruby-client/graphs/contributors).