dry-rb / dry-effects

Algebraic effects in Ruby
https://dry-rb.org/gems/dry-effects/
MIT License
112 stars 20 forks source link

Rework cache interface #46

Closed flash-gordon closed 5 years ago

flash-gordon commented 5 years ago

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