notion_ruby_mapping 0.1.1 → 0.1.2

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: c557600e1d6f89386696ffeadd7b3169fc0f3bfd19cc9aab29ce4e401d5b8969
4
- data.tar.gz: 3dc90d601a14e96bc6c65b44a75231095cc52a7efc89067b5e37653133e546cf
3
+ metadata.gz: 53bd845c6d0535c221a3485dde1a005f31d86dfe668a3a61e64a9170cad88e77
4
+ data.tar.gz: 4523b7623a9bafaceac4264bdbc5a635cdd190558cf2079747922cf9644aa664
5
5
  SHA512:
6
- metadata.gz: 3177e1c978dfda8968986afc96c4456a3842112d5de4d8b661074be3aaf3eb3a75b87297ac3b5701874091ac3444e8d88782747efa4ffbab02f3299875363d47
7
- data.tar.gz: 3ad09dca8a9f818e35b8f8b1c611f89273efc4c9b34a78daf5fb34232372f5827afe5e307011380fa47263bc2de694461339d4b27793e4b2cb1af0fecdf75f6f
6
+ metadata.gz: a9a372c98e531807eb7a954375ada24adaa3e1fbef57d6058483a7774517fb1bdbbe840bba72a301007750fcba6000d81d0504861513aafbac58b1c445d23518
7
+ data.tar.gz: fb95291c350bfe39d730360d1aa2ad38d1be92736e2f5f393423c3aabf3e6432552f6c4327c4a0f88d4ecd97129f0e78879d5e562f73d0d625c9836c5c52f9ce
data/README.md CHANGED
@@ -58,6 +58,10 @@ Database.query(database_id).each do |page|
58
58
  end
59
59
  ```
60
60
 
61
+ |Before execution|After execution|
62
+ |---|---|
63
+ |![Before execution](images/pre_set_icon.png)|![After execution](images/post_set_icon.png)|
64
+
61
65
  The following code sets serial numbers to the pages whose title is not empty in ascending order of titles.
62
66
  ```Ruby
63
67
  tp = RichTextProperty.new("TextTitle")
@@ -65,12 +69,10 @@ Database.query(database_id, tp.filter_is_not_empty.ascending(tp)).each.with_inde
65
69
  page.properties["NumberTitle"].number = index
66
70
  page.update
67
71
  end
68
-
69
72
  ```
70
-
71
- |Before execution|After execution|
72
- |---|---|
73
- |![Before execution](images/pre_set_icon.png)|![After execution](images/post_set_icon.png)|
73
+ | After execution |
74
+ |-----------------------------------------------|
75
+ | ![After exuecution](images/serial_number.png) |
74
76
 
75
77
  ## Usage
76
78
 
@@ -427,7 +429,7 @@ query12 = Query.new.ascending(tp).descending letp
427
429
  query13 = tp.filter_starts_with("A").ascending(tp)
428
430
 
429
431
  # Result of query13.filter
430
- {"property" => "tp", "title" => {"starts_with" => "start"}},
432
+ {"property" => "tp", "title" => {"starts_with" => "start"}}
431
433
 
432
434
  # Result of query13.sort
433
435
  [{"property" => "tp", "direction" => "ascending"}]
@@ -487,8 +489,65 @@ end
487
489
 
488
490
  Not implemented
489
491
 
492
+ #### NumberProperty class
493
+
494
+ - constructor
495
+ ```Ruby
496
+ np = NumberProperty.new "np", number: 123
497
+ ```
498
+
499
+ - set value
500
+ ```Ruby
501
+ np.number = 456 # number <- 456 and will_update <- true
502
+ ```
503
+
504
+ - create json
505
+ ```Ruby
506
+ np.create_json # {"number" => 456}
507
+ ```
508
+
509
+ #### SelectProperty class
510
+
511
+ - constructor
512
+ ```Ruby
513
+ sp = SelectProperty.new "sp", select: "Select 1"
514
+ ```
515
+
516
+ - set value
517
+ ```Ruby
518
+ sp.select = "Select 2" # select <- "Select 2" and will_update <- true
519
+ ```
520
+
521
+ - create json
522
+ ```Ruby
523
+ sp.create_json # {"select" => {"name" => "Select 2"}}
524
+ ```
525
+
526
+ #### MultiSelectProperty class
527
+
528
+ - constructor
529
+ ```Ruby
530
+ msp1 = MultiSelectProperty.new "msp1", multi_select: "MS1" # Single value
531
+ msp2 = MultiSelectProperty.new "msp2", multi_select: %w[MS1 MS2] # Multi values
532
+ ```
533
+
534
+ - set value
535
+ ```Ruby
536
+ msp1.multi_select = %w[MS2 MS1] # multi_select <- ["MS1", "MS2"] and will_update <- true
537
+ msp2.select = "MS2" # multi_select <- "MS2" and will_update <- true
538
+ ```
539
+
540
+ - create json
541
+ ```Ruby
542
+ msp1.create_json # {"multi_select" => [{"name" => "MS2"}, {"name" => "MS1"}]}
543
+ msp2.create_json # {"multi_select" => [{"name" => "MS2"}]}
544
+ ```
545
+
490
546
  ## ChangeLog
491
547
 
548
+ - 2022/2/20 add support for MultiSelectProperty
549
+ - 2022/2/19 add support for SelectProperty
550
+ - 2022/2/17 added Page#properties, Page#add_property_for_update, Page#update
492
551
  - 2022/2/17 added Page#properties, Page#add_property_for_update, Page#update
493
552
  - 2022/2/16 added PropertyCache and Payload class
494
553
  - 2022/2/14 added Database#set_icon
Binary file
@@ -40,12 +40,18 @@ module NotionRubyMapping
40
40
  unless @json
41
41
  return nil if @id.nil?
42
42
 
43
- update_json reload
43
+ reload
44
44
  end
45
45
  @property_cache = PropertyCache.new json_properties
46
46
  end
47
47
  @property_cache
48
- end
48
+ end
49
+
50
+ # @return [NotionRubyMapping::Base] reloaded self
51
+ def reload
52
+ update_json reload_json
53
+ self
54
+ end
49
55
 
50
56
  # @return [Hash] json properties
51
57
  def json_properties
@@ -17,8 +17,12 @@ module NotionRubyMapping
17
17
  # @param [String] id database_id (with or without "-")
18
18
  # @param [Payload] payload
19
19
  def update
20
- update_json @nc.update_database @id, @payload.create_json
20
+ update_json @nc.update_database(@id, create_json)
21
+ end
22
+
23
+ # @return [Hash]
24
+ def reload_json
25
+ @nc.database_json @id
21
26
  end
22
27
  end
23
28
  end
24
-
@@ -4,5 +4,25 @@ module NotionRubyMapping
4
4
  # MultiSelect property
5
5
  class MultiSelectProperty < MultiProperty
6
6
  TYPE = "multi_select"
7
+
8
+ # @param [String] name
9
+ # @param [Hash] json
10
+ # @param [Array] multi_select
11
+ def initialize(name, json: nil, multi_select: nil)
12
+ super(name, json: json)
13
+ @multi_select = multi_select ? Array(multi_select) : nil
14
+ end
15
+
16
+ # @return [Hash] created json
17
+ def create_json
18
+ {"multi_select" => @multi_select ? (@multi_select.map { |v| {"name" => v} }) : @json} || {}
19
+ end
20
+
21
+ # @param [Hash] multi_select
22
+ # @return [Array, nil] settled array
23
+ def multi_select=(multi_select)
24
+ @will_update = true
25
+ @multi_select = multi_select ? Array(multi_select) : nil
26
+ end
7
27
  end
8
28
  end
@@ -14,7 +14,6 @@ module NotionRubyMapping
14
14
  @wait = 0
15
15
  end
16
16
  attr_reader :object_hash, :client
17
- attr_accessor :use_cache
18
17
 
19
18
  # @param [String] notion_token
20
19
  # @return [NotionRubyMapping::NotionCache] self (NotionCache.instance)
@@ -9,15 +9,17 @@ module NotionRubyMapping
9
9
  TYPE = "number"
10
10
 
11
11
  # @param [String] name Property name
12
- # @param [Number, Fixnum] number Number value (optional)
13
- # @param [String] format Format string (optional, default: "number")
14
- def initialize(name, number: nil)
15
- super(name)
12
+ # @param [Hash] json
13
+ # @param [Float] number Number value (optional)
14
+ def initialize(name, json: nil, number: nil)
15
+ super(name, json: json)
16
16
  @number = number
17
17
  end
18
+ attr_reader :number
18
19
 
20
+ # @return [Hash]
19
21
  def create_json
20
- {"type" => "number", "number" => @number}
22
+ {"number" => @number || @json}
21
23
  end
22
24
 
23
25
  def number=(n)
@@ -3,18 +3,16 @@
3
3
  module NotionRubyMapping
4
4
  # Notion page object
5
5
  class Page < Base
6
- def self.find(key)
7
- NotionCache.instance.page key
6
+ def self.find(id)
7
+ NotionCache.instance.page id
8
8
  end
9
9
 
10
- # @param [String] id page_id (with or without "-")
11
- # @param [Payload] payload
12
10
  def update
13
11
  update_json @nc.update_page(@id, create_json)
14
12
  end
15
-
13
+
16
14
  # @return [Hash]
17
- def reload
15
+ def reload_json
18
16
  @nc.page_json @id
19
17
  end
20
18
  end
@@ -4,10 +4,12 @@ module NotionRubyMapping
4
4
  # abstract class for property
5
5
  class Property
6
6
  # @param [String] name Property name
7
+ # @param [Hash] json
7
8
  # @return [Property] generated Property object
8
- def initialize(name)
9
+ def initialize(name, json: nil)
9
10
  @name = name
10
11
  @will_update = false
12
+ @json = json
11
13
  end
12
14
  attr_reader :name
13
15
  attr_accessor :will_update
@@ -25,12 +27,16 @@ module NotionRubyMapping
25
27
  end
26
28
 
27
29
  # @param [String] key
28
- # @param [Hash] json
29
- # @return [NotionRubyMapping::NumberProperty, nil] generated Property object
30
- def self.create_from_json(key, json)
31
- case json["type"]
32
- when "number"
33
- NumberProperty.new key, number: json["number"]
30
+ # @param [Hash] input_json
31
+ # @return [NotionRubyMapping::Property, nil] generated Property object
32
+ def self.create_from_json(key, input_json)
33
+ keys = input_json.keys
34
+ if keys.include? "number"
35
+ NumberProperty.new key, json: input_json["number"]
36
+ elsif keys.include? "select"
37
+ SelectProperty.new key, json: input_json["select"]
38
+ elsif keys.include? "multi_select"
39
+ MultiSelectProperty.new key, json: input_json["multi_select"]
34
40
  else
35
41
  nil
36
42
  end
@@ -6,5 +6,25 @@ module NotionRubyMapping
6
6
  include EqualsDoesNotEqual
7
7
  include IsEmptyIsNotEmpty
8
8
  TYPE = "select"
9
+
10
+ # @param [String] name Property name
11
+ # @param [Hash] json
12
+ # @param [String] select String value (optional)
13
+ def initialize(name, json: nil, select: nil)
14
+ super(name, json: json)
15
+ @select = select
16
+ end
17
+
18
+ # @return [Hash]
19
+ def create_json
20
+ {"select" => @select ? {"name" => @select} : @json} || {}
21
+ end
22
+
23
+ # @param [String] select
24
+ # @return [String] settled value
25
+ def select=(select)
26
+ @will_update = true
27
+ @select = select
28
+ end
9
29
  end
10
- end
30
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NotionRubyMapping
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  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.1.1
4
+ version: 0.1.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-02-17 00:00:00.000000000 Z
11
+ date: 2022-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: notion-ruby-client
@@ -115,6 +115,7 @@ files:
115
115
  - env.yml.sample
116
116
  - images/post_set_icon.png
117
117
  - images/pre_set_icon.png
118
+ - images/serial_number.png
118
119
  - lib/notion_ruby_mapping.rb
119
120
  - lib/notion_ruby_mapping/base.rb
120
121
  - lib/notion_ruby_mapping/block.rb