Home Reference Source

src/conversores.js

class Conversor {
    converter (dados) {
        if (this.camposPublicos.indexOf('*') === -1) {
            dados = this.filtrar(dados)
        }

        if (this.tipoDeConteudo === 'json') {
            return this.json(dados)
        }
    }

    json (dados) {
        return JSON.stringify(dados)
    }

    filtrar (dados) {
        if (Array.isArray(dados)) {
            dados = dados.map((post) => this.filtrarObjeto(post))
        } else {
            dados = this.filtrarObjeto(dados)
        }

        return dados
    }

    filtrarObjeto (objeto) {
        const objetoFiltrado = {}

        this.camposPublicos.forEach((campo) => {
            if (Reflect.has(objeto, campo)) {
                objetoFiltrado[campo] = objeto[campo]
            }
        })

        return objetoFiltrado
    }
}

class ConversorPost extends Conversor {
    constructor (tipoDeConteudo, camposExtras = []) {
        super()
        this.tipoDeConteudo = tipoDeConteudo
        this.camposPublicos = ['titulo', 'conteudo'].concat(camposExtras)
    }
}

class ConversorUsuario extends Conversor {
    constructor (tipoDeConteudo, camposExtras = []) {
        super()
        this.tipoDeConteudo = tipoDeConteudo
        this.camposPublicos = ['nome'].concat(camposExtras)
    }
}

module.exports = { ConversorPost, ConversorUsuario }