Pular para o conteúdo principal

Ciclo de vida

No Nerdify, o ciclo de vida de uma requisição começa como em qualquer aplicação Rails. Vamos focar no que o Nerdify automatiza: a rota é definida, a requisição chega ao servidor, o roteador do Rails identifica o controlador e a action e redireciona para o método correspondente. No entanto, ao utilizar controladores que herdam das classes base do Nerdify, esse fluxo é altamente otimizado e automatizado.

🔁 Mapeamento da rota para o controlador

Quando a requisição chega — por exemplo, GET /api/v1/customers/new — o roteamento do Rails direciona para Api::V1::CustomersController#new. Da mesma forma, GET /api/v1/customers/123 vai para #show, e assim por diante, seguindo o padrão RESTful.

No entanto, ao herdar de um dos controladores do Nerdify (Nerdify::ApplicationController, Nerdify::SessionsController, ou Nerdify::ReportsController), você ganha uma série de comportamentos automáticos e configuráveis, e normalmente não precisa implementar nada manualmente além da definição do template e das regras de autenticação/autorização.

🧩 Carregamento de modelos e relacionamentos

O Nerdify é capaz de identificar automaticamente os modelos envolvidos na requisição com base na estrutura da URL e da hierarquia do controlador. Por exemplo:

GET /api/v1/companies/4/customers/7

Essa rota instanciará automaticamente:

@company  = Company.find(4)
@customer = Customer.find(7)

Isso é possível porque o Nerdify usa convenções baseadas na estrutura do caminho e no nome do controlador para:

  • identificar os modelos principais (com model e symbol)
  • no exemplo acima, o nerdify reconheceria e retornaria no model Customer para instancia os objetos, e no simbol :customer para puxar dados e parametros da requisição.
  • instanciar os parents com set_parents isso faz a lógica capturar tambem e instanciar o objeto do pai em @company.

🧪 Ações RESTful automatizadas

As actions padrão do REST (index, show, new, edit, create, update, destroy) já vêm implementadas. Essas ações utilizam métodos auxiliares internos como:

  • object → instância do modelo para show, edit, update, destroy, etc.
  • objects → coleção paginada e filtrada para index
  • object_parameters → parâmetros fortes (strong parameters) protegendo atributos, por padrão considera apenas o campos que estão dentro de fieldsets do modelo e protege os campos definidos fora de fieldsets.
  • criteria → sanitização e montagem do hash de filtros
  • default_scope → escopo padrão usado ao buscar dados
  • page_json → estrutura de resposta completa com layout, componentes, traduções e dados

🧬 Exemplo de fluxo interno:

Para uma action create, o Nerdify executa:

@object = model.new(object_parameters)
if @object.save
# sucesso: renderiza page_json com status 200 e componentes com indicação da aproxima ação no frontend
else
# erro: renderiza erros e mensagem com status 422 e componentes com indicação da aproxima ação no frontend
end

Para index, o fluxo chama:

@objects = objects # inclui filtros, ordenação, paginação, passando pelo criteria, default scope, entre outros helpers.
render json: page_json

⚙️ O método objects aplica os filtros definidos em criteria que busca isso de params[:filters] e trata antes da consulta, paginação via params[:page], e ordenação com params[:sort] e params[:sort_type]. Também trata escopos de ordenação padrão por params[:filters][:order] e qual lista deve ser renderizada em uma página com várias através do parametro params[:list_type].

🧾 Renderização da resposta

O método page_json é o responsável por montar a estrutura da resposta final. Ele:

  • Carrega os componentes do template definido para aquele controlador
  • Injeta os resources instanciados na action
  • Adiciona traduções e metadados da página e layout em options

Você pode sobrescrevê-lo para alterar o comportamento, mas recomendamos sempre usar super para preservar a estrutura padrão e aplicar modificações incrementais:

def page_json
super.merge(custom_component: { name: "Extra" })
end

🧨 Quando sobrescrever

Você pode sobrescrever as actions padrão (index, show, etc.) ou qualquer um dos métodos auxiliares (object, objects, criteria, default_scope, etc.). Porém:

⚠️ Se você estiver sobrescrevendo muitas ações, é possível que esteja fugindo da convenção e adicionando complexidade desnecessária. Reavalie a estrutura. O Nerdify foi projetado para funcionar sem escrever nada no controlador além do que é gerado pela CLI, ou seja, os metodos template e authentication.

📦 Convenção sobre configuração

As actions RESTful funcionam automaticamente porque o Nerdify:

  • Entende a rota
  • Identifica o modelo (via model e symbol)
  • Identifica os pais da rota (via set_parents)
  • Executa o método adequado (object, objects, object_parameters)
  • Renderiza a resposta com page_json

Ao seguir as convenções do Nerdify, o comportamento padrão cobre 99% dos casos. O que não for coberto pode ser personalizado com sobrescrita pontual e estruturada.


🧠 A lógica dos controladores do Nerdify é altamente otimizada para produtividade. Você pode confiar no fluxo padrão, sabendo que ele cobre desde autenticação até a entrega da resposta renderizada — com organização, segurança e escalabilidade.