Advertisement
Guest User

Untitled

a guest
Aug 4th, 2015
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. module Enrolments
  2. class Suspend
  3. attr_reader :enrolment, :responses, :comment, :user_id
  4. attr_writer :event_service, :suspend_enrolment_presentation_service
  5.  
  6. def initialize
  7. @responses = []
  8. end
  9.  
  10. def call(enrolment, user_id, comment)
  11. @enrolment = enrolment
  12. @user_id = user_id
  13. @comment = comment
  14.  
  15. suspend_enrolment_presentations
  16. if all_enrolment_presentations_suspended?
  17. suspend_enrolment
  18. raise_suspended_enrolment_event
  19. create_enrolment_comment
  20. end
  21. end
  22.  
  23. private
  24.  
  25. attr_reader :response
  26.  
  27. def suspend_enrolment_presentations
  28. enrolment.enrolment_presentations.each do |ep|
  29. @responses << suspend_enrolment_presentation_service.call(ep)
  30. end
  31. end
  32.  
  33. def all_enrolment_presentations_suspended?
  34. @responses.all?{ |r| r[:success] }
  35. end
  36.  
  37. def suspend_enrolment
  38. enrolment.status = 'Suspended'
  39. enrolment.save
  40. end
  41.  
  42. def raise_suspended_enrolment_event
  43. event_service.call(enrolment)
  44. end
  45.  
  46. def create_enrolment_comment
  47. EnrolmentComment.create(comment: comment, user_id: user_id, enrolment_id: enrolment.id)
  48. end
  49.  
  50. def event_service
  51. @event_service ||= Events::Outgoing::Enrolments::SuspendedEnrolment.new
  52. end
  53.  
  54. def suspend_enrolment_presentation_service
  55. @suspend_enrolment_presentation_service ||= Enrolments::EnrolmentPresentations::Suspend.new
  56. end
  57. end
  58. end
  59.  
  60. class Enrolments::SuspendWithoutErrors < Enrolments::Suspend
  61. def raise_suspended_enrolment_event
  62. # change the implementation here
  63. end
  64. end
  65.  
  66. class Enrolments::Suspend
  67. ...
  68. class_attribute :event_service, :suspend_enrolment_presentation_service
  69. ...
  70. end
  71.  
  72. class Enrolments::Suspend
  73. ...
  74. class_attribute :event_service, :suspend_enrolment_presentation_service
  75.  
  76. # create the services used for this class
  77. self.event_service = proc {|enrollment| ... }
  78. self.suspend_enrolment_presentation_service = proc {|e| ... }
  79. end
  80.  
  81. class Enrolments::Suspend
  82. ...
  83.  
  84. def event_service(enrollment)
  85. ...
  86. end
  87.  
  88. def suspend_enrolment_presentation_service(enrollment)
  89. ...
  90. end
  91. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement