Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DoSomething
- def self.build(dep:)
- ->(user:) {
- self.new(dep: dep, user: user).call
- }
- end
- def initialize(dep:, user:)
- @dep = dep
- @user = user
- end
- def call
- {
- current: report[:current],
- previous: report[:previous],
- }
- end
- private
- # We should be able to memoize an instance variable
- # without worrying about the side effects of this
- def report
- @report ||= expensive_computation(@user)
- end
- def expensive_computation(user)
- {
- current: "current for " + user,
- previous: "previous for " + user,
- }
- end
- end
- # You can build an interactor injecting dependecies
- interactor = DoSomething.build(dep: {})
- # And call it with different parameters
- puts interactor.call(user: "Sam")
- puts interactor.call(user: "Tess")
- # Or you can do everything in one
- puts DoSomething.new(dep: {}, user: "Sally").call
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement