Specs:
- Using Ruby on Rails for the project
- Include at least one has_many relationship - a Venue and an Act has_many Performances; a Contract has_many Approvals and Documents
- Include at least one belongs_to relationship- a Contract belongs_to a Performance; a Document belongs_to a Contract; an Approval belongs_to a Contract and a User
- Include at least one has_many through relationship - a Venue and Act has_many Contracts through Performances
- The "through" part of the has_many through includes at least one user submittable attribute - performance.name, performance.perf_date, performance.perf_time, performance.tkts_url, performance.description
- Include reasonable validations for simple model objects - act.website format, contract.due_date not in the past, document.location format, uniqueness of identity.uid & identity.provider, performance.perf_date not in the past, performance.tkts_url format, user.email is unique, venue.email format
- Include a class level ActiveRecord scope method - View Approval requests in "pending status" (/approvals/pending)
- Include a nested form writing to an associated model using a custom attribute writer - addition of approvals are nested within contract form
- Include signup implemented via Devise with customization to require approval before site use
- Include login - implemented via Devise
- Include logout- implemented via Devise
- Include third party signup/login- implemented via Devise/Omniauth with Google and LinkedIn providers
- Include nested resource show or index documents are nested under contracts (/contracts/7/documents/8)
- Include nested resource "new" form - documents are nested under contracts (/contracts/7/documents/new)
- Include form display of validation errors - included on all forms via partials
Confirm:
- The application is pretty DRY
- Limited logic in controllers
- Views use helper methods if appropriate
- Views use partials if appropriate