notion_ruby_mapping 0.2.0 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99e5a81d9b01957db14572ca167eff728ed70eb4aa24d8e34182340549f94b21
4
- data.tar.gz: 4c649d84bd51226d5af41d82bd35a3f1eaac59a13ab1dba2c66007adf6793645
3
+ metadata.gz: ab8de3fcc36d0cc0d489fdf31b50845e5c86aea51891067f4412733f605ac76e
4
+ data.tar.gz: 454a657be8a1acea1d14444bb811704c6183fb8e1fb624ad656fdbf403671031
5
5
  SHA512:
6
- metadata.gz: d2d8cc889e8bb4d859617abb4ffb53d514958507c001e6106664cc959bfa86cefd8a654fe68d8d49f9704d33d1ce5dc9b36fd90f38deae3331ef78b15cdbfe7b
7
- data.tar.gz: a5a0ff8fd1b9b1cef1e6719d25a915c8f1e0d9c3dea2b5b7c50e4634bcbb12d39379927cc7de5f23d53db6cd34613f18bc5393d3a19e49df272a3201550a7a2c
6
+ metadata.gz: d3a86a3ee7cfd53eb58127b1a462a9f7b9ea97c57c6b0b1a7e0ea9ec72d1dde34ebd7759a18ad10c5f540be0cbdaa81c517924923fb502a9be68c62bcb587020
7
+ data.tar.gz: '009d50cc385fc9e462b1f475f647d93792501887db955f67a205a6d8a5397cb5f21752e0bcd0789e01d81c51374495135ad1dd101573d8dca4735c176e78cac1'
data/README.md CHANGED
@@ -6,12 +6,7 @@ Development note is here. → [Idea note of "notion_ruby_mapping"](https://www.n
6
6
 
7
7
  ## Table of Contents
8
8
 
9
-
10
- <!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} -->
11
-
12
- <!-- code_chunk_output -->
13
-
14
- - [notion\_ruby\_mapping](#notion_ruby_mapping)
9
+ - [notion_ruby_mapping](#notion_ruby_mapping)
15
10
  - [Table of Contents](#table-of-contents)
16
11
  - [1. Installation](#1-installation)
17
12
  - [2. Example code](#2-example-code)
@@ -29,12 +24,13 @@ Development note is here. → [Idea note of "notion_ruby_mapping"](https://www.n
29
24
  - [4.1.2 Update page properties](#412-update-page-properties)
30
25
  - [4.1.3 Update other page information](#413-update-other-page-information)
31
26
  - [4.1.4 other methods](#414-other-methods)
32
- - [4.2 Page](#42-page)
27
+ - [4.2 Database](#42-database)
33
28
  - [4.2.1 Retrieve a database](#421-retrieve-a-database)
34
29
  - [4.2.2 Query a database](#422-query-a-database)
35
30
  - [4.2.2.1 Complex conditions](#4221-complex-conditions)
36
31
  - [4.2.2.2 Sort criteria](#4222-sort-criteria)
37
- - [4.2.3 Update database](#423-update-database)
32
+ - [4.2.3 Create child page](#423-create-child-page)
33
+ - [4.2.4 Update database](#424-update-database)
38
34
  - [4.3 List class](#43-list-class)
39
35
  - [4.4 Block class](#44-block-class)
40
36
  - [4.5 Property classes](#45-property-classes)
@@ -54,14 +50,16 @@ Development note is here. → [Idea note of "notion_ruby_mapping"](https://www.n
54
50
  - [4.5.3.10 EmailProperty](#45310-emailproperty)
55
51
  - [4.5.3.11 FilesProperty](#45311-filesproperty)
56
52
  - [4.5.3.12 RelationProperty](#45312-relationproperty)
53
+ - [5. XXXObjects](#5-xxxobjects)
54
+ - [5.1 RichTextObject](#51-richtextobject)
55
+ - [5.2 TextObject](#52-textobject)
56
+ - [5.3 MentionObject](#53-mentionobject)
57
+ - [5.4 UserObject](#54-userobject)
57
58
  - [6. ChangeLog](#6-changelog)
58
- - [6. Contributing](#6-contributing)
59
- - [7. License](#7-license)
60
- - [8. Code of Conduct](#8-code-of-conduct)
61
- - [9. Acknowledgements](#9-acknowledgements)
62
-
63
- <!-- /code_chunk_output -->
64
-
59
+ - [7. Contributing](#7-contributing)
60
+ - [8. License](#8-license)
61
+ - [9. Code of Conduct](#9-code-of-conduct)
62
+ - [10. Acknowledgements](#10-acknowledgements)
65
63
 
66
64
  ## 1. Installation
67
65
 
@@ -101,7 +99,11 @@ NotionCache.instance.create_client token
101
99
 
102
100
  db = Database.new id: database_id
103
101
  db.query_database.each do |page|
104
- p page.set_icon(emoji: "💿").id unless page.icon
102
+ unless page.icon
103
+ page.set_icon(emoji: "💿")
104
+ page.save
105
+ p page.id
106
+ end
105
107
  end
106
108
  ```
107
109
 
@@ -119,7 +121,7 @@ tp = db.properties["TextTitle"]
119
121
  query = tp.filter_is_not_empty.ascending(tp)
120
122
  db.query_database(tp.filter_is_not_empty.ascending(tp)).each.with_index(1) do |page, index|
121
123
  page.properties["NumberTitle"].number = index
122
- page.update
124
+ page.save
123
125
  end
124
126
  ```
125
127
 
@@ -138,7 +140,7 @@ page = Page.find page_id # API access
138
140
  print page.title # -> ABC\nDEF
139
141
  tp = page.properties["Title"]
140
142
  tp[1].text = "GHI"
141
- page.update # API access
143
+ page.save # API access
142
144
  print page.title # -> ABC\nGHI
143
145
  ```
144
146
 
@@ -148,7 +150,7 @@ print page.title # -> ABC\nGHI
148
150
  page = Page.new id: page_id, assign: [TitleProperty, "Title"]
149
151
  tp = page.properties["Title"]
150
152
  tp << TextObject.new("JKL")
151
- page.update # API access
153
+ page.save # API access
152
154
  print page.title # -> JKL
153
155
  ```
154
156
 
@@ -209,9 +211,10 @@ to.text = "ABC" # TextObject can set text by ".text="
209
211
  # or tp[1].text = "ABC"
210
212
 
211
213
  np.number = 3.14159
214
+ page.save # Notion API call
212
215
  ```
213
216
 
214
- After update some properties, `page.update` method sends `update page API` and replace the page information using the response of API.
217
+ After update some properties, `page.save` method sends `Notion API` and replace the page information using the response of API.
215
218
 
216
219
  ```Ruby
217
220
  page.update # Notion API call
@@ -221,19 +224,27 @@ page.update # Notion API call
221
224
 
222
225
  `page.set_icon` can change the page icon using emoji or external url.
223
226
 
227
+ [Breaking change on v0.2.2] `page.set_icon` has no longer calling the Notion API.
228
+ Please use `page.save` after `page.set_icon` if you want to update or create the page.
229
+
224
230
  ```Ruby
225
231
  # both methods call Notion API
226
232
  obj.set_icon emoji: "💿" # set emoji
233
+ obj.save
234
+
227
235
  obj.set_icon url: "https://cdn.profile-image.st-hatena.com/users/hkob/profile.png" # set external url
236
+ obj.save
228
237
  ```
229
238
 
230
239
  #### 4.1.4 other methods
231
240
 
241
+ - `page.save` call Notion API, and so on and replace object information.
242
+ - `page.new_record?` returns true if the page was generated by `create_child_page`.
232
243
  - `page.title` returns plain_text string of `Title`.
233
244
  - `page.icon` returns JSON hash for the page icon.
234
245
  - `page[key]` returns a hash or an array object except "properties".
235
246
 
236
- ### 4.2 Page
247
+ ### 4.2 Database
237
248
 
238
249
  #### 4.2.1 Retrieve a database
239
250
 
@@ -532,7 +543,18 @@ query13 = tp.filter_starts_with("A").ascending(tp)
532
543
  [{"property" => "tp", "direction" => "ascending"}]
533
544
  ```
534
545
 
535
- #### 4.2.3 Update database
546
+ #### 4.2.3 Create child page
547
+
548
+ `create_child_page` creates a child page object of the database.
549
+ After setting some properties, please call `page.save` to send page information to Notion.
550
+
551
+ ```Ruby
552
+ page = db.create_child_page TitleProperty, "Name"
553
+ page.properties["Name"] << "New Page"
554
+ page.save
555
+ ```
556
+
557
+ #### 4.2.4 Update database
536
558
 
537
559
  === under construction ===
538
560
 
@@ -822,6 +844,7 @@ p tp.property_values_json
822
844
  ```
823
845
 
824
846
  `<<` method appends a new TextObject or a String.
847
+
825
848
  ```Ruby
826
849
  to = TextObject.new "DEF"
827
850
  to.bold = true
@@ -836,6 +859,7 @@ p tp.property_values_json
836
859
  ```
837
860
 
838
861
  `delete_at(index)` method remove a TextObject at index.
862
+
839
863
  ```Ruby
840
864
  tp.delete_at 1
841
865
  tp << "GHI"
@@ -846,6 +870,7 @@ p tp.property_values_json
846
870
  ##### 4.5.3.9 CheckboxProperty
847
871
 
848
872
  PeopleProperty can set a boolean value by `.checkbox=`.
873
+
849
874
  ```Ruby
850
875
  cp = page.properties["CheckboxTitle"]
851
876
  cp.checkbox = true
@@ -856,6 +881,7 @@ p cp.property_values_json
856
881
  ##### 4.5.3.10 EmailProperty
857
882
 
858
883
  EmailProperty can set an email address by `.email=`.
884
+
859
885
  ```Ruby
860
886
  ep = page.properties["MailTitle"]
861
887
  ep.email = "hkobhkob@gmail.com"
@@ -893,9 +919,61 @@ p rp.property_values_json
893
919
  # Result => {"rp"=>{"type"=>"relation", "relation"=>[{"id"=>"R2"}, {"id"=>"R3"}]}}
894
920
  ```
895
921
 
922
+ ## 5. XXXObjects
923
+
924
+ ### 5.1 RichTextObject
925
+
926
+ RichTextObject is an abstract class for TextObject and MentionObject.
927
+ It can store a link and some annotations.
928
+
929
+ There are common instance methods for its subclass objects.
930
+
931
+ - plain_text=(value)
932
+ - bold=(flag)
933
+ - italic=(flag)
934
+ - strikethrough=(flag)
935
+ - underline=(flag)
936
+ - code=(flag)
937
+ - color=(color)
938
+
939
+ ### 5.2 TextObject
940
+
941
+ TextObject is a class for texts.
942
+ `TextObject.new(text)` creates a TextObject.
943
+ After creating or retrieving TextObject, `to.text=` replaces including text.
944
+
945
+ ```Ruby
946
+ to = TextObject.new "first text"
947
+ to.text = "replaced text"
948
+ ```
949
+
950
+ ### 5.3 MentionObject
951
+
952
+ MentionObject is a class for mentions for user, page, database, date and template_mention.
953
+
954
+ ```Ruby
955
+ mention_user = MentionObject.new user_id: "user_id", plain_text: "m_user"
956
+ mention_page = MentionObject.new page_id: "page_id", plain_text: "m_page"
957
+ mention_db = MentionObject.new database_id: "database_id", plain_text: "m_db"
958
+ mention_date = MentionObject.new start: "2022-03-17", plain_text: "m_date"
959
+ mention_today = MentionObject.new mention_template: "today"
960
+ mention_now = MentionObject.new mention_template: "now"
961
+ mention_user = MentionObject.new mention_template: "user"
962
+ ```
963
+
964
+ ### 5.4 UserObject
965
+
966
+ UserObject is a class for users.
967
+
968
+ ```Ruby
969
+ u = User.new id: "user_id"
970
+ ```
896
971
 
897
972
  ## 6. ChangeLog
898
973
 
974
+ - 2022/3/17 added template_mention objects, tools/an command
975
+ - 2022/3/16 added database.create_child_page and base.save instead of base.update/create
976
+ - 2022/3/15 Fixed not to reload from API when all contents are loaded
899
977
  - 2022/3/14 Exclude notion-ruby-client, update Property values, update for Notion-Version 2022-02-22
900
978
  - 2022/2/25 add_property_for_update -> assign_property, update README.md
901
979
  - 2022/2/20 add support for MultiSelectProperty
@@ -907,18 +985,18 @@ p rp.property_values_json
907
985
  - 2022/2/13 added Page#set_icon
908
986
  - 2022/2/13 First commit
909
987
 
910
- ## 6. Contributing
988
+ ## 7. Contributing
911
989
 
912
990
  Bug reports and pull requests are welcome on GitHub at <https://github.com/hkob/notion_ruby_mapping>. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/notion_ruby_mapping/blob/main/CODE_OF_CONDUCT.md).
913
991
 
914
- ## 7. License
992
+ ## 8. License
915
993
 
916
994
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
917
995
 
918
- ## 8. Code of Conduct
996
+ ## 9. Code of Conduct
919
997
 
920
998
  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).
921
999
 
922
- ## 9. Acknowledgements
1000
+ ## 10. Acknowledgements
923
1001
 
924
1002
  The code depends on [notion-ruby-client](https://github.com/orbit-love/notion-ruby-client).
data/env.yml.sample CHANGED
@@ -11,3 +11,4 @@ db_second_page: "6601e719a39a460c908e8909467fcccf"
11
11
  db_update_page: "206ffaa277744a99baf593e28730240c"
12
12
  user_hkob: "2200a911-6a96-44bb-bd38-6bfb1e01b9f6"
13
13
  parent1_page: "860753bb6d1f48de96211fa6e0e31f82"
14
+ parent_database: "1d6b1040a9fb48d99a3d041429816e9f"
@@ -6,13 +6,14 @@ module NotionRubyMapping
6
6
  # @param [Hash, nil] json
7
7
  # @param [String, nil] id
8
8
  # @param [Array<Property, Class, String>] assign
9
- def initialize(json: nil, id: nil, assign: [])
9
+ def initialize(json: nil, id: nil, assign: [], parent: nil)
10
10
  @nc = NotionCache.instance
11
11
  @json = json
12
12
  @id = @nc.hex_id(id || json && @json["id"])
13
- raise StandardError, "Unknown id" if !is_a?(List) && @id.nil?
13
+ @new_record = true unless parent.nil?
14
+ raise StandardError, "Unknown id" if !is_a?(List) && @id.nil? && parent.nil?
14
15
 
15
- @payload = nil
16
+ @payload = Payload.new(parent && {"parent" => parent})
16
17
  @property_cache = nil
17
18
  assign.each_slice(2) { |(klass, key)| assign_property(klass, key) }
18
19
  end
@@ -35,9 +36,8 @@ module NotionRubyMapping
35
36
  end
36
37
  end
37
38
 
38
- # @return [NotionRubyMapping::Payload] get or created Payload object
39
- def payload
40
- @payload ||= Payload.new
39
+ def new_record?
40
+ @new_record
41
41
  end
42
42
 
43
43
  # @return [NotionRubyMapping::PropertyCache] get or created PropertyCache object
@@ -63,6 +63,11 @@ module NotionRubyMapping
63
63
  update_json reload_json
64
64
  self
65
65
  end
66
+
67
+ # @return [NotionRubyMapping::Base]
68
+ def save
69
+ @new_record ? create : update
70
+ end
66
71
 
67
72
  # @return [Hash] json properties
68
73
  def json_properties
@@ -86,7 +91,7 @@ module NotionRubyMapping
86
91
  end
87
92
 
88
93
  def restore_from_json
89
- payload.clear
94
+ @payload.clear
90
95
  return if (ps = @json["properties"]).nil?
91
96
 
92
97
  properties.json = json_properties
@@ -102,8 +107,7 @@ module NotionRubyMapping
102
107
  # @return [NotionRubyMapping::Base]
103
108
  def set_icon(emoji: nil, url: nil)
104
109
  if is_a?(Page) || is_a?(Database)
105
- payload.set_icon(emoji: emoji, url: url)
106
- update
110
+ @payload.set_icon(emoji: emoji, url: url)
107
111
  end
108
112
  self
109
113
  end
@@ -142,7 +146,7 @@ module NotionRubyMapping
142
146
 
143
147
  # @return [Hash] created json
144
148
  def property_values_json
145
- payload.property_values_json @property_cache&.property_values_json
149
+ @payload.property_values_json @property_cache&.property_values_json
146
150
  end
147
151
  end
148
152
  end
@@ -18,6 +18,12 @@ module NotionRubyMapping
18
18
  update_json @nc.update_database_request(@id, property_values_json)
19
19
  end
20
20
 
21
+ # @param [Array<Property, Class, String>] assign
22
+ # @return [NotionRubyMapping::Base]
23
+ def create_child_page(*assign)
24
+ Page.new assign: assign, parent: {"database_id" => @id}
25
+ end
26
+
21
27
  protected
22
28
 
23
29
  # @return [Hash]
@@ -8,6 +8,7 @@ module NotionRubyMapping
8
8
  def initialize(json: nil, id: nil, database: nil, query: nil)
9
9
  super(json: json, id: id)
10
10
  @has_more = @json["has_more"]
11
+ @load_all_contents = !@has_more
11
12
  @database = database
12
13
  @query = query
13
14
  @index = 0
@@ -18,22 +19,34 @@ module NotionRubyMapping
18
19
  def each
19
20
  return enum_for(:each) unless block_given?
20
21
 
21
- while @has_content
22
- if @index < results.length
23
- object = Base.create_from_json(results[@index])
24
- @index += 1
25
- yield object
26
- elsif @has_more
27
- if @database
28
- @query.start_cursor = @json["next_cursor"]
22
+ if @database
23
+ unless @has_content # re-exec
24
+ unless @load_all_contents
25
+ @query.start_cursor = nil
29
26
  @json = @database.query_database @query
30
- @index = 0
31
27
  @has_more = @json["has_more"]
28
+ end
29
+ @index = 0
30
+ @has_content = true
31
+ end
32
+
33
+ while @has_content
34
+ if @index < results.length
35
+ object = Base.create_from_json(results[@index])
36
+ @index += 1
37
+ yield object
38
+ elsif @has_more
39
+ if @database
40
+ @query.start_cursor = @json["next_cursor"]
41
+ @json = @database.query_database @query
42
+ @index = 0
43
+ @has_more = @json["has_more"]
44
+ else
45
+ @has_content = false
46
+ end
32
47
  else
33
48
  @has_content = false
34
49
  end
35
- else
36
- @has_content = false
37
50
  end
38
51
  end
39
52
  end
@@ -41,8 +41,33 @@ module NotionRubyMapping
41
41
  "type" => "date",
42
42
  "date" => @options.slice("start", "end", "time_zone"),
43
43
  }
44
+ elsif @options.key? "template_mention"
45
+ sub = case @options["template_mention"]
46
+ when "today"
47
+ @options["plain_text"] = "@Today"
48
+ {
49
+ "type" => "template_mention_date",
50
+ "template_mention_date" => "today",
51
+ }
52
+ when "now"
53
+ @options["plain_text"] = "@Now"
54
+ {
55
+ "type" => "template_mention_date",
56
+ "template_mention_date" => "now",
57
+ }
58
+ else
59
+ @options["plain_text"] = "@Me"
60
+ {
61
+ "type" => "template_mention_user",
62
+ "template_mention_user" => "me",
63
+ }
64
+ end
65
+ {
66
+ "type" => "template_mention",
67
+ "template_mention" => sub,
68
+ }
44
69
  else
45
- raise StandardError, "Irregular mention type"
70
+ raise StandardError, "Irregular mention type: #{@options.keys}"
46
71
  end
47
72
  end
48
73
  end
@@ -42,6 +42,11 @@ module NotionRubyMapping
42
42
  "v1/pages/#{page_id}"
43
43
  end
44
44
 
45
+ # @return [String (frozen)] page_path
46
+ def pages_path
47
+ "v1/pages"
48
+ end
49
+
45
50
  # @param [String] database_id
46
51
  # @return [String (frozen)] page_path
47
52
  def database_path(database_id)
@@ -124,6 +129,12 @@ module NotionRubyMapping
124
129
  request :patch, "v1/pages/#{page_id}", payload
125
130
  end
126
131
 
132
+ # @param [Hash] payload
133
+ # @return [Hash] response
134
+ def create_page_request(payload)
135
+ request :post, "v1/pages", payload
136
+ end
137
+
127
138
  # @param [String] id id string with "-"
128
139
  # @return [String] id without "-"
129
140
  def hex_id(id)
@@ -7,11 +7,17 @@ module NotionRubyMapping
7
7
  NotionCache.instance.page id
8
8
  end
9
9
 
10
- # @return [NotionRubyMapping::Base]
10
+ # @return [NotionRubyMapping::Base]46G
11
11
  def update
12
12
  update_json @nc.update_page_request(@id, property_values_json)
13
13
  end
14
14
 
15
+ # @return [NotionRubyMapping::Base]
16
+ def create
17
+ @new_record = false
18
+ update_json @nc.create_page_request(property_values_json)
19
+ end
20
+
15
21
  protected
16
22
 
17
23
  # @return [Hash]
@@ -3,8 +3,8 @@
3
3
  module NotionRubyMapping
4
4
  # Payload class
5
5
  class Payload
6
- def initialize
7
- @json = {}
6
+ def initialize(json)
7
+ @json = json || {}
8
8
  end
9
9
 
10
10
  # @param [String] emoji
@@ -32,8 +32,16 @@ module NotionRubyMapping
32
32
  MentionObject.new options.merge({"database_id" => mention["database"]["id"]})
33
33
  when "date"
34
34
  MentionObject.new options.merge(mention["date"].slice("start", "end", "time_zone"))
35
+ when "template_mention"
36
+ template_mention = mention["template_mention"]
37
+ case template_mention["type"]
38
+ when "template_mention_date"
39
+ MentionObject.new options.merge({"template_mention" => template_mention["template_mention_date"]})
40
+ else
41
+ MentionObject.new options.merge({"template_mention" => template_mention["template_mention_user"]})
42
+ end
35
43
  else
36
- raise StandardError, json
44
+ raise StandardError, "Unknown mention type: #{mention["type"]}"
37
45
  end
38
46
  else
39
47
  raise StandardError, json
@@ -60,6 +68,54 @@ module NotionRubyMapping
60
68
  }.merge annotations_json
61
69
  end
62
70
 
71
+ # @param [String, RichTextObject] value
72
+ # @return [String] input text
73
+ def plain_text=(value)
74
+ text(value)
75
+ end
76
+
77
+ # @param [Boolean] flag
78
+ # @return [Boolean] input flag
79
+ def bold=(flag)
80
+ @will_update = true
81
+ @options["bold"] = flag
82
+ end
83
+
84
+ # @param [Boolean] flag
85
+ # @return [Boolean] input flag
86
+ def italic=(flag)
87
+ @will_update = true
88
+ @options["italic"] = flag
89
+ end
90
+
91
+ # @param [Boolean] flag
92
+ # @return [Boolean] input flag
93
+ def strikethrough=(flag)
94
+ @will_update = true
95
+ @options["strikethrough"] = flag
96
+ end
97
+
98
+ # @param [Boolean] flag
99
+ # @return [Boolean] input flag
100
+ def underline=(flag)
101
+ @will_update = true
102
+ @options["underline"] = flag
103
+ end
104
+
105
+ # @param [Boolean] flag
106
+ # @return [Boolean] input flag
107
+ def code=(flag)
108
+ @will_update = true
109
+ @options["code"] = flag
110
+ end
111
+
112
+ # @param [String] color
113
+ # @return [String] input color
114
+ def color=(color)
115
+ @will_update = true
116
+ @options["color"] = color
117
+ end
118
+
63
119
  protected
64
120
 
65
121
  # @return [Hash] options
@@ -21,61 +21,12 @@ module NotionRubyMapping
21
21
  @options = value.options
22
22
  @text = value.text
23
23
  else
24
- p value
25
24
  @text = value
26
25
  @options["plain_text"] = value
27
26
  end
28
27
  self
29
28
  end
30
29
 
31
- # @param [String, RichTextObject] value
32
- # @return [String] input text
33
- def plain_text=(value)
34
- text(value)
35
- end
36
-
37
- # @param [Boolean] flag
38
- # @return [Boolean] input flag
39
- def bold=(flag)
40
- @will_update = true
41
- @options["bold"] = flag
42
- end
43
-
44
- # @param [Boolean] flag
45
- # @return [Boolean] input flag
46
- def italic=(flag)
47
- @will_update = true
48
- @options["italic"] = flag
49
- end
50
-
51
- # @param [Boolean] flag
52
- # @return [Boolean] input flag
53
- def strikethrough=(flag)
54
- @will_update = true
55
- @options["strikethrough"] = flag
56
- end
57
-
58
- # @param [Boolean] flag
59
- # @return [Boolean] input flag
60
- def underline=(flag)
61
- @will_update = true
62
- @options["underline"] = flag
63
- end
64
-
65
- # @param [Boolean] flag
66
- # @return [Boolean] input flag
67
- def code=(flag)
68
- @will_update = true
69
- @options["code"] = flag
70
- end
71
-
72
- # @param [String] color
73
- # @return [String] input color
74
- def color=(color)
75
- @will_update = true
76
- @options["color"] = color
77
- end
78
-
79
30
  protected
80
31
 
81
32
  def partial_property_values_json
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NotionRubyMapping
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.3"
5
5
  NOTION_VERSION = "2022-02-22"
6
6
  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.0
4
+ version: 0.2.3
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-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -184,6 +184,7 @@ files:
184
184
  - lib/notion_ruby_mapping/version.rb
185
185
  - notion_ruby_mapping.gemspec
186
186
  - sig/notion_ruby_mapping.rbs
187
+ - tools/an
187
188
  homepage: https://github.com/hkob/notion_ruby_mapping.git
188
189
  licenses:
189
190
  - MIT