Class: Ant::Storage::Datasource::Repository

Inherits:
Object
  • Object
show all
Includes:
Exceptions
Defined in:
lib/ant/storage/datasource/repository.rb

Overview

Base class for repositories. The ID generator might get deprecated. It provides the interface for storing objects inside any persistance provider implemented. TODO: Find a better strategy for primary key handling.

Direct Known Subclasses

JSONRepository

Instance Method Summary collapse

Constructor Details

#initialize(id, id_generator) ⇒ Repository

Returns a new instance of Repository.



14
15
16
17
# File 'lib/ant/storage/datasource/repository.rb', line 14

def initialize(id, id_generator)
  @id = id
  @id_generator = id_generator
end

Instance Method Details

#create(id = nil) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/ant/storage/datasource/repository.rb', line 25

def create(id = nil)
  data = create_initial_object(id)
  existent = exist?(data[@id])
  raise(ObjectAlreadyExists.new(data[@id], existent)) if existent

  create_(data)
end

#create_initial_object(id) ⇒ Object



19
20
21
22
23
# File 'lib/ant/storage/datasource/repository.rb', line 19

def create_initial_object(id)
  object = { @id => @id_generator.call(id, @id) }
  object.merge!(id) if id.is_a?(Hash)
  object
end

#exist?(id) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
36
37
# File 'lib/ant/storage/datasource/repository.rb', line 33

def exist?(id)
  get(id)
rescue ObjectNotFound
  nil
end