r o m r e p o s i t o r y ' r e q u i r e ' r o m s q l ' # R O M : : C o n f i g u r a t i o n で接続先を指定 c o n f = R O M : : C o n f i g u r a t i o n . n e w ( : s q l , ' s q l i t e : : m e m o r y ' ) m i g r a t i o n = c o n f . g a t e w a y s [ : d e f a u l t ] . m i g r a t i o n d o c h a n g e d o c r e a t e _ t a b l e ( : u s e r s ) d o p r i m a r y _ k e y : i d c o l u m n : n a m e , S t r i n g , n u l l : f a l s e c o l u m n : e m a i l , S t r i n g , n u l l : f a l s e e n d e n d e n d # m i g r a t i o n 実行 m i g r a t i o n . a p p l y ( c o n f . g a t e w a y s [ : d e f a u l t ] . c o n n e c t i o n , : u p )
: : C o n f i g u r a t i o n . n e w ( : s q l , ' s q l i t e : : m e m o r y ' ) # R e l a t i o n c l a s s U s e r s < R O M : : R e l a t i o n [ : s q l ] s c h e m a ( i n f e r : t r u e ) d e f b y _ i d ( i d ) w h e r e ( i d : i d ) e n d e n d # R O M : : C o n f i g u r a t i o n にR e l a t i o n を登録 c o n f . r e g i s t e r _ r e l a t i o n ( U s e r s ) # R O M : : C o n f i g u r a t i o n を使用してR O M : : C o n t a i n e r を作成する r o m = R O M . c o n t a i n e r ( c o n f )
r R e p o < R O M : : R e p o s i t o r y [ : u s e r s ] c o m m a n d s : c r e a t e , u p d a t e : : b y _ i d , d e l e t e : : b y _ i d d e f [ ] ( i d ) u s e r s . b y _ i d ( i d ) . o n e ! e n d d e f a l l u s e r s . t o _ a e n d e n d
n t a i n e r を使用してR e p o s i t o r y を作成 u s e r _ r e p o = U s e r R e p o . n e w ( r o m ) u s e r = u s e r _ r e p o . c r e a t e ( n a m e : ' J a n e ' , e m a i l : ' j a n e @ d o e . o r g ' ) p u t s u s e r . i n s p e c t # = > # < R O M : : S t r u c t [ U s e r ] i d = 1 n a m e = " J a n e " e m a i l = " j a n e @ d o e . o r g " > p u t s u s e r _ r e p o . a l l . i n s p e c t # = > [ # < R O M : : S t r u c t [ U s e r ] i d = 1 n a m e = " J a n e " e m a i l = " j a n e @ d o e . o r g " > ] u s e r _ r e p o . u p d a t e ( u s e r . i d , n a m e : ' J a n e D o e ' ) p u t s u s e r _ r e p o [ u s e r . i d ] . i n s p e c t # = > # < R O M : : S t r u c t [ U s e r ] i d = 1 n a m e = " J a n e D o e " e m a i l = " j a n e @ d o e . o r g " > u s e r _ r e p o . d e l e t e ( u s e r . i d )
r o m r e p o s i t o r y ' r e q u i r e ' r o m s q l ' # 接続先を指定 c o n f = R O M : : C o n f i g u r a t i o n . n e w ( : s q l , ' s q l i t e : : m e m o r y ' ) m i g r a t i o n = c o n f . g a t e w a y s [ : d e f a u l t ] . m i g r a t i o n d o c h a n g e d o c r e a t e _ t a b l e ( : u s e r s ) d o p r i m a r y _ k e y : i d c o l u m n : n a m e , S t r i n g , n u l l : f a l s e c o l u m n : e m a i l , S t r i n g , n u l l : f a l s e e n d e n d e n d # m i g r a t i o n 実行 m i g r a t i o n . a p p l y ( c o n f . g a t e w a y s [ : d e f a u l t ] . c o n n e c t i o n , : u p )
s e r a t t r _ r e a d e r : i d , : n a m e , : e m a i l d e f i n i t i a l i z e ( a t t r i b u t e s ) @ i d , @ n a m e , @ e m a i l = a t t r i b u t e s . v a l u e s _ a t ( : i d , : n a m e , : e m a i l ) e n d e n d u s e r _ r e p o . u s e r s . w h e r e ( n a m e : ' M a l c o l m ' ) . a s ( U s e r ) . t o _ a # = > [ # < U s e r : 0 x 0 0 5 5 8 d 6 b 7 6 2 f 2 0 @ e m a i l = " m a l c o l m @ e x a m p l e . c o m " , @ i d = 1 , @ n a m e = " M a l c o l m ]
e r s < R O M : : R e l a t i o n [ : h t t p ] s c h e m a d o a t t r i b u t e : i d , R O M : : T y p e s : : I n t a t t r i b u t e : n a m e , R O M : : T y p e s : : S t r i n g a t t r i b u t e : a g e , R O M : : T y p e s : : I n t e n d e n d
s e r s < R O M : : R e l a t i o n [ : h t t p ] s c h e m a d o a t t r i b u t e : i d , R O M : : T y p e s : : I n t a t t r i b u t e : n a m e , R O M : : T y p e s : : S t r i n g a t t r i b u t e : a g e , R O M : : T y p e s : : I n t p r i m a r y _ k e y : i d e n d e n d c l a s s P o s t s < R O M : : R e l a t i o n [ : h t t p ] s c h e m a d o a t t r i b u t e : u s e r _ i d , R O M : : T y p e s : : F o r e i g n K e y ( : u s e r s ) e n d e n d
i r e ' r o m s q l ' r e q u i r e ' r o m / s q l / t y p e s / p g ' c l a s s U s e r s < R O M : : R e l a t i o n [ : s q l ] s c h e m a d o a t t r i b u t e : m e t a , R O M : : S Q L : : T y p e s : : P G : : J S O N a t t r i b u t e : t a g s , R O M : : S Q L : : T y p e s : : P G : : A r r a y a t t r i b u t e : i n f o , R O M : : S Q L : : T y p e s : : P G : : H a s h e n d e n d
s e r s < R O M : : R e l a t i o n [ : s q l ] s c h e m a ( i n f e r : t r u e ) d o a s s o c i a t i o n s d o h a s _ m a n y : t a s k s h a s _ o n e : a c c o u n t e n d e n d e n d
e ' r o m s q l ' c l a s s U s e r s < R O M : : R e l a t i o n [ : s q l ] s c h e m a ( i n f e r : t r u e ) d e f b y _ i d ( i d ) w h e r e ( i d : i d ) e n d e n d c o n t a i n e r = R O M . c o n t a i n e r ( : s q l , ' s q l i t e : : m e m o r y ' ) d o | c o n f | c o n f . d e f a u l t . c o n n e c t i o n . c r e a t e _ t a b l e ( : u s e r s ) d o p r i m a r y _ k e y : i d c o l u m n : n a m e , S t r i n g , n u l l : f a l s e c o l u m n : e m a i l , S t r i n g , n u l l : f a l s e e n d c o n f . r e g i s t e r _ r e l a t i o n ( U s e r s ) firstやlastなども使える
r s < R O M : : R e l a t i o n [ : s q l ] d e f w i t h _ t a s k s i n n e r _ j o i n ( : t a s k s , u s e r _ i d : : i d ) e n d d e f w i t h _ p o s t s l e f t _ j o i n ( : p o s t s , u s e r _ i d : : i d ) e n d e n d
t a i n e r . r e l a t i o n s . u s e r s . i n s e r t ( n a m e : " M a l c o l m " , e m a i l : " m a l c o l m @ e x a m p l e . c o m " c o n t a i n e r . r e l a t i o n s . u s e r s . w h e r e ( i d : 1 ) . u p d a t e ( n a m e : " f i r s t " )
' r o m / s q l / c o m m a n d s / e r r o r _ w r a p p e r ' r e q u i r e ' r o m / s q l / c o m m a n d s / t r a n s a c t i o n ' m o d u l e R O M m o d u l e S Q L m o d u l e C o m m a n d s # S Q L c r e a t e c o m m a n d # # @ a p i p u b l i c c l a s s C r e a t e < R O M : : C o m m a n d s : : C r e a t e a d a p t e r : s q l i n c l u d e T r a n s a c t i o n i n c l u d e E r r o r W r a p p e r u s e : a s s o c i a t e s u s e : s c h e m a
s e r t U s e r < R O M : : C o m m a n d s : : C r e a t e [ : s q l ] r e l a t i o n : u s e r s r e g i s t e r _ a s : u p s e r t d e f e x e c u t e # d o t h e o p e r a t i o n s t o c r e a t e a n e w r e c o r d o r u p d a t e a n e x i s t i n g o n e e n d e n d
i n i t i a l i z e r s / r o m . r b R O M : : R a i l s : : R a i l t i e . c o n f i g u r e d o | c o n f i g | c o n f i g . g a t e w a y s [ : d e f a u l t ] = [ : s q l , E N V . f e t c h ( ' D A T A B A S E _ U R L ' ) ] e n d
l a t i o n s / u s e r s . r b c l a s s U s e r s < R O M : : R e l a t i o n [ : s q l ] e n d R O M . e n v . r e l a t i o n s [ : u s e r s ] # = > # < U s e r s d a t a s e t = # < S e q u e l : : S Q L i t e : : D a t a s e t : " S E L E C T * F R O M ` u s e r s ` " > >