notion-ruby-client 0.0.7 → 1.0.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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/Dockerfile +5 -0
  3. data/.devcontainer/boot.sh +1 -0
  4. data/.devcontainer/devcontainer.json +30 -0
  5. data/.github/workflows/ci.yml +1 -0
  6. data/.gitignore +7 -0
  7. data/.rubocop.yml +9 -0
  8. data/CHANGELOG.md +42 -0
  9. data/CONTRIBUTING.md +51 -0
  10. data/Gemfile.lock +39 -12
  11. data/README.md +377 -79
  12. data/bin/console +31 -0
  13. data/lib/notion/api/endpoints/blocks.rb +51 -7
  14. data/lib/notion/api/endpoints/databases.rb +60 -31
  15. data/lib/notion/api/endpoints/pages.rb +25 -8
  16. data/lib/notion/api/endpoints/search.rb +41 -0
  17. data/lib/notion/api/endpoints/users.rb +14 -3
  18. data/lib/notion/api/endpoints.rb +3 -1
  19. data/lib/notion/api/errors/too_many_requests.rb +15 -0
  20. data/lib/notion/api/errors.rb +0 -2
  21. data/lib/notion/config.rb +2 -0
  22. data/lib/notion/pagination/cursor.rb +5 -2
  23. data/lib/notion/version.rb +2 -2
  24. data/lib/notion-ruby-client.rb +2 -0
  25. data/notion-ruby-client.gemspec +4 -2
  26. data/spec/fixtures/notion/block.yml +146 -0
  27. data/spec/fixtures/notion/block_append_children.yml +76 -62
  28. data/spec/fixtures/notion/block_children.yml +80 -65
  29. data/spec/fixtures/notion/create_database.yml +149 -0
  30. data/spec/fixtures/notion/create_page.yml +76 -61
  31. data/spec/fixtures/notion/database.yml +78 -61
  32. data/spec/fixtures/notion/database_query.yml +81 -62
  33. data/spec/fixtures/notion/delete_block.yml +145 -0
  34. data/spec/fixtures/notion/page.yml +78 -61
  35. data/spec/fixtures/notion/page_property_item.yml +143 -0
  36. data/spec/fixtures/notion/paginated_block_children.yml +296 -242
  37. data/spec/fixtures/notion/paginated_database_query.yml +79 -62
  38. data/spec/fixtures/notion/paginated_databases_list.yml +78 -61
  39. data/spec/fixtures/notion/paginated_search.yml +301 -0
  40. data/spec/fixtures/notion/paginated_users_list.yml +143 -130
  41. data/spec/fixtures/notion/search.yml +160 -0
  42. data/spec/fixtures/notion/search_with_query.yml +152 -0
  43. data/spec/fixtures/notion/update_block.yml +148 -0
  44. data/spec/fixtures/notion/update_database.yml +152 -0
  45. data/spec/fixtures/notion/update_page.yml +79 -63
  46. data/spec/fixtures/notion/users.yml +69 -56
  47. data/spec/fixtures/notion/users_list.yml +143 -130
  48. data/spec/fixtures/notion/users_me.yml +144 -0
  49. data/spec/notion/api/endpoints/blocks_spec.rb +44 -12
  50. data/spec/notion/api/endpoints/databases_spec.rb +38 -17
  51. data/spec/notion/api/endpoints/pages_spec.rb +21 -13
  52. data/spec/notion/api/endpoints/search_spec.rb +26 -0
  53. data/spec/notion/api/endpoints/users_spec.rb +9 -4
  54. data/spec/notion/pagination/cursor_spec.rb +126 -0
  55. metadata +73 -19
  56. data/.rspec_status +0 -18
  57. data/notion-ruby-client-0.0.4.gem +0 -0
  58. data/scratchpad.rb +0 -22
  59. data/screenshots/create_notion_bot.png +0 -0
  60. data/spec/fixtures/notion/databases_list.yml +0 -133
@@ -1,133 +1,146 @@
1
1
  ---
2
2
  http_interactions:
3
- - request:
4
- method: get
5
- uri: https://api.notion.com/v1/users
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- Accept:
11
- - application/json; charset=utf-8
12
- User-Agent:
13
- - Notion Ruby Client/0.0.4
14
- Authorization:
15
- - Bearer <NOTION_API_TOKEN>
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 200
21
- message: OK
22
- headers:
23
- Date:
24
- - Sun, 25 Apr 2021 21:00:06 GMT
25
- Content-Type:
26
- - application/json; charset=utf-8
27
- Transfer-Encoding:
28
- - chunked
29
- Connection:
30
- - keep-alive
31
- Set-Cookie:
32
- - __cfduid=d8bd1f2559197f7cbe522dc8d2a13cf771619384405; expires=Tue, 25-May-21
33
- 21:00:05 GMT; path=/; domain=.notion.com; HttpOnly; SameSite=Lax
34
- - notion_browser_id=a30325ff-c789-4096-a739-ba51b79eea5b; Domain=www.notion.so;
35
- Path=/; Expires=Wed, 01 Jan 2053 22:46:46 GMT; Secure
36
- X-Dns-Prefetch-Control:
37
- - 'off'
38
- X-Frame-Options:
39
- - SAMEORIGIN
40
- Strict-Transport-Security:
41
- - max-age=5184000; includeSubDomains
42
- X-Download-Options:
43
- - noopen
44
- X-Content-Type-Options:
45
- - nosniff
46
- X-Xss-Protection:
47
- - 1; mode=block
48
- Referrer-Policy:
49
- - same-origin
50
- Content-Security-Policy:
51
- - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
52
- https://apis.google.com https://api.amplitude.com https://widget.intercom.io
53
- https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
54
- https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
55
- https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
56
- https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
57
- connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
58
- ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
59
- https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
60
- https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
61
- https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
62
- https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
63
- https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
64
- https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
65
- font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
66
- img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
67
- https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
68
- ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
69
- https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
70
- media-src https: http:'
71
- X-Content-Security-Policy:
72
- - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
73
- https://apis.google.com https://api.amplitude.com https://widget.intercom.io
74
- https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
75
- https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
76
- https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
77
- https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
78
- connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
79
- ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
80
- https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
81
- https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
82
- https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
83
- https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
84
- https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
85
- https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
86
- font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
87
- img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
88
- https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
89
- ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
90
- https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
91
- media-src https: http:'
92
- X-Webkit-Csp:
93
- - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
94
- https://apis.google.com https://api.amplitude.com https://widget.intercom.io
95
- https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
96
- https://analytics.pgncs.notion.so https://checkout.stripe.com https://js.stripe.com/v3
97
- https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com
98
- https://cdn.syndication.twimg.com https://www.googletagmanager.com https://x.clearbitjs.com;
99
- connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
100
- ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com
101
- https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
102
- https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
103
- https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
104
- https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com
105
- https://js.stripe.com/v3 https://cdn.contentful.com https://preview.contentful.com
106
- https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io;
107
- font-src ''self'' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com;
108
- img-src ''self'' data: blob: https: https://platform.twitter.com https://syndication.twitter.com
109
- https://pbs.twimg.com https://ton.twimg.com www.googletagmanager.com; style-src
110
- ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
111
- https://platform.twitter.com https://ton.twimg.com; frame-src https: http:;
112
- media-src https: http:'
113
- Etag:
114
- - W/"2c7-9fGZ6Loa3izncqaW0AxZr7NvCPY"
115
- Vary:
116
- - Accept-Encoding
117
- Cf-Cache-Status:
118
- - DYNAMIC
119
- Cf-Request-Id:
120
- - '09ac6e27c800000853aea0c000000001'
121
- Expect-Ct:
122
- - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
123
- Server:
124
- - cloudflare
125
- Cf-Ray:
126
- - 645a7fb93dac0853-CDG
127
- body:
128
- encoding: UTF-8
129
- string: '{"object":"list","results":[{"object":"user","id":"7ee614aa-0542-421d-b8aa-b14adf120642","name":"Arthur
130
- Levoyer","avatar_url":"https://lh6.googleusercontent.com/-Y62UK1QjtV8/AAAAAAAAAAI/AAAAAAAAACk/3PgWyczXM8o/photo.jpg?sz=50","type":"person","person":{"email":"arthurl@bam.tech"}},{"object":"user","id":"a8da8d30-c858-4c3d-87ad-3f2d477bd98d","name":"Nicolas
131
- Goutay","avatar_url":"https://s3-us-west-2.amazonaws.com/public.notion-static.com/5f9b5c65-a7ed-4fc5-983a-6c999b7c2208/Copy_of_P1222454.jpg","type":"person","person":{"email":"nicolas@orbit.love"}},{"object":"user","id":"f2e67536-c037-4dd5-97f5-8ed9d23a4dbd","name":"LeBot","avatar_url":null,"type":"bot","bot":{}}],"next_cursor":null,"has_more":false}'
132
- recorded_at: Sun, 25 Apr 2021 21:00:06 GMT
3
+ - request:
4
+ method: get
5
+ uri: https://api.notion.com/v1/users
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ""
9
+ headers:
10
+ Accept:
11
+ - application/json; charset=utf-8
12
+ User-Agent:
13
+ - Notion Ruby Client/0.0.8
14
+ Authorization:
15
+ - Bearer <NOTION_API_TOKEN>
16
+ Notion-Version:
17
+ - "2022-02-22"
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Sun, 29 Aug 2021 17:54:19 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ X-Dns-Prefetch-Control:
34
+ - "off"
35
+ X-Frame-Options:
36
+ - SAMEORIGIN
37
+ Strict-Transport-Security:
38
+ - max-age=5184000; includeSubDomains
39
+ X-Download-Options:
40
+ - noopen
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Xss-Protection:
44
+ - 1; mode=block
45
+ Referrer-Policy:
46
+ - same-origin
47
+ Content-Security-Policy:
48
+ - "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com
49
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
50
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
51
+ https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com
52
+ https://js.stripe.com https://embed.typeform.com https://admin.typeform.com
53
+ https://public.profitwell.com js.sentry-cdn.com https://js.chilipiper.com
54
+ https://platform.twitter.com https://cdn.syndication.twimg.com https://www.googletagmanager.com
55
+ https://x.clearbitjs.com https://client-registry.mutinycdn.com https://client.mutinycdn.com/
56
+ https://user-data.mutinycdn.com; connect-src 'self' https://msgstore.www.notion.so
57
+ wss://msgstore.www.notion.so ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com
58
+ https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
59
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
60
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
61
+ https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so
62
+ https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com
63
+ https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com
64
+ https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com
65
+ https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io
66
+ https://user-data.mutinycdn.com https://api-v2.mutinyhq.io https://api.statuspage.io
67
+ https://pgncd.notion.so; font-src 'self' data: https://cdnjs.cloudflare.com
68
+ https://js.intercomcdn.com; img-src 'self' data: blob: https: https://platform.twitter.com
69
+ https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com
70
+ www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com
71
+ https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com
72
+ https://ton.twimg.com; frame-src https: http:; media-src https: http:"
73
+ X-Content-Security-Policy:
74
+ - "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com
75
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
76
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
77
+ https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com
78
+ https://js.stripe.com https://embed.typeform.com https://admin.typeform.com
79
+ https://public.profitwell.com js.sentry-cdn.com https://js.chilipiper.com
80
+ https://platform.twitter.com https://cdn.syndication.twimg.com https://www.googletagmanager.com
81
+ https://x.clearbitjs.com https://client-registry.mutinycdn.com https://client.mutinycdn.com/
82
+ https://user-data.mutinycdn.com; connect-src 'self' https://msgstore.www.notion.so
83
+ wss://msgstore.www.notion.so ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com
84
+ https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
85
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
86
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
87
+ https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so
88
+ https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com
89
+ https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com
90
+ https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com
91
+ https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io
92
+ https://user-data.mutinycdn.com https://api-v2.mutinyhq.io https://api.statuspage.io
93
+ https://pgncd.notion.so; font-src 'self' data: https://cdnjs.cloudflare.com
94
+ https://js.intercomcdn.com; img-src 'self' data: blob: https: https://platform.twitter.com
95
+ https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com
96
+ www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com
97
+ https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com
98
+ https://ton.twimg.com; frame-src https: http:; media-src https: http:"
99
+ X-Webkit-Csp:
100
+ - "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com
101
+ https://apis.google.com https://api.amplitude.com https://widget.intercom.io
102
+ https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com
103
+ https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com
104
+ https://js.stripe.com https://embed.typeform.com https://admin.typeform.com
105
+ https://public.profitwell.com js.sentry-cdn.com https://js.chilipiper.com
106
+ https://platform.twitter.com https://cdn.syndication.twimg.com https://www.googletagmanager.com
107
+ https://x.clearbitjs.com https://client-registry.mutinycdn.com https://client.mutinycdn.com/
108
+ https://user-data.mutinycdn.com; connect-src 'self' https://msgstore.www.notion.so
109
+ wss://msgstore.www.notion.so ws://localhost:* https://notion-emojis.s3-us-west-2.amazonaws.com
110
+ https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
111
+ https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com
112
+ https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com
113
+ https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so
114
+ https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com
115
+ https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com
116
+ https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com
117
+ https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io
118
+ https://user-data.mutinycdn.com https://api-v2.mutinyhq.io https://api.statuspage.io
119
+ https://pgncd.notion.so; font-src 'self' data: https://cdnjs.cloudflare.com
120
+ https://js.intercomcdn.com; img-src 'self' data: blob: https: https://platform.twitter.com
121
+ https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com
122
+ www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com
123
+ https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com
124
+ https://ton.twimg.com; frame-src https: http:; media-src https: http:"
125
+ Set-Cookie:
126
+ - notion_browser_id=785222cc-f76b-43b8-bc0c-dfb20063afb4; Domain=www.notion.so;
127
+ Path=/; Expires=Wed, 07 May 2053 19:40:59 GMT; Secure
128
+ Etag:
129
+ - W/"1adb-S6ZkF0qf8ZYoFRnEMre0eWAonCA"
130
+ Vary:
131
+ - Accept-Encoding
132
+ Cf-Cache-Status:
133
+ - DYNAMIC
134
+ Expect-Ct:
135
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
136
+ Server:
137
+ - cloudflare
138
+ Cf-Ray:
139
+ - 6867a4d52ed94055-CDG
140
+ body:
141
+ encoding: UTF-8
142
+ string:
143
+ '{"object":"list","results":[{"object":"user","id":"a8da8d30-c858-4c3d-87ad-3f2d477bd98d","name":"Nicolas
144
+ Goutay","avatar_url":"https://s3-us-west-2.amazonaws.com/public.notion-static.com/5f9b5c65-a7ed-4fc5-983a-6c999b7c2208/Copy_of_P1222454.jpg","type":"person","person":{"email":"nicolas@orbit.love"}}],"next_cursor":null,"has_more":false}'
145
+ recorded_at: Sun, 29 Aug 2021 17:54:19 GMT
133
146
  recorded_with: VCR 6.0.0
@@ -0,0 +1,144 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.notion.com/v1/users/me
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json; charset=utf-8
12
+ User-Agent:
13
+ - Notion Ruby Client/0.1.0-beta1
14
+ Authorization:
15
+ - Bearer <NOTION_API_TOKEN>
16
+ Notion-Version:
17
+ - '2021-08-16'
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Sun, 20 Mar 2022 16:51:32 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Set-Cookie:
34
+ - notion_browser_id=9756e0c2-e73b-43bd-8775-5e1f6541cbd1; Domain=www.notion.so;
35
+ Path=/; Expires=Mon, 20 Mar 2023 16:51:32 GMT; Secure
36
+ - notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Mon,
37
+ 21 Mar 2022 16:51:32 GMT; Secure
38
+ X-Dns-Prefetch-Control:
39
+ - 'off'
40
+ X-Frame-Options:
41
+ - SAMEORIGIN
42
+ Strict-Transport-Security:
43
+ - max-age=5184000; includeSubDomains
44
+ X-Download-Options:
45
+ - noopen
46
+ X-Content-Type-Options:
47
+ - nosniff
48
+ X-Xss-Protection:
49
+ - 1; mode=block
50
+ Referrer-Policy:
51
+ - same-origin
52
+ Content-Security-Policy:
53
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
54
+ https://apis.google.com https://cdn.amplitude.com https://api.amplitude.com
55
+ https://hkfxbbdzib.notion.so https://widget.intercom.io https://js.intercomcdn.com
56
+ https://logs-01.loggly.com https://cdn.segment.com https://analytics.pgncs.notion.so
57
+ https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com
58
+ https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com
59
+ js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com;
60
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
61
+ ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com
62
+ https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
63
+ https: http: https://cdn.amplitude.com https://api.amplitude.com https://hkfxbbdzib.notion.so
64
+ https://www.notion.so https://api.embed.ly https://js.intercomcdn.com https://api-iam.intercom.io
65
+ wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com https://cdn.segment.com
66
+ https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so
67
+ https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com
68
+ https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net
69
+ https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com
70
+ https://api.unsplash.com https://boards-api.greenhouse.io https://api.statuspage.io
71
+ https://pgncd.notion.so https://api.statsig.com; font-src ''self'' data: https://cdnjs.cloudflare.com
72
+ https://js.intercomcdn.com; img-src ''self'' data: blob: https: https://platform.twitter.com
73
+ https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com;
74
+ style-src ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
75
+ https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com;
76
+ frame-src https: http:; media-src https: http:'
77
+ X-Content-Security-Policy:
78
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
79
+ https://apis.google.com https://cdn.amplitude.com https://api.amplitude.com
80
+ https://hkfxbbdzib.notion.so https://widget.intercom.io https://js.intercomcdn.com
81
+ https://logs-01.loggly.com https://cdn.segment.com https://analytics.pgncs.notion.so
82
+ https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com
83
+ https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com
84
+ js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com;
85
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
86
+ ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com
87
+ https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
88
+ https: http: https://cdn.amplitude.com https://api.amplitude.com https://hkfxbbdzib.notion.so
89
+ https://www.notion.so https://api.embed.ly https://js.intercomcdn.com https://api-iam.intercom.io
90
+ wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com https://cdn.segment.com
91
+ https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so
92
+ https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com
93
+ https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net
94
+ https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com
95
+ https://api.unsplash.com https://boards-api.greenhouse.io https://api.statuspage.io
96
+ https://pgncd.notion.so https://api.statsig.com; font-src ''self'' data: https://cdnjs.cloudflare.com
97
+ https://js.intercomcdn.com; img-src ''self'' data: blob: https: https://platform.twitter.com
98
+ https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com;
99
+ style-src ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
100
+ https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com;
101
+ frame-src https: http:; media-src https: http:'
102
+ X-Webkit-Csp:
103
+ - 'script-src ''self'' ''unsafe-inline'' ''unsafe-eval'' https://gist.github.com
104
+ https://apis.google.com https://cdn.amplitude.com https://api.amplitude.com
105
+ https://hkfxbbdzib.notion.so https://widget.intercom.io https://js.intercomcdn.com
106
+ https://logs-01.loggly.com https://cdn.segment.com https://analytics.pgncs.notion.so
107
+ https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com
108
+ https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com
109
+ js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com;
110
+ connect-src ''self'' https://msgstore.www.notion.so wss://msgstore.www.notion.so
111
+ ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com
112
+ https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com
113
+ https: http: https://cdn.amplitude.com https://api.amplitude.com https://hkfxbbdzib.notion.so
114
+ https://www.notion.so https://api.embed.ly https://js.intercomcdn.com https://api-iam.intercom.io
115
+ wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com https://cdn.segment.com
116
+ https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so
117
+ https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com
118
+ https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net
119
+ https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com
120
+ https://api.unsplash.com https://boards-api.greenhouse.io https://api.statuspage.io
121
+ https://pgncd.notion.so https://api.statsig.com; font-src ''self'' data: https://cdnjs.cloudflare.com
122
+ https://js.intercomcdn.com; img-src ''self'' data: blob: https: https://platform.twitter.com
123
+ https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com;
124
+ style-src ''self'' ''unsafe-inline'' https://cdnjs.cloudflare.com https://github.githubassets.com
125
+ https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com;
126
+ frame-src https: http:; media-src https: http:'
127
+ Etag:
128
+ - W/"118-qIsZmpzR5IxZzL6qzKmaLGWv15M"
129
+ Vary:
130
+ - Accept-Encoding
131
+ Cf-Cache-Status:
132
+ - DYNAMIC
133
+ Expect-Ct:
134
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
135
+ Server:
136
+ - cloudflare
137
+ Cf-Ray:
138
+ - 6eeff3fabfe2e920-MRS
139
+ body:
140
+ encoding: UTF-8
141
+ string: '{"object":"user","id":"c1464b55-9bec-417d-9392-dc687623ab28","name":"Notion
142
+ to Orbit","avatar_url":"https://s3-us-west-2.amazonaws.com/public.notion-static.com/f744192d-2a9e-4154-9a1f-1204343d6b52/orbit-logo.png","type":"bot","bot":{"owner":{"type":"workspace","workspace":true}}}'
143
+ recorded_at: Sun, 20 Mar 2022 16:51:32 GMT
144
+ recorded_with: VCR 6.0.0
@@ -3,38 +3,70 @@ require 'spec_helper'
3
3
 
