Sha256: 53ded91b1ec6389c11782dc4d72e68b671a38cece13f8e4afb215f8008f5b10c

Contents?: true

Size: 1.72 KB

Versions: 7

Compression:

Stored size: 1.72 KB

Contents

module Commons
  module Repositories
    module Catalogs
      class BaseCatalog
        include Singleton
        include Commons::Repositories::Catalogs::Concerns::ModelCachingExtention

        #
        # Método que realiza un guardado de un objeto
        #
        # @param [Array<Hash>] params Listado de parámetros del objeto
        #
        # @return [Object] Objeto creado
        #
        # @raises [ActiveRecord::RecordInvalid]
        #
        def create_from_params!(params)
          clear_cache
          @db_client.create!(params)
        end

        #
        # Método que realiza una busqueda o guardado de un objeto
        #
        # @param [Array<Hash>] params Listado de parámetros del objeto
        # @param [block] block
        #
        # @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)
          clear_cache
          object
        end

        #
        # Método que realiza un guardado de un objeto
        #
        # @param [Array<Hash>] params Listado de parámetros del objeto
        #
        # @return [Object] Objeto creado
        #
        # @raises [ActiveRecord::RecordInvalid]
        #
        def update_from_params!(id:, **params)
          object = @db_client.find_by!(id: id)
          object.update!(params)
          clear_cache

          object
        end

        private

        def initialize
          @db_client ||= class_object
        end

        def class_object
          model_name = self.class.to_s.gsub("Repository", "")
          Object.const_get model_name
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
commons_yellowme-0.16.0 lib/commons/repositories/catalogs/base_catalog.rb
commons_yellowme-0.15.0 lib/commons/repositories/catalogs/base_catalog.rb
commons_yellowme-0.12.0 lib/commons/repositories/catalogs/base_catalog.rb
commons_yellowme-0.11.3 lib/commons/repositories/catalogs/base_catalog.rb
commons_yellowme-0.11.2 lib/commons/repositories/catalogs/base_catalog.rb
commons_yellowme-0.11.1 lib/commons/repositories/catalogs/base_catalog.rb
commons_yellowme-0.11.0 lib/commons/repositories/catalogs/base_catalog.rb