notion-client-ruby 0.1.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 (92) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +8 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +95 -0
  5. data/Rakefile +120 -0
  6. data/benchmark/load.rb +9 -0
  7. data/benchmark/objects.rb +14 -0
  8. data/codegen/generator.rb +277 -0
  9. data/codegen/naming.yml +61 -0
  10. data/codegen/openapi.json +47206 -0
  11. data/codegen/openapi.lock +1 -0
  12. data/codegen/overrides.yml +14 -0
  13. data/docs/design.md +7 -0
  14. data/docs/recipes/csv-import.md +14 -0
  15. data/docs/recipes/oauth.md +9 -0
  16. data/docs/recipes/page-sync.md +10 -0
  17. data/docs/recipes/pagination.md +9 -0
  18. data/docs/recipes/uploads.md +9 -0
  19. data/docs/recipes/webhooks.md +28 -0
  20. data/lib/generators/notion/install_generator.rb +15 -0
  21. data/lib/generators/notion/templates/notion.rb +5 -0
  22. data/lib/notion/batch.rb +45 -0
  23. data/lib/notion/blocks/builder.rb +57 -0
  24. data/lib/notion/blocks/chunker.rb +70 -0
  25. data/lib/notion/blocks.rb +4 -0
  26. data/lib/notion/client.rb +138 -0
  27. data/lib/notion/compat/legacy.rb +47 -0
  28. data/lib/notion/compat.rb +94 -0
  29. data/lib/notion/config.rb +88 -0
  30. data/lib/notion/endpoints/async_tasks.rb +26 -0
  31. data/lib/notion/endpoints/base.rb +107 -0
  32. data/lib/notion/endpoints/blocks.rb +39 -0
  33. data/lib/notion/endpoints/data_sources.rb +30 -0
  34. data/lib/notion/endpoints/file_uploads.rb +35 -0
  35. data/lib/notion/endpoints/pages.rb +56 -0
  36. data/lib/notion/endpoints/views.rb +16 -0
  37. data/lib/notion/errors.rb +111 -0
  38. data/lib/notion/experimental.rb +12 -0
  39. data/lib/notion/file_uploader.rb +142 -0
  40. data/lib/notion/generated/endpoints/agents.rb +64 -0
  41. data/lib/notion/generated/endpoints/async_tasks.rb +20 -0
  42. data/lib/notion/generated/endpoints/blocks.rb +49 -0
  43. data/lib/notion/generated/endpoints/comments.rb +48 -0
  44. data/lib/notion/generated/endpoints/custom_emojis.rb +20 -0
  45. data/lib/notion/generated/endpoints/data_sources.rb +49 -0
  46. data/lib/notion/generated/endpoints/databases.rb +34 -0
  47. data/lib/notion/generated/endpoints/file_uploads.rb +51 -0
  48. data/lib/notion/generated/endpoints/meeting_notes.rb +27 -0
  49. data/lib/notion/generated/endpoints/oauth.rb +34 -0
  50. data/lib/notion/generated/endpoints/pages.rb +65 -0
  51. data/lib/notion/generated/endpoints/search.rb +20 -0
  52. data/lib/notion/generated/endpoints/sessions.rb +48 -0
  53. data/lib/notion/generated/endpoints/users.rb +34 -0
  54. data/lib/notion/generated/endpoints/views.rb +73 -0
  55. data/lib/notion/generated.rb +41 -0
  56. data/lib/notion/id.rb +14 -0
  57. data/lib/notion/markdown/local_converter.rb +34 -0
  58. data/lib/notion/middleware/api_version.rb +18 -0
  59. data/lib/notion/middleware/authentication.rb +52 -0
  60. data/lib/notion/middleware/compatibility.rb +17 -0
  61. data/lib/notion/middleware/instrumentation.rb +63 -0
  62. data/lib/notion/middleware/json_codec.rb +37 -0
  63. data/lib/notion/middleware/logging.rb +36 -0
  64. data/lib/notion/middleware/rate_limiter.rb +78 -0
  65. data/lib/notion/middleware/retry.rb +45 -0
  66. data/lib/notion/middleware/stack.rb +20 -0
  67. data/lib/notion/middleware.rb +11 -0
  68. data/lib/notion/multipart.rb +39 -0
  69. data/lib/notion/oauth.rb +91 -0
  70. data/lib/notion/object_factory.rb +39 -0
  71. data/lib/notion/objects/base.rb +62 -0
  72. data/lib/notion/objects/list.rb +56 -0
  73. data/lib/notion/objects/property_schema.rb +57 -0
  74. data/lib/notion/objects/property_value.rb +56 -0
  75. data/lib/notion/objects/types.rb +56 -0
  76. data/lib/notion/objects.rb +8 -0
  77. data/lib/notion/pagination/cursor_paginator.rb +25 -0
  78. data/lib/notion/query/builder.rb +117 -0
  79. data/lib/notion/query.rb +3 -0
  80. data/lib/notion/railtie.rb +11 -0
  81. data/lib/notion/resolver.rb +72 -0
  82. data/lib/notion/testing.rb +45 -0
  83. data/lib/notion/transport/net_http_adapter.rb +90 -0
  84. data/lib/notion/transport.rb +21 -0
  85. data/lib/notion/version.rb +5 -0
  86. data/lib/notion/webhooks/event.rb +7 -0
  87. data/lib/notion/webhooks/rack_middleware.rb +43 -0
  88. data/lib/notion/webhooks/signature.rb +22 -0
  89. data/lib/notion/webhooks.rb +7 -0
  90. data/lib/notion-client-ruby.rb +3 -0
  91. data/lib/notion.rb +53 -0
  92. metadata +132 -0
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Blocks < Notion::Endpoints::Base
9
+ operation :retrieve, :get, "/v1/blocks/{block_id}", path: ["block_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
10
+ operation :update, :patch, "/v1/blocks/{block_id}", path: ["block_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
11
+ operation :delete, :delete, "/v1/blocks/{block_id}", path: ["block_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
12
+ operation :children, :get, "/v1/blocks/{block_id}/children", path: ["block_id"], query: ["start_cursor", "page_size"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
13
+ operation :append_children, :patch, "/v1/blocks/{block_id}/children", path: ["block_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["children"], variants: [["children"]], enums: {}, max_lengths: {} }
14
+
15
+ # Retrieve a block
16
+ # @see https://developers.notion.com/reference/retrieve-a-block
17
+ def retrieve(block_id:, **params, &block)
18
+ params[:block_id] = block_id
19
+ invoke_operation(:retrieve, params, &block)
20
+ end
21
+ # Update a block
22
+ # @see https://developers.notion.com/reference/update-a-block
23
+ def update(block_id:, **params, &block)
24
+ params[:block_id] = block_id
25
+ invoke_operation(:update, params, &block)
26
+ end
27
+ # Delete a block
28
+ # @see https://developers.notion.com/reference/delete-a-block
29
+ def delete(block_id:, **params, &block)
30
+ params[:block_id] = block_id
31
+ invoke_operation(:delete, params, &block)
32
+ end
33
+ # Retrieve block children
34
+ # @see https://developers.notion.com/reference/get-block-children
35
+ def children(block_id:, **params, &block)
36
+ params[:block_id] = block_id
37
+ invoke_operation(:children, params, &block)
38
+ end
39
+ # Append block children
40
+ # @see https://developers.notion.com/reference/patch-block-children
41
+ def append_children(block_id:, children:, **params, &block)
42
+ params[:block_id] = block_id
43
+ params[:children] = children
44
+ invoke_operation(:append_children, params, &block)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Comments < Notion::Endpoints::Base
9
+ operation :create, :post, "/v1/comments", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [["parent", "rich_text"], ["parent", "markdown"], ["discussion_id", "rich_text"], ["discussion_id", "markdown"]], enums: {}, max_lengths: {} }
10
+ operation :list, :get, "/v1/comments", path: [], query: ["block_id", "start_cursor", "page_size"], query_rules: { required: ["block_id"], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
11
+ operation :retrieve, :get, "/v1/comments/{comment_id}", path: ["comment_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
12
+ operation :update, :patch, "/v1/comments/{comment_id}", path: ["comment_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [["rich_text"], ["markdown"]], enums: {}, max_lengths: {} }
13
+ operation :delete, :delete, "/v1/comments/{comment_id}", path: ["comment_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
14
+
15
+ # Create a comment
16
+ # @see https://developers.notion.com/reference/create-a-comment
17
+ def create(**params, &block)
18
+
19
+ invoke_operation(:create, params, &block)
20
+ end
21
+ # List comments
22
+ # @see https://developers.notion.com/reference/list-comments
23
+ def list(block_id:, **params, &block)
24
+ params[:block_id] = block_id
25
+ invoke_operation(:list, params, &block)
26
+ end
27
+ # Retrieve a comment
28
+ # @see https://developers.notion.com/reference/retrieve-comment
29
+ def retrieve(comment_id:, **params, &block)
30
+ params[:comment_id] = comment_id
31
+ invoke_operation(:retrieve, params, &block)
32
+ end
33
+ # Update a comment
34
+ # @see https://developers.notion.com/reference/update-a-comment
35
+ def update(comment_id:, **params, &block)
36
+ params[:comment_id] = comment_id
37
+ invoke_operation(:update, params, &block)
38
+ end
39
+ # Delete a comment
40
+ # @see https://developers.notion.com/reference/delete-a-comment
41
+ def delete(comment_id:, **params, &block)
42
+ params[:comment_id] = comment_id
43
+ invoke_operation(:delete, params, &block)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class CustomEmojis < Notion::Endpoints::Base
9
+ operation :list, :get, "/v1/custom_emojis", path: [], query: ["start_cursor", "page_size", "name"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
10
+
11
+ # List custom emojis
12
+ # @see https://developers.notion.com/reference/list-custom-emojis
13
+ def list(**params, &block)
14
+
15
+ invoke_operation(:list, params, &block)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class DataSources < Notion::Endpoints::Base
9
+ operation :retrieve, :get, "/v1/data_sources/{data_source_id}", path: ["data_source_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
10
+ operation :update, :patch, "/v1/data_sources/{data_source_id}", path: ["data_source_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
11
+ operation :query, :post, "/v1/data_sources/{data_source_id}/query", path: ["data_source_id"], query: ["filter_properties"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {"result_type" => ["page", "data_source"]}, max_lengths: {} }
12
+ operation :create, :post, "/v1/data_sources", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["parent", "properties"], variants: [["parent", "properties"]], enums: {}, max_lengths: {} }
13
+ operation :templates, :get, "/v1/data_sources/{data_source_id}/templates", path: ["data_source_id"], query: ["name", "start_cursor", "page_size"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
14
+
15
+ # Retrieve a data source
16
+ # @see https://developers.notion.com/reference/retrieve-a-data-source
17
+ def retrieve(data_source_id:, **params, &block)
18
+ params[:data_source_id] = data_source_id
19
+ invoke_operation(:retrieve, params, &block)
20
+ end
21
+ # Update a data source
22
+ # @see https://developers.notion.com/reference/update-a-data-source
23
+ def update(data_source_id:, **params, &block)
24
+ params[:data_source_id] = data_source_id
25
+ invoke_operation(:update, params, &block)
26
+ end
27
+ # Query a data source
28
+ # @see https://developers.notion.com/reference/post-database-query
29
+ def query(data_source_id:, **params, &block)
30
+ params[:data_source_id] = data_source_id
31
+ invoke_operation(:query, params, &block)
32
+ end
33
+ # Create a data source
34
+ # @see https://developers.notion.com/reference/create-a-database
35
+ def create(parent:, properties:, **params, &block)
36
+ params[:parent] = parent
37
+ params[:properties] = properties
38
+ invoke_operation(:create, params, &block)
39
+ end
40
+ # List templates in a data source
41
+ # @see https://developers.notion.com/reference/list-data-source-templates
42
+ def templates(data_source_id:, **params, &block)
43
+ params[:data_source_id] = data_source_id
44
+ invoke_operation(:templates, params, &block)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Databases < Notion::Endpoints::Base
9
+ operation :retrieve, :get, "/v1/databases/{database_id}", path: ["database_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
10
+ operation :update, :patch, "/v1/databases/{database_id}", path: ["database_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
11
+ operation :create, :post, "/v1/databases", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["parent"], variants: [["parent"]], enums: {}, max_lengths: {} }
12
+
13
+ # Retrieve a database
14
+ # @see https://developers.notion.com/reference/retrieve-database
15
+ def retrieve(database_id:, **params, &block)
16
+ params[:database_id] = database_id
17
+ invoke_operation(:retrieve, params, &block)
18
+ end
19
+ # Update a database
20
+ # @see https://developers.notion.com/reference/update-database
21
+ def update(database_id:, **params, &block)
22
+ params[:database_id] = database_id
23
+ invoke_operation(:update, params, &block)
24
+ end
25
+ # Create a database
26
+ # @see https://developers.notion.com/reference/create-database
27
+ def create(parent:, **params, &block)
28
+ params[:parent] = parent
29
+ invoke_operation(:create, params, &block)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class FileUploads < Notion::Endpoints::Base
9
+ operation :create, :post, "/v1/file_uploads", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {"mode" => ["single_part", "multi_part", "external_url"]}, max_lengths: {} }
10
+ operation :list, :get, "/v1/file_uploads", path: [], query: ["status", "start_cursor", "page_size"], query_rules: { required: [], enums: {"status" => ["pending", "uploaded", "expired", "failed"]}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
11
+ operation :send, :post, "/v1/file_uploads/{file_upload_id}/send", path: ["file_upload_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["data", "filename", "content_type"], variants: [["data", "filename", "content_type"]], enums: {}, max_lengths: {} }
12
+ operation :complete, :post, "/v1/file_uploads/{file_upload_id}/complete", path: ["file_upload_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
13
+ operation :retrieve, :get, "/v1/file_uploads/{file_upload_id}", path: ["file_upload_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
14
+
15
+ # Create a file upload
16
+ # @see https://developers.notion.com/reference/create-file
17
+ def create(**params, &block)
18
+
19
+ invoke_operation(:create, params, &block)
20
+ end
21
+ # List file uploads
22
+ # @see https://developers.notion.com/reference/list-file-uploads
23
+ def list(**params, &block)
24
+
25
+ invoke_operation(:list, params, &block)
26
+ end
27
+ # Upload a file
28
+ # @see https://developers.notion.com/reference/upload-file
29
+ def send(file_upload_id:, data:, filename:, content_type:, **params, &block)
30
+ params[:file_upload_id] = file_upload_id
31
+ params[:data] = data
32
+ params[:filename] = filename
33
+ params[:content_type] = content_type
34
+ invoke_operation(:send, params, &block)
35
+ end
36
+ # Complete a multi-part file upload
37
+ # @see https://developers.notion.com/reference/complete-file-upload
38
+ def complete(file_upload_id:, **params, &block)
39
+ params[:file_upload_id] = file_upload_id
40
+ invoke_operation(:complete, params, &block)
41
+ end
42
+ # Retrieve a file upload
43
+ # @see https://developers.notion.com/reference/retrieve-file-upload
44
+ def retrieve(file_upload_id:, **params, &block)
45
+ params[:file_upload_id] = file_upload_id
46
+ invoke_operation(:retrieve, params, &block)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class MeetingNotes < Notion::Endpoints::Base
9
+ operation :create, :post, "/v1/blocks/meeting_notes", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["source"], variants: [["source", "parent"], ["source"]], enums: {"language" => ["auto", "en", "zh-CN", "zh-TW", "es", "fr", "de", "ja", "ko", "pt", "ru", "th", "vi", "id", "da", "fi", "no", "nl", "it", "sv", "ar", "he", "pl"]}, max_lengths: {"title" => 2000} }
10
+ operation :query, :post, "/v1/blocks/meeting_notes/query", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
11
+
12
+ # Create a meeting note
13
+ # @see https://developers.notion.com/reference/create-meeting-note
14
+ def create(source:, **params, &block)
15
+ params[:source] = source
16
+ invoke_operation(:create, params, &block)
17
+ end
18
+ # Query meeting notes
19
+ # @see https://developers.notion.com/reference/query-meeting-notes
20
+ def query(**params, &block)
21
+
22
+ invoke_operation(:query, params, &block)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Oauth < Notion::Endpoints::Base
9
+ operation :token, :post, "/v1/oauth/token", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["grant_type"], variants: [["grant_type", "code"], ["grant_type", "refresh_token"]], enums: {}, max_lengths: {} }
10
+ operation :revoke, :post, "/v1/oauth/revoke", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["token"], variants: [["token"]], enums: {}, max_lengths: {} }
11
+ operation :introspect, :post, "/v1/oauth/introspect", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["token"], variants: [["token"]], enums: {}, max_lengths: {} }
12
+
13
+ # Exchange an authorization code for an access and refresh token
14
+ # @see https://developers.notion.com/reference/create-a-token
15
+ def token(grant_type:, **params, &block)
16
+ params[:grant_type] = grant_type
17
+ invoke_operation(:token, params, &block)
18
+ end
19
+ # Revoke a token
20
+ # @see https://developers.notion.com/reference/revoke-token
21
+ def revoke(token:, **params, &block)
22
+ params[:token] = token
23
+ invoke_operation(:revoke, params, &block)
24
+ end
25
+ # Introspect a token
26
+ # @see https://developers.notion.com/reference/introspect-token
27
+ def introspect(token:, **params, &block)
28
+ params[:token] = token
29
+ invoke_operation(:introspect, params, &block)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Pages < Notion::Endpoints::Base
9
+ operation :create, :post, "/v1/pages", path: [], query: ["filter_properties"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["parent"], variants: [["parent"]], enums: {}, max_lengths: {} }
10
+ operation :retrieve, :get, "/v1/pages/{page_id}", path: ["page_id"], query: ["filter_properties"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
11
+ operation :update, :patch, "/v1/pages/{page_id}", path: ["page_id"], query: ["filter_properties"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
12
+ operation :move, :post, "/v1/pages/{page_id}/move", path: ["page_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["parent"], variants: [["parent"]], enums: {}, max_lengths: {} }
13
+ operation :retrieve_property, :get, "/v1/pages/{page_id}/properties/{property_id}", path: ["page_id", "property_id"], query: ["start_cursor", "page_size"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
14
+ operation :markdown, :get, "/v1/pages/{page_id}/markdown", path: ["page_id"], query: ["include_transcript"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
15
+ operation :update_markdown, :patch, "/v1/pages/{page_id}/markdown", path: ["page_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["type"], variants: [["type", "insert_content"], ["type", "replace_content_range"], ["type", "update_content"], ["type", "replace_content"]], enums: {}, max_lengths: {} }
16
+
17
+ # Create a page
18
+ # @see https://developers.notion.com/reference/post-page
19
+ def create(parent:, **params, &block)
20
+ params[:parent] = parent
21
+ invoke_operation(:create, params, &block)
22
+ end
23
+ # Retrieve a page
24
+ # @see https://developers.notion.com/reference/retrieve-a-page
25
+ def retrieve(page_id:, **params, &block)
26
+ params[:page_id] = page_id
27
+ invoke_operation(:retrieve, params, &block)
28
+ end
29
+ # Update page
30
+ # @see https://developers.notion.com/reference/patch-page
31
+ def update(page_id:, **params, &block)
32
+ params[:page_id] = page_id
33
+ invoke_operation(:update, params, &block)
34
+ end
35
+ # Move a page
36
+ # @see https://developers.notion.com/reference/move-page
37
+ def move(page_id:, parent:, **params, &block)
38
+ params[:page_id] = page_id
39
+ params[:parent] = parent
40
+ invoke_operation(:move, params, &block)
41
+ end
42
+ # Retrieve a page property item
43
+ # @see https://developers.notion.com/reference/retrieve-a-page-property
44
+ def retrieve_property(page_id:, property_id:, **params, &block)
45
+ params[:page_id] = page_id
46
+ params[:property_id] = property_id
47
+ invoke_operation(:retrieve_property, params, &block)
48
+ end
49
+ # Retrieve a page as markdown
50
+ # @see https://developers.notion.com/reference/retrieve-page-markdown
51
+ def markdown(page_id:, **params, &block)
52
+ params[:page_id] = page_id
53
+ invoke_operation(:markdown, params, &block)
54
+ end
55
+ # Update a page's content as markdown
56
+ # @see https://developers.notion.com/reference/update-page-markdown
57
+ def update_markdown(page_id:, type:, **params, &block)
58
+ params[:page_id] = page_id
59
+ params[:type] = type
60
+ invoke_operation(:update_markdown, params, &block)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Search < Notion::Endpoints::Base
9
+ operation :search, :post, "/v1/search", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
10
+
11
+ # Search by title
12
+ # @see https://developers.notion.com/reference/post-search
13
+ def search(**params, &block)
14
+
15
+ invoke_operation(:search, params, &block)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Sessions < Notion::Endpoints::Base
9
+ operation :update, :post, "/v1/sessions", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [["message"], ["session_id", "actions"], ["session_id", "continue_from"]], enums: {}, max_lengths: {} }
10
+ operation :retrieve, :get, "/v1/sessions/{session_id}", path: ["session_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
11
+ operation :query, :post, "/v1/sessions/query", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {"query" => 2000} }
12
+ operation :events, :post, "/v1/sessions/{session_id}/events/query", path: ["session_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
13
+ operation :cancel, :post, "/v1/sessions/{session_id}/cancel", path: ["session_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
14
+
15
+ # Update a session
16
+ # @see https://developers.notion.com/reference/notion-agent-apis/update-session
17
+ def update(**params, &block)
18
+
19
+ invoke_operation(:update, params, &block)
20
+ end
21
+ # Retrieve a session
22
+ # @see https://developers.notion.com/reference/notion-agent-apis/retrieve-session
23
+ def retrieve(session_id:, **params, &block)
24
+ params[:session_id] = session_id
25
+ invoke_operation(:retrieve, params, &block)
26
+ end
27
+ # Query sessions
28
+ # @see https://developers.notion.com/reference/notion-agent-apis/query-sessions
29
+ def query(**params, &block)
30
+
31
+ invoke_operation(:query, params, &block)
32
+ end
33
+ # Query session events
34
+ # @see https://developers.notion.com/reference/notion-agent-apis/query-session-events
35
+ def events(session_id:, **params, &block)
36
+ params[:session_id] = session_id
37
+ invoke_operation(:events, params, &block)
38
+ end
39
+ # Cancel a session
40
+ # @see https://developers.notion.com/reference/notion-agent-apis/cancel-session
41
+ def cancel(session_id:, **params, &block)
42
+ params[:session_id] = session_id
43
+ invoke_operation(:cancel, params, &block)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Users < Notion::Endpoints::Base
9
+ operation :me, :get, "/v1/users/me", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
10
+ operation :retrieve, :get, "/v1/users/{user_id}", path: ["user_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
11
+ operation :list, :get, "/v1/users", path: [], query: ["start_cursor", "page_size"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
12
+
13
+ # Retrieve your token's bot user
14
+ # @see https://developers.notion.com/reference/get-self
15
+ def me(**params, &block)
16
+
17
+ invoke_operation(:me, params, &block)
18
+ end
19
+ # Retrieve a user
20
+ # @see https://developers.notion.com/reference/get-user
21
+ def retrieve(user_id:, **params, &block)
22
+ params[:user_id] = user_id
23
+ invoke_operation(:retrieve, params, &block)
24
+ end
25
+ # List all users
26
+ # @see https://developers.notion.com/reference/get-users
27
+ def list(**params, &block)
28
+
29
+ invoke_operation(:list, params, &block)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ module Notion
6
+ module Generated
7
+ module Endpoints
8
+ class Views < Notion::Endpoints::Base
9
+ operation :list, :get, "/v1/views", path: [], query: ["database_id", "data_source_id", "start_cursor", "page_size"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
10
+ operation :create, :post, "/v1/views", path: [], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: ["data_source_id", "name", "type"], variants: [["data_source_id", "name", "type"]], enums: {"type" => ["table", "board", "list", "calendar", "timeline", "gallery", "form", "chart", "map", "dashboard"]}, max_lengths: {} }
11
+ operation :retrieve, :get, "/v1/views/{view_id}", path: ["view_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
12
+ operation :update, :patch, "/v1/views/{view_id}", path: ["view_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
13
+ operation :delete, :delete, "/v1/views/{view_id}", path: ["view_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
14
+ operation :create_query, :post, "/v1/views/{view_id}/queries", path: ["view_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: true, required: [], variants: [], enums: {}, max_lengths: {} }
15
+ operation :query_results, :get, "/v1/views/{view_id}/queries/{query_id}", path: ["view_id", "query_id"], query: ["start_cursor", "page_size"], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
16
+ operation :delete_query, :delete, "/v1/views/{view_id}/queries/{query_id}", path: ["view_id", "query_id"], query: [], query_rules: { required: [], enums: {}, max_lengths: {} }, body_rules: { send_empty: false, required: [], variants: [], enums: {}, max_lengths: {} }
17
+
18
+ # List views
19
+ # @see https://developers.notion.com/reference/list-views
20
+ def list(**params, &block)
21
+
22
+ invoke_operation(:list, params, &block)
23
+ end
24
+ # Create a view
25
+ # @see https://developers.notion.com/reference/create-view
26
+ def create(data_source_id:, name:, type:, **params, &block)
27
+ params[:data_source_id] = data_source_id
28
+ params[:name] = name
29
+ params[:type] = type
30
+ invoke_operation(:create, params, &block)
31
+ end
32
+ # Retrieve a view
33
+ # @see https://developers.notion.com/reference/retrieve-a-view
34
+ def retrieve(view_id:, **params, &block)
35
+ params[:view_id] = view_id
36
+ invoke_operation(:retrieve, params, &block)
37
+ end
38
+ # Update a view
39
+ # @see https://developers.notion.com/reference/update-a-view
40
+ def update(view_id:, **params, &block)
41
+ params[:view_id] = view_id
42
+ invoke_operation(:update, params, &block)
43
+ end
44
+ # Delete a view
45
+ # @see https://developers.notion.com/reference/delete-view
46
+ def delete(view_id:, **params, &block)
47
+ params[:view_id] = view_id
48
+ invoke_operation(:delete, params, &block)
49
+ end
50
+ # Create a view query
51
+ # @see https://developers.notion.com/reference/create-view-query
52
+ def create_query(view_id:, **params, &block)
53
+ params[:view_id] = view_id
54
+ invoke_operation(:create_query, params, &block)
55
+ end
56
+ # Get view query results
57
+ # @see https://developers.notion.com/reference/get-view-query-results
58
+ def query_results(view_id:, query_id:, **params, &block)
59
+ params[:view_id] = view_id
60
+ params[:query_id] = query_id
61
+ invoke_operation(:query_results, params, &block)
62
+ end
63
+ # Delete a view query
64
+ # @see https://developers.notion.com/reference/delete-view-query
65
+ def delete_query(view_id:, query_id:, **params, &block)
66
+ params[:view_id] = view_id
67
+ params[:query_id] = query_id
68
+ invoke_operation(:delete_query, params, &block)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is generated. DO NOT EDIT.
4
+
5
+ require_relative "generated/endpoints/agents"
6
+ require_relative "generated/endpoints/async_tasks"
7
+ require_relative "generated/endpoints/blocks"
8
+ require_relative "generated/endpoints/comments"
9
+ require_relative "generated/endpoints/custom_emojis"
10
+ require_relative "generated/endpoints/data_sources"
11
+ require_relative "generated/endpoints/databases"
12
+ require_relative "generated/endpoints/file_uploads"
13
+ require_relative "generated/endpoints/meeting_notes"
14
+ require_relative "generated/endpoints/oauth"
15
+ require_relative "generated/endpoints/pages"
16
+ require_relative "generated/endpoints/search"
17
+ require_relative "generated/endpoints/sessions"
18
+ require_relative "generated/endpoints/users"
19
+ require_relative "generated/endpoints/views"
20
+
21
+ module Notion
22
+ module Generated
23
+ RESOURCES = {
24
+ agents: Endpoints::Agents,
25
+ async_tasks: Endpoints::AsyncTasks,
26
+ blocks: Endpoints::Blocks,
27
+ comments: Endpoints::Comments,
28
+ custom_emojis: Endpoints::CustomEmojis,
29
+ data_sources: Endpoints::DataSources,
30
+ databases: Endpoints::Databases,
31
+ file_uploads: Endpoints::FileUploads,
32
+ meeting_notes: Endpoints::MeetingNotes,
33
+ oauth: Endpoints::Oauth,
34
+ pages: Endpoints::Pages,
35
+ search: Endpoints::Search,
36
+ sessions: Endpoints::Sessions,
37
+ users: Endpoints::Users,
38
+ views: Endpoints::Views
39
+ }.freeze
40
+ end
41
+ end
data/lib/notion/id.rb ADDED
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Notion
4
+ module ID
5
+ module_function
6
+
7
+ def normalize(value)
8
+ hex = value.to_s.delete("-").downcase
9
+ raise ArgumentError, "invalid Notion ID" unless hex.match?(/\A[0-9a-f]{32}\z/)
10
+
11
+ [8, 4, 4, 4, 12].map { |size| hex.slice!(0, size) }.join("-")
12
+ end
13
+ end
14
+ end