lib/commons/repositories/base_repository.rb in commons_yellowme-0.12.0 vs lib/commons/repositories/base_repository.rb in commons_yellowme-0.15.0

- old
+ new

@@ -2,108 +2,91 @@ module Repositories class BaseRepository include Singleton # - # Método que devuelve todos los objetos + # Método que devuelve todos los objetos activos # - # @return [Object,nil] + # @return [Arrat<Object>, nil] # - def all - @db_client.all - end + delegate :all, to: :@db_client # # Método que devuelve todos los objetos que no han sido eliminados # # @return [Object,nil] # - def kept - raise ActiveModel::MissingAttributeError unless @db_client.column_names.include? "deleted_at" + delegate :where, to: :@db_client + alias_method :query, :where - @db_client.where(deleted_at: nil) - end - # # Método que devuelve todos los objetos que han sido eliminados # - # @return [Object,nil] + # @return [Object, nil] # def deleted - raise ActiveModel::MissingAttributeError unless @db_client.column_names.include? "deleted_at" + raise ActiveModel::MissingAttributeError unless @db_client.include? Commons::Concerns::Extensions::SoftDeleted - @db_client.where.not(deleted_at: nil) + @db_client.unscoped.where.not(deleted_at: nil) end # # Método que devuelve el objeto según su ID # - # @return [Object,nil] + # @return [Object, nil] # - def find(id) - @db_client.find(id) - end + delegate :find, to: :@db_client # # Método que devuelve el objeto según su ID # # @return [Object,nil] # - def find_kept(id) - raise ActiveModel::MissingAttributeError unless @db_client.column_names.include? "deleted_at" + def find_deleted(id) + raise ActiveModel::MissingAttributeError unless @db_client.include? Commons::Concerns::Extensions::SoftDeleted - @db_client.find_by!(id: id, deleted_at: nil) + @db_client.unscoped.where(id: id).where.not(deleted_at: nil).first end # # Método que devuelve el objeto según parámetros # # @return [Object,nil] # - def find_by(params) - @db_client.find_by(params) - end + delegate :find_by, to: :@db_client # # Método que devuelve el objeto según parámetros # # @return [Object,nil] # - def find_kept_by(params) - raise ActiveModel::MissingAttributeError unless @db_client.column_names.include? "deleted_at" + def find_deleted_by(params) + raise ActiveModel::MissingAttributeError unless @db_client.include? Commons::Concerns::Extensions::SoftDeleted - @db_client.find_by( - deleted_at: nil, - **params - ) + @db_client.unscoped.where.not(deleted_at: nil).where(**params).first end # # Método que devuelve el objeto según parámetros # # @return [Object] # # @raise [ActiveRecord::RecordNotFound] # - def find_by!(params) - @db_client.find_by!(params) - end + delegate :find_by!, to: :@db_client # # Método que devuelve el objeto según parámetros # # @return [Object] # # @raise [ActiveRecord::RecordNotFound] # - def find_kept_by!(params) - raise ActiveModel::MissingAttributeError unless @db_client.column_names.include? "deleted_at" + def find_deleted_by!(params) + raise ActiveModel::MissingAttributeError unless @db_client.include? Commons::Concerns::Extensions::SoftDeleted - @db_client.find_by!( - deleted_at: nil, - **params - ) + @db_client.unscoped.where.not(deleted_at: nil).where(**params).first! end # # Método que realiza un guardado de un objeto # @@ -113,13 +96,14 @@ # # @raise [ActiveRecord::RecordInvalid] # @raise [ActiveRecord::RecordNotSaved] # def create!(object) - raise ArgumentError unless object.is_a? @db_client + raise ArgumentError unless object.is_a?(@db_client) + raise ActiveRecord::RecordInvalid.new(object) unless object.valid? - object.save! + save_object(object) end # # Método que realiza un guardado de un objeto # @@ -141,14 +125,11 @@ # # @return [Object] Objeto creado # # @raises [ActiveRecord::RecordInvalid] # - def find_or_create_by!(params, &block) - object = @db_client.find_by(params) || @db_client.create!(params, &block) - object - end + delegate :find_or_create_by!, to: :@db_client # # Método que realiza una busqueda de la primer entrada, # en caso de no encontrarlo crea un objeto con el bloque # @@ -172,11 +153,17 @@ # # @raise [ActiveRecord::RecordInvalid] # @raise [ActiveRecord::RecordNotSaved] # def update!(object) - create!(object) + if !object.is_a?(@db_client) || object.id.blank? + raise ArgumentError + end + + raise ActiveRecord::RecordInvalid.new(object) unless object.valid? + + save_object(object) end # # Método que realiza un guardado de un objeto # @@ -201,27 +188,45 @@ # @return [Object] Objeto eliminado # # @raises [ActiveRecord::RecordInvalid] # @raises [ActiveModel::MissingAttributeError] # - def soft_delete!(id) - raise ActiveModel::MissingAttributeError unless @db_client.column_names.include? "deleted_at" - - object = @db_client.find_by!(id: id, deleted_at: nil) - object.update!(deleted_at: Time.current) - - object + def destroy!(object) + if @db_client.include? Commons::Concerns::Extensions::SoftDeleted + soft_delete!(object) + else + hard_delete!(object) + end end - private + protected def initialize - @db_client ||= class_object + @db_client = class_object end def class_object model_name = self.class.to_s.gsub("Repository", "") Object.const_get model_name + end + + private + + def save_object(object) + object.save + end + + def soft_delete!(object) + raise ActiveModel::MissingAttributeError unless @db_client.column_names.include?("deleted_at") + object.update!(deleted_at: Time.current) + + object + end + + def hard_delete!(object) + object.destroy! + + object end end end end