Class: Notion::Resolver

Inherits:
Object
  • Object
show all
Defined in:
lib/notion/resolver.rb

Constant Summary collapse

TTL =
900
MAX_CACHE_SIZE =
100

Instance Method Summary collapse

Constructor Details

#initialize(client, clock: Process.method(:clock_gettime)) ⇒ Resolver

Returns a new instance of Resolver.



11
12
13
14
15
16
17
# File 'lib/notion/resolver.rb', line 11

def initialize(client, clock: Process.method(:clock_gettime))
  @client = client
  @clock = clock
  @store = client.config.cache if client.respond_to?(:config)
  @cache = {}
  @mutex = Mutex.new
end

Instance Method Details

#resolve(database_id, name: nil) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/notion/resolver.rb', line 19

def resolve(database_id, name: nil)
  key = [database_id, name]
  external = @store&.read(cache_key(key))
  return external if external

  cached = cached_value(key)
  return cached if cached

  sources = Array(@client.databases.retrieve(database_id: database_id).data_sources)
  selected = select(sources, name)
  id = selected.fetch("id")
  write_cache(key, id)
  id
end