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