notion_ruby_mapping 0.2.2 → 0.3.1
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 +4 -4
- data/README.md +503 -148
- data/env.yml.sample +1 -0
- data/examples/change_title.md +26 -0
- data/examples/renumbering_pages.md +20 -0
- data/examples/set_icon_to_all_icon_unsettled_pages.md +30 -0
- data/lib/notion_ruby_mapping/base.rb +129 -71
- data/lib/notion_ruby_mapping/checkbox_property.rb +27 -12
- data/lib/notion_ruby_mapping/created_by_property.rb +22 -10
- data/lib/notion_ruby_mapping/created_time_property.rb +16 -14
- data/lib/notion_ruby_mapping/database.rb +74 -10
- data/lib/notion_ruby_mapping/date_property.rb +67 -42
- data/lib/notion_ruby_mapping/email_property.rb +26 -16
- data/lib/notion_ruby_mapping/files_property.rb +40 -24
- data/lib/notion_ruby_mapping/formula_property.rb +51 -10
- data/lib/notion_ruby_mapping/last_edited_by_property.rb +22 -9
- data/lib/notion_ruby_mapping/last_edited_time_property.rb +16 -14
- data/lib/notion_ruby_mapping/list.rb +3 -0
- data/lib/notion_ruby_mapping/mention_object.rb +26 -1
- data/lib/notion_ruby_mapping/multi_select_property.rb +83 -21
- data/lib/notion_ruby_mapping/notion_cache.rb +17 -13
- data/lib/notion_ruby_mapping/number_property.rb +71 -10
- data/lib/notion_ruby_mapping/page.rb +32 -10
- data/lib/notion_ruby_mapping/payload.rb +21 -3
- data/lib/notion_ruby_mapping/people_property.rb +47 -19
- data/lib/notion_ruby_mapping/phone_number_property.rb +26 -15
- data/lib/notion_ruby_mapping/property.rb +142 -49
- data/lib/notion_ruby_mapping/property_cache.rb +31 -3
- data/lib/notion_ruby_mapping/query.rb +10 -0
- data/lib/notion_ruby_mapping/relation_property.rb +74 -21
- data/lib/notion_ruby_mapping/rich_text_array.rb +81 -0
- data/lib/notion_ruby_mapping/rich_text_object.rb +58 -1
- data/lib/notion_ruby_mapping/rich_text_property.rb +12 -1
- data/lib/notion_ruby_mapping/rollup_property.rb +82 -10
- data/lib/notion_ruby_mapping/select_property.rb +88 -13
- data/lib/notion_ruby_mapping/text_object.rb +0 -51
- data/lib/notion_ruby_mapping/text_property.rb +19 -45
- data/lib/notion_ruby_mapping/title_property.rb +12 -1
- data/lib/notion_ruby_mapping/url_property.rb +26 -15
- data/lib/notion_ruby_mapping/user_object.rb +4 -4
- data/lib/notion_ruby_mapping/version.rb +1 -1
- data/lib/notion_ruby_mapping.rb +2 -1
- data/tools/an +103 -0
- metadata +7 -2
@@ -8,28 +8,89 @@ module NotionRubyMapping
|
|
8
8
|
include IsEmptyIsNotEmpty
|
9
9
|
TYPE = "number"
|
10
10
|
|
11
|
+
### Public announced methods
|
12
|
+
|
13
|
+
## Common methods
|
14
|
+
|
15
|
+
# @return [Numeric, Hash]
|
16
|
+
def number
|
17
|
+
@json
|
18
|
+
end
|
19
|
+
|
20
|
+
## Database property only methods
|
21
|
+
|
22
|
+
# @return [String] new or settled format
|
23
|
+
def format
|
24
|
+
assert_database_property __method__
|
25
|
+
@json["format"]
|
26
|
+
end
|
27
|
+
|
28
|
+
# @param [String] format
|
29
|
+
# @return [String] settled format
|
30
|
+
def format=(format)
|
31
|
+
assert_database_property __method__
|
32
|
+
@will_update = true
|
33
|
+
@json["format"] = format
|
34
|
+
end
|
35
|
+
|
36
|
+
## Page property only methods
|
37
|
+
|
38
|
+
# @param [Numeric] num
|
39
|
+
# @return [Numeric] settled number
|
40
|
+
def number=(num)
|
41
|
+
assert_page_property __method__
|
42
|
+
@will_update = true
|
43
|
+
@json = num
|
44
|
+
end
|
45
|
+
|
46
|
+
### Not public announced methods
|
47
|
+
|
48
|
+
## Common methods
|
49
|
+
|
11
50
|
# @param [String] name Property name
|
12
|
-
# @param [Float, Integer]
|
13
|
-
def initialize(name, will_update: false,
|
14
|
-
super name, will_update: will_update
|
15
|
-
@
|
51
|
+
# @param [Float, Integer, Hash] json Number value or format Hash
|
52
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, format: nil)
|
53
|
+
super name, will_update: will_update, base_type: base_type
|
54
|
+
@json = json
|
55
|
+
@json ||= {"format" => (format || "number")} if database?
|
16
56
|
end
|
17
|
-
attr_reader :number
|
18
57
|
|
19
58
|
# @param [Hash] json
|
59
|
+
# @return [NotionRubyMapping::NumberProperty]
|
20
60
|
def update_from_json(json)
|
21
61
|
@will_update = false
|
22
|
-
@
|
62
|
+
@json = json["number"]
|
63
|
+
self
|
64
|
+
end
|
65
|
+
|
66
|
+
## Database property only methods
|
67
|
+
|
68
|
+
# @return [Hash]
|
69
|
+
def update_property_schema_json
|
70
|
+
assert_database_property __method__
|
71
|
+
ans = super
|
72
|
+
return ans if ans != {} || !@will_update
|
73
|
+
|
74
|
+
ans[@name] ||= {}
|
75
|
+
ans[@name]["number"] = @json
|
76
|
+
ans
|
23
77
|
end
|
24
78
|
|
79
|
+
## Page property only methods
|
80
|
+
|
25
81
|
# @return [Hash]
|
26
82
|
def property_values_json
|
27
|
-
|
83
|
+
assert_page_property __method__
|
84
|
+
{@name => {"number" => @json, "type" => "number"}}
|
28
85
|
end
|
29
86
|
|
30
|
-
|
31
|
-
|
32
|
-
|
87
|
+
protected
|
88
|
+
|
89
|
+
## Database property only methods
|
90
|
+
|
91
|
+
# @return [Hash]
|
92
|
+
def property_schema_json_sub
|
93
|
+
{"format" => format}
|
33
94
|
end
|
34
95
|
end
|
35
96
|
end
|
@@ -3,26 +3,48 @@
|
|
3
3
|
module NotionRubyMapping
|
4
4
|
# Notion page object
|
5
5
|
class Page < Base
|
6
|
-
|
7
|
-
NotionCache.instance.page id
|
8
|
-
end
|
6
|
+
### Public announced methods
|
9
7
|
|
10
|
-
# @
|
11
|
-
|
12
|
-
|
8
|
+
# @param [String] id
|
9
|
+
# @return [NotionRubyMapping::Page, String]
|
10
|
+
def self.find(id, dry_run: false)
|
11
|
+
nc = NotionCache.instance
|
12
|
+
if dry_run
|
13
|
+
Base.dry_run_script :get, nc.page_path(id)
|
14
|
+
else
|
15
|
+
nc.page id
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
update_json @nc.create_page_request(property_values_json)
|
19
|
+
def create_child_database(title, *assign)
|
20
|
+
Database.new json: {"title" => [TextObject.new(title).property_values_json]},
|
21
|
+
assign: assign, parent: {"type" => "page_id", "page_id" => @id}
|
19
22
|
end
|
20
23
|
|
21
24
|
protected
|
22
25
|
|
26
|
+
# @return [NotionRubyMapping::Base, String]
|
27
|
+
def create(dry_run: false)
|
28
|
+
if dry_run
|
29
|
+
dry_run_script :post, @nc.pages_path, :property_values_json
|
30
|
+
else
|
31
|
+
@new_record = false
|
32
|
+
update_json @nc.create_page_request(property_values_json)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
23
36
|
# @return [Hash]
|
24
37
|
def reload_json
|
25
38
|
@nc.page_request @id
|
26
39
|
end
|
40
|
+
|
41
|
+
# @return [NotionRubyMapping::Base, String]
|
42
|
+
def update(dry_run: false)
|
43
|
+
if dry_run
|
44
|
+
dry_run_script :patch, @nc.page_path(@id), :property_values_json
|
45
|
+
else
|
46
|
+
update_json @nc.update_page_request(@id, property_values_json)
|
47
|
+
end
|
48
|
+
end
|
27
49
|
end
|
28
50
|
end
|
@@ -22,10 +22,28 @@ module NotionRubyMapping
|
|
22
22
|
self
|
23
23
|
end
|
24
24
|
|
25
|
+
# @param [Hash] json
|
26
|
+
def merge_property(json)
|
27
|
+
@json["properties"] ||= {}
|
28
|
+
@json["properties"].merge!(json)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Hash] created json
|
32
|
+
# @param [Object] others
|
33
|
+
def property_values_json(*others)
|
34
|
+
others.compact.reduce({}) { |hash, o| hash.merge o.property_values_json }.merge @json
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Hash] created json
|
38
|
+
# @param [Object] others
|
39
|
+
def property_schema_json(*others)
|
40
|
+
others.compact.reduce({}) { |hash, o| hash.merge o.property_schema_json }.merge @json
|
41
|
+
end
|
42
|
+
|
25
43
|
# @return [Hash] created json
|
26
|
-
# @param [
|
27
|
-
def
|
28
|
-
|
44
|
+
# @param [Object] others
|
45
|
+
def update_property_schema_json(*others)
|
46
|
+
others.compact.reduce({}) { |hash, o| hash.merge o.update_property_schema_json }.merge @json
|
29
47
|
end
|
30
48
|
|
31
49
|
# @return [Hash] {}
|
@@ -5,41 +5,69 @@ module NotionRubyMapping
|
|
5
5
|
class PeopleProperty < MultiProperty
|
6
6
|
TYPE = "people"
|
7
7
|
|
8
|
+
### Public announced methods
|
9
|
+
|
10
|
+
## Common methods
|
11
|
+
|
12
|
+
# @return [Array, Hash]
|
13
|
+
def people
|
14
|
+
@json
|
15
|
+
end
|
16
|
+
|
17
|
+
## Page property only methods
|
18
|
+
|
19
|
+
# @param [String, NotionRubyMapping::UserObject] user_or_user_id
|
20
|
+
# @return [Array<UserObject>]
|
21
|
+
def add_person(user_or_user_id)
|
22
|
+
@will_update = true
|
23
|
+
@json << UserObject.user_object(user_or_user_id)
|
24
|
+
end
|
25
|
+
|
26
|
+
# @param [Hash] people
|
27
|
+
# @return [Array, nil] replaced array
|
28
|
+
def people=(people)
|
29
|
+
@will_update = true
|
30
|
+
@json = people ? Array(people).map { |uo| UserObject.user_object(uo) } : []
|
31
|
+
end
|
32
|
+
|
33
|
+
### Not public announced methods
|
34
|
+
|
35
|
+
## Common methods
|
36
|
+
|
8
37
|
# @param [String] name
|
9
38
|
# @param [Hash] json
|
10
39
|
# @param [Array] people ids for people
|
11
|
-
def initialize(name, will_update: false, json: nil, people: nil)
|
12
|
-
super name, will_update: will_update
|
13
|
-
@
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
40
|
+
def initialize(name, will_update: false, base_type: :page, json: nil, people: nil)
|
41
|
+
super name, will_update: will_update, base_type: base_type
|
42
|
+
@json = if database?
|
43
|
+
{}
|
44
|
+
elsif people
|
45
|
+
Array(people).map { |uo| UserObject.user_object(uo) }
|
46
|
+
elsif json
|
47
|
+
json.map { |p| UserObject.new json: p }
|
48
|
+
else
|
49
|
+
[]
|
50
|
+
end
|
20
51
|
end
|
21
52
|
|
53
|
+
## Page property only methods
|
54
|
+
|
22
55
|
# @return [Hash] created json
|
23
56
|
def property_values_json
|
57
|
+
assert_page_property __method__
|
24
58
|
{
|
25
59
|
@name => {
|
26
60
|
"type" => "people",
|
27
|
-
"people" => @
|
61
|
+
"people" => @json.map(&:property_values_json),
|
28
62
|
},
|
29
63
|
}
|
30
64
|
end
|
31
65
|
|
32
|
-
# @param [
|
66
|
+
# @param [Array] json
|
67
|
+
# @return [Hash, Array]
|
33
68
|
def update_from_json(json)
|
34
69
|
@will_update = false
|
35
|
-
@
|
36
|
-
end
|
37
|
-
|
38
|
-
# @param [Hash] people
|
39
|
-
# @return [Array, nil] settled array
|
40
|
-
def people=(people)
|
41
|
-
@will_update = true
|
42
|
-
@people = people ? Array(people).map { |uo| UserObject.user_object(uo) } : []
|
70
|
+
@json = database? ? {} : json["people"].map { |p_json| UserObject.new json: p_json }
|
43
71
|
end
|
44
72
|
end
|
45
73
|
end
|
@@ -9,28 +9,39 @@ module NotionRubyMapping
|
|
9
9
|
include IsEmptyIsNotEmpty
|
10
10
|
TYPE = "phone_number"
|
11
11
|
|
12
|
+
### Public announced methods
|
13
|
+
|
14
|
+
## Common methods
|
15
|
+
|
16
|
+
# @return [String, Hash, nil] phone number (Page), {} (Database)
|
17
|
+
def phone_number
|
18
|
+
@json
|
19
|
+
end
|
20
|
+
|
21
|
+
## Page property only methods
|
22
|
+
|
23
|
+
def phone_number=(phone_number)
|
24
|
+
@will_update = true
|
25
|
+
@json = phone_number
|
26
|
+
end
|
27
|
+
|
28
|
+
### Not public announced methods
|
29
|
+
|
30
|
+
## Common methods
|
31
|
+
|
12
32
|
# @param [String] name Property name
|
13
33
|
# @param [String] phone_number phone_number value (optional)
|
14
|
-
def initialize(name, will_update: false,
|
15
|
-
super name, will_update: will_update
|
16
|
-
@
|
34
|
+
def initialize(name, will_update: false, base_type: :page, json: nil)
|
35
|
+
super name, will_update: will_update, base_type: base_type
|
36
|
+
@json = database? ? {} : json
|
17
37
|
end
|
18
|
-
attr_reader :phone_number
|
19
38
|
|
20
|
-
|
21
|
-
def update_from_json(json)
|
22
|
-
@will_update = false
|
23
|
-
@phone_number = json["phone_number"]
|
24
|
-
end
|
39
|
+
## Page property only methods
|
25
40
|
|
26
41
|
# @return [Hash]
|
27
42
|
def property_values_json
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
def phone_number=(phone_number)
|
32
|
-
@will_update = true
|
33
|
-
@phone_number = phone_number
|
43
|
+
assert_page_property __method__
|
44
|
+
{@name => {"phone_number" => @json, "type" => "phone_number"}}
|
34
45
|
end
|
35
46
|
end
|
36
47
|
end
|
@@ -3,16 +3,87 @@
|
|
3
3
|
module NotionRubyMapping
|
4
4
|
# abstract class for property
|
5
5
|
class Property
|
6
|
+
### Public announced methods
|
7
|
+
|
8
|
+
## Common methods
|
9
|
+
|
10
|
+
attr_reader :name, :will_update
|
11
|
+
|
12
|
+
## Database property only methods
|
13
|
+
|
14
|
+
# @param [String] new_name
|
15
|
+
def new_name=(new_name)
|
16
|
+
assert_database_property __method__
|
17
|
+
@will_update = true
|
18
|
+
@new_name = new_name
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [NotionRubyMapping::Property] self
|
22
|
+
def remove
|
23
|
+
assert_database_property __method__
|
24
|
+
@will_update = true
|
25
|
+
@remove = true
|
26
|
+
self
|
27
|
+
end
|
28
|
+
|
29
|
+
### Not public announced methods
|
30
|
+
|
31
|
+
## Common methods
|
32
|
+
|
6
33
|
# @param [String] name Property name
|
7
34
|
# @return [Property] generated Property object
|
8
|
-
def initialize(name, will_update: false)
|
35
|
+
def initialize(name, will_update: false, base_type: :page)
|
9
36
|
@name = name
|
10
37
|
@will_update = will_update
|
38
|
+
@base_type = base_type
|
39
|
+
@create = false
|
40
|
+
@remove = false
|
41
|
+
@new_name = nil
|
42
|
+
@json = nil
|
43
|
+
end
|
44
|
+
|
45
|
+
# @param [String] name
|
46
|
+
# @param [Hash] input_json
|
47
|
+
# @return [NotionRubyMapping::Property, nil] generated Property object
|
48
|
+
def self.create_from_json(name, input_json, base_type = :page)
|
49
|
+
raise StandardError, "Property not found: #{name}:#{input_json}" if input_json.nil?
|
50
|
+
|
51
|
+
type = input_json["type"]
|
52
|
+
klass = {
|
53
|
+
"checkbox" => CheckboxProperty,
|
54
|
+
"created_time" => CreatedTimeProperty,
|
55
|
+
"date" => DateProperty,
|
56
|
+
"formula" => FormulaProperty,
|
57
|
+
"last_edited_time" => LastEditedTimeProperty,
|
58
|
+
"rollup" => RollupProperty,
|
59
|
+
"email" => EmailProperty,
|
60
|
+
"files" => FilesProperty,
|
61
|
+
"created_by" => CreatedByProperty,
|
62
|
+
"last_edited_by" => LastEditedByProperty,
|
63
|
+
"multi_select" => MultiSelectProperty,
|
64
|
+
"people" => PeopleProperty,
|
65
|
+
"relation" => RelationProperty,
|
66
|
+
"number" => NumberProperty,
|
67
|
+
"phone_number" => PhoneNumberProperty,
|
68
|
+
"select" => SelectProperty,
|
69
|
+
"title" => TitleProperty,
|
70
|
+
"rich_text" => RichTextProperty,
|
71
|
+
"url" => UrlProperty,
|
72
|
+
}[type]
|
73
|
+
raise StandardError, "Irregular property type: #{type}" unless klass
|
74
|
+
|
75
|
+
klass.new name, json: input_json[type], base_type: base_type
|
11
76
|
end
|
12
|
-
attr_reader :name
|
13
77
|
|
14
|
-
# @return [
|
15
|
-
|
78
|
+
# @return [FalseClass]
|
79
|
+
def clear_will_update
|
80
|
+
@will_update = false
|
81
|
+
end
|
82
|
+
|
83
|
+
# @return [TrueClass, FalseClass] true if database property
|
84
|
+
def database?
|
85
|
+
@base_type == :database
|
86
|
+
end
|
16
87
|
|
17
88
|
# @param [String] key query parameter
|
18
89
|
# @param [Object] value query value
|
@@ -20,69 +91,83 @@ module NotionRubyMapping
|
|
20
91
|
def make_filter_query(key, value, rollup = nil, rollup_type = nil)
|
21
92
|
if rollup
|
22
93
|
Query.new filter: {"property" => @name, rollup => {rollup_type => {key => value}}}
|
94
|
+
elsif @name == "__timestamp__"
|
95
|
+
Query.new filter: {"timestamp" => type, type => {key => value}}
|
23
96
|
else
|
24
97
|
Query.new filter: {"property" => @name, type => {key => value}}
|
25
98
|
end
|
26
99
|
end
|
27
100
|
|
101
|
+
# @return [TrueClass, FalseClass] true if page property
|
102
|
+
def page?
|
103
|
+
@base_type == :page
|
104
|
+
end
|
105
|
+
|
106
|
+
# @param [Hash] json
|
107
|
+
def update_from_json(json)
|
108
|
+
@will_update = false
|
109
|
+
@json = json[type]
|
110
|
+
end
|
111
|
+
|
28
112
|
# @return [Symbol] property type
|
29
113
|
def type
|
30
114
|
self.class::TYPE
|
31
115
|
end
|
32
116
|
|
33
|
-
|
34
|
-
|
35
|
-
# @
|
36
|
-
def
|
37
|
-
raise StandardError, "
|
117
|
+
## Database property only methods
|
118
|
+
|
119
|
+
# @param [Symbol, nil] method
|
120
|
+
def assert_database_property(method)
|
121
|
+
raise StandardError, "#{method} can execute only Database property." unless database?
|
122
|
+
end
|
123
|
+
|
124
|
+
# @return [Hash]
|
125
|
+
def property_schema_json
|
126
|
+
assert_database_property __method__
|
127
|
+
{@name => {type => property_schema_json_sub}}
|
128
|
+
end
|
38
129
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
when "date"
|
47
|
-
DateProperty.new name, json: input_json["date"]
|
48
|
-
when "title"
|
49
|
-
TitleProperty.new name, json: input_json["title"]
|
50
|
-
when "rich_text"
|
51
|
-
RichTextProperty.new name, json: input_json["rich_text"]
|
52
|
-
when "checkbox"
|
53
|
-
CheckboxProperty.new name, checkbox: input_json["checkbox"]
|
54
|
-
when "people"
|
55
|
-
PeopleProperty.new name, json: input_json["people"]
|
56
|
-
when "email"
|
57
|
-
EmailProperty.new name, email: input_json["email"]
|
58
|
-
when "url"
|
59
|
-
UrlProperty.new name, url: input_json["url"]
|
60
|
-
when "phone_number"
|
61
|
-
PhoneNumberProperty.new name, phone_number: input_json["phone_number"]
|
62
|
-
when "files"
|
63
|
-
FilesProperty.new name, json: input_json["files"]
|
64
|
-
when "created_time"
|
65
|
-
CreatedTimeProperty.new name, created_time: input_json["created_time"]
|
66
|
-
when "last_edited_time"
|
67
|
-
LastEditedTimeProperty.new name, last_edited_time: input_json["last_edited_time"]
|
68
|
-
when "created_by"
|
69
|
-
CreatedByProperty.new name, json: input_json["created_by"]
|
70
|
-
when "last_edited_by"
|
71
|
-
LastEditedByProperty.new name, json: input_json["last_edited_by"]
|
72
|
-
when "formula"
|
73
|
-
FormulaProperty.new name, json: input_json["formula"]
|
74
|
-
when "rollup"
|
75
|
-
RollupProperty.new name, json: input_json["rollup"]
|
76
|
-
when "relation"
|
77
|
-
RelationProperty.new name, json: input_json["relation"]
|
130
|
+
# @return [Hash]
|
131
|
+
def update_property_schema_json
|
132
|
+
assert_database_property __method__
|
133
|
+
if @remove
|
134
|
+
{@name => nil}
|
135
|
+
elsif @new_name
|
136
|
+
{@name => {"name" => @new_name}}
|
78
137
|
else
|
79
|
-
|
138
|
+
{}
|
80
139
|
end
|
81
140
|
end
|
141
|
+
|
142
|
+
## Page property only methods
|
143
|
+
|
144
|
+
# @param [Symbol, nil] method
|
145
|
+
def assert_page_property(method)
|
146
|
+
raise StandardError, "#{method} can execute only Page property." unless @base_type == :page
|
147
|
+
end
|
148
|
+
|
149
|
+
## Page property only methods
|
150
|
+
|
151
|
+
# @return [Hash] {} created_time cannot be updated
|
152
|
+
def property_values_json
|
153
|
+
assert_page_property __method__
|
154
|
+
{}
|
155
|
+
end
|
156
|
+
|
157
|
+
protected
|
158
|
+
|
159
|
+
## Database property only methods
|
160
|
+
|
161
|
+
# @return [Hash]
|
162
|
+
def property_schema_json_sub
|
163
|
+
{}
|
164
|
+
end
|
82
165
|
end
|
83
166
|
|
84
167
|
# module for make query of equals and does_not_equal
|
85
168
|
module EqualsDoesNotEqual
|
169
|
+
### Public announced methods
|
170
|
+
|
86
171
|
# @param [String, Number] value Query value
|
87
172
|
# @return [NotionRubyMapping::Query] generated Query object
|
88
173
|
def filter_equals(value, rollup = nil, rollup_type = nil)
|
@@ -98,6 +183,8 @@ module NotionRubyMapping
|
|
98
183
|
|
99
184
|
# module for make query of contains and does_not_contain
|
100
185
|
module ContainsDoesNotContain
|
186
|
+
### Public announced methods
|
187
|
+
|
101
188
|
# @param [String] value Query value
|
102
189
|
# @return [NotionRubyMapping::Query] generated Query object
|
103
190
|
def filter_contains(value, rollup = nil, rollup_type = nil)
|
@@ -113,6 +200,8 @@ module NotionRubyMapping
|
|
113
200
|
|
114
201
|
# module for make query of starts_with and ends_with
|
115
202
|
module StartsWithEndsWith
|
203
|
+
### Public announced methods
|
204
|
+
|
116
205
|
# @param [String] value Query value
|
117
206
|
# @return [NotionRubyMapping::Query] generated Query object
|
118
207
|
def filter_starts_with(value, rollup = nil, rollup_type = nil)
|
@@ -128,6 +217,8 @@ module NotionRubyMapping
|
|
128
217
|
|
129
218
|
# module for make query of is_empty and is_not_empty
|
130
219
|
module IsEmptyIsNotEmpty
|
220
|
+
### Public announced methods
|
221
|
+
|
131
222
|
# @return [NotionRubyMapping::Query] generated Query object
|
132
223
|
def filter_is_empty(rollup = nil, rollup_type = nil)
|
133
224
|
make_filter_query "is_empty", true, rollup, rollup_type
|
@@ -141,6 +232,8 @@ module NotionRubyMapping
|
|
141
232
|
|
142
233
|
# module for make query of starts_with and ends_with
|
143
234
|
module GreaterThanLessThan
|
235
|
+
### Public announced methods
|
236
|
+
|
144
237
|
# @param [Number] value Query value
|
145
238
|
# @return [NotionRubyMapping::Query] generated Query object
|
146
239
|
def filter_greater_than(value, rollup = nil, rollup_type = nil)
|
@@ -4,16 +4,17 @@ module NotionRubyMapping
|
|
4
4
|
# PropertyCache class
|
5
5
|
class PropertyCache
|
6
6
|
include Enumerable
|
7
|
-
def initialize(json = {})
|
7
|
+
def initialize(json = {}, base_type: :page)
|
8
8
|
@properties = {}
|
9
9
|
@json = json
|
10
|
+
@base_type = base_type
|
10
11
|
end
|
11
12
|
attr_writer :json
|
12
13
|
|
13
14
|
# @param [String] key
|
14
15
|
# @return [Property] Property for key
|
15
16
|
def [](key)
|
16
|
-
@properties[key] ||= Property.create_from_json key, @json[key]
|
17
|
+
@properties[key] ||= Property.create_from_json key, @json[key], @base_type
|
17
18
|
end
|
18
19
|
|
19
20
|
# @param [Array] key
|
@@ -44,7 +45,14 @@ module NotionRubyMapping
|
|
44
45
|
self
|
45
46
|
end
|
46
47
|
|
47
|
-
|
48
|
+
|
49
|
+
def clear_will_update
|
50
|
+
@properties.each do |_, property|
|
51
|
+
property.clear_will_update
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [Hash] created property values json
|
48
56
|
def property_values_json
|
49
57
|
@properties.each_with_object({}) do |(_, property), ans|
|
50
58
|
if property.will_update
|
@@ -53,5 +61,25 @@ module NotionRubyMapping
|
|
53
61
|
end
|
54
62
|
end
|
55
63
|
end
|
64
|
+
|
65
|
+
# @return [Hash] created property schema json
|
66
|
+
def property_schema_json
|
67
|
+
@properties.each_with_object({}) do |(_, property), ans|
|
68
|
+
if property.will_update
|
69
|
+
ans["properties"] ||= {}
|
70
|
+
ans["properties"].merge! property.property_schema_json
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# @return [Hash] created update property schema json
|
76
|
+
def update_property_schema_json
|
77
|
+
@properties.each_with_object({}) do |(_, property), ans|
|
78
|
+
if property.will_update
|
79
|
+
ans["properties"] ||= {}
|
80
|
+
ans["properties"].merge! property.update_property_schema_json
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
56
84
|
end
|
57
85
|
end
|
@@ -49,5 +49,15 @@ module NotionRubyMapping
|
|
49
49
|
@sort << {key => property.name, "direction" => "descending"}
|
50
50
|
self
|
51
51
|
end
|
52
|
+
|
53
|
+
# @return [Hash]
|
54
|
+
def query_json
|
55
|
+
parameters = {}
|
56
|
+
parameters[:filter] = filter unless filter.empty?
|
57
|
+
parameters[:sorts] = sort unless sort.empty?
|
58
|
+
parameters[:start_cursor] = start_cursor if start_cursor
|
59
|
+
parameters[:page_size] = page_size if page_size
|
60
|
+
parameters
|
61
|
+
end
|
52
62
|
end
|
53
63
|
end
|