notion_ruby_mapping 0.6.1 → 0.6.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d2f6819154bd2ae6fb448cd36d06311d20e6ba29a0e2e4fda6584d49ca58732
4
- data.tar.gz: 042e30bda77b5c21a3226a37579254e52eb19d537abaa94a5233238846ba6a76
3
+ metadata.gz: 20cd62581513083b2b99d6fad57d3486fc855bf390f96ba01da263fa47e16029
4
+ data.tar.gz: da20deff5ce1e53cbbe7d2cda86550676eea088fe1fee890385490b07cfa55ad
5
5
  SHA512:
6
- metadata.gz: 69419656c3c728d5472aade37de759a2a9b58124cd6856df7ecfa9b0838f5755af84f80a9936434a82991a7418a9f33de6188c87b20afff32573565c64ea5099
7
- data.tar.gz: '093e56922c2f2aef5b6efd45043472e165b8bc3d04cce3613b9d1f363d779adca495982c818091e067dc9413107afbd26371ba73676d4def61b8abc1e1ea83b8'
6
+ metadata.gz: 68fd906fb46c5957d5eb48a41f41752c61a8fb40a7283dfa9ec3e4a95173c38401a966f24707893bdc1ded47ed76606990031488e2100eac234e4e53197de005
7
+ data.tar.gz: d79d601217f69788eee522185868e5ded0e44598a60e9a4e4173c98b4df96c262c7516893e8f3829ac5d202491cad6c1548bb4de53d1646a691dacc6e8d3a6c8
@@ -58,6 +58,24 @@ module NotionRubyMapping
58
58
  shell.join(" \\\n")
59
59
  end
60
60
 
61
+ def comments(query = nil, dry_run: false)
62
+ if page? || block?
63
+ if dry_run
64
+ self.class.dry_run_script :get, @nc.retrieve_comments_path(@id)
65
+ else
66
+ ans = {}
67
+ List.new(comment_parent: self,
68
+ json: @nc.retrieve_comments_request(@id, query),
69
+ query: query).each do |comment|
70
+ dt_id = comment.discussion_id
71
+ dt = ans[dt_id] ||= DiscussionThread.new dt_id
72
+ dt.comments << comment
73
+ end
74
+ ans
75
+ end
76
+ end
77
+ end
78
+
61
79
  # @param [String] key
62
80
  # @return [NotionRubyMapping::PropertyCache, Hash] obtained Page value or PropertyCache
63
81
  def get(key)
@@ -264,11 +282,7 @@ module NotionRubyMapping
264
282
  @new_record ? create(dry_run: true) : update(dry_run: true)
265
283
  else
266
284
  @new_record ? create : update
267
- if block?
268
-
269
- else
270
- @property_cache.clear_will_update
271
- end
285
+ @property_cache.clear_will_update if page?
272
286
  @payload.clear
273
287
  self
274
288
  end
@@ -5,13 +5,14 @@ module NotionRubyMapping
5
5
  class List < Base
6
6
  include Enumerable
7
7
 
8
- def initialize(json: nil, id: nil, database: nil, parent: nil, property: nil, query: nil)
8
+ def initialize(json: nil, id: nil, database: nil, parent: nil, property: nil, comment_parent: nil, query: nil)
9
9
  super(json: json, id: id)
10
10
  @has_more = @json["has_more"]
11
11
  @load_all_contents = !@has_more
12
12
  @database = database
13
13
  @parent = parent
14
14
  @property = property
15
+ @comment_parent = comment_parent
15
16
  @query = query
16
17
  @index = 0
17
18
  @has_content = true
@@ -20,105 +21,86 @@ module NotionRubyMapping
20
21
 
21
22
  # @return [NotionRubyMapping::List, Enumerator]
22
23
  # @see https://www.notion.so/hkob/List-9a0b32335e0d48849a785ce5e162c760#12e1c261a0944a4095776b7515bef4a1
23
- def each
24
- return enum_for(:each) unless block_given?
25
-
24
+ def each(&block)
25
+ return enum_for(:each) if block.nil?
26
26
  if @parent
27
- unless @has_content
28
- unless @load_all_contents
29
- @query.start_cursor = nil
30
- @json = @parent.children @query
31
- @has_more = @json["has_more"]
32
- end
33
- @index = 0
34
- @has_content = true
35
- end
36
-
37
- while @has_content
38
- if @index < results.length
39
- object = Base.create_from_json(results[@index])
40
- @index += 1
41
- yield object
42
- elsif @has_more
43
- if @parent
44
- @query.start_cursor = @json["next_cursor"]
45
- @json = @parent.children @query
46
- @index = 0
47
- @has_more = @json["has_more"]
48
- else
49
- @has_content = false
50
- end
51
- else
52
- @has_content = false
53
- end
54
- end
27
+ each_sub base: @page,
28
+ query: -> { @parent.children @query },
29
+ create_object: ->(json) { Base.create_from_json json },
30
+ &block
55
31
  elsif @database
