u wont bleev wut dis code doez
TRANSCRIPT
![Page 1: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/1.jpg)
U WONT BLEEV WUT DIS CODE DOEZ
![Page 2: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/2.jpg)
IN DA BEGINNIN ALL WUZ NICE
![Page 3: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/3.jpg)
DEN ROGUE ERROR APPEARD#{l(@order.purchased_at, format: :order_date)}
ActionView::Template::ErrorObject must be a Date, DateTime or Time object. nil given.
SILLY PUPPY, PURCHASD AT SHUD NOT BE NIL
![Page 5: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/5.jpg)
![Page 6: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/6.jpg)
HOW CAN PURCHASD AT BE NIL?
![Page 7: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/7.jpg)
TURNS OUT SOMEBODY WUZ SMART
![Page 8: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/8.jpg)
THAR SHUD NOT BE 2 KITTEHS PURCHASIN AT TEH SAME TIEM
![Page 9: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/9.jpg)
@order.with_lock do
add_errors_from(confirmer_command) unless
confirmer_command.perform
end
![Page 10: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/10.jpg)
AN TEH CEILIN KAT SED
Locking::Pessimistic provides support for row-level locking using SELECT … FOR UPDATE
![Page 11: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/11.jpg)
I KNOE HOW DAT WERKZ
t1 select … for update
t2 select … for update
t1 purchased_at = Time.zone.now send_notifications
t2 select … for update returns
![Page 12: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/12.jpg)
AN TEH CEILIN KAT SED
You can start a transaction and acquire the lock in one go by calling with_lock with a block.
![Page 13: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/13.jpg)
WUT DOEZ SEND_NOTIFICATIONS DO
def send_notifications
Resque.enqueue(...)
end
![Page 14: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/14.jpg)
transaction+
Resque.enqueue
![Page 15: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/15.jpg)
![Page 16: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/16.jpg)
TEH FIX WUZ [email protected]_lock do
check_pending_order!
@order.purchased_at = Time.current
@order.confirm!
end
send_notifications
![Page 17: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/17.jpg)
DOAN MAK KITTEHS SAD
LOCK ONLY WUT ABSOLUTELY NECESARYREAD UP ON HOW THINGS WERK
![Page 18: U wont bleev wut dis code doez](https://reader030.vdocument.in/reader030/viewer/2022032503/55be3a61bb61ebb9458b47ee/html5/thumbnails/18.jpg)