michelchenrich

Untitled

Feb 11th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.21 KB | None | 0 0
  1. class Patient
  2.     def id=(id)
  3.         @id = id
  4.     end
  5.     def name=(name)
  6.         @name = name
  7.     end
  8.     def surname=(surname)
  9.         @surname = surname
  10.     end
  11.     def exams
  12.         @exams ||= Hash.new
  13.     end
  14. end
  15.  
  16. class Exam
  17.     def initialize(image_id)
  18.         @image_id = image_id
  19.         @signed = false
  20.     end
  21.    
  22.     def sign
  23.         #rebuild image to add signature
  24.         @signed = true
  25.     end
  26. end
  27.  
  28. class Event
  29.     def initialize(arguments={})
  30.         @arguments = arguments
  31.     end
  32.    
  33.     def arguments
  34.         @arguments
  35.     end
  36. end
  37.  
  38. class PatientCreated < Event
  39.     def apply_to(subject); subject.id = arguments[:id]; end;
  40. end
  41. class PatientNameChanged < Event
  42.     def apply_to(subject); subject.name = arguments[:name]; end;
  43. end
  44. class PatientSurnameChanged < Event
  45.     def apply_to(subject); subject.surname = arguments[:surname]; end;
  46. end
  47. class PatientExamCreated < Event
  48.     def apply_to(subject); subject.exams[arguments[:exam_id]] = Exam.new(arguments[:image_id]); end;
  49. end
  50. class PatientExamSigned < Event
  51.     def apply_to(subject); subject.exams[arguments[:exam_id]].sign; end;
  52. end
  53.  
  54. class PatientStateBuilder
  55.     def initialize(events)
  56.         @events = events
  57.     end
  58.    
  59.     def build
  60.         Patient patient = Patient.new
  61.         @events.each { |event| patient = event.apply_to(patient) }
  62.         patient
  63.     end
  64. end
Advertisement
Add Comment
Please, Sign In to add comment