class NotionRb::Utils::Parser

Public Class Methods

new(value, position) click to toggle source
# File lib/notion_rb/utils/parser.rb, line 8
def initialize(value, position)
  unless valid_block_type?(value['type'])
    raise ArgumentError, 'Invalid block type'
  end

  @value = value
  @position = position
  @parser = select_parser @value['type']
end

Public Instance Methods

parse() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 18
def parse
  @parser == :null ? null : base
end

Private Instance Methods

base() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 28
def base
  {
    notion_id: @value['id'],
    block_type: @value['type'],
    title: @value.dig('properties', 'title', 0, 0),
    parent_id: @value['parent_id'],
    position: @position,
    children: (@value['content'] || []),
    metadata: send("metadata_#{@parser}".to_sym)
  }
end
metadata_base() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 40
def metadata_base
  {
    properties: (@value.dig('properties') || {}),
    color: (@value.dig('properties', 'title', 0, 1, 0, 1) || 'black'),
    block_color: (@value.dig('format', 'block_color') || 'white')
  }
end
metadata_bookmark() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 66
def metadata_bookmark
  metadata_base.merge(
    source: @value.dig('properties', 'link', 0, 0)
  )
end
metadata_callout() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 72
def metadata_callout
  metadata_base.merge(
    page_icon: @value.dig('format', 'page_icon')
  )
end
metadata_code() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 54
def metadata_code
  metadata_base.merge(
    language: @value.dig('properties', 'language', 0, 0)&.downcase
  )
end
metadata_collection() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 93
def metadata_collection
  {
    schema: @value.dig('schema')
  }
end
metadata_collection_view() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 86
def metadata_collection_view
  {
    collection_id: @value.dig('collection_id'),
    view_ids: @value.dig('view_ids')
  }
end
metadata_embed() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 60
def metadata_embed
  metadata_base.merge(
    source: @value.dig('properties', 'source', 0, 0)
  )
end
metadata_image() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 78
def metadata_image
  metadata_base.merge(
    source: @value.dig('properties', 'source', 0, 0),
    caption: @value.dig('properties', 'caption', 0, 0),
    format: @value.dig('format')
  )
end
metadata_todo() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 48
def metadata_todo
  metadata_base.merge(
    checked: @value.dig('properties', 'checked', 0, 0) == 'Yes'
  )
end
null() click to toggle source
# File lib/notion_rb/utils/parser.rb, line 24
def null
  {}
end