Skip to content

Instantly share code, notes, and snippets.

@krzykamil
Last active April 25, 2023 08:10
Show Gist options
  • Save krzykamil/3d341f3d2ea0b63d9681969c424e98fe to your computer and use it in GitHub Desktop.
Save krzykamil/3d341f3d2ea0b63d9681969c424e98fe to your computer and use it in GitHub Desktop.
Resolve - dry-effects dependency injection
class ProviderMiddleware
include Dry::Effects::Handler.Resolve
def initialize(app, dependencies)
@app = app
@dependencies = dependencies
end
def call(env)
provide(@dependencies) { @app.(env) }
end
end
use ProviderMiddleware, user_repo: UserRepo.new
run Application.new
class UserService
include Dry::Effects.Resolve(:user_repo)
def get_all_users
user_repo.get_all
end
end
class UserRepository
def get_all
User.all
end
end
class UsersController
include Dry::Effects::Handler.Resolve
def index
provide(user_repo: UserRepository.new) do
users = UserService.new.get_all_users
render json: users
end
end
end
class UsersController
def index
users = user_service.get_all_users
render json: users
end
private
def user_service
@user_service ||= UserService.new(user_repository)
end
def user_repository
@user_repository ||= UserRepository.new
end
end
class UserService
def initialize(user_repository)
@user_repository = user_repository
end
def get_all_users
@user_repository.get_all
end
end
class UserRepository
def get_all
User.all
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment