class Inferno::Repositories::Repository

Base class for repositories. Subclass and override methods as needed.

@abstract

Public Class Methods

db() click to toggle source

Return the db connection for this repository.

# File lib/inferno/repositories/repository.rb, line 13
def self.db
  Application['db.connection'][table_name]
end
table_name() click to toggle source

Return the name of the database table for this repository. Override if the table name is not the snake case version of the name of the repository class.

@return [String]

# File lib/inferno/repositories/repository.rb, line 22
def self.table_name
  name.demodulize.underscore.to_sym
end

Public Instance Methods

add_non_db_entities(hash) click to toggle source
# File lib/inferno/repositories/repository.rb, line 57
def add_non_db_entities(hash)
  if hash.include? :test_id
    hash[:test] = Tests.new.find(hash[:test_id])
  elsif hash.include? :test_group_id
    hash[:test_group] = TestGroups.new.find(hash[:test_group_id])
  elsif hash.include? :test_suite_id
    hash[:test_suite] = TestSuites.new.find(hash[:test_suite_id])
  end
end
build_entity(params) click to toggle source

Creates an instance of the entity associated with this repository. Override if any special logic is required to create the entity.

@param params [Hash] @return [Object] an instance of `#entity_class`

# File lib/inferno/repositories/repository.rb, line 101
def build_entity(params)
  add_non_db_entities(params)
  entity_class.new(params)
end
create(params) click to toggle source

Create a new record in the database.

@param params [Hash] @return [Inferno::Entities] an instance of the entity for this repo @example

repo = Inferno::Repositories::SomeEntities.new
begin
  result = repo.create(key1: 'value1', key2: 'value2')
rescue Sequel::ValidationFailed => e
  # handle error
end
# File lib/inferno/repositories/repository.rb, line 78
def create(params)
  result = self.class::Model.create(db_params(params))
  build_entity(result.to_hash.merge(handle_non_db_params(params)))
end
db_params(params) click to toggle source
# File lib/inferno/repositories/repository.rb, line 106
def db_params(params)
  params.slice(*self.class::Model.columns)
end
entity_class() click to toggle source

Return the class of the entity which will be instantiated by a repository. Override if the entity class is not in the `Inferno::Entities` namespace.

@return [Class]

# File lib/inferno/repositories/repository.rb, line 40
def entity_class
  Entities.const_get(entity_class_name)
end
entity_class_name() click to toggle source

Return the name of the entity class which will be instantiated by a repository. Override if the entity class name is not the singular version of the repository name.

@return [Class]

# File lib/inferno/repositories/repository.rb, line 31
def entity_class_name
  self.class.name.demodulize.singularize
end
find(id) click to toggle source

Find a database record by id, and instantiate an entity from that record.

@param id [String] @return [Inferno::Entities] an instance of the class returned by

`#entity_class`
# File lib/inferno/repositories/repository.rb, line 50
def find(id)
  result = self.class::Model.find(id: id)
  return result if result.nil?

  build_entity(result.to_hash)
end
handle_non_db_params(params) click to toggle source
# File lib/inferno/repositories/repository.rb, line 114
def handle_non_db_params(params)
  non_db_params(params)
end
non_db_params(params) click to toggle source
# File lib/inferno/repositories/repository.rb, line 110
def non_db_params(params)
  params.reject { |key, _value| self.class::Model.columns.include? key }
end
update(entity_id, params = {}) click to toggle source

Update a record in the database.

@param entity_id [String] @param params [Hash] @example

repo = Inferno::Repositories::SomeEntities.new
result = repo.update(id, key1: 'value1', key2: 'value2')
# File lib/inferno/repositories/repository.rb, line 90
def update(entity_id, params = {})
  self.class::Model
    .find(id: entity_id)
    .update(params.merge(updated_at: Time.now))
end