Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.82 KB | None | 0 0
  1. class DoSomething
  2. def self.build(dep:)
  3. ->(user:) {
  4. self.new(dep: dep, user: user).call
  5. }
  6. end
  7.  
  8. def initialize(dep:, user:)
  9. @dep = dep
  10. @user = user
  11. end
  12.  
  13. def call
  14. {
  15. current: report[:current],
  16. previous: report[:previous],
  17. }
  18. end
  19.  
  20. private
  21.  
  22. # We should be able to memoize an instance variable
  23. # without worrying about the side effects of this
  24. def report
  25. @report ||= expensive_computation(@user)
  26. end
  27.  
  28. def expensive_computation(user)
  29. {
  30. current: "current for " + user,
  31. previous: "previous for " + user,
  32. }
  33. end
  34. end
  35.  
  36. # You can build an interactor injecting dependecies
  37. interactor = DoSomething.build(dep: {})
  38.  
  39. # And call it with different parameters
  40. puts interactor.call(user: "Sam")
  41. puts interactor.call(user: "Tess")
  42.  
  43. # Or you can do everything in one
  44. puts DoSomething.new(dep: {}, user: "Sally").call
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement