Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Patient
- def id=(id)
- @id = id
- end
- def name=(name)
- @name = name
- end
- def surname=(surname)
- @surname = surname
- end
- def exams
- @exams ||= Hash.new
- end
- end
- class Exam
- def initialize(image_id)
- @image_id = image_id
- @signed = false
- end
- def sign
- #rebuild image to add signature
- @signed = true
- end
- end
- class Event
- def initialize(arguments={})
- @arguments = arguments
- end
- def arguments
- @arguments
- end
- end
- class PatientCreated < Event
- def apply_to(subject); subject.id = arguments[:id]; end;
- end
- class PatientNameChanged < Event
- def apply_to(subject); subject.name = arguments[:name]; end;
- end
- class PatientSurnameChanged < Event
- def apply_to(subject); subject.surname = arguments[:surname]; end;
- end
- class PatientExamCreated < Event
- def apply_to(subject); subject.exams[arguments[:exam_id]] = Exam.new(arguments[:image_id]); end;
- end
- class PatientExamSigned < Event
- def apply_to(subject); subject.exams[arguments[:exam_id]].sign; end;
- end
- class PatientStateBuilder
- def initialize(events)
- @events = events
- end
- def build
- Patient patient = Patient.new
- @events.each { |event| patient = event.apply_to(patient) }
- patient
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment