class NotionRb::Utils::BlockCache

Public Class Methods

new() click to toggle source
# File lib/notion_rb/utils/block_cache.rb, line 8
def initialize
  @blocks = []
end

Public Instance Methods

add_collection_view_blocks(block) click to toggle source
# File lib/notion_rb/utils/block_cache.rb, line 34
def add_collection_view_blocks(block)
  return unless block[:block_type] == 'collection_view_page'

  metadata = block[:metadata]
  query_collection = NotionRb::Api::QueryCollection.new(collection_id: metadata[:collection_id], view_id: metadata[:view_ids][0])
  block[:children] = [metadata[:collection_id]]
  add_blocks(query_collection.blocks)
end
children(notion_id) click to toggle source
# File lib/notion_rb/utils/block_cache.rb, line 24
def children(notion_id)
  return nil unless find(notion_id)

  find(notion_id)[:children]
end
clear() click to toggle source
# File lib/notion_rb/utils/block_cache.rb, line 30
def clear
  @blocks = []
end
contains?(notion_id) click to toggle source
# File lib/notion_rb/utils/block_cache.rb, line 12
def contains?(notion_id)
  @blocks.any? { |block| block[:notion_id] == notion_id }
end
find(notion_id) click to toggle source
# File lib/notion_rb/utils/block_cache.rb, line 16
def find(notion_id)
  add_block(notion_id) unless contains?(notion_id)

  @blocks.find { |block| block[:notion_id] == notion_id }
rescue Mechanize::ResponseCodeError
  nil
end

Private Instance Methods

add_block(uuid) click to toggle source
# File lib/notion_rb/utils/block_cache.rb, line 45
def add_block(uuid)
  add_blocks(NotionRb::Api::Get.new(notion_id: uuid).blocks)
end
add_blocks(blocks) click to toggle source
# File lib/notion_rb/utils/block_cache.rb, line 49
def add_blocks(blocks)
  new_block_ids = blocks.map { |block| block[:notion_id] }
  @blocks.each do |block|
    blocks << block unless new_block_ids.include?(block[:notion_id])
  end
  @blocks = blocks
end