notion_ruby_mapping 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +33 -1228
  3. data/env.yml.sample +0 -13
  4. data/lib/notion_ruby_mapping/{base.rb → blocks/base.rb} +155 -88
  5. data/lib/notion_ruby_mapping/blocks/block.rb +547 -0
  6. data/lib/notion_ruby_mapping/{database.rb → blocks/database.rb} +34 -7
  7. data/lib/notion_ruby_mapping/{list.rb → blocks/list.rb} +35 -3
  8. data/lib/notion_ruby_mapping/blocks/page.rb +71 -0
  9. data/lib/notion_ruby_mapping/{notion_cache.rb → controllers/notion_cache.rb} +128 -102
  10. data/lib/notion_ruby_mapping/{payload.rb → controllers/payload.rb} +0 -0
  11. data/lib/notion_ruby_mapping/{property_cache.rb → controllers/property_cache.rb} +21 -20
  12. data/lib/notion_ruby_mapping/{query.rb → controllers/query.rb} +26 -18
  13. data/lib/notion_ruby_mapping/{rich_text_array.rb → controllers/rich_text_array.rb} +26 -15
  14. data/lib/notion_ruby_mapping/objects/emoji_object.rb +40 -0
  15. data/lib/notion_ruby_mapping/objects/equation_object.rb +43 -0
  16. data/lib/notion_ruby_mapping/objects/file_object.rb +60 -0
  17. data/lib/notion_ruby_mapping/{mention_object.rb → objects/mention_object.rb} +11 -0
  18. data/lib/notion_ruby_mapping/{rich_text_object.rb → objects/rich_text_object.rb} +11 -0
  19. data/lib/notion_ruby_mapping/{text_object.rb → objects/text_object.rb} +0 -1
  20. data/lib/notion_ruby_mapping/{user_object.rb → objects/user_object.rb} +9 -4
  21. data/lib/notion_ruby_mapping/{checkbox_property.rb → properties/checkbox_property.rb} +3 -0
  22. data/lib/notion_ruby_mapping/{created_by_property.rb → properties/created_by_property.rb} +0 -0
  23. data/lib/notion_ruby_mapping/{created_time_property.rb → properties/created_time_property.rb} +1 -0
  24. data/lib/notion_ruby_mapping/properties/date_base_property.rb +122 -0
  25. data/lib/notion_ruby_mapping/{date_property.rb → properties/date_property.rb} +13 -0
  26. data/lib/notion_ruby_mapping/{email_property.rb → properties/email_property.rb} +1 -0
  27. data/lib/notion_ruby_mapping/{files_property.rb → properties/files_property.rb} +26 -13
  28. data/lib/notion_ruby_mapping/{formula_property.rb → properties/formula_property.rb} +4 -0
  29. data/lib/notion_ruby_mapping/{last_edited_by_property.rb → properties/last_edited_by_property.rb} +1 -0
  30. data/lib/notion_ruby_mapping/{last_edited_time_property.rb → properties/last_edited_time_property.rb} +1 -0
  31. data/lib/notion_ruby_mapping/{multi_property.rb → properties/multi_property.rb} +0 -0
  32. data/lib/notion_ruby_mapping/{multi_select_property.rb → properties/multi_select_property.rb} +2 -3
  33. data/lib/notion_ruby_mapping/{number_property.rb → properties/number_property.rb} +4 -0
  34. data/lib/notion_ruby_mapping/{people_property.rb → properties/people_property.rb} +8 -3
  35. data/lib/notion_ruby_mapping/{phone_number_property.rb → properties/phone_number_property.rb} +4 -0
  36. data/lib/notion_ruby_mapping/{property.rb → properties/property.rb} +33 -0
  37. data/lib/notion_ruby_mapping/{relation_property.rb → properties/relation_property.rb} +30 -10
  38. data/lib/notion_ruby_mapping/{rich_text_property.rb → properties/rich_text_property.rb} +0 -0
  39. data/lib/notion_ruby_mapping/{rollup_property.rb → properties/rollup_property.rb} +7 -0
  40. data/lib/notion_ruby_mapping/{select_property.rb → properties/select_property.rb} +6 -1
  41. data/lib/notion_ruby_mapping/{text_property.rb → properties/text_property.rb} +0 -0
  42. data/lib/notion_ruby_mapping/{title_property.rb → properties/title_property.rb} +0 -0
  43. data/lib/notion_ruby_mapping/{url_property.rb → properties/url_property.rb} +5 -0
  44. data/lib/notion_ruby_mapping/version.rb +1 -1
  45. data/lib/notion_ruby_mapping.rb +14 -7
  46. metadata +43 -40
  47. data/lib/notion_ruby_mapping/block.rb +0 -10
  48. data/lib/notion_ruby_mapping/date_base_property.rb +0 -75
  49. data/lib/notion_ruby_mapping/page.rb +0 -50
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NotionRubyMapping
4
+ # EquationObject
5
+ class EquationObject < RichTextObject
6
+ # @param [String] expression
7
+ # @return [TextObject]
8
+ def initialize(expression, options = {})
9
+ super "equation", {"plain_text" => expression}.merge(options)
10
+ @expression = expression
11
+ @will_update = false
12
+ end
13
+ attr_reader :will_update, :expression
14
+
15
+ # @param [EquationObject, String] uo
16
+ # @return [EquationObject] self or created EquationObject
17
+ # @see https://www.notion.so/hkob/EquationObject-cd50126fce544ad5bb76463a4269859b#45b0b0810d8647a1968a5e4293920aeb
18
+ def self.equation_object(expression_or_eo)
19
+ if expression_or_eo.is_a? EquationObject
20
+ expression_or_eo
21
+ else
22
+ EquationObject.new expression_or_eo
23
+ end
24
+ end
25
+
26
+ # @param [String] expression
27
+ # @see https://www.notion.so/hkob/EquationObject-cd50126fce544ad5bb76463a4269859b#155800e2c69d4676a2d74572ed8f0de8
28
+ def expression=(expression)
29
+ @expression = expression
30
+ @options["plain_text"] = expression
31
+ @will_update = true
32
+ end
33
+
34
+ protected
35
+
36
+ # @return [Hash{String (frozen)->String}]
37
+ def partial_property_values_json
38
+ {
39
+ "expression" => @expression,
40
+ }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NotionRubyMapping
4
+ # TextObject
5
+ class FileObject
6
+ # @param [String] url
7
+ # @return [TextObject]
8
+ def initialize(url: nil, json: {})
9
+ if url
10
+ @type = "external"
11
+ @url = url
12
+ elsif json
13
+ @type = json["type"]
14
+ @url = json[@type]["url"]
15
+ @expiry_time = json[@type]["expiry_time"]
16
+ else
17
+ raise StandardError, "FileObject requires url: or json:"
18
+ end
19
+ @will_update = false
20
+ end
21
+ attr_reader :will_update, :url, :type
22
+
23
+ # @param [FileObject, String] uo
24
+ # @return [FileObject] self or created FileObject
25
+ # @see https://www.notion.so/hkob/FileObject-6218c354e985423a90904f47a985be33#54b37c567e1d4dfcab06f6d8f8fd412e
26
+ def self.file_object(url_or_fo)
27
+ if url_or_fo.is_a? FileObject
28
+ url_or_fo
29
+ else
30
+ FileObject.new url: url_or_fo
31
+ end
32
+ end
33
+
34
+ # @return [TrueClass, FalseClass] true if "type" is "external"
35
+ def external?
36
+ @type == "external"
37
+ end
38
+
39
+ # @param [String] url
40
+ # @see https://www.notion.so/hkob/FileObject-6218c354e985423a90904f47a985be33#6b841f75d0234a1aac93fb54348abb96
41
+ def url=(url)
42
+ raise StandardError "internal file url can't change." if @type == "file"
43
+
44
+ @url = url
45
+ @will_update = true
46
+ end
47
+
48
+ # @return [Hash]
49
+ def property_values_json
50
+ ans = {
51
+ "type" => @type,
52
+ @type => {
53
+ "url" => @url,
54
+ },
55
+ }
56
+ ans[@type]["expiry_time"] = @expiry_time if @expiry_time
57
+ ans
58
+ end
59
+ end
60
+ end
@@ -6,6 +6,10 @@ module NotionRubyMapping
6
6
  # @return [MentionObject]
7
7
  def initialize(options = {})
8
8
  super "mention", options
9
+ return unless (url = options["link_preview"])
10
+
11
+ @options["href"] = url
12
+ @options["plain_text"] = url
9
13
  end
10
14
 
11
15
  # @return [String (frozen)]
@@ -66,6 +70,13 @@ module NotionRubyMapping
66
70
  "type" => "template_mention",
67
71
  "template_mention" => sub,
68
72
  }
73
+ elsif @options.key? "link_preview"
74
+ {
75
+ "type" => "link_preview",
76
+ "link_preview" => {
77
+ "url" => @options["link_preview"],
78
+ },
79
+ }
69
80
  else
70
81
  raise StandardError, "Irregular mention type: #{@options.keys}"
71
82
  end
@@ -22,6 +22,8 @@ module NotionRubyMapping
22
22
  case type
23
23
  when "text"
24
24
  TextObject.new json["plain_text"], options
25
+ when "equation"
26
+ EquationObject.new json["equation"]["expression"], options
25
27
  when "mention"
26
28
  mention = json["mention"]
27
29
  case mention["type"]
@@ -41,6 +43,8 @@ module NotionRubyMapping
41
43
  else
42
44
  MentionObject.new options.merge({"template_mention" => template_mention["template_mention_user"]})
43
45
  end
46
+ when "link_preview"
47
+ MentionObject.new options.merge({"link_preview" => mention["link_preview"]["url"]})
44
48
  else
45
49
  raise StandardError, "Unknown mention type: #{mention["type"]}"
46
50
  end
@@ -69,6 +73,13 @@ module NotionRubyMapping
69
73
  }.merge annotations_json
70
74
  end
71
75
 
76
+ # @param [String, RichTextObject] value
77
+ # @return [String] input text
78
+ def href=(url)
79
+ @will_update = true
80
+ @options["href"] = url
81
+ end
82
+
72
83
  # @param [String, RichTextObject] value
73
84
  # @return [String] input text
74
85
  def plain_text=(value)
@@ -8,7 +8,6 @@ module NotionRubyMapping
8
8
  def initialize(text, options = {})
9
9
  super "text", {"plain_text" => text}.merge(options)
10
10
  @text = text
11
- @type = "text"
12
11
  @will_update = false
13
12
  end
14
13
  attr_reader :text, :will_update
@@ -14,11 +14,11 @@ module NotionRubyMapping
14
14
 
15
15
  # @param [UserObject, String] uo
16
16
  # @return [UserObject] self or created UserObject
17
- def self.user_object(user_id_or_user)
18
- if user_id_or_user.is_a? UserObject
19
- user_id_or_user
17
+ def self.user_object(user_id_or_uo)
18
+ if user_id_or_uo.is_a? UserObject
19
+ user_id_or_uo
20
20
  else
21
- UserObject.new user_id: user_id_or_user
21
+ UserObject.new user_id: user_id_or_uo
22
22
  end
23
23
  end
24
24
 
@@ -34,5 +34,10 @@ module NotionRubyMapping
34
34
  "id" => @user_id,
35
35
  }
36
36
  end
37
+
38
+ def user_id=(new_user_id)
39
+ @user_id = new_user_id
40
+ @will_update = true
41
+ end
37
42
  end
38
43
  end
@@ -11,6 +11,7 @@ module NotionRubyMapping
11
11
  ## Common methods
12
12
 
13
13
  # @return [Boolean, Hash]
14
+ # @see https://www.notion.so/hkob/CheckboxProperty-ac1edbdb8e264af5ad1432b522b429fd#20da1bf0cbcc4d4eb22d9125386522c2
14
15
  def checkbox
15
16
  @json
16
17
  end
@@ -19,7 +20,9 @@ module NotionRubyMapping
19
20
 
20
21
  # @param [Boolean] flag
21
22
  # @return [TrueClass, FalseClass] settled value
23
+ # @see https://www.notion.so/hkob/CheckboxProperty-ac1edbdb8e264af5ad1432b522b429fd#f167c85c1d2d40dfb8b3b6ce582e0f15
22
24
  def checkbox=(flag)
25
+ assert_page_property __method__
23
26
  @will_update = true
24
27
  @json = flag
25
28
  end
@@ -10,6 +10,7 @@ module NotionRubyMapping
10
10
  ## Common methods
11
11
 
12
12
  # @return [Date, Hash]
13
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#f1e80400878346c3a9ba8e32b824ed2b
13
14
  def created_time
14
15
  @json
15
16
  end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
4
+
5
+ module NotionRubyMapping
6
+ # Date base property (date, created_time, last_edited_time, formula)
7
+ class DateBaseProperty < Property
8
+ include IsEmptyIsNotEmpty
9
+
10
+ # @param [String] rollup Rollup name
11
+ # @param [String] rollup_type Rollup type
12
+ # @return [NotionRubyMapping::Query] generated Query object
13
+ # @see https://www.notion.so/hkob/CheckboxProperty-ac1edbdb8e264af5ad1432b522b429fd#5f07c4ebc4744986bfc99a43827349fc
14
+ def filter_equals(date, rollup = nil, rollup_type = nil)
15
+ make_filter_query "equals", value_str(date), rollup, rollup_type
16
+ end
17
+
18
+ # @param [String] rollup Rollup name
19
+ # @param [String] rollup_type Rollup type
20
+ # @return [NotionRubyMapping::Query] generated Query object
21
+ def filter_does_not_equal(date, rollup = nil, rollup_type = nil)
22
+ make_filter_query "does_not_equal", value_str(date), rollup, rollup_type
23
+ end
24
+
25
+ # @param [String] rollup Rollup name
26
+ # @param [String] rollup_type Rollup type
27
+ # @return [NotionRubyMapping::Query] generated Query object
28
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#841815bfaf684964bebf3fa6712ae26c
29
+ def filter_before(date, rollup = nil, rollup_type = nil)
30
+ make_filter_query "before", value_str(date), rollup, rollup_type
31
+ end
32
+
33
+ # @param [String] rollup Rollup name
34
+ # @param [String] rollup_type Rollup type
35
+ # @return [NotionRubyMapping::Query] generated Query object
36
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#c0ea140866ea46f9a746b24773dc821c
37
+ def filter_after(date, rollup = nil, rollup_type = nil)
38
+ make_filter_query "after", value_str(date), rollup, rollup_type
39
+ end
40
+
41
+ # @param [String] rollup Rollup name
42
+ # @param [String] rollup_type Rollup type
43
+ # @return [NotionRubyMapping::Query] generated Query object
44
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#6a20ade0ee964aad81aae4c08ea29d6b
45
+ def filter_on_or_before(date, rollup = nil, rollup_type = nil)
46
+ make_filter_query "on_or_before", value_str(date), rollup, rollup_type
47
+ end
48
+
49
+ # @param [String] rollup Rollup name
50
+ # @param [String] rollup_type Rollup type
51
+ # @return [NotionRubyMapping::Query] generated Query object
52
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#1469e3fb3068426a8ea8492d191d1563
53
+ def filter_on_or_after(date, rollup = nil, rollup_type = nil)
54
+ make_filter_query "on_or_after", value_str(date), rollup, rollup_type
55
+ end
56
+
57
+ # @param [String] rollup Rollup name
58
+ # @param [String] rollup_type Rollup type
59
+ # @return [NotionRubyMapping::Query] generated Query object
60
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#707e7e848dc9417998420b65024542db
61
+ def filter_past_week(rollup = nil, rollup_type = nil)
62
+ make_filter_query "past_week", {}, rollup, rollup_type
63
+ end
64
+
65
+ # @param [String] rollup Rollup name
66
+ # @param [String] rollup_type Rollup type
67
+ # @return [NotionRubyMapping::Query] generated Query object
68
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#7b2d05c549204c2eb68d95020d7b97c5
69
+ def filter_past_month(rollup = nil, rollup_type = nil)
70
+ make_filter_query "past_month", {}, rollup, rollup_type
71
+ end
72
+
73
+ # @param [String] rollup Rollup name
74
+ # @param [String] rollup_type Rollup type
75
+ # @return [NotionRubyMapping::Query] generated Query object
76
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#9c8bf0a2398a41c8a0714a62afca3aa8
77
+ def filter_past_year(rollup = nil, rollup_type = nil)
78
+ make_filter_query "past_year", {}, rollup, rollup_type
79
+ end
80
+
81
+ # @param [String] rollup Rollup name
82
+ # @param [String] rollup_type Rollup type
83
+ # @return [NotionRubyMapping::Query] generated Query object
84
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#d9dc189ee8244ba8a6c863259eaa9984
85
+ def filter_next_week(rollup = nil, rollup_type = nil)
86
+ make_filter_query "next_week", {}, rollup, rollup_type
87
+ end
88
+
89
+ # @param [String] rollup Rollup name
90
+ # @param [String] rollup_type Rollup type
91
+ # @return [NotionRubyMapping::Query] generated Query object
92
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#0edb4dffbe6b403882255e870cc71066
93
+ def filter_next_month(rollup = nil, rollup_type = nil)
94
+ make_filter_query "next_month", {}, rollup, rollup_type
95
+ end
96
+
97
+ # @param [String] rollup Rollup name
98
+ # @param [String] rollup_type Rollup type
99
+ # @return [NotionRubyMapping::Query] generated Query object
100
+ # @see https://www.notion.so/hkob/CreatedTimeProperty-bb979ff02dc04efa9733da1003efa871#b59c73dd4b1a488f95d3e8cd19853709
101
+ def filter_next_year(rollup = nil, rollup_type = nil)
102
+ make_filter_query "next_year", {}, rollup, rollup_type
103
+ end
104
+
105
+ protected
106
+
107
+ # @param [Date, Time, DateTime, String, nil] obj
108
+ # @return [String] iso8601 format string
109
+ def value_str(obj)
110
+ case obj
111
+ when Date
112
+ obj.iso8601
113
+ when Time
114
+ obj.strftime("%Y-%m-%dT%H:%M:%S%:z")
115
+ when DateTime
116
+ obj.iso8601
117
+ else
118
+ obj
119
+ end
120
+ end
121
+ end
122
+ end
@@ -10,6 +10,7 @@ module NotionRubyMapping
10
10
  ## Common methods
11
11
 
12
12
  # @return [Hash]
13
+ # @see https://www.notion.so/hkob/DateProperty-c6e815c060cb430889dbb33b697f00c6#e64792d3d35c439e8123f108987becc3
13
14
  def date
14
15
  @json
15
16
  end
@@ -17,12 +18,16 @@ module NotionRubyMapping
17
18
  ## Page property only methods
18
19
 
19
20
  # @return [Date, Time, DateTime, String]
21
+ # @see https://www.notion.so/hkob/DateProperty-c6e815c060cb430889dbb33b697f00c6#15f2088e012549cbae93de14ce14d352
20
22
  def end_date
23
+ assert_page_property __method__
21
24
  @json["end"]
22
25
  end
23
26
 
24
27
  # @param [Date, Time, DateTime, String] edt
28
+ # @see https://www.notion.so/hkob/DateProperty-c6e815c060cb430889dbb33b697f00c6#944c02096101429084527c22155683bf
25
29
  def end_date=(edt)
30
+ assert_page_property __method__
26
31
  @will_update = true
27
32
  sdt = start_date
28
33
  edt = nil if sdt.class != edt.class || sdt > edt
@@ -30,12 +35,16 @@ module NotionRubyMapping
30
35
  end
31
36
 
32
37
  # @return [Date, Time, DateTime, String]
38
+ # @see https://www.notion.so/hkob/DateProperty-c6e815c060cb430889dbb33b697f00c6#d37097c7a3f7481e9b33a7aaae783888
33
39
  def start_date
40
+ assert_page_property __method__
34
41
  @json["start"]
35
42
  end
36
43
 
37
44
  # @param [Date, Time, DateTime, String] sdt
45
+ # @see https://www.notion.so/hkob/DateProperty-c6e815c060cb430889dbb33b697f00c6#4f5931f1588a43f7857af8ab2d73df74
38
46
  def start_date=(sdt)
47
+ assert_page_property __method__
39
48
  @will_update = true
40
49
  edt = end_date
41
50
  @json["end"] = nil if sdt.class != edt.class || sdt > edt
@@ -43,12 +52,16 @@ module NotionRubyMapping
43
52
  end
44
53
 
45
54
  # @return [String]
55
+ # @see https://www.notion.so/hkob/DateProperty-c6e815c060cb430889dbb33b697f00c6#f892cde82d9a44a0850d69878e31b216
46
56
  def time_zone
57
+ assert_page_property __method__
47
58
  @json["time_zone"]
48
59
  end
49
60
 
50
61
  # @param [String] tzone
62
+ # @see https://www.notion.so/hkob/DateProperty-c6e815c060cb430889dbb33b697f00c6#2529a5ac7982466f9f19299fc51e02a8
51
63
  def time_zone=(tzone)
64
+ assert_page_property __method__
52
65
  @will_update = true
53
66
  @json["time_zone"] = tzone
54
67
  end
@@ -22,6 +22,7 @@ module NotionRubyMapping
22
22
 
23
23
  # @param [String] str
24
24
  def email=(email)
25
+ assert_page_property __method__
25
26
  @will_update = true
26
27
  @json = email
27
28
  end
@@ -6,20 +6,17 @@ module NotionRubyMapping
6
6
  include IsEmptyIsNotEmpty
7
7
  TYPE = "files"
8
8
 
9
- ### Public announced methods
10
-
11
- ## Common methods
9
+ attr_reader :files
12
10
 
13
- # @return [Hash]
14
- def files
15
- @json
16
- end
11
+ ### Public announced methods
17
12
 
18
13
  ## Page property only methods
19
14
 
20
15
  def files=(files = [])
16
+ assert_page_property __method__
21
17
  @will_update = true
22
- @json = Array(files).map { |url| url_to_hash url }
18
+ @files = Array(files).map { |url| FileObject.file_object url }
19
+ @file_names = Array(files)
23
20
  end
24
21
 
25
22
  ### Not public announced methods
@@ -31,23 +28,39 @@ module NotionRubyMapping
31
28
  def initialize(name, will_update: false, base_type: :page, json: nil, files: [])
32
29
  super name, will_update: will_update, base_type: base_type
33
30
  if database?
34
- @json = json || {}
31
+ @files = json || {}
32
+ elsif json
33
+ @files = json.map { |sub_json| FileObject.new json: sub_json }
34
+ @file_names = json.map { |sub_json| sub_json["name"] }
35
+ elsif !files.empty?
36
+ @files = Array(files).map { |url| FileObject.file_object url }
37
+ @file_names = Array(files)
35
38
  else
36
- @json = json || []
37
- @json = Array(files).map { |url| url_to_hash url } unless files.empty?
39
+ @files = []
38
40
  end
39
41
  end
40
42
 
41
43
  # @return [Hash]
42
44
  def property_values_json
43
45
  assert_page_property __method__
44
- if @json.map { |f| f["type"] }.include? "file"
46
+ if @files.map(&:type).include? "file"
45
47
  {}
46
48
  else
47
- {@name => {"files" => @json, "type" => "files"}}
49
+ files = @files.map(&:property_values_json)
50
+ @file_names.each_with_index { |name, i| files[i]["name"] = name } if @file_names
51
+ {@name => {"files" => files, "type" => "files"}}
48
52
  end
49
53
  end
50
54
 
55
+ def update_from_json(json)
56
+ return if database?
57
+
58
+ @files = json["files"].map { |sub_json| FileObject.new json: sub_json }
59
+ @file_names = json["files"].map { |sub_json| sub_json["name"] }
60
+ @will_update = false
61
+ p self
62
+ end
63
+
51
64
  protected
52
65
 
53
66
  # @param [String] url
@@ -13,18 +13,22 @@ module NotionRubyMapping
13
13
  ## Common methods
14
14
 
15
15
  # @return [Hash]
16
+ # @see https://www.notion.so/hkob/FormulaProperty-d6b22ca70822407a9fef0bac8925cd0d#4fda982987a141ec962e4cd76cb81f76
16
17
  def formula
17
18
  @json
18
19
  end
19
20
 
20
21
  ## Database property only methods
21
22
 
23
+ # @return [String] formula_expression
24
+ # @see https://www.notion.so/hkob/FormulaProperty-d6b22ca70822407a9fef0bac8925cd0d#a24d2a7b99254d2a9226c00153f1d516
22
25
  def formula_expression
23
26
  assert_database_property __method__
24
27
  @json["expression"]
25
28
  end
26
29
 
27
30
  # @param [String] formula
31
+ # @see https://www.notion.so/hkob/FormulaProperty-d6b22ca70822407a9fef0bac8925cd0d#fdb3aaa8d0474440b7ed941673ee13b7
28
32
  def formula_expression=(f_e)
29
33
  assert_database_property __method__
30
34
  @will_update = true
@@ -10,6 +10,7 @@ module NotionRubyMapping
10
10
  ## Common methods
11
11
 
12
12
  # @return [NotionRubyMapping::UserObject, Hash]
13
+ # @see https://www.notion.so/hkob/LastEditedByProperty-18379cbaebda495393445e4152076d66#278312b8cece457aa1f4bdbb9a7af063
13
14
  def last_edited_by
14
15
  @json
15
16
  end
@@ -10,6 +10,7 @@ module NotionRubyMapping
10
10
  ## Common methods
11
11
 
12
12
  # @return [Date, Hash]
13
+ # @see https://www.notion.so/hkob/LastEditedTimeProperty-5058fd594f6748a48fd4db52535f4c18#a7b568bf997c44d49cdbe4bfbf29824e
13
14
  def last_edited_time
14
15
  @json
15
16
  end
@@ -3,8 +3,6 @@
3
3
  module NotionRubyMapping
4
4
  # MultiSelect property
5
5
  class MultiSelectProperty < MultiProperty
6
- include ContainsDoesNotContain
7
- include IsEmptyIsNotEmpty
8
6
  TYPE = "multi_select"
9
7
 
10
8
  ### Public announced methods
@@ -27,7 +25,8 @@ module NotionRubyMapping
27
25
  # @param [String] name
28
26
  # @param [String] color
29
27
  # @return [Array] added array
30
- def add_multi_select_options(name:, color:)
28
+ # @see https://www.notion.so/hkob/MultiSelectProperty-b90bba1c55d540ba97131bb013d4ca74#bcac830b00e04cb6bf7dbbb110d95667
29
+ def add_multi_select_option(name:, color:)
31
30
  edit_multi_select_options << {"name" => name, "color" => color}
32
31
  end
33
32
 
@@ -13,6 +13,7 @@ module NotionRubyMapping
13
13
  ## Common methods
14
14
 
15
15
  # @return [Numeric, Hash]
16
+ # @see https://www.notion.so/hkob/NumberProperty-964ebc1948074d7ca8340187aa352d40#571b41dd33ae42039e6b982a502b7ac7
16
17
  def number
17
18
  @json
18
19
  end
@@ -20,6 +21,7 @@ module NotionRubyMapping
20
21
  ## Database property only methods
21
22
 
22
23
  # @return [String] new or settled format
24
+ # @see https://www.notion.so/hkob/NumberProperty-964ebc1948074d7ca8340187aa352d40#5e3682ed9e124d518f735b236787d7a7
23
25
  def format
24
26
  assert_database_property __method__
25
27
  @json["format"]
@@ -27,6 +29,7 @@ module NotionRubyMapping
27
29
 
28
30
  # @param [String] format
29
31
  # @return [String] settled format
32
+ # @see https://www.notion.so/hkob/NumberProperty-964ebc1948074d7ca8340187aa352d40#89695432078643e48307c348e2983456
30
33
  def format=(format)
31
34
  assert_database_property __method__
32
35
  @will_update = true
@@ -37,6 +40,7 @@ module NotionRubyMapping
37
40
 
38
41
  # @param [Numeric] num
39
42
  # @return [Numeric] settled number
43
+ # @see https://www.notion.so/hkob/NumberProperty-964ebc1948074d7ca8340187aa352d40#a3f28cc7029046878dfd694b5b33e8d8
40
44
  def number=(num)
41
45
  assert_page_property __method__
42
46
  @will_update = true
@@ -10,22 +10,27 @@ module NotionRubyMapping
10
10
  ## Common methods
11
11
 
12
12
  # @return [Array, Hash]
13
+ # @see https://www.notion.so/hkob/PeopleProperty-144355d25f0e4feba9ae39fe28ca6ae7#7e3e56c2080d4834902cfa0223e807e5
13
14
  def people
14
15
  @json
15
16
  end
16
17
 
17
18
  ## Page property only methods
18
19
 
19
- # @param [String, NotionRubyMapping::UserObject] user_or_user_id
20
+ # @param [String, NotionRubyMapping::UserObject] user_id_or_uo
20
21
  # @return [Array<UserObject>]
21
- def add_person(user_or_user_id)
22
+ # @see https://www.notion.so/hkob/PeopleProperty-144355d25f0e4feba9ae39fe28ca6ae7#26344b145a254cc58dd845780e0a26ea
23
+ def add_person(user_id_or_uo)
24
+ assert_page_property __method__
22
25
  @will_update = true
23
- @json << UserObject.user_object(user_or_user_id)
26
+ @json << UserObject.user_object(user_id_or_uo)
24
27
  end
25
28
 
26
29
  # @param [Hash] people
27
30
  # @return [Array, nil] replaced array
31
+ # @see https://www.notion.so/hkob/PeopleProperty-144355d25f0e4feba9ae39fe28ca6ae7#815acfef9a664e3e8915fb31b8fefc42
28
32
  def people=(people)
33
+ assert_page_property __method__
29
34
  @will_update = true
30
35
  @json = people ? Array(people).map { |uo| UserObject.user_object(uo) } : []
31
36
  end
@@ -14,13 +14,17 @@ module NotionRubyMapping
14
14
  ## Common methods
15
15
 
16
16
  # @return [String, Hash, nil] phone number (Page), {} (Database)
17
+ # @see https://www.notion.so/hkob/PhoneNumberProperty-5df14aaa938c4888aecd53ab6752d2e6#40bceda04fe04c64b932d6a1ed180eaa
17
18
  def phone_number
18
19
  @json
19
20
  end
20
21
 
21
22
  ## Page property only methods
22
23
 
24
+ # @param [String] phone_number
25
+ # @see https://www.notion.so/hkob/PhoneNumberProperty-5df14aaa938c4888aecd53ab6752d2e6#dc7e00e0558d40f79ca5cade1fccef29
23
26
  def phone_number=(phone_number)
27
+ assert_page_property __method__
24
28
  @will_update = true
25
29
  @json = phone_number
26
30
  end