4
4
  RSpec.describe Notion::Api::Endpoints::Blocks do
5
5
  let(:client) { Notion::Client.new }
6
- let(:page_id) { '723578f1-6e51-450c-8ee1-09158c19fd4c' }
6
+ let(:block_id) { '32af3324-ba02-4516-ae88-5728a4d569f4' }
7
7
  let(:children) do
8
8
  [
9
9
  {
10
- "object": 'block',
11
- "type": 'heading_2',
12
- "heading_2": {
13
- "text": [{ "type": 'text', "text": { "content": 'Another Heading' } }]
10
+ 'object': 'block',
11
+ 'type': 'paragraph',
12
+ 'paragraph': {
13
+ 'rich_text': [
14
+ {
15
+ 'type': 'text',
16
+ 'text': {
17
+ 'content': 'Another children'
18
+ }
19
+ }
20
+ ]
14
21
  }
15
22
  }
16
23
  ]
17
24
  end
18
25
 
19
26
  context 'blocks' do
27
+ it 'retrieves', vcr: { cassette_name: 'block' } do
28
+ response = client.block(block_id: block_id)
29
+ expect(response).not_to be_empty
30
+ end
31
+
32
+ it 'updates', vcr: { cassette_name: 'update_block' } do
33
+ to_do = {
34
+ 'text': [
35
+ {
36
+ 'text': { 'content': 'A todo' }
37
+ }
38
+ ],
39
+ 'checked': true
40
+ }
41
+ to_do_block_id = '6e842658-eb3d-4ea9-9bbf-e86104151729'
42
+ response = client.update_block(block_id: to_do_block_id, 'to_do' => to_do)
43
+ expect(response.id).to eql to_do_block_id
44
+ end
45
+
46
+ it 'deletes', vcr: { cassette_name: 'delete_block' } do
47
+ block_id = '77b5d405a5e840229c70b7766d1e8c4b'
48
+ response = client.delete_block(block_id: block_id)
49
+ expect(response).not_to be_empty
50
+ end
51
+
20
52
  it 'children', vcr: { cassette_name: 'block_children' } do
21
- response = client.block_children(id: page_id)
53
+ response = client.block_children(block_id: block_id)
22
54
  expect(response.results.length).to be >= 1
23
- expect(response.results[0].heading_1.text.first.plain_text).to eql 'A Header'
24
- expect(response.results[1].paragraph.text.first.plain_text).to eql 'A paragraph'
55
+ expect(response.results[0].paragraph.rich_text.first.plain_text).to eql 'The first child'
56
+ expect(response.results[1].paragraph.rich_text.first.plain_text).to eql 'The second child'
25
57
  end
26
58
 
27
59
  it 'paginated children', vcr: { cassette_name: 'paginated_block_children' } do
28
60
  children = []
29
- client.block_children(id: page_id, page_size: 1) do |page|
61
+ client.block_children(block_id: block_id, page_size: 1) do |page|
30
62
  children.concat page.results
31
63
  end
32
64
  expect(children.size).to be >= 1
33
65
  end
34
66
 
35
67
  it 'appends', vcr: { cassette_name: 'block_append_children' } do
36
- response = client.block_append_children(id: page_id, children: children)
37
- expect(response.id).to eql page_id
68
+ response = client.block_append_children(block_id: block_id, children: children)
69
+ expect(response.results.first.type).to eql 'paragraph'
38
70
  end
39
71
  end
40
- end
72
+ end
@@ -3,38 +3,59 @@ require 'spec_helper'
3
3
 
4
4
  RSpec.describe Notion::Api::Endpoints::Databases do
5
5
  let(:client) { Notion::Client.new }
6
- let(:database_id) { '89b30a70-ce51-4646-ab4f-5fdcb1d5e76c' }
6
+ let(:database_id) { 'dd428e9dd3fe4171870da7a1902c748b' }
7
+ let(:page_id) { 'c7fd1abe811444eabe779632ea33e581' }
8
+ let(:title) do
9
+ [
10
+ {
11
+ "text": {
12
+ "content": 'Orbit 💜 Notion'
13
+ }
14
+ }
15
+ ]
16
+ end
17
+ let(:properties) do
18
+ {
19
+ "Name": {
20
+ "title": {}
21
+ }
22
+ }
23
+ end
7
24
 
8
25
  context 'databases' do
9
- it 'retrieves', vcr: { cassette_name: 'database' } do
10
- response = client.database(id: database_id)
11
- expect(response.title.first.plain_text).to eql 'A Notion database'
12
- end
13
-
14
26
  it 'queries', vcr: { cassette_name: 'database_query' } do
15
- response = client.database_query(id: database_id)
27
+ response = client.database_query(database_id: database_id)
16
28
  expect(response.results.length).to be >= 1
17
29
  end
18
30
 
19
31
  it 'paginated queries', vcr: { cassette_name: 'paginated_database_query' } do
20
32
  pages = []
21
- client.database_query(id: database_id, limit: 1) do |page|
33
+ client.database_query(database_id: database_id, page_size: 1) do |page|
22
34
  pages.concat page.results
23
35
  end
24
36
  expect(pages.size).to be >= 1
25
37
  end
26
38
 
27
- it 'lists', vcr: { cassette_name: 'databases_list' } do
28
- response = client.databases_list
29
- expect(response.results.length).to be >= 1
39
+ it 'creates', vcr: { cassette_name: 'create_database' } do
40
+ response = client.create_database(
41
+ parent: { page_id: page_id },
42
+ title: title,
43
+ properties: properties
44
+ )
45
+ expect(response.title.first.plain_text).to eql 'Orbit 💜 Notion'
30
46
  end
31
47
 
32
- it 'paginated lists', vcr: { cassette_name: 'paginated_databases_list' } do
33
- databases = []
34
- client.databases_list(limit: 1) do |page|
35
- databases.concat page.results
36
- end
37
- expect(databases.size).to be >= 1
48
+ it 'updates', vcr: { cassette_name: 'update_database' } do
49
+ response = client.update_database(
50
+ database_id: database_id,
51
+ title: title
52
+ )
53
+ expect(response.title.first.plain_text).to eql 'Orbit 💜 Notion'
54
+ end
55
+
56
+ it 'retrieves', vcr: { cassette_name: 'database' } do
57
+ response = client.database(database_id: database_id)
58
+ expect(response.title.first.plain_text).to eql 'Orbit 💜 Notion'
38
59
  end
39
60
  end
40
61
  end