Skip to content

manchagd/functional_interactor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

FunctionalInteractor

Una gema para construir interactores funcionales en Ruby on Rails con:

  • dry-monads para flujos seguros
  • Interactor como base
  • dry-validation para validación automática de context
  • MaybeFields para trabajar con valores opcionales sin nils

Instalación

bundle add functional_interactor

O si usás gemas locales:

gem 'functional_interactor', path: './functional_interactor'

Uso básico

class RegisterPortalUser < FunctionalInteractor::ApplicationInteractor
  def call
    user = yield create_user(context.params)
    context.user = user
    Success(context)
  end
end

Validación automática del context

class RegisterPortalUserSchema
  def self.rules
    proc do
      required(:params).hash do
        required(:email).filled(:string)
      end
    end
  end
end

Modo clásico vs funcional

.call (modo clásico compatible con Organizer)

result = RegisterPortalUser.call(params: {...})
result.success? # true
result.user     # accede al contexto

.call_monadic (modo funcional con monads)

result = RegisterPortalUser.call_monadic(params: {...})

case result
in Dry::Monads::Success(ctx)
  puts ctx.user
in Dry::Monads::Failure(error)
  puts "Falló: \#{error}"
end

call_monadic devuelve Success(...) o Failure(...), y es ideal para specs, encadenamientos con yield, o servicios funcionales.

Generador

rails generate functional_interactor:interactor MyCoolInteractor

Esto genera:

  • app/interactors/my_cool_interactor.rb
  • app/schemas/my_cool_interactor_schema.rb

Licencia

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages