π·πΊ ΠΠ±ΡΠ΅ΠΊΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Ruby, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ DSL
ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ, ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ βΠΏΠΈΡΠ΅Ρβ ΠΊΠΎΠ΄ ΠΏΡΡΠΌΠΎ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅, ΠΈ Π² Ruby ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄. ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Ruby ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΡΠΈ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π° Π·Π°ΡΠ΅ΠΌ β ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ β ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ ΠΈ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΎΠ² (Π±ΠΈΠ½Π΄ΠΈΠ½Π³ β ΡΡΠΎ ΠΊΠ°ΠΊ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, Π½ΠΎ Π±Π΅Π· ΡΡΠ½ΠΊΡΠΈΠΈ). ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ²ΠΎΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ DSL (domain specific language): Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π³Π΅ΡΡΠ΅Ρ, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΡΠΎΡΡΠ΅Ρ ΠΈ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° ActiveRecord. ΠΠΎΠΊΠ»Π°Π΄ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ ΠΏΡΠ°ΠΊΡΠΈΠΊΡΡΡΠΈΠΌ RubyβΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ (Π½Π°Ρ ΠΌΠ°Π»ΠΎ, Ρ Π·Π½Π°Ρ!), ΡΠ°ΠΊ ΠΈ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌ β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠΊΠ»Π°Π΄Π° Ρ Π½ΠΈΡ ΡΠΎΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΡ Π»ΡΠ±ΠΈΠΌΡΠΉ ΡΠ·ΡΠΊ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΡΡΡ ΡΠ΅ΠΌΡ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π½Π°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Ruby β Π²ΡΡ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ ΠΏΡΡΠΌΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Π°.