Skip to content

Instantly share code, notes, and snippets.

@heymichaelp
Last active August 29, 2015 14:03
Show Gist options
  • Save heymichaelp/b2843e292f8b71cdd1a0 to your computer and use it in GitHub Desktop.
Save heymichaelp/b2843e292f8b71cdd1a0 to your computer and use it in GitHub Desktop.
View Objects: Example View Object
var _ = require('underscore');
var DetermineStudentPassingStatus = require('./determineStudentPassingStatus');
var GetAverageGradeFromAssignments = require('./getAverageGradeFromAssignments');
var GradeReportPresenter = function(student) {
this.student = student
}
GradeReportPresenter.prototype = _.extend(GradeReportPresenter.prototype, {
present: function() {
return _.compose(
this.averageGrade,
this.passingStatus,
this.phoneNumber
).call(this, {})
},
averageGrade: function(presentedStudent) {
// use a service object to determine average grade
var assignments = this.student.assignments
var averageGrade = new GetAverageGradeFromAssignments(assignments).run()
presentedStudent.averageGrade = averageGrade
return presentedStudent
},
passingStatus: function(presentedStudent) {
// use a service object to determine passing status from assignments
var id = this.student.id
var determinePassingStatus = new DetermineStudentPassingStatus(id)
var assignments = this.student.assignments
var passingStatus = determinePassingStatus.fromAssignments(assignments)
presentedStudent.isPassing = passingStatus
return presentedStudent
},
phoneNumber: function(presentedStudent) {
var phoneRegex = new RegExp(/(\d{3})(\d{3})(\d{4})/)
var phone = this.student.phone
presentedStudent.phone = phone.replace(phoneRegex, "$1-$2-$3")
return presentedStudent
}
})
module.exports = GradeReportPresenter;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment