Module: Notion::ObjectFactory

Defined in:
lib/notion/object_factory.rb

Constant Summary collapse

TYPES =
{
  "page" => Objects::Page,
  "database" => Objects::Database,
  "data_source" => Objects::DataSource,
  "block" => Objects::Block,
  "user" => Objects::User,
  "comment" => Objects::Comment,
  "view" => Objects::View,
  "file_upload" => Objects::File,
  "async_task" => Objects::AsyncTask,
  "list" => Objects::List
}.freeze

Class Method Summary collapse

Class Method Details

.build(value) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/notion/object_factory.rb', line 20

def build(value)
  return wrap_value(value) unless value.is_a?(Hash)
  if !value.key?("object") && value.key?("type") && value.key?(value["type"])
    return Objects::PropertyValue.build(value)
  end
  return Objects::Block.build(value) if value["object"] == "block"

  klass = value.key?("results") ? Objects::List : TYPES.fetch(value["object"], Objects::Unknown)
  klass.new(value)
end

.wrap_value(value) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/notion/object_factory.rb', line 31

def wrap_value(value)
  case value
  when Hash then value.key?("object") ? build(value) : value.transform_values { |item| wrap_value(item) }
  when Array then value.map { |item| wrap_value(item) }
  else value
  end
end