t r i n g d e f m y _ m e t h o d " m y _ m e t h o d i s a c o o l m e t h o d " e n d e n d ' a b c ' . m y _ m e t h o d # = > " m y _ m e t h o d i s a c o o l m e t h o d "
c c e s s o r ( * a r g s ) a r g s . e a c h d o | a r g | d e f i n e _ m e t h o d ( a r g ) d o i n s t a n c e _ v a r i a b l e _ g e t ( : " @ # { a r g } " ) e n d d e f i n e _ m e t h o d ( : " # { a r g } = " ) d o | v a l u e | i n s t a n c e _ v a r i a b l e _ s e t ( : " @ # { a r g } " , v a l u e ) e n d e n d e n d
i t i a l : : i d l e d o b e f o r e : i d l e d o @ c u r r e n t _ m o n e y = 0 e n d a f t e r : a c c e p t i n g d o p u t s " C u r r e n t a m o u n t i n m a c h i n e : $ % . 2 f " % @ c u r r e n t _ m o n e y e n d @ m o n e y . e a c h d o | e v e n t _ n a m e , a m o u n t | e v e n t : " i n s e r t _ # { e v e n t _ n a m e } " d o b e f o r e d o p u t s " A d d i n g # { e v e n t _ n a m e } " a d d _ m o n e y ( a m o u n t ) e n d g o f r o m : : i d l e , t o : : a c c e p t i n g g o f r o m : : a c c e p t i n g , t o : : a c c e p t i n g e n d e n d @ p r o d u c t s . e a c h d o | e v e n t _ n a m e , p r i c e | e v e n t : " b u y _ # { e v e n t _ n a m e } " d o b e f o r e { p u t s " B u y i n g # { e v e n t _ n a m e } " } g o f r o m : : a c c e p t i n g , t o : : v e n d i n g , i f : l a m b d a { @ c u r r e n t _ m o n e y > = p r i c e } a f t e r d o @ c u r r e n t _ m o n e y - = p r i c e e n d e n d e n d e v e n t : c o m p l e t e _ v e n d d o b e f o r e { p u t s " R e t u r n i n g $ % . 2 f t o t h e c u s t o m e r " % @ c u r r e n t _ m o n e y } g o f r o m : : v e n d i n g , t o : : i d l e e n d e v e n t : p r e s s _ c o i n _ r e t u r n d o
e n t ( e v e n t _ n a m e , & b l o c k ) # S o m e o t h e r s t u f f h a p p e n s b e f o r e h e r e @ c l a s s . s e n d ( : d e f i n e _ m e t h o d , : " c a n _ # { e v e n t _ n a m e } ? " ) d o e v e n t . t r a n s i t i o n s . k e y ? c u r r e n t _ s t a t e . n a m e e n d @ c l a s s . s e n d ( : d e f i n e _ m e t h o d , : " # { e v e n t _ n a m e } " ) d o i f e v e n t . t r a n s i t i o n s . k e y ? c u r r e n t _ s t a t e . n a m e t r a n s i t i o n = e v e n t . t r a n s i t i o n s [ c u r r e n t _ s t a t e . n a m e ] u n l e s s t r a n s i t i o n . c o n d i t i o n . n i l ? o r s e l f . i n s t a n c e _ e x e c ( & t r a n s i t i o n . c o n d i t i o n ) r a i s e E r r o r . n e w ( ' D o e s n o t m e e t t h e t r a n s i t i o n c o n d i t i o n ' ) e n d n e w _ s t a t e = s t a t e s [ e v e n t . t r a n s i t i o n s [ c u r r e n t _ s t a t e . n a m e ] . t o ] e v e n t . c a l l b a c k s [ : b e f o r e ] . e a c h d o | c a l l b a c k | s e l f . i n s t a n c e _ e v a l & c a l l b a c k e n d # M o r e c a l l b a c k s h a p p e n h e r e @ c u r r e n t _ s t a t e = n e w _ s t a t e # M o r e C a l l b a c k s h a p p e h e r e e v e n t . c a l l b a c k s [ : a f t e r ] . e a c h d o | c a l l b a c k | s e l f . i n s t a n c e _ e v a l & c a l l b a c k e n d s e l f e l s e r a i s e E r r o r . n e w ' I n v a l i d T r a n s i t i o n ' e n d e n d e n d