It turned out the interface of Cache isn't really handy so I decided to change it:
# setting up cache
class Middleware
include Dry::Effects::Handler.Cache(:my_app)
def call(env)
with_cache { @app.(env) }
end
end
# using cache with include
class PostRepo
include Dry::Effects.Cache(:my_app)
def for_user(user)
cache(:posts, user) { posts.by_user_id(user.user_id).to_a }
end
end
# with prepend
class PostRepo
prepend Dry::Effects.Cache(my_app: %i(for_user for_blog))
def for_user(user)
posts.by_user_id(user.user_id).to_a
end
def for_blog(blog)
posts.by_blog_id(blog.blog_id).to_a
end
end
It turned out the interface of
Cache
isn't really handy so I decided to change it: