рд╕рд╛рдорд╛рдЬрд┐рдХ рдЧреНрд░рд╛рдл рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!



рд╣рдо рд╕рднреА рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдирдХреА рдиреАрдВрд╡ рдореЗрдВ рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдорд╛рдЬрд┐рдХ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдмрдВрдзреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдпреЗ рдХрдиреЗрдХреНрд╢рди рджреЛрд╕реНрддреА рдпрд╛ рдкреНрд░рд╢рдВрд╕рдХ (рдЕрдиреБрдпрд╛рдпреА) рд╣реИрдВред



рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореЗрд░реЗ рдЦрд┐рд▓рд╛рдл рдХреНрдпрд╛ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рд╕реНрдХреВрд▓ рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рдмрд╛рдж (рдореИрдВ рдПрдХ рд╢рд┐рдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ) рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд░реЗрд▓ рдкрд░ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдореБрдЭреЗ рд╕реНрдХреВрд▓ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рдЧреНрд░рд╛рдлрд╝ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХреЗред рдФрд░ рдореИрдВрдиреЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рддрдХ рд╕реАрдорд┐рдд рди рд╣реЛрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



рдЖрдЗрдП рдПрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рдЧреНрд░рд╛рдл рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рд░реЗрд▓ рдХреЛрдб рд▓рд┐рдЦреЗрдВред







рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдХрдИ рдмрд╛рд░ ROR рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рд╛рдорд╛рдЬрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдереА рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рджреЛрд╕реНрддреА рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдерд╛, рджреВрд╕рд░реЗ рдореЗрдВ, "рдЕрдиреБрдпрд╛рдпреА" рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдП рдЧрдП рдереЗред рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╣реИрдВ - рдореИрдВ рдЙрдирдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд▓реЗрддрд╛ред рдорд╛рдлрд╝ рдХреАрдЬрд┐рдПред



рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рдпрд╣ рдерд╛ рдХрд┐ рдореИрддреНрд░реА рдХреЗ рд╕рдорд╛рди рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ 2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдереЗ рдФрд░ рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ред рд▓рдВрдмрд┐рдд - рджреЛрд╕реНрддреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рдЖрд╡реЗрджрди рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рд╣реИ рдФрд░ рд╕рдХреНрд░рд┐рдп, рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рдЖрд╡реЗрджрди рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдирдВрдмрд░ 1 рд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдирдВрдмрд░ 2 (рдЙрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдерд╛) рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рджреВрд╕рд░рд╛ рдЬреБрдбрд╝рд╡рд╛рдВ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рдХреЗрд╡рд▓ рдЙрд╕реА рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреБрдбрд╝рд╡рд╛ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдореВрд▓ рд╕реЗ рд╣рд░ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд╛ рдЪрдпрди рдПрдХ рд╣реА рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд┐рдХреЙрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрддрд╛ рд╣реИред



рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдХреЛрдб рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 2 рдкреНрд░рд╢реНрди рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рдЧрдпрд╛ред



рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреБрдирд┐рдпрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ





рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдХреНрдпреЛрдВ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╢рд╛рдпрдж рдорд╛рдирд╡ рдорд╛рдирд╕ рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди ... рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдореЗрд░реЗ рдкреВрд░реНрд╡ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдЬреА рдмрд╛рддрдЪреАрдд рдореЗрдВ, рд╕реЛрдЪрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рд╕рд▓ рдЧрдпрд╛: рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ ред рд╢рд┐рдХреНрд╖рдХ рдФрд░ рдЫрд╛рддреНрд░, рд╡рд░рд┐рд╖реНрда рдФрд░ рдЕрдзреАрдирд╕реНрде, рдЕрдзрд┐рдХрд╛рд░реА рдФрд░ рдЙрдирдХреЗ рд╕реИрдирд┐рдХ, рд╕рд╛рдЗрдЯ рдкреНрд░рд╢рд╛рд╕рдХ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ, рдЖрджрд┐, рдЖрджрд┐ рд╣реИрдВред



рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЧреМрд░ рдХрд┐рдпрд╛ рд╣реИ? рдЕрдХреНрд╕рд░ рд░рд┐рд╢реНрддреЗ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреА рднреВрдорд┐рдХрд╛рдПрдВ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ - рджреЛрд╕реНрддред рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн (рдЬреАрд╡рди, рдХрд╛рдо, рд╕реЗрдирд╛, рд╕реНрдХреВрд▓) рд╣реИ - рдЕрд░реНрдерд╛рддред рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдпрд╣ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдЕрдм рдореБрдЭреЗ рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдирд╛рдкрд╕рдВрдж рд╣реИ? рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░рд┐рдЪрд┐рддреЛрдВ рдпрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдХреЗрд╡рд▓ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдСрдбрд┐рдЯ ( рдЦрд░рд╛рдм рдореВрдб ) рдХреЗ рджреМрд░рд╛рди рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ "рдЯреНрд░реИрдХ рд░рд┐рдХреЙрд░реНрдб" рд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╕рдордЭрд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ - рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЖрдк рдореЗрд░реЗ рд▓рд┐рдП рджреБрд╢реНрдорди рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рдЦрд┐рд▓рд╛рдл рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдм рдЖрдкрдХреЛ "рдорд┐рддреНрд░реЛрдВ" рдХреА рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рд╣рдордиреЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ ( рдФрд░ рдореБрдЭреЗ рдЖрдкрдХрд╛ рдирд╛рдо рднреА рдпрд╛рдж рдирд╣реАрдВ рд╣реИ ) - рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрд╣реБрдд рдХреБрдЫ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИред



рдЗрд╕рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рд░реВрдк рд╕реЗ рдорд╣рд╛рди рд╣реЛрдЧрд╛ред рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП - рдПрдХ рджреЛрд╕реНрдд, рдПрдХ рдЦреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ, рдореЗрд░реА рджрд╛рджреА, рд╕реНрдХреВрд▓ рдХрд╛ рдПрдХ рд╕рд╣рдкрд╛рдареА, рдПрдХ рдкреАрдиреЗ рд╡рд╛рд▓рд╛ рд╕рд╛рдереА , рдХрд╛рдо рдХрд╛ рдПрдХ рд╕рд╣рдпреЛрдЧреА, рдПрдХ рдмреЙрд╕, рдПрдХ рд╡рд┐рднрд╛рдЧ рдкреНрд░рдореБрдЦ, рдЖрджрд┐ред



3 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП 45 рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓реЗрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЙрд╕ рдЪреАрдЬрд╝ рдХрд╛ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдлреЗрдВрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬрд┐рд╕рдиреЗ рдореЗрд░реЗ рд╢рд┐рдХреНрд╖рдХ рдХреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЕрдЪрд╛рдирдХ рдЙрддреНрддреЗрдЬрд┐рдд рдХрд░ рджрд┐рдпрд╛ред



рдЖрджрд░реНрд╢





рдореЙрдбрд▓ (рдореИрдВ рдЗрд╕реЗ рдЧреНрд░рд╛рдлрд╝ рдХрд╣реВрдВрдЧрд╛) рдореЗрдВ 2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА (рдЖрд╡реЗрджрди рдЬрдорд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдФрд░ рдЖрд╡реЗрджрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐), рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐, рдкреНрд░реЗрд╖рдХ рдХреА рднреВрдорд┐рдХрд╛ рдФрд░ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рд╛рдорд╛рдЬрд┐рдХ рд╕рдВрдЪрд╛рд░ рдХрд╛ рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рд╣реИред

rails g model graph context:string sender_id:integer sender_role:string recipient_id:integer recipient_role:string state:string
      
      







рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╡рд╛рд╕ рджреЗрддрд╛ рд╣реИ:

 class CreateGraphs < ActiveRecord::Migration def self.up create_table :graphs do |t| t.string :context t.integer :sender_id t.string :sender_role t.integer :recipient_id t.string :recipient_role t.string :state t.timestamps end end def self.down drop_table :graphs end end
      
      







рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪрд▓рд╛рдПрдБ:

 rake db:migrate
      
      





рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВрдЧреЗред



рдЧреНрд░рд╛рдлрд╝ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ , рдореИрдВрдиреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдПрдХ рдЧреНрд░рд╛рдл рддрддреНрд╡ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЧреБрдВрдЬрд╛рдЗрд╢ рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкреВрд░рдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред



 class Graph < ActiveRecord::Base scope :pending, where(:state => :pending) scope :accepted, where(:state => :accepted) scope :rejected, where(:state => :rejected) scope :deleted, where(:state => :deleted) #state pending, accepted, rejected, deleted state_machine :state, :initial => :pending do event :accept do transition :pending => :accepted end event :reject do transition :pending => :rejected end event :delete do transition all => :deleted end event :initial do transition all => :pending end end end
      
      







рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП (рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реИ) рдореИрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реВрдВрдЧрд╛ : graph_to , рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рдлрд╝ рддрддреНрд╡ рд▓реМрдЯрд╛рдПрдЧрд╛ (рдпрджрд┐ рдХреЛрдИ рдЧреНрд░рд╛рдлрд╝ рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИ) рдпрд╛ рдмрд╕ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдмрдирд╛рдПрдВред



рдореИрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЧреНрд░рд╛рдлрд╝ рддрддреНрд╡ рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореИрдВ рдХреЛрдИ рд╣реВрдВ рдФрд░ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рднреА рдХреЛрдИ рд╣реИ (рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░)ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдВрджрд░реНрдн рдЬреАрд╡рди рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рднреВрдорд┐рдХрд╛рдПрдВ рд╣реИрдВ - рдПрдХ рджреЛрд╕реНрддред



 class User < ActiveRecord::Base def graph_to(another_user, opts={:context=>:live, :me_as=>:friend, :him_as=>:friend}) Graph.where(:context=>opts[:context], :sender_id=>self.id, :sender_role=>opts[:me_as], :recipient_id=>another_user, :recipient_role=>[:him_as]).first || graphs.new( :context=>opts[:context], :sender_role=>opts[:me_as], :recipient_id=>another_user.id, :recipient_role=>opts[:him_as]) end end
      
      







рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рдХрдИ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд░реЗрдХ рдмрдирд╛рдпрд╛, рдЬреЛ рдХрдВрд╕реЛрд▓ рд╕реЗ рдореБрдЭреЗ рдХрдИ рджрд░реНрдЬрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдЬреЛ рд░реВрдмрд▓ рдореЗрдВ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред



 namespace :db do namespace :graphs do # rake db:graphs:create desc 'create graphs for development' task :create => :environment do i = 1 puts 'Test users creating' 100.times do |i| u = User.new( :login => "user#{i}", :email => "test-user#{i}@ya.ru", :name=>"User Number #{i}", :password=>'qwerty', :password_confirmation=>'qwerty' ) u.save puts "test user #{i} created" i = i.next end#n.times puts 'Test users created' contexts = [:live, :web, :school, :job, :military, :family] roles={ :live=>[:friend,:friend], :web=>[:moderator, :user], :school=>[:teacher, :student], :job=>[:chief, :worker], :military=>[:officer, :soldier], :family=>[:child, :parent] } users = User.where("id > 10 and id < 80") #70 users test_count = 4000 test_count.times do |i| sender = users[rand(69)] recipient = users[rand(69)] context = contexts.rand # :job role = roles[context].shuffle # [:worker, :chif] # trace p "test graph #{i}/#{test_count} " + sender.class.to_s+" to "+recipient.class.to_s + " with context: " + context.to_s graph = sender.graph_to(recipient, :context=>context, :me_as=>role.first, :him_as=>role.last) graph.save # set graph state reaction = [:accept, :reject, :delete, :initial].rand graph.send(reaction) end# n.times end# db:graphs:create end#:graphs end#:db
      
      







рдЙрд▓реНрдЯреЗ рдЧреНрд░рд╛рдл рддрддреНрд╡



рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрд╛рд░ рдПрдХ рдЬреБрдбрд╝рд╡рд╛рдВ рд╕рд╛рдорд╛рдЬрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрдЧреЗ рдФрд░ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред



рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛:

 has_many :graphs, :foreign_key=>:sender_id has_many :inverted_graphs, :class_name => 'Graph', :foreign_key=>:recipient_id
      
      





рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдИ рдкреНрд░рддреНрдпрдХреНрд╖ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВ (рдЬрд╣рд╛рдВ рд╡рд╣ рд▓рд┐рдВрдХ рдХрд╛ рдЖрд░рдВрднрдХрд░реНрддрд╛ рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рд░рд┐рд╡рд░реНрд╕, рдЬрд╣рд╛рдВ рд╡рд╣ рд╕рд╛рдорд╛рдЬрд┐рдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╣реЛрддрд╛ рд╣реИред рдпреЗ рддрддреНрд╡ рдХреЗрд╡рд▓ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред



рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рднреА рд╕рд╛рдорд╛рдЬрд┐рдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЙрд╕рдХреЗ рд╕рднреА рдкреНрд░рддреНрдпрдХреНрд╖ рдФрд░ рдлреАрдбрдмреИрдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреА рд╕рд╛рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдХрд╛рдо рд╕реЗ рд╕рднреА рдЬреЛрдбрд╝реЗ рдЧрдП рдмреЙрд╕ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рд▓рд┐рдЦреЗрдВрдЧреЗ:

 def accepted_chiefs_from_job chiefs = graphs.accepted.where(:context => :job, :recipient_role=>:chief) # my graphs _chiefs = inverted_graphs.accepted.where(:context => :job, :sender_role=>:chief) # foreign graphs chiefs | _chiefs end
      
      





рд╕рдВрдЪрд╛рд▓рдХ | рд╕рдВрдпреЛрдЬрди рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИред



рдореЗрдЯрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рд░реВрдмреА рдЬрд╛рджреВ рдХрд╛ рдПрдХ рд╕рд╛



рд░рд┐рд╢реНрддреЛрдВ рдореЗрдВ рдореЗрд░реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрджрд░реНрдн рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреВрдорд┐рдХрд╛рдПрдВ рд╣реИрдВред рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП_ chiefs_from_job рд╡рд┐рдзрд┐ рд╕реЗ рдорд┐рд▓рддреА-рдЬреБрд▓рддреА рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рдореЗрд░реЗ рд╕рднреА рд╡рд░рд┐рд╖реНрдареЛрдВ рдХреЛ рдЙрд╕ рдиреМрдХрд░реА рд╕реЗ рдЪреБрдирддреА рд╣реИрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рдерд╛ред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

рд╣рдо рдореЗрдЯрд╛-рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд░реВрдмреА рдЦреБрдж рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЗ рдмрдирд╛рдпреЗ рдФрд░ рдЙрдЪрд┐рдд рдЪрдпрди рдХрд░реЗред рдореИрдЬрд┐рдХ рдореЗрдердб рдореЗрдердб_рдорд┐рд╕рд┐рдВрдЧ (method_name, * args) рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд░реВрдмреА рдХреЛ рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдЙрд╕реЗ рд╕рдордЭрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрджрд┐ рдЙрд╕реЗ рдЧреНрд░рд╛рдл рд╕реЗ рдбреЗрдЯрд╛ рдЪреБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдкреВрд░реА рдХрд░рдиреА рд╣реЛ рддреЛ рдЙрд╕реЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред



рд░реВрдмреА рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдПрдВрдЧреЗ рддрд░реАрдХреЗ:

 user.accepted_friends_from_live user.rejected_friends_from_live user.deleted_friends_from_live user.deleted_chiefs_from_job user.accepted_chiefs_from_job user.rejected_chiefs_from_job user.accepted_teachers_from_school user.deleted_teachers_from_school
      
      







рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 def method_missing(method_name, *args) if /^(.*)_(.*)_from_(.*)$/.match(method_name.to_s) match = $~ state = match[1].to_sym role = match[2].singularize.to_sym context = match[3].to_sym graphs.send(state).where(:context => context, :recipient_role=>role) | inverted_graphs.send(state).where(:context => context, :sender_role=>role) else super end end
      
      







рдпрджрд┐ method_missing (method_name, * args) рдХреЛ рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдирд┐рдпрдорд┐рддрддрд╛ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рдл рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдо рдкрд░ рдлрд┐рдЯ рдмреИрдарддреА рд╣реИ, рддреЛ рдХрдЯреМрддреА рд╕реНрд╡рдпрдВ рд▓рд╛рдЗрди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧреА рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧреАред рдпрджрд┐ рдмреБрд▓рд╛рдпрд╛ рд╡рд┐рдзрд┐ рдирд┐рдпрдорд┐рдд рдЕрдиреБрд╕реВрдЪреА рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ method_missing (method_name, * args) рдмрд╕ рдЕрдкрдиреЗ рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ - рд╕реБрдкрд░ рдкрд░ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рдВрднрд╡рддрдГ рдПрдХ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛ред



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдХреЛрдб:

 class User < ActiveRecord::Base has_many :pages has_many :graphs, :foreign_key=>:sender_id has_many :inverted_graphs, :class_name => 'Graph', :foreign_key=>:recipient_id def method_missing(method_name, *args) if /^(.*)_(.*)_from_(.*)$/.match(method_name.to_s) match = $~ state = match[1].to_sym role = match[2].singularize.to_sym context = match[3].to_sym graphs.send(state).where(:context => context, :recipient_role=>role) | inverted_graphs.send(state).where(:context => context, :sender_role=>role) else super end end def graph_to(another_user, opts={:context=>:live, :me_as=>:friend, :him_as=>:friend}) Graph.where(:context=>opts[:context], :sender_id=>self.id, :sender_role=>opts[:me_as], :recipient_id=>another_user, :recipient_role=>[:him_as]).first || graphs.new( :context=>opts[:context], :sender_role=>opts[:me_as], :recipient_id=>another_user.id, :recipient_role=>opts[:him_as]) end end
      
      





рдЦреИрд░ рдпрд╣ рд╕рдм рд╣реИ



рдЕрдм рд░реЗрдХ рдХрд░реЗрдВ:

 rake db:graphs:create
      
      





рд░реЗрд▓ рдХрдВрд╕реЛрд▓ рдЪрд▓рд╛рдПрдВ

 rails c
      
      





рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

 u = User.find(10) u.graph_to(User.first, :context=>:job, :me_as=>:boss, :him_as=>:staff_member) u.graph_to(User.last, :context=>:school, :me_as=>:student, :him_as=>:teacher) u.graph_to(User.find(20), :context=>:school, :me_as=>:student, :him_as=>:school) u.accepted_friends_from_live u.rejected_friends_from_live u.deleted_friends_from_live u.deleted_chiefs_from_job u.accepted_chiefs_from_job u.rejected_chiefs_from_job
      
      







рдкреБрдирд╢реНрдЪ:

рдПрдкреНрд▓рд╛рдЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдореНрдорд╛рди рдФрд░ рд╕реНрдХреВрд▓ рд╢рд┐рдХреНрд╖рдХ рд╕реЗ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!



All Articles