Utilizando alguns conceitos de Ruby on Rails, é possível desenvolver novas funcionalidades de forma robusta, centralizada e produtiva, proporcionando uma experiência consistente ao usuário final e elegante ao desenvolvedor.
updated: m: "%{model} atualizado com sucesso!" f: "%{model} atualizada com sucesso!" config/locales/pt-BR.yml Este caso é específico para o português, mas é facilmente expansível para outros idiomas com regras de gêneros diferentes.
class Company < ActiveRecord::Base ... end Código comum a várias classes Potencialmente modularizável module ModelModule def genderize(verb) "#{verb}.#{self.gender}" end def gender 'm' end end def genderize(verb) "#{verb}.#{self.gender}" end def gender 'm' end include ModelModule updated: m: "%{model} atualizado com sucesso!" f: "%{model} atualizada com sucesso!"
create @model = Model.new model_validation if @model.save redirect_to models_path, notice: “modelo criado com sucesso!” else render '_form' end end É possível generalizar? Inferido através do nome do parâmetro Parâmetro Locale Colocar em um concern
create @model = Company.new company_validation if @model.save redirect_to companies_path, notice: “Empresa criada com sucesso!” else render '_form' end end
notice: “modelo criado com sucesso!” else render '_form' end end Maximização do Conceito DRY Concerns • Exemplo de Action Inferido através do nome do parâmetro Parâmetro Locale class CompaniesController < ApplicationController include MainConcern … end arguable model_class: Company
ClassMethods attr_reader :arguable_opts … private def arguable(opts={}) @arguable_opts = opts end end def create … end … end class CompaniesController < ApplicationController include MainConcern arguable model_class: Company … end Código completo do concern
class CompaniesController < ApplicationController include MainConcern arguable model_class: Company private def company_params params.require(:company).permit(...) end end