notion_ruby_mapping 0.4.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -14
  3. data/examples/change_title.md +1 -1
  4. data/examples/renumbering_pages.md +3 -3
  5. data/examples/set_icon_to_all_icon_unsettled_pages.md +4 -4
  6. data/lib/notion_ruby_mapping/blocks/base.rb +25 -21
  7. data/lib/notion_ruby_mapping/blocks/block.rb +82 -484
  8. data/lib/notion_ruby_mapping/blocks/bookmark_block.rb +11 -0
  9. data/lib/notion_ruby_mapping/blocks/breadcrumb_block.rb +19 -0
  10. data/lib/notion_ruby_mapping/blocks/bulleted_list_item_block.rb +11 -0
  11. data/lib/notion_ruby_mapping/blocks/callout_block.rb +82 -0
  12. data/lib/notion_ruby_mapping/blocks/child_base_block.rb +21 -0
  13. data/lib/notion_ruby_mapping/blocks/child_database_block.rb +11 -0
  14. data/lib/notion_ruby_mapping/blocks/child_page_block.rb +11 -0
  15. data/lib/notion_ruby_mapping/blocks/code_block.rb +50 -0
  16. data/lib/notion_ruby_mapping/blocks/column_block.rb +29 -0
  17. data/lib/notion_ruby_mapping/blocks/column_list_block.rb +33 -0
  18. data/lib/notion_ruby_mapping/blocks/database.rb +7 -1
  19. data/lib/notion_ruby_mapping/blocks/divider_block.rb +19 -0
  20. data/lib/notion_ruby_mapping/blocks/embed_block.rb +11 -0
  21. data/lib/notion_ruby_mapping/blocks/equation_block.rb +43 -0
  22. data/lib/notion_ruby_mapping/blocks/file_base_block.rb +50 -0
  23. data/lib/notion_ruby_mapping/blocks/file_block.rb +11 -0
  24. data/lib/notion_ruby_mapping/blocks/heading1_block.rb +18 -0
  25. data/lib/notion_ruby_mapping/blocks/heading2_block.rb +18 -0
  26. data/lib/notion_ruby_mapping/blocks/heading3_block.rb +18 -0
  27. data/lib/notion_ruby_mapping/blocks/image_block.rb +11 -0
  28. data/lib/notion_ruby_mapping/blocks/link_preview_block.rb +16 -0
  29. data/lib/notion_ruby_mapping/blocks/link_to_page_block.rb +40 -0
  30. data/lib/notion_ruby_mapping/blocks/list.rb +2 -3
  31. data/lib/notion_ruby_mapping/blocks/numbered_list_item_block.rb +11 -0
  32. data/lib/notion_ruby_mapping/blocks/page.rb +6 -0
  33. data/lib/notion_ruby_mapping/blocks/paragraph_block.rb +11 -0
  34. data/lib/notion_ruby_mapping/blocks/pdf_block.rb +11 -0
  35. data/lib/notion_ruby_mapping/blocks/quote_block.rb +11 -0
  36. data/lib/notion_ruby_mapping/blocks/synced_block.rb +49 -0
  37. data/lib/notion_ruby_mapping/blocks/table_block.rb +50 -0
  38. data/lib/notion_ruby_mapping/blocks/table_of_contents_block.rb +34 -0
  39. data/lib/notion_ruby_mapping/blocks/table_row_block.rb +34 -0
  40. data/lib/notion_ruby_mapping/blocks/template_block.rb +34 -0
  41. data/lib/notion_ruby_mapping/blocks/text_sub_block_color_base_block.rb +45 -0
  42. data/lib/notion_ruby_mapping/blocks/to_do_block.rb +42 -0
  43. data/lib/notion_ruby_mapping/blocks/toggle_block.rb +11 -0
  44. data/lib/notion_ruby_mapping/blocks/toggle_heading1_block.rb +11 -0
  45. data/lib/notion_ruby_mapping/blocks/toggle_heading2_block.rb +11 -0
  46. data/lib/notion_ruby_mapping/blocks/toggle_heading3_block.rb +11 -0
  47. data/lib/notion_ruby_mapping/blocks/url_base_block.rb +34 -0
  48. data/lib/notion_ruby_mapping/blocks/url_caption_base_block.rb +46 -0
  49. data/lib/notion_ruby_mapping/blocks/video_block.rb +11 -0
  50. data/lib/notion_ruby_mapping/controllers/notion_cache.rb +34 -18
  51. data/lib/notion_ruby_mapping/controllers/payload.rb +32 -18
  52. data/lib/notion_ruby_mapping/controllers/query.rb +1 -1
  53. data/lib/notion_ruby_mapping/controllers/rich_text_array.rb +13 -2
  54. data/lib/notion_ruby_mapping/objects/rich_text_object.rb +2 -5
  55. data/lib/notion_ruby_mapping/properties/created_by_property.rb +1 -0
  56. data/lib/notion_ruby_mapping/properties/date_base_property.rb +24 -11
  57. data/lib/notion_ruby_mapping/properties/email_property.rb +1 -2
  58. data/lib/notion_ruby_mapping/properties/files_property.rb +1 -1
  59. data/lib/notion_ruby_mapping/properties/formula_property.rb +1 -1
  60. data/lib/notion_ruby_mapping/properties/multi_select_property.rb +2 -0
  61. data/lib/notion_ruby_mapping/properties/phone_number_property.rb +0 -1
  62. data/lib/notion_ruby_mapping/properties/select_property.rb +2 -1
  63. data/lib/notion_ruby_mapping/properties/url_property.rb +0 -2
  64. data/lib/notion_ruby_mapping/version.rb +1 -1
  65. data/lib/notion_ruby_mapping.rb +8 -1
  66. metadata +41 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86b66f1eaec34561d2542a0b460490cc162820c03bb386d75fdb796f7ad89477
4
- data.tar.gz: 2fc5d80b0123377c7dbbfdc59f20ad03596a9fdedbc4cf49d50ca6bdf9d428e1
3
+ metadata.gz: 68d4b404cfe0798695934594f05049482f5436f15e0f2eb7c82125031ce3f340
4
+ data.tar.gz: b179b7d3530ec7f323023f5ec3ada9057f7e402f87a87c65579482c015184c62
5
5
  SHA512:
6
- metadata.gz: af591e9e313309fb5028cec7073b28d8e0afa40e47b5f1cd2a5fd3129e7747897c451b45461bd10be40b0619f1e9e61b286feaad7cf23ce38e71b3f90afb3eab
7
- data.tar.gz: 63abcef6e721e96e0219c516abfae21bb6d66d11e78ce67a495be459c9b7eba57112ae1c41b85f9de42a68c3d26aeb678c4423c4440035bed651013241b2f450
6
+ metadata.gz: 35b3b4ec135b729ba8f93e5d583f0e717e75cb6f0bd75779433948ef671b4bfa9cf22346e1a222d473f506b90a1a24efaa4fca856cd533448d773a710160f421
7
+ data.tar.gz: 92ef1a7218a0551195dae18a9bbbb3f82f440ba6fd2b8af49bcb578c5f21bf9417644750bc5297133d0ddd789987123f5e6dbd024bb7cb8b5b19a3a4c0764758
data/README.md CHANGED
@@ -8,6 +8,7 @@ Development note is here. → [Idea note of "notion_ruby_mapping"](https://www.n
8
8
 
9
9
  - [notion_ruby_mapping](#notion_ruby_mapping)
10
10
  - [Table of Contents](#table-of-contents)
11
+ - [0. Changes in v0.5.0](#0-changes-in-v050)
11
12
  - [1. Installation](#1-installation)
12
13
  - [2. How to use](#2-how-to-use)
13
14
  - [2.1 Create a New Integration](#21-create-a-new-integration)
@@ -19,7 +20,11 @@ Development note is here. → [Idea note of "notion_ruby_mapping"](https://www.n
19
20
  - [4. Contributing](#4-contributing)
20
21
  - [5. License](#5-license)
21
22
  - [6. Code of Conduct](#6-code-of-conduct)
22
- - [7. Acknowledgements](#7-acknowledgements)
23
+
24
+ ## 0. Changes in v0.5.0
25
+
26
+ NotionRubyMapping v.0.5.0 now supports block updates.
27
+ For efficiency, subclasses are provided under Block class. As a result, they are no longer compatible with the scripts used in v0.4.0.
23
28
 
24
29
  ## 1. Installation
25
30
 
@@ -60,6 +65,7 @@ NotionCache.instance.create_client ENV["NOTION_API_TOKEN"] # from environment
60
65
 
61
66
  1. [Database and page access sample](https://www.notion.so/hkob/Database-and-page-access-sample-d30033e707194faf995741167eb2b6f8)
62
67
  1. [Append block children sample](https://www.notion.so/hkob/Append-block-children-sample-3867910a437340be931cf7f2c06443c6)
68
+ 1. [Update block sample](https://www.notion.so/hkob/update-block-sample-5568c1c36fe84f12b83edfe2dda83028)
63
69
 
64
70
  ### 2.4. Another example code (Use case)
65
71
 
@@ -73,17 +79,18 @@ NotionCache.instance.create_client ENV["NOTION_API_TOKEN"] # from environment
73
79
 
74
80
  ## 3. ChangeLog
75
81
 
76
- - added append_block_children
77
- - added retrieve_block spec
78
- - 2022/4/29 Change directory structure, TEST_IDs are moved from env.yml to TestConnection's constants
82
+ - 2022/6/5 [v0.5.1] bug fix for append_block_children. added synced_block_original to SyncedBlock
83
+ - 2022/6/4 [v0.5.0] added subclasses of the block class and update_block API support
84
+ - 2022/5/19 [v0.4.1] added delete_block
85
+ - 2022/4/29 [v0.4.0] Change directory structure, TEST_IDs are moved from env.yml to TestConnection's constants, added retrieve_block spec, added append_block_children
79
86
  - 2022/4/27 added Base#children
80
- - 2022/3/27 create_child_page can receive a block for initialization.
81
- - 2022/3/27 properties of a created child page are automatically assigned using the parent database.
82
- - 2022/3/25 added create_child_database, update_database, add_property, rename_property and remove_property
83
- - 2022/3/17 added template_mention objects, tools/an command
84
- - 2022/3/16 added database.create_child_page and base.save instead of base.update/create
87
+ - 2022/3/27 [v0.3.3] create_child_page can receive a block for initialization.
88
+ - 2022/3/27 [v0.3.2] properties of a created child page are automatically assigned using the parent database.
89
+ - 2022/3/25 [v0.3.0] added create_child_database, update_database, add_property, rename_property and remove_property
90
+ - 2022/3/17 [v0.2.3] added template_mention objects, tools/an command
91
+ - 2022/3/16 [v0.2.2] added database.create_child_page and base.save instead of base.update/create
85
92
  - 2022/3/15 Fixed not to reload from API when all contents are loaded
86
- - 2022/3/14 Exclude notion-ruby-client, update Property values, update for Notion-Version 2022-02-22
93
+ - 2022/3/14 [v0.2.0] Exclude notion-ruby-client, update Property values, update for Notion-Version 2022-02-22
87
94
  - 2022/2/25 add_property_for_update -> assign_property, update README.md
88
95
  - 2022/2/20 add support for MultiSelectProperty
89
96
  - 2022/2/19 add support for SelectProperty
@@ -105,7 +112,3 @@ The gem is available as open source under the terms of the [MIT License](https:/
105
112
  ## 6. Code of Conduct
106
113
 
107
114
  Everyone interacting in the NotionRubyMapping project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/notion_ruby_mapping/blob/main/CODE_OF_CONDUCT.md).
108
-
109
- ## 7. Acknowledgements
110
-
111
- The code depends on [notion-ruby-client](https://github.com/orbit-love/notion-ruby-client).
@@ -23,4 +23,4 @@ page.save # API access
23
23
  print page.title # -> JKL
24
24
  ```
25
25
  ---
26
- [Return to README.md](../README.md#2-example-code)
26
+ [Return to README.md](../README.md)
@@ -12,9 +12,9 @@ db.query_database(tp.filter_is_not_empty.ascending(tp)).each.with_index(1) do |p
12
12
  end
13
13
  ```
14
14
 
15
- | After execution |
16
- |-----------------------------------------------|
15
+ | After execution |
16
+ |--------------------------------------------------|
17
17
  | ![After exuecution](../images/serial_number.png) |
18
18
 
19
19
  ---
20
- [Return to README.md](../README.md#2-example-code)
20
+ [Return to README.md](../README.md)
@@ -22,9 +22,9 @@ db.query_database.each do |page|
22
22
  end
23
23
  ```
24
24
 
25
- |Before execution|After execution|
26
- |---|---|
27
- |![Before execution](../images/pre_set_icon.png)|![After execution](../images/post_set_icon.png)|
25
+ | Before execution | After execution |
26
+ |-------------------------------------------------|-------------------------------------------------|
27
+ | ![Before execution](../images/pre_set_icon.png) | ![After execution](../images/post_set_icon.png) |
28
28
 
29
29
  ---
30
- [Return to README.md](../README.md#2-example-code)
30
+ [Return to README.md](../README.md)
@@ -4,14 +4,15 @@ module NotionRubyMapping
4
4
  # Notion Base object (Parent of Page / Database / List)
5
5
  # The Public API method has a link to the API references.
6
6
  class Base
7
-
8
7
  # @param [Hash, nil] json
9
8
  # @param [String, nil] id
10
9
  # @param [Array<Property, Class, String>] assign
11
10
  def initialize(json: nil, id: nil, assign: [], parent: nil)
12
11
  @nc = NotionCache.instance
13
12
  @json = json
14
- @id = @nc.hex_id(id || json && @json["id"])
13
+ @id = @nc.hex_id(id || @json && @json["id"])
14
+ @archived = @json && @json["archived"]
15
+ @has_children = @json && @json["has_children"]
15
16
  @new_record = true unless parent.nil?
16
17
  raise StandardError, "Unknown id" if !is_a?(List) && !is_a?(Block) && @id.nil? && parent.nil?
17
18
 
@@ -37,7 +38,7 @@ module NotionRubyMapping
37
38
  when "list"
38
39
  List.new json: json
39
40
  when "block"
40
- Block.new(json: json).decode_block
41
+ Block.decode_block json
41
42
  else
42
43
  raise StandardError, json.inspect
43
44
  end
@@ -52,14 +53,14 @@ module NotionRubyMapping
52
53
  " -H 'Notion-Version: 2022-02-22'",
53
54
  " -H 'Authorization: Bearer '\"$NOTION_API_KEY\"''",
54
55
  ]
55
- shell << " -H 'Content-Type: application/json'" unless path == :get
56
+ shell << " -H 'Content-Type: application/json'" if %i[post patch].include?(method)
56
57
  shell << " --data '#{JSON.generate json}'" if json
57
58
  shell.join(" \\\n")
58
59
  end
59
60
 
60
61
  # @param [String] key
61
62
  # @return [NotionRubyMapping::PropertyCache, Hash] obtained Page value or PropertyCache
62
- def [](key)
63
+ def get(key)
63
64
  unless @json
64
65
  raise StandardError, "Unknown id" if @id.nil?
65
66
 
@@ -73,8 +74,8 @@ module NotionRubyMapping
73
74
  end
74
75
  end
75
76
 
76
- # @param [String] url
77
- # @param [RichTextArray, String, Array<String>, RichTextObject, Array<RichTextObject>] caption
77
+ # @param [Array<Block>] blocks
78
+ # @param [Boolean] dry_run
78
79
  # @return [NotionRubyMapping::Block, String]
79
80
  # @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#44bbf83d852c419485c5efe9fe1558fb
80
81
  # @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#2c47f7fedae543cf8566389ba1677132
@@ -86,7 +87,7 @@ module NotionRubyMapping
86
87
  "children" => Array(blocks).map do |block|
87
88
  assert_parent_children_pair block
88
89
  block.block_json
89
- end
90
+ end,
90
91
  }
91
92
  if dry_run
92
93
  path = @nc.append_block_children_page_path(id)
@@ -95,7 +96,7 @@ module NotionRubyMapping
95
96
  response = @nc.append_block_children_request @id, json
96
97
  raise StandardError, response unless response["results"]
97
98
 
98
- answers = response["results"].map { |sub_json| Block.new json: sub_json }
99
+ answers = response["results"].map { |sub_json| Block.create_from_json sub_json }
99
100
  only_one ? answers.first : answers
100
101
  end
101
102
  end
@@ -112,7 +113,7 @@ module NotionRubyMapping
112
113
  raise StandardError, "Internal file block can not append." if bt == "file"
113
114
 
114
115
  raise StandardError, "Column block can only append column_list block" unless bt == "column" &&
115
- block? && self.type == "columu_list"
116
+ block? && type == "column_list"
116
117
  end
117
118
 
118
119
  # @param [NotionRubyMapping::Property] klass
@@ -149,13 +150,6 @@ module NotionRubyMapping
149
150
  end
150
151
  end
151
152
 
152
- # @return [NotionRubyMapping::Block]
153
- def create_child_breadcrumb
154
- raise StandardError unless page? || (block? && can_have_children)
155
-
156
- Block.new(parent: self).breadcrumb
157
- end
158
-
159
153
  # @return [NotionRubyMapping::CreatedTimeProperty]
160
154
  def created_time
161
155
  @created_time ||= CreatedTimeProperty.new("__timestamp__", json: self["created_time"])
@@ -172,6 +166,11 @@ module NotionRubyMapping
172
166
  self["icon"]
173
167
  end
174
168
 
169
+ # @return [String (frozen)]
170
+ def inspect
171
+ "#{self.class.name}-#{@id}"
172
+ end
173
+
175
174
  # @return [Hash] json properties
176
175
  def json_properties
177
176
  @json && @json["properties"]
@@ -231,6 +230,7 @@ module NotionRubyMapping
231
230
  self
232
231
  end
233
232
 
233
+ # @param [Boolean] dry_run
234
234
  # @return [NotionRubyMapping::Base, String]
235
235
  # @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#277085c8439841c798a4b94eae9a7326
236
236
  def save(dry_run: false)
@@ -238,7 +238,7 @@ module NotionRubyMapping
238
238
  @new_record ? create(dry_run: true) : update(dry_run: true)
239
239
  else
240
240
  @new_record ? create : update
241
- @property_cache.clear_will_update
241
+ @property_cache.clear_will_update unless block?
242
242
  @payload.clear
243
243
  self
244
244
  end
@@ -254,14 +254,18 @@ module NotionRubyMapping
254
254
  self
255
255
  end
256
256
 
257
- def description
258
- "#{self.class.name}-#{@id}"
257
+ # @return [FalseClass] return false except block
258
+ def synced_block_original?
259
+ false
259
260
  end
260
261
 
261
262
  # @param [Hash] json
262
263
  # @return [NotionRubyMapping::Base]
263
264
  def update_json(json)
264
- raise StandardError, json.inspect unless json["object"] != "error" && (@json.nil? || @json["type"] == json["type"])
265
+ unless json["object"] != "error" && (@json.nil? || @json["type"] == json["type"])
266
+ raise StandardError,
267
+ json.inspect
268
+ end
265
269
 
266
270
  @json = json
267
271
  @id = @nc.hex_id(@json["id"])