Class: Corpshort::Backends::Memory

Inherits:
Base
  • Object
show all
Defined in:
lib/corpshort/backends/memory.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#rename_link

Constructor Details

#initializeMemory

Returns a new instance of Memory.



8
9
10
11
12
# File 'lib/corpshort/backends/memory.rb', line 8

def initialize()
  @lock = Mutex.new
  @links = {}
  @links_by_url = {}
end

Instance Attribute Details

Returns the value of attribute links.



14
15
16
# File 'lib/corpshort/backends/memory.rb', line 14

def links
  @links
end

Returns the value of attribute links_by_url.



14
15
16
# File 'lib/corpshort/backends/memory.rb', line 14

def links_by_url
  @links_by_url
end

Instance Method Details



41
42
43
44
45
46
47
48
49
50
# File 'lib/corpshort/backends/memory.rb', line 41

def delete_link(link)
  @lock.synchronize do
    name = link.is_a?(String) ? link : link.name
    data = @links[name]
    if @links[name]
      @links.delete name
      @links_by_url[data[:url]].delete name
    end
  end
end


32
33
34
35
36
37
38
39
# File 'lib/corpshort/backends/memory.rb', line 32

def get_link(name)
  data = @links[name]
  if data && !data.empty?
    Link.new(data, backend: self)
  else
    nil
  end
end


56
57
58
# File 'lib/corpshort/backends/memory.rb', line 56

def list_links(token: nil, limit: 30)
  [@links.keys, nil]
end


52
53
54
# File 'lib/corpshort/backends/memory.rb', line 52

def list_links_by_url(url)
  @links_by_url[url].keys
end


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/corpshort/backends/memory.rb', line 16

def put_link(link, create_only: false)
  @lock.synchronize do
    old_link = @links[link.name]
    if create_only && old_link
      raise ConflictError
    end
    old_url = old_link&.fetch(:url, nil)
    if old_link && link.url != old_url
      @links_by_url[old_url].delete(link.name)
    end
    @links[link.name] = link.to_h
    (@links_by_url[link.url] ||= {})[link.name] = true
  end
  nil
end