notionrb 1.3.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.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  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 +15 -0
  6. data/.github/workflows/rubocop.yml +17 -0
  7. data/.gitignore +7 -0
  8. data/.rspec +2 -0
  9. data/.rubocop.yml +55 -0
  10. data/.rubocop_todo.yml +86 -0
  11. data/CHANGELOG.md +144 -0
  12. data/CODE_OF_CONDUCT.md +128 -0
  13. data/CONTRIBUTING.md +51 -0
  14. data/Gemfile +4 -0
  15. data/Gemfile.lock +95 -0
  16. data/LICENSE.md +21 -0
  17. data/README.md +677 -0
  18. data/Rakefile +18 -0
  19. data/bin/console +31 -0
  20. data/lib/notion/api/endpoints/blocks.rb +100 -0
  21. data/lib/notion/api/endpoints/comments.rb +61 -0
  22. data/lib/notion/api/endpoints/data_sources.rb +102 -0
  23. data/lib/notion/api/endpoints/databases.rb +134 -0
  24. data/lib/notion/api/endpoints/pages.rb +95 -0
  25. data/lib/notion/api/endpoints/search.rb +41 -0
  26. data/lib/notion/api/endpoints/users.rb +48 -0
  27. data/lib/notion/api/endpoints.rb +23 -0
  28. data/lib/notion/api/error.rb +6 -0
  29. data/lib/notion/api/errors/internal_error.rb +12 -0
  30. data/lib/notion/api/errors/notion_error.rb +15 -0
  31. data/lib/notion/api/errors/too_many_requests.rb +15 -0
  32. data/lib/notion/api/errors.rb +23 -0
  33. data/lib/notion/client.rb +28 -0
  34. data/lib/notion/config.rb +54 -0
  35. data/lib/notion/faraday/connection.rb +37 -0
  36. data/lib/notion/faraday/request.rb +45 -0
  37. data/lib/notion/faraday/response/raise_error.rb +31 -0
  38. data/lib/notion/faraday/response/wrap_error.rb +22 -0
  39. data/lib/notion/logger.rb +14 -0
  40. data/lib/notion/messages/message.rb +17 -0
  41. data/lib/notion/pagination/cursor.rb +53 -0
  42. data/lib/notion/version.rb +5 -0
  43. data/lib/notion-ruby-client.rb +28 -0
  44. data/lib/notion.rb +2 -0
  45. data/lib/notion_ruby_client.rb +2 -0
  46. data/notionrb.gemspec +31 -0
  47. data/spec/fixtures/notion/block.yml +146 -0
  48. data/spec/fixtures/notion/block_append_children.yml +149 -0
  49. data/spec/fixtures/notion/block_children.yml +152 -0
  50. data/spec/fixtures/notion/create_data_source.yml +29 -0
  51. data/spec/fixtures/notion/create_database.yml +149 -0
  52. data/spec/fixtures/notion/create_discussion_comment.yml +110 -0
  53. data/spec/fixtures/notion/create_page.yml +152 -0
  54. data/spec/fixtures/notion/create_page_comment.yml +110 -0
  55. data/spec/fixtures/notion/create_page_with_data_source.yml +29 -0
  56. data/spec/fixtures/notion/create_page_with_parent_page.yml +128 -0
  57. data/spec/fixtures/notion/data_source.yml +27 -0
  58. data/spec/fixtures/notion/data_source_query.yml +29 -0
  59. data/spec/fixtures/notion/database.yml +150 -0
  60. data/spec/fixtures/notion/database_query.yml +154 -0
  61. data/spec/fixtures/notion/delete_block.yml +145 -0
  62. data/spec/fixtures/notion/page.yml +150 -0
  63. data/spec/fixtures/notion/page_property_item.yml +143 -0
  64. data/spec/fixtures/notion/paginated_block_children.yml +575 -0
  65. data/spec/fixtures/notion/paginated_data_source_query.yml +29 -0
  66. data/spec/fixtures/notion/paginated_database_query.yml +152 -0
  67. data/spec/fixtures/notion/paginated_databases_list.yml +150 -0
  68. data/spec/fixtures/notion/paginated_search.yml +301 -0
  69. data/spec/fixtures/notion/paginated_users_list.yml +146 -0
  70. data/spec/fixtures/notion/retrieve_comments.yml +106 -0
  71. data/spec/fixtures/notion/search.yml +160 -0
  72. data/spec/fixtures/notion/search_with_query.yml +152 -0
  73. data/spec/fixtures/notion/update_block.yml +148 -0
  74. data/spec/fixtures/notion/update_data_source.yml +29 -0
  75. data/spec/fixtures/notion/update_database.yml +152 -0
  76. data/spec/fixtures/notion/update_page.yml +152 -0
  77. data/spec/fixtures/notion/users.yml +145 -0
  78. data/spec/fixtures/notion/users_list.yml +146 -0
  79. data/spec/fixtures/notion/users_me.yml +144 -0
  80. data/spec/notion/api/endpoints/blocks_spec.rb +72 -0
  81. data/spec/notion/api/endpoints/comments_spec.rb +49 -0
  82. data/spec/notion/api/endpoints/data_sources_spec.rb +61 -0
  83. data/spec/notion/api/endpoints/databases_spec.rb +70 -0
  84. data/spec/notion/api/endpoints/pages_spec.rb +127 -0
  85. data/spec/notion/api/endpoints/search_spec.rb +26 -0
  86. data/spec/notion/api/endpoints/users_spec.rb +31 -0
  87. data/spec/notion/config_spec.rb +16 -0
  88. data/spec/notion/pagination/cursor_spec.rb +126 -0
  89. data/spec/notion/version_spec.rb +8 -0
  90. data/spec/spec_helper.rb +22 -0
  91. data/spec/support/token.rb +10 -0
  92. data/spec/support/vcr.rb +16 -0
  93. metadata +358 -0
@@ -0,0 +1,145 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.notion.com/v1/users/a8da8d30-c858-4c3d-87ad-3f2d477bd98d
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:57:02 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=2c791cc4-4602-40fd-af43-9cff38e3939f; Domain=www.notion.so;
127
+ Path=/; Expires=Wed, 07 May 2053 19:43:42 GMT; Secure
128
+ Etag:
129
+ - W/"112-+UfaDnQ0AQtnGmMk1mvOOgv2xyk"
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
+ - 6867a8cdc8493b49-CDG
140
+ body:
141
+ encoding: UTF-8
142
+ string: '{"object":"user","id":"a8da8d30-c858-4c3d-87ad-3f2d477bd98d","name":"Nicolas
143
+ 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"}}'
144
+ recorded_at: Sun, 29 Aug 2021 17:57:02 GMT
145
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,146 @@
1
+ ---
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.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
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
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Notion::Api::Endpoints::Blocks do
5
+ let(:client) { Notion::Client.new }
6
+ let(:block_id) { '32af3324-ba02-4516-ae88-5728a4d569f4' }
7
+ let(:children) do
8
+ [
9
+ {
10
+ 'object': 'block',
11
+ 'type': 'paragraph',
12
+ 'paragraph': {
13
+ 'rich_text': [
14
+ {
15
+ 'type': 'text',
16
+ 'text': {
17
+ 'content': 'Another children'
18
+ }
19
+ }
20
+ ]
21
+ }
22
+ }
23
+ ]
24
+ end
25
+
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
+
52
+ it 'children', vcr: { cassette_name: 'block_children' } do
53
+ response = client.block_children(block_id: block_id)
54
+ expect(response.results.length).to be >= 1
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'
57
+ end
58
+
59
+ it 'paginated children', vcr: { cassette_name: 'paginated_block_children' } do
60
+ children = []
61
+ client.block_children(block_id: block_id, page_size: 1) do |page|
62
+ children.concat page.results
63
+ end
64
+ expect(children.size).to be >= 1
65
+ end
66
+
67
+ it 'appends', vcr: { cassette_name: 'block_append_children' } do
68
+ response = client.block_append_children(block_id: block_id, children: children)
69
+ expect(response.results.first.type).to eql 'paragraph'
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Notion::Api::Endpoints::Comments do
5
+ let(:client) { Notion::Client.new }
6
+ let(:discussion_comment) do
7
+ {
8
+ discussion_id: 'ea116af4839c410bb4ac242a18dc4392',
9
+ rich_text: [
10
+ {
11
+ text: {
12
+ content: 'test comment'
13
+ }
14
+ }
15
+ ]
16
+ }
17
+ end
18
+ let(:page_comment) do
19
+ {
20
+ parent: { page_id: '3e4bc91d36c74de595113b31c6fdb82c' },
21
+ rich_text: [
22
+ {
23
+ text: {
24
+ content: 'test comment'
25
+ }
26
+ }
27
+ ]
28
+ }
29
+ end
30
+
31
+ describe '#retrieve_comments' do
32
+ it 'retrieves comments', vcr: { cassette_name: 'retrieve_comments' } do
33
+ response = client.retrieve_comments(block_id: '1a2f70ab26154dc7a838536a3f430af4')
34
+ expect(response.results.size).to eq 1
35
+ end
36
+ end
37
+
38
+ describe '#create_comment' do
39
+ it 'creates a comment on a page', vcr: { cassette_name: 'create_page_comment' } do
40
+ response = client.create_comment(page_comment)
41
+ expect(response.created_time).not_to be_empty
42
+ end
43
+
44
+ it 'creates a comment on a discussion', vcr: { cassette_name: 'create_discussion_comment' } do
45
+ response = client.create_comment(discussion_comment)
46
+ expect(response.created_time).not_to be_empty
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Notion::Api::Endpoints::DataSources do
5
+ let(:client) { Notion::Client.new }
6
+ let(:data_source_id) { '6a91c56ebc5e46699e34952e09ec53c0' }
7
+ let(:database_id) { '6a91c56ebc5e46699e34952e09ec53c0' }
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
24
+
25
+ context 'data sources' do
26
+ it 'queries', vcr: { cassette_name: 'data_source_query' } do
27
+ response = client.data_source_query(data_source_id: data_source_id)
28
+ expect(response.results.length).to be >= 1
29
+ end
30
+
31
+ it 'paginated queries', vcr: { cassette_name: 'paginated_data_source_query' } do
32
+ pages = []
33
+ client.data_source_query(data_source_id: data_source_id, page_size: 1) do |page|
34
+ pages.concat page.results
35
+ end
36
+ expect(pages.size).to be >= 1
37
+ end
38
+
39
+ it 'creates', vcr: { cassette_name: 'create_data_source' } do
40
+ response = client.create_data_source(
41
+ parent: { database_id: database_id },
42
+ title: title,
43
+ properties: properties
44
+ )
45
+ expect(response.title.first.plain_text).to eql 'Orbit 💜 Notion'
46
+ end
47
+
48
+ it 'updates', vcr: { cassette_name: 'update_data_source' } do
49
+ response = client.update_data_source(
50
+ data_source_id: data_source_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: 'data_source' } do
57
+ response = client.data_source(data_source_id: data_source_id)
58
+ expect(response.title.first.plain_text).to eql 'Orbit 💜 Notion'
59
+ end
60
+ end
61
+ end