56
- unless @has_content # re-exec
57
- unless @load_all_contents
58
- @query.start_cursor = nil
59
- @json = @nc.database_query_request @database.id, @query
60
- @has_more = @json["has_more"]
61
- end
62
- @index = 0
63
- @has_content = true
64
- end
32
+ each_sub base: @database,
33
+ query: -> { @nc.database_query_request @database.id, @query },
34
+ create_object: ->(json) { Base.create_from_json json },
35
+ &block
36
+ elsif @property
37
+ each_sub base: @property,
38
+ query: -> do
39
+ @nc.page_property_request @property.property_cache.page_id,
40
+ @property.property_id,
41
+ @query.query_json
42
+ end,
43
+ create_object: ->(json) do
44
+ case json["type"]
45
+ when "people"
46
+ UserObject.new json: json["people"]
47
+ when "relation"
48
+ json["relation"]["id"]
49
+ when "rich_text"
50
+ RichTextObject.create_from_json json["rich_text"]
51
+ when "title"
52
+ RichTextObject.create_from_json json["title"]
53
+ else
54
+ json
55
+ end
56
+ end,
57
+ &block
58
+ elsif @comment_parent
59
+ each_sub base: @comment_parent,
60
+ query: -> { @nc.retrieve_comments_request @comment_parent.id, @query },
61
+ create_object: ->(json) { CommentObject.new json: json },
62
+ &block
63
+ end
64
+ self
65
+ end
65
66
 
66
- while @has_content
67
- if @index < results.length
68
- object = Base.create_from_json(results[@index])
69
- @index += 1
70
- yield object
71
- elsif @has_more
72
- if @database
73
- @query.start_cursor = @json["next_cursor"]
74
- @json = @nc.database_query_request @database.id, @query
75
- @index = 0
76
- @has_more = @json["has_more"]
77
- else
78
- @has_content = false
79
- end
80
- else
81
- @has_content = false
82
- end
67
+ private
68
+
69
+ # @param [NotionRubyMapping::Page, NotionRubyMapping::Block] base page or block
70
+ # @param [Proc] query
71
+ # @param [Proc] create_object
72
+ # @param [Proc] block
73
+ def each_sub(base:, query:, create_object:, &block)
74
+ unless @has_content
75
+ unless @load_all_contents
76
+ @query.start_cursor = nil
77
+ @json = query.call
78
+ @has_more = @json["has_more"]
83
79
  end
84
- elsif @property
85
- while @has_content
86
- if @index < results.length
87
- json = results[@index]
88
- object = case json["type"]
89
- when "people"
90
- UserObject.new json: json["people"]
91
- when "relation"
92
- json["relation"]["id"]
93
- when "rich_text"
94
- RichTextObject.create_from_json json["rich_text"]
95
- when "title"
96
- RichTextObject.create_from_json json["title"]
97
- else
98
- json
99
- end
100
- @index += 1
101
- yield object
102
- elsif @has_more
103
- if @property
104
- @query ||= Query.new
105
- @query.start_cursor = @json["next_cursor"]
106
- @json = NotionCache.instance.page_property_request @property.property_cache.page_id, @property.property_id, @query.query_json
107
- @index = 0
108
- @has_more = @json["has_more"]
109
- else
110
- @has_content = false
111
- end
80
+ @index = 0
81
+ @has_content = true
82
+ end
83
+
84
+ while @has_content
85
+ if @index < results.length
86
+ object = create_object.call results[@index]
87
+ @index += 1
88
+ block.call object
89
+ elsif @has_more
90
+ if base
91
+ @query.start_cursor = @json["next_cursor"]
92
+ @json = query.call
93
+ @index = 0
94
+ @has_more = @json["has_more"]
112
95
  else
113
96
  @has_content = false
114
97
  end
98
+ else
99
+ @has_content = false
115
100
  end
116
101
  end
117
- self
118
102
  end
119
103
 
120
- private
121
-
122
104
  # @return [Hash]
123
105
  def results
124
106
  @json["results"]
@@ -23,6 +23,16 @@ module NotionRubyMapping
23
23
  get key
24
24
  end
25
25
 
26
+ def append_comment(text_objects, dry_run: false)
27
+ rto = RichTextArray.new "rich_text", text_objects: text_objects, will_update: true
28
+ json = rto.property_schema_json.merge({"parent" => {"page_id" => @id}})
29
+ if dry_run
30
+ self.class.dry_run_script :post, @nc.comments_path, json
31
+ else
32
+ CommentObject.new json: (@nc.append_comment_request json)
33
+ end
34
+ end
35
+
26
36
  # @param [String] title
27
37
  # @param [Array<String, Property>] assigns
28
38
  # @return [NotionRubyMapping::Database]
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NotionRubyMapping
4
+ # DiscussionThread
5
+ class DiscussionThread
6
+ # @param [String] discussion_id
7
+ def initialize(discussion_id)
8
+ @discussion_id = discussion_id
9
+ @comments = []
10
+ end
11
+ attr_reader :discussion_id, :comments
12
+
13
+ # @param [String] text_objects
14
+ # @param [Boolean] dry_run
15
+ # @return [String, NotionRubyMapping::CommentObject]
16
+ def append_comment(text_objects, dry_run: false)
17
+ rto = RichTextArray.new "rich_text", text_objects: text_objects, will_update: true
18
+ nc = NotionCache.instance
19
+ json = rto.property_schema_json.merge({"discussion_id" => @discussion_id})
20
+ if dry_run
21
+ Base.dry_run_script :post, nc.comments_path, json
22
+ else
23
+ CommentObject.new json: (nc.append_comment_request json)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -45,6 +45,10 @@ module NotionRubyMapping
45
45
  request :patch, append_block_children_block_path(id), payload
46
46
  end
47
47
 
48
+ def append_comment_request(json)
49
+ request :post, comments_path, json
50
+ end
51
+
48
52
  # @param [String] id block_id (with or without "-")
49
53
  # @return [NotionRubyMapping::Base] Block object or nil
50
54
  def block(id)
@@ -81,6 +85,11 @@ module NotionRubyMapping
81
85
  @object_hash = {}
82
86
  end
83
87
 
88
+ # @return [String (frozen)]
89
+ def comments_path
90
+ "v1/comments"
91
+ end
92
+
84
93
  # @param [String] notion_token
85
94
  # @return [NotionRubyMapping::NotionCache] self (NotionCache.instance)
86
95
  def create_client(notion_token, wait: 0.3333, debug: false)
@@ -214,6 +223,17 @@ module NotionRubyMapping
214
223
  "v1/databases/#{database_id}/query"
215
224
  end
216
225
 
226
+ # @param [String] block_id
227
+ def retrieve_comments_path(block_id)
228
+ "v1/comments?block_id=#{block_id}"
229
+ end
230
+
231
+ # @param [String] block_id
232
+ # @param [NotionRubyMapping::Query, NilClass] query
233
+ def retrieve_comments_request(block_id, query)
234
+ request :get, retrieve_comments_path(block_id), (query&.query_json || {})
235
+ end
236
+
217
237
  # @param [Symbol] method
218
238
  # @param [String] path
219
239
  # @param [Hash] options
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NotionRubyMapping
4
+ # CommentObject
5
+ class CommentObject
6
+ # @param [String] text_objects
7
+ def initialize(text_objects: nil, json: {})
8
+ if text_objects
9
+ @text_objects = RichTextArray.new "rich_text", text_objects: text_objects
10
+ @json = {}
11
+ elsif json
12
+ @json = json
13
+ @text_objects = RichTextArray.new "rich_text", json: json["rich_text"]
14
+ else
15
+ raise StandardError, "Either text_objects or json is required CommentObject"
16
+ end
17
+ @will_update = false
18
+ end
19
+ attr_reader :will_update, :text_objects
20
+
21
+ def discussion_id
22
+ NotionCache.instance.hex_id @json["discussion_id"]
23
+ end
24
+
25
+ # @return [String] full_text
26
+ def full_text
27
+ @text_objects.full_text
28
+ end
29
+ end
30
+ end
@@ -107,6 +107,7 @@ module NotionRubyMapping
107
107
  "people" => PeopleProperty,
108
108
  "phone_number" => PhoneNumberProperty,
109
109
  "select" => SelectProperty,
110
+ "status" => StatusProperty,
110
111
  "title" => TitleProperty,
111
112
  "rich_text" => RichTextProperty,
112
113
  "url" => UrlProperty,
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NotionRubyMapping
4
+ # Status property
5
+ class StatusProperty < Property
6
+ TYPE = "status"
7
+
8
+ ### Public announced methods
9
+
10
+ ## Common methods
11
+
12
+ def status
13
+ @json
14
+ end
15
+
16
+ ### Not public announced methods
17
+
18
+ ## Common methods
19
+
20
+ # @param [String] name Property name
21
+ # @param [Boolean, Hash] json
22
+ def initialize(name, will_update: false, base_type: :page, property_cache: nil, json: {})
23
+ super name, will_update: will_update, base_type: base_type, property_cache: property_cache
24
+ @json = json
25
+ end
26
+
27
+ ## Page property only methods
28
+
29
+ # @return [Hash]
30
+ def property_values_json
31
+ assert_page_property __method__
32
+ {}
33
+ #{@name => {"status" => @json, "type" => "status"}}
34
+ end
35
+ end
36
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NotionRubyMapping
4
- VERSION = "0.6.1"
4
+ VERSION = "0.6.2"
5
5
  NOTION_VERSION = "2022-06-28"
6
6
  end
@@ -12,13 +12,14 @@ require_relative "notion_ruby_mapping/version"
12
12
  link_preview_block link_to_page_block numbered_list_item_block paragraph_block pdf_block quote_block
13
13
  synced_block table_block table_row_block table_of_contents_block template_block to_do_block
14
14
  toggle_block video_block],
15
- controllers: %w[notion_cache payload property_cache query rich_text_array],
16
- objects: %w[rich_text_object emoji_object equation_object file_object mention_object text_object user_object],
15
+ controllers: %w[notion_cache payload property_cache query rich_text_array discussion_thread],
16
+ objects: %w[rich_text_object emoji_object equation_object file_object mention_object text_object user_object
17
+ comment_object],
17
18
  properties: %w[property checkbox_property multi_property created_by_property date_base_property created_time_property
18
19
  date_property email_property files_property formula_property last_edited_by_property
19
20
  last_edited_time_property multi_select_property number_property people_property phone_number_property
20
- relation_property text_property rich_text_property rollup_property select_property title_property
21
- url_property],
21
+ relation_property text_property rich_text_property rollup_property select_property status_property
22
+ title_property url_property],
22
23
  }.each do |key, values|
23
24
  values.each do |klass|
24
25
  require_relative "notion_ruby_mapping/#{key}/#{klass}"
@@ -36,7 +36,7 @@ until dbs.empty?
36
36
  append_database(text, db)
37
37
  db.properties.select { |p| p.is_a? RelationProperty }.each_with_index do |p, i|
38
38
  new_db = Database.find p.relation_database_id
39
- text << "#{db_title db} ||--o{ #{db_title new_db} : r#{i}"
39
+ text << "#{db_title db} |o--o{ #{db_title new_db} : r#{i}"
40
40
  dbs << new_db unless finished[new_db]
41
41
  end
42
42
  text << ""
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notion_ruby_mapping
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroyuki KOBAYASHI
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-28 00:00:00.000000000 Z
11
+ date: 2022-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -192,11 +192,13 @@ files:
192
192
  - lib/notion_ruby_mapping/blocks/url_base_block.rb
193
193
  - lib/notion_ruby_mapping/blocks/url_caption_base_block.rb
194
194
  - lib/notion_ruby_mapping/blocks/video_block.rb
195
+ - lib/notion_ruby_mapping/controllers/discussion_thread.rb
195
196
  - lib/notion_ruby_mapping/controllers/notion_cache.rb
196
197
  - lib/notion_ruby_mapping/controllers/payload.rb
197
198
  - lib/notion_ruby_mapping/controllers/property_cache.rb
198
199
  - lib/notion_ruby_mapping/controllers/query.rb
199
200
  - lib/notion_ruby_mapping/controllers/rich_text_array.rb
201
+ - lib/notion_ruby_mapping/objects/comment_object.rb
200
202
  - lib/notion_ruby_mapping/objects/emoji_object.rb
201
203
  - lib/notion_ruby_mapping/objects/equation_object.rb
202
204
  - lib/notion_ruby_mapping/objects/file_object.rb
@@ -224,6 +226,7 @@ files:
224
226
  - lib/notion_ruby_mapping/properties/rich_text_property.rb
225
227
  - lib/notion_ruby_mapping/properties/rollup_property.rb
226
228
  - lib/notion_ruby_mapping/properties/select_property.rb
229
+ - lib/notion_ruby_mapping/properties/status_property.rb
227
230
  - lib/notion_ruby_mapping/properties/text_property.rb
228
231
  - lib/notion_ruby_mapping/properties/title_property.rb
229
232
  - lib/notion_ruby_mapping/properties/url_property.rb