These are some key takeaways from the 3rd course for me based on the curriculum as well as the feedback received from the TAs for every module (aka Week).
In Module 3, focus was on learning…
- to keep controllers skinny
- ActiveRecord transactions (all or none!)
- RSpec macros and shared_examples
- Capybara introduction and first feature spec
- Outside-in development in action with feature-specs in Capybara: Starting with a feature-spec (BDD) and letting it drive the design (models/routes/controllers) seems to be coming a bit more naturally to me than the other way round
- Single-Assertion Principle can (and should) be violated in feature-specs: not just to DRY up the code, but mainly because feature specs are expensive to run!
- ActiveRecord transactions was one of the primary learnings when trying to update the video positions in the queue. Got introduced to ACID, thanks to the missus!
- RSpec shared_examples and macros are very helpful in DRYing up the specs.
- Got re-exposed to :xpath based search of elements in the view template! DOM tree, XPath, had heard and read about these a long time ago for some thing totally different!
QueueItem.find_by(id: params[:id], user: current_user)does not throw a “RecordNotFound” exception in rails. Doing this
current_user.queue_items.find(params[:id])does. Use either knowingly!
- Do not prefix method names with
set_. Instead come up with better names to indicate what they do.
method: deleteinstead of the default
getfor destroying a record so that the route cannot be bookmarked.
where(...).firstfor searching a single record.
self.when assigning value to an instance variable but it is not necessary when using the variable in an instance method.