notion_ruby_mapping 0.2.1 → 0.3.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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +500 -141
  3. data/env.yml.sample +2 -0
  4. data/examples/change_title.md +26 -0
  5. data/examples/renumbering_pages.md +20 -0
  6. data/examples/set_icon_to_all_icon_unsettled_pages.md +30 -0
  7. data/lib/notion_ruby_mapping/base.rb +130 -73
  8. data/lib/notion_ruby_mapping/checkbox_property.rb +27 -12
  9. data/lib/notion_ruby_mapping/created_by_property.rb +22 -10
  10. data/lib/notion_ruby_mapping/created_time_property.rb +16 -14
  11. data/lib/notion_ruby_mapping/database.rb +78 -8
  12. data/lib/notion_ruby_mapping/date_property.rb +67 -42
  13. data/lib/notion_ruby_mapping/email_property.rb +26 -16
  14. data/lib/notion_ruby_mapping/files_property.rb +40 -24
  15. data/lib/notion_ruby_mapping/formula_property.rb +51 -10
  16. data/lib/notion_ruby_mapping/last_edited_by_property.rb +22 -9
  17. data/lib/notion_ruby_mapping/last_edited_time_property.rb +16 -14
  18. data/lib/notion_ruby_mapping/list.rb +27 -19
  19. data/lib/notion_ruby_mapping/mention_object.rb +26 -1
  20. data/lib/notion_ruby_mapping/multi_select_property.rb +83 -21
  21. data/lib/notion_ruby_mapping/notion_cache.rb +25 -10
  22. data/lib/notion_ruby_mapping/number_property.rb +71 -10
  23. data/lib/notion_ruby_mapping/page.rb +33 -5
  24. data/lib/notion_ruby_mapping/payload.rb +23 -5
  25. data/lib/notion_ruby_mapping/people_property.rb +47 -19
  26. data/lib/notion_ruby_mapping/phone_number_property.rb +26 -15
  27. data/lib/notion_ruby_mapping/property.rb +140 -49
  28. data/lib/notion_ruby_mapping/property_cache.rb +31 -3
  29. data/lib/notion_ruby_mapping/query.rb +10 -0
  30. data/lib/notion_ruby_mapping/relation_property.rb +74 -21
  31. data/lib/notion_ruby_mapping/rich_text_array.rb +81 -0
  32. data/lib/notion_ruby_mapping/rich_text_object.rb +58 -1
  33. data/lib/notion_ruby_mapping/rich_text_property.rb +12 -1
  34. data/lib/notion_ruby_mapping/rollup_property.rb +82 -10
  35. data/lib/notion_ruby_mapping/select_property.rb +88 -13
  36. data/lib/notion_ruby_mapping/text_object.rb +0 -51
  37. data/lib/notion_ruby_mapping/text_property.rb +19 -45
  38. data/lib/notion_ruby_mapping/title_property.rb +12 -1
  39. data/lib/notion_ruby_mapping/url_property.rb +26 -15
  40. data/lib/notion_ruby_mapping/user_object.rb +4 -4
  41. data/lib/notion_ruby_mapping/version.rb +1 -1
  42. data/lib/notion_ruby_mapping.rb +2 -1
  43. data/tools/an +103 -0
  44. metadata +7 -2
@@ -12,61 +12,35 @@ module NotionRubyMapping
12
12
  include StartsWithEndsWith
13
13
  include IsEmptyIsNotEmpty
14
14
 
15
+ ### Public announced methods
16
+
17
+ ## Page property only methods
18
+
19
+ attr_reader :text_objects
20
+
21
+ def_delegators :@text_objects, :[], :<<, :each, :full_text, :delete_at
22
+
23
+ ### Not public announced methods
24
+
25
+ ## Common methods
26
+
15
27
  # @param [String] name
16
- # @param [Hash] json
28
+ # @param [Hash, Array] json
17
29
  # @param [Array<RichTextObject>] text_objects
18
- def initialize(name, will_update: false, json: nil, text_objects: nil)
30
+ def initialize(name, will_update: false, base_type: :page, json: nil, text_objects: nil)
19
31
  raise StandardError, "TextObject is abstract class. Please use RichTextProperty." if instance_of? TextProperty
20
32
 
21
- super name, will_update: will_update
22
- @text_objects = if text_objects
23
- text_objects.map { |to_s| RichTextObject.text_object to_s }
24
- elsif json
25
- json.map { |to| RichTextObject.create_from_json to }
33
+ super name, will_update: will_update, base_type: base_type
34
+ @text_objects = if database?
35
+ json || {}
26
36
  else
27
- []
37
+ RichTextArray.new "title", json: json, text_objects: text_objects
28
38
  end
29
39
  end
30
- attr_reader :text_objects
31
40
 
32
41
  # @return [TrueClass, FalseClass] will update?
33
42
  def will_update
34
- @will_update || @text_objects.map(&:will_update).any?
35
- end
36
-
37
- # @param [Proc] block
38
- # @return [Enumerator]
39
- def each(&block)
40
- return enum_for(:each) unless block
41
-
42
- @text_objects.each(&block)
43
- end
44
-
45
- # @param [String, RichTextObject] to
46
- # @return [NotionRubyMapping::RichTextObject] added RichTextObject
47
- def <<(to)
48
- @will_update = true
49
- rto = RichTextObject.text_object(to)
50
- @text_objects << rto
51
- rto
52
- end
53
-
54
- # @param [Numeric] index index number
55
- # @return [RichTextObject] selected RichTextObject
56
- def [](index)
57
- @text_objects[index]
58
- end
59
-
60
- # @param [Numeric] index
61
- # @return [NotionRubyMapping::RichTextObject] removed RichTextObject
62
- def delete_at(index)
63
- @will_update = true
64
- @text_objects[index]
65
- end
66
-
67
- # @return [String] full_text
68
- def full_text
69
- map(&:text).join ""
43
+ @will_update || page? && @text_objects.will_update
70
44
  end
71
45
  end
72
46
  end
@@ -5,14 +5,25 @@ module NotionRubyMapping
5
5
  class TitleProperty < TextProperty
6
6
  TYPE = "title"
7
7
 
8
+ ### Not public announced methods
9
+
10
+ ## Common methods
11
+
8
12
  # @param [Hash] json
9
13
  def update_from_json(json)
10
14
  @will_update = false
11
- @text_objects = json["title"].map { |to| RichTextObject.create_from_json to }
15
+ if database?
16
+ @json = json || {}
17
+ else
18
+ @text_objects = RichTextArray.new "rich_text", json: json["title"]
19
+ end
12
20
  end
13
21
 
22
+ ## Page property only methods
23
+
14
24
  # @return [Hash] created json
15
25
  def property_values_json
26
+ assert_page_property __method__
16
27
  text_json = map(&:property_values_json)
17
28
  {
18
29
  @name => {
@@ -9,28 +9,39 @@ module NotionRubyMapping
9
9
  include IsEmptyIsNotEmpty
10
10
  TYPE = "url"
11
11
 
12
+ ### Public announced methods
13
+
14
+ ## Common methods
15
+
16
+ # @return [String, Hash, nil] url (Page), {} (Database)
17
+ def url
18
+ @json
19
+ end
20
+
21
+ ## Page property only methods
22
+
23
+ def url=(url)
24
+ @will_update = true
25
+ @json = url
26
+ end
27
+
28
+ ### Not public announced methods
29
+
30
+ ## Common methods
31
+
12
32
  # @param [String] name Property name
13
33
  # @param [String] url url value (optional)
14
- def initialize(name, will_update: false, url: nil)
15
- super name, will_update: will_update
16
- @url = url
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 = json || (database? ? {} : nil)
17
37
  end
18
- attr_reader :url
19
38
 
20
- # @param [Hash] json
21
- def update_from_json(json)
22
- @will_update = false
23
- @url = json["url"]
24
- end
39
+ ## Page property only methods
25
40
 
26
41
  # @return [Hash]
27
42
  def property_values_json
28
- {@name => {"url" => @url, "type" => "url"}}
29
- end
30
-
31
- def url=(url)
32
- @will_update = true
33
- @url = url
43
+ assert_page_property __method__
44
+ {@name => {"url" => @json, "type" => "url"}}
34
45
  end
35
46
  end
36
47
  end
@@ -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(uo)
18
- if uo.is_a? UserObject
19
- uo
17
+ def self.user_object(user_id_or_user)
18
+ if user_id_or_user.is_a? UserObject
19
+ user_id_or_user
20
20
  else
21
- UserObject.new user_id: uo
21
+ UserObject.new user_id: user_id_or_user
22
22
  end
23
23
  end
24
24
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NotionRubyMapping
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  NOTION_VERSION = "2022-02-22"
6
6
  end
@@ -6,6 +6,7 @@ require "yaml"
6
6
  url_property email_property phone_number_property number_property checkbox_property select_property multi_property
7
7
  multi_select_property date_base_property date_property created_time_property last_edited_time_property
8
8
  people_property created_by_property last_edited_by_property files_property relation_property formula_property
9
- rollup_property query payload property_cache rich_text_object text_object mention_object user_object].each do |k|
9
+ rollup_property query payload property_cache rich_text_object text_object mention_object user_object
10
+ rich_text_array].each do |k|
10
11
  require_relative "notion_ruby_mapping/#{k}"
11
12
  end
data/tools/an ADDED
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "date"
5
+ require "notion_ruby_mapping"
6
+
7
+ module NotionRubyMapping
8
+ # you Notion API token
9
+ NOTION_API_TOKEN = "secret_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx"
10
+ # your task Database id
11
+ DATABASE_ID = "0123456789abcdef0123456789abcdef"
12
+ # your Title name
13
+ TITLE_NAME = "タスク名"
14
+ # your DateProperty name
15
+ DATE_NAME = "日付"
16
+ # your time_zone
17
+ TIME_ZONE = "Asia/Tokyo"
18
+ # set true if you want to open the created page in the Notion.app
19
+ OPEN_AS_APP = true
20
+
21
+ # print usage and exit
22
+ def usage
23
+ print [
24
+ "Usage:",
25
+ "\tan task-name",
26
+ "\t\tCreate a today task as 'task-name'",
27
+ "\tan task-name hh:mm",
28
+ "\t\tCreate a today 'task-name' task at 'hh:mm'",
29
+ "\tan task-name MM/DD",
30
+ "\t\tInput a 'task-name' task at 'MM/DD'",
31
+ "\tan task-name YYYY/MM/DD",
32
+ "\t\tInput a 'task-name' task at 'YYYY/MM/DD'",
33
+ "\tan task-name MM/DD hh:mm",
34
+ "\t\tInput a 'task-name' task at 'MM/DD hh:mm",
35
+ "\tan task-name MM/DD h1:m1 h2:m2",
36
+ "\t\tInput a 'task-name' task at 'MM/DD h1:m1 - h2:m2'",
37
+ "\tan task-name YYYY/MM/DD hh:mm",
38
+ "\t\tInput a 'task-name' task at 'YYYY/MM/DD hh:mm",
39
+ "\tan task-name YYYY/MM/DD h1:m1 h2:m2",
40
+ "\t\tInput a 'task-name' task at 'YYYY/MM/DD h1:m1 - h2:m2'",
41
+ ].join("\n")
42
+ exit 1
43
+ end
44
+
45
+ if ARGV.empty?
46
+ usage
47
+ else
48
+ date_str = nil
49
+ end_time = nil
50
+ start_time = nil
51
+
52
+ # check start_time and end_time
53
+ end_time = ARGV.pop if ARGV[-1] =~ /\d+:\d+/
54
+ if end_time
55
+ start_time = ARGV.pop if ARGV[-1] =~ /\d+:\d+/
56
+ unless start_time
57
+ start_time = end_time
58
+ end_time = nil
59
+ end
60
+ end
61
+
62
+ # set date from date string or today
63
+ begin
64
+ date = Date.parse ARGV[-1]
65
+ # If the above Date.parse was success, the last parameter will remove.
66
+ date_str = ARGV.pop
67
+ rescue StandardError
68
+ date = nil
69
+ end
70
+ date ||= Date.today
71
+
72
+ # if task name does not exist, print usage and exit
73
+ if ARGV.empty?
74
+ print "`task-name' is required!!!"
75
+ usage
76
+ end
77
+
78
+ NotionCache.instance.create_client NOTION_API_TOKEN
79
+
80
+ # create database object without API call and create a child page
81
+ db = Database.new id: DATABASE_ID
82
+ page = db.create_child_page TitleProperty, TITLE_NAME, DateProperty, DATE_NAME
83
+
84
+ # obtain title and date properties and set values
85
+ tp, dp = page.properties.values_at TITLE_NAME, DATE_NAME
86
+ tp << ARGV.join(" ")
87
+ if end_time
88
+ dp.start_date = DateTime.parse "#{date_str} #{start_time}"
89
+ dp.end_date = DateTime.parse "#{date_str} #{end_time}"
90
+ dp.time_zone = TIME_ZONE
91
+ elsif start_time
92
+ dp.start_date = DateTime.parse "#{date_str} #{start_time}"
93
+ dp.time_zone = TIME_ZONE
94
+ else
95
+ dp.start_date = date
96
+ end
97
+
98
+ # Notion API call
99
+ page.save
100
+ url = "#{OPEN_AS_APP ? "notion" : "https"}://notion.so/#{page.id}"
101
+ system("open #{url}")
102
+ end
103
+ end
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.2.1
4
+ version: 0.3.0
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-03-14 00:00:00.000000000 Z
11
+ date: 2022-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -141,6 +141,9 @@ files:
141
141
  - bin/console
142
142
  - bin/setup
143
143
  - env.yml.sample
144
+ - examples/change_title.md
145
+ - examples/renumbering_pages.md
146
+ - examples/set_icon_to_all_icon_unsettled_pages.md
144
147
  - images/post_set_icon.png
145
148
  - images/pre_set_icon.png
146
149
  - images/serial_number.png
@@ -172,6 +175,7 @@ files:
172
175
  - lib/notion_ruby_mapping/property_cache.rb
173
176
  - lib/notion_ruby_mapping/query.rb
174
177
  - lib/notion_ruby_mapping/relation_property.rb
178
+ - lib/notion_ruby_mapping/rich_text_array.rb
175
179
  - lib/notion_ruby_mapping/rich_text_object.rb
176
180
  - lib/notion_ruby_mapping/rich_text_property.rb
177
181
  - lib/notion_ruby_mapping/rollup_property.rb
@@ -184,6 +188,7 @@ files:
184
188
  - lib/notion_ruby_mapping/version.rb
185
189
  - notion_ruby_mapping.gemspec
186
190
  - sig/notion_ruby_mapping.rbs
191
+ - tools/an
187
192
  homepage: https://github.com/hkob/notion_ruby_mapping.git
188
193
  licenses:
189
194
  - MIT