State machines [4d]
Movies in MovieDB should have one of the following workflow states:
A movie always begins as a
draft and then transitions through the states as it's getting reviewed. This could be a typical state flow for a movie:
draft => pending => rejected => pending => accepted
Change the visibility rules (Consul powers) so:
- All users can see accepted movies of other users.
- All users can see the movies they created themselves, regardless of their state.
- An admin can see movies from other users that are accepted, pending or rejected.
We will now add some additional controls to transition a movie between states:
- When a user views one of her draft or rejected movies, she sees a button Submit on the movie's show view. This changes the button's state to
- When an admin opens a
pendingmovie by any user, she sees two buttons Accept and Reject.
- In addition, when an admin edits a movie by any user, she can choose any state from a select box, regardless of the movie's current state.
Make two implementations of the requirements above:
- Using only Ruby/Rails and no gems
- Using a gem like rails_state_machine
Make sure that you have tests for all the changes you make.