class Inferno::Repositories::Repository
Base class for repositories. Subclass and override methods as needed.
@abstract
Public Class Methods
Return the db connection for this repository.
# File lib/inferno/repositories/repository.rb, line 13 def self.db Application['db.connection'][table_name] end
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
# 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
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 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
# File lib/inferno/repositories/repository.rb, line 106 def db_params(params) params.slice(*self.class::Model.columns) end
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
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 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
# File lib/inferno/repositories/repository.rb, line 114 def handle_non_db_params(params) non_db_params(params) end
# 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 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