Class: NotionRubyMapping::Base
- Inherits:
-
Object
- Object
- NotionRubyMapping::Base
- Defined in:
- lib/notion_ruby_mapping/blocks/base.rb
Overview
Notion Base object (Parent of Page / Database / List) The Public API method has a link to the API references.
Instance Attribute Summary collapse
-
#archived ⇒ Object
readonly
Returns the value of attribute archived.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#json ⇒ Object
readonly
Returns the value of attribute json.
Class Method Summary collapse
- .create_from_json(json) ⇒ NotionRubyMapping::Base
- .dry_run_script(method, path, json = nil) ⇒ Object
Instance Method Summary collapse
- #append_block_children(*blocks, dry_run: false) ⇒ NotionRubyMapping::Block, String
- #assert_parent_children_pair(block) ⇒ Object
-
#assign_property(klass, title) ⇒ NotionRubyMapping::Property
Generated property.
-
#block? ⇒ TrueClass, FalseClass
True if Block object.
- #children(query = Query.new, dry_run: false) ⇒ NotionRubyMapping::List, String
- #created_time ⇒ NotionRubyMapping::CreatedTimeProperty
-
#database? ⇒ TrueClass, FalseClass
True if Database object.
-
#get(key) ⇒ NotionRubyMapping::PropertyCache, Hash
Obtained Page value or PropertyCache.
-
#icon ⇒ Hash?
Obtained Hash.
-
#initialize(json: nil, id: nil, assign: [], parent: nil) ⇒ Base
constructor
A new instance of Base.
- #inspect ⇒ String (frozen)
-
#json_properties ⇒ Hash
Json properties.
- #last_edited_time ⇒ NotionRubyMapping::LastEditedTimeProperty
-
#new_record? ⇒ Boolean
True if new record.
-
#page? ⇒ TrueClass, FalseClass
True if Page object.
-
#properties ⇒ NotionRubyMapping::PropertyCache
Get or created PropertyCache object.
-
#property_values_json ⇒ Hash
Created json for update page.
-
#reload ⇒ NotionRubyMapping::Base
Reloaded self.
- #restore_from_json ⇒ NotionRubyMapping::Base
- #save(dry_run: false) ⇒ NotionRubyMapping::Base, String
- #set_icon(emoji: nil, url: nil) ⇒ NotionRubyMapping::Base
-
#synced_block_original? ⇒ FalseClass
Return false except block.
- #update_json(json) ⇒ NotionRubyMapping::Base
Constructor Details
#initialize(json: nil, id: nil, assign: [], parent: nil) ⇒ Base
Returns a new instance of Base.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 10 def initialize(json: nil, id: nil, assign: [], parent: nil) @nc = NotionCache.instance @json = json @id = @nc.hex_id(id || @json && @json["id"]) @archived = @json && @json["archived"] @has_children = @json && @json["has_children"] @new_record = true unless parent.nil? raise StandardError, "Unknown id" if !is_a?(List) && !is_a?(Block) && @id.nil? && parent.nil? @payload = Payload.new(!is_a?(Block) && parent && {"parent" => parent}) @property_cache = nil @created_time = nil @last_edited_time = nil return if assign.empty? assign.each_slice(2) { |(klass, key)| assign_property(klass, key) } @json ||= {} end |
Instance Attribute Details
#archived ⇒ Object (readonly)
Returns the value of attribute archived.
28 29 30 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 28 def archived @archived end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
28 29 30 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 28 def id @id end |
#json ⇒ Object (readonly)
Returns the value of attribute json.
28 29 30 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 28 def json @json end |
Class Method Details
.create_from_json(json) ⇒ NotionRubyMapping::Base
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 32 def self.create_from_json(json) case json["object"] when "page" Page.new json: json when "database" Database.new json: json when "list" List.new json: json when "block" Block.decode_block json else raise StandardError, json.inspect end end |
.dry_run_script(method, path, json = nil) ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 50 def self.dry_run_script(method, path, json = nil) shell = [ "#!/bin/sh\ncurl #{method == :get ? "" : "-X #{method.to_s.upcase}"} 'https://api.notion.com/#{path}'", " -H 'Notion-Version: 2022-02-22'", " -H 'Authorization: Bearer '\"$NOTION_API_KEY\"''", ] shell << " -H 'Content-Type: application/json'" if %i[post patch].include?(method) shell << " --data '#{JSON.generate json}'" if json shell.join(" \\\n") end |
Instance Method Details
#append_block_children(*blocks, dry_run: false) ⇒ NotionRubyMapping::Block, String
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 82 def append_block_children(*blocks, dry_run: false) raise StandardError, "This block can have no children." unless page? || (block? && can_have_children) only_one = blocks.length == 1 json = { "children" => Array(blocks).map do |block| assert_parent_children_pair block block.block_json end, } if dry_run path = @nc.append_block_children_page_path(id) self.class.dry_run_script :patch, path, json else response = @nc.append_block_children_request @id, json raise StandardError, response unless response["results"] answers = response["results"].map { |sub_json| Block.create_from_json sub_json } only_one ? answers.first : answers end end |
#assert_parent_children_pair(block) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 105 def assert_parent_children_pair(block) raise StandardError, "the argument is not a block." unless block.block? raise StandardError, "#{type} cannot have children." if block? && !@can_have_children return if block.can_append bt = block.type raise StandardError, "Internal file block can not append." if bt == "file" raise StandardError, "Column block can only append column_list block" unless bt == "column" && block? && type == "column_list" end |
#assign_property(klass, title) ⇒ NotionRubyMapping::Property
Returns generated property.
122 123 124 125 126 127 128 129 130 131 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 122 def assign_property(klass, title) @property_cache ||= PropertyCache.new({}, base_type: database? ? :database : :page) property = if database? klass.new(title, will_update: new_record?, base_type: :database) else klass.new(title, will_update: true, base_type: :page) end @property_cache.add_property property property end |
#block? ⇒ TrueClass, FalseClass
Returns true if Block object.
134 135 136 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 134 def block? is_a? Block end |
#children(query = Query.new, dry_run: false) ⇒ NotionRubyMapping::List, String
141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 141 def children(query = Query.new, dry_run: false) if dry_run path = @nc.block_children_page_path(id) + query.query_string self.class.dry_run_script :get, path elsif @children @children else response = @nc.block_children_request @id, query.query_string @children = List.new json: response, parent: self, query: query end end |
#created_time ⇒ NotionRubyMapping::CreatedTimeProperty
154 155 156 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 154 def created_time @created_time ||= CreatedTimeProperty.new("__timestamp__", json: self["created_time"]) end |
#database? ⇒ TrueClass, FalseClass
Returns true if Database object.
159 160 161 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 159 def database? is_a? Database end |
#get(key) ⇒ NotionRubyMapping::PropertyCache, Hash
Returns obtained Page value or PropertyCache.
63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 63 def get(key) unless @json raise StandardError, "Unknown id" if @id.nil? reload end case key when "properties" properties else @json[key] end end |
#icon ⇒ Hash?
Returns obtained Hash.
165 166 167 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 165 def icon self["icon"] end |
#inspect ⇒ String (frozen)
170 171 172 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 170 def inspect "#{self.class.name}-#{@id}" end |
#json_properties ⇒ Hash
Returns json properties.
175 176 177 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 175 def json_properties @json && @json["properties"] end |
#last_edited_time ⇒ NotionRubyMapping::LastEditedTimeProperty
180 181 182 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 180 def last_edited_time @last_edited_time ||= LastEditedTimeProperty.new("__timestamp__", json: self["last_edited_time"]) end |
#new_record? ⇒ Boolean
Returns true if new record.
186 187 188 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 186 def new_record? @new_record end |
#page? ⇒ TrueClass, FalseClass
Returns true if Page object.
191 192 193 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 191 def page? is_a? Page end |
#properties ⇒ NotionRubyMapping::PropertyCache
Returns get or created PropertyCache object.
197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 197 def properties unless @property_cache unless @json raise StandardError, "Unknown id" if @id.nil? reload end @property_cache = PropertyCache.new json_properties, base_type: database? ? :database : :page end @property_cache end |
#property_values_json ⇒ Hash
Returns created json for update page.
210 211 212 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 210 def property_values_json @payload.property_values_json @property_cache end |
#reload ⇒ NotionRubyMapping::Base
Returns reloaded self.
215 216 217 218 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 215 def reload update_json reload_json self end |
#restore_from_json ⇒ NotionRubyMapping::Base
221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 221 def restore_from_json return if (ps = @json["properties"]).nil? properties.json = json_properties return unless is_a?(Page) || is_a?(Database) ps.each do |key, json| properties[key].update_from_json json end self end |
#save(dry_run: false) ⇒ NotionRubyMapping::Base, String
236 237 238 239 240 241 242 243 244 245 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 236 def save(dry_run: false) if dry_run @new_record ? create(dry_run: true) : update(dry_run: true) else @new_record ? create : update @property_cache.clear_will_update unless block? @payload.clear self end end |
#set_icon(emoji: nil, url: nil) ⇒ NotionRubyMapping::Base
252 253 254 255 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 252 def set_icon(emoji: nil, url: nil) @payload.set_icon(emoji: emoji, url: url) if page? || database? self end |
#synced_block_original? ⇒ FalseClass
Return false except block
258 259 260 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 258 def synced_block_original? false end |
#update_json(json) ⇒ NotionRubyMapping::Base
264 265 266 267 268 269 270 271 272 273 274 |
# File 'lib/notion_ruby_mapping/blocks/base.rb', line 264 def update_json(json) unless json["object"] != "error" && (@json.nil? || @json["type"] == json["type"]) raise StandardError, json.inspect end @json = json @id = @nc.hex_id(@json["id"]) restore_from_json self end |