Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Asteriskβ„’: Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΈΠΈ Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 61

Автор Π”ΠΆΠΈΠΌ МСггСлСн

β€’ Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, play() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ². К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π² Ruby Π΅ΡΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ создания массива строковых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (String).

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ лишь самыС основы возмоТностСй Adhearsion для создания Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π°.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

НСсмотря Π½Π° Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½Ρ‹ΠΉ успСх Π² области Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для обслуТивания динамичСского содСрТимого, интСграция с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… всСгда Π±Ρ‹Π»Π° ΠΈ остаСтся нСдостаточно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ управлСния динамичСскими голосовыми прилоТСниями Π² Asterisk. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Asterisk, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ слоТных вопросов AGI-сцСнариям Π½Π°

PHP ΠΈΠ»ΠΈ Perl, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ extensions.conf ΠΈΠ»ΠΈ синтаксиса AEL просто нСдостаточно для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ Ρ‚Π°ΠΊΠΎΠ³ΠΎ уровня слоТности. Adhearsion ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ActiveRecord, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ создатСлями инфраструктуры Ruby on Rails. ИмСя ActiveRecord, ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ·Ρ€Π΅Π΄ΠΊΠ°, Ссли Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ это, ΠΏΠΈΡˆΠ΅Ρ‚ SQL-выраТСния. А Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ осущСствляСт доступ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ruby. Благодаря обСспСчиваСмым Ruby гибкости ΠΈ динамичности, доступ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… выглядит ΠΈ ощущаСтся довольно СстСствСнным. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ActiveRe- cord устраняСт различия ΠΌΠ΅ΠΆΠ΄Ρƒ систСмами управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, дСлая Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ доступа ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ. НС вдаваясь Π² Π΄Π΅Ρ‚Π°Π»ΠΈ ActiveRecord ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΅Π΅ использования, рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ схСму MySQL: CREATE TABLE groups (

'id' int(11) DEFAULT NULL auto_increment PRIMARY KEY, 'description' varchar(255) DEFAULT NULL, 'hourly_rate' decimal DEFAULT NULL

);

CREATE TABLE customers (

'id' int(11) DEFAULT NULL auto_increment PRIMARY KEY, 'name' varchar(255) DEFAULT NULL, 'phone_number' varchar(10) DEFAULT NULL, 'usage_this_month' int(11) DEFAULT 0, 'group_id' int(11) DEFAULT NULL

);

Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ Π±Ρ‹ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС свСдСний ΠΈ информация ΠΎΠ± использовании сСрвиса Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Π±Ρ‹ Π² записи ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ позволяСт Π±ΠΎΠ»Π΅Π΅ эффСктивно ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ основныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ActiveRecord. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Adhearsion ΠΊ этой Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ просто Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для доступа ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ YAML: adapter: mysql host: localhost database: adhearsion username: root password: pass

Π’Π°ΠΊ Adhearsion Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ доступа ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ смодСлированы наши ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ActiveRecord. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ - это экзСмпляр класса, для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ставим Π² соотвСтствиС класс. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² надкласса опрСдСляСм простыС свойства ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π² классС.

Π’ΠΎΡ‚ Π΄Π²Π° класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ:

class Customer < ActiveRecord::Base belongs_to :group

validates_presence_of :name, :phone_number validates_uniqueness_of :phone_number validates_associated :group def total_bill

self.group.hourly_rate * self.usage_this_month / 1.hour end

end

class Group < ActiveRecord::Base has_many :customers

validates_presence_of description, :hourly_rate

end

Π£ΠΆΠ΅ ΠΈΠ· этого нСбольшого объСма ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ActiveRecord ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ мноТСство логичСских Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ². ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… классов ActiveRecord ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… ΠΈΠΌΠ΅Π½Π° Π² Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр, ставит Π²ΠΎ мноТСствСнноС число ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это - ΠΈΠΌΠ΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ† (customers ΠΈ groups соотвСтствСнно). Если ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ соглашСния Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π°Π²Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΎ врСмя ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ActiveRecord Π½Π° самом Π΄Π΅Π»Π΅ заглядываСт Π² столбцы Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ доступными ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Π΅ создаваСмыС динамичСски ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ belongs_to (ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚) ΠΈ has_many (ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ) Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Customers (ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹) ΠΈ Groups (Π³Ρ€ΡƒΠΏΠΏΡ‹). ΠžΠΏΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ActiveRecord ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мноТСствСнноС число Π² строкС has_many :customers для большСй Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ΄Π°. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ нСсколько ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ достовСрности - ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ActiveRecord. ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Customer ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ name (имя) ΠΈ phone_number (Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°). Π—Π°Π΄Π°Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρƒ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Customer Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Group. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ description (описаниС) ΠΈ hourly_rate (почасовая ставка). Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ цСлостности Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ total_bill (ΠΎΠ±Ρ‰ΠΈΠΉ счСт) класса Customer. Для любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Customer, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ hourly_rate для Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Customer, Π½Π° врСмя пользования Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠΌ этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Π² сСкундах).

Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, насколько ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Ruby для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…:

everyone = Customer.find :all

jay = Customer.find_by_name "Jay Phillips"

jay.phone_number # ВыполняСм Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ SELECT

jay.total_bill # ВыполняСм вычислСния ΠΏΠΎ нСскольким выраТСниям SELECT

jay.group.customers.average :usage_this_month jay.group.destroy

jay.group = Group.create description => "New cool group!",

:hourly_rate => 1.23

jay.save

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… стала здСсь Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ СстСствСнной, Π° Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Ρ‹ Asterisk выглядят Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. НиТС прСдставлСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π° поставщика сСрвисов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π»Π°Π³Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΡΡƒΠΌΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ исходящих Π·Π²ΠΎΠ½ΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚Π°Ρ€Π°Π΅ΠΌΡΡ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ простоту:

# ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, сСрвис VoIP прСдлагаСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ,

# ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎ ΠΈΡ… callerid.

service {

# Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π½ΠΈΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ SQL SELECT

# ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ нашСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΠ΅Ρ‚ΠΎΠ΄

# find_by_phone_number() Π±Ρ‹Π» создан автоматичСски,

# ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ActiveRecord ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»Π° Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

# столбСц phone_number. Adhearsion создаСт для нас

# ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ callerid.

caller = Customer.find_by_phone_number callerid

usage = caller.usage_this_month if usage >= 100.hours

play "sorry-cant-let-you-do-that" else

play %w'to-hear-your-account-balance press-1

otherwise wait-moment' choice = wait_for_digit 3.seconds

p choice if choice == 1

charge = usage / 60.0 * caller.group.hourly_rate play %W"your-account will-reflect-charge-of

$#{charge} this month for #{usage / 60} minutes and #{usage % 60} seconds"

end

# ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства

# usage_this_month ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° caller. По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ

# выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° time Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для этого

# Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ внСсСно Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. caller.usage_this_month += time do

# ЗасСкаСм врСмя выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π°. dial IAX/'main-trunk'/extension

end

caller.save

end

НадСТная интСграция с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ обСспСчиваСт Adhear- sion, ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ для офисной АВБ. Π₯ранящаяся Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ информация позволяСт Asterisk Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сСрвисами, обСспСчивая ΠΏΡ€ΠΈ этом Π±ΠΎΠ»Π΅Π΅ Ρ†Π΅Π½Π½Ρ‹Π΅ сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Asterisk.

РаспространСниС ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Adhearsion располагаСтся Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅, поэтому ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ VoIP-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ - Π½Π΅ слоТнСС, Ρ‡Π΅ΠΌ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹. НавСрноС, Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π² сообщСствС Asterisk Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ запросто ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌΠΈ прилоТСниями ΠΈ Π΄ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…. ΠšΡΡ‚Π°Ρ‚ΠΈ, вСсьма поощряСтся прСдоставлСниС ΠΊΠΎΠ΄Π° собствСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Adhearsion.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π° локальном ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ инфраструктуры Adhear- sion, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°ΠΌΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ†Π΅Π»Ρ‹Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инфраструктуры, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Micromenus для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ±Ρ€ΠΎΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΈΠ°Π»- ΠΏΠ»Π°Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Π΅ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹ ΠžΡΠΊΠ°Ρ€Π° Уайльда.

НиТС прСдставлСн простой ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Adhearsion, написанный Π½Π° Ruby. Он создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ всСй инфраструктурС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½. Π’ цСлях сохранСния простоты ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ URL HTTP ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² Ruby-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Hash (Ρ‚ΠΈΠΏ ассоциативного массива Ruby): def remote_parse url

Hash.from_xml open(url).read

end

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эти Ρ‚Ρ€ΠΈ строки. ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Adhearsion выполняСт сцСнарий Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС описанныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ классы становятся доступными Π²ΠΎ всСй систСмС.

Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, Π² частности Π·Π°Π΄Π°Ρ‡ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Adhearsion, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π² ΡƒΠ·ΠΊΠΈΡ… мСстах ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ короля ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: языка программирования Π‘. НиТС прСдставлСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° Adhearsion, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ числа:

int fast_factorial(int input) { int fact = 1, count = 1; while(count <= input) { fact *= count++;

}

return fact;

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ здСсь ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ всС содСрТимоС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ΄ написан Π½Π° Π‘, Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ factorial.alien.c. Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Adhearsion Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для чтСния Ρ„Π°ΠΉΠ»Π°, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ стандартныС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ языков Π‘ ΠΈ Ruby, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для Π‘-ΠΌΠ΅- Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Π½Π° Ruby. НиТС прСдставлСн Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто воспроизводит Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΡˆΠ΅ΡΡ‚ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π½Π° Π‘:

fast_test {

num = fast_factorial 6 play num

}

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π‘-ΠΌΠ΅Ρ‚ΠΎΠ΄ становится пСрвоклассным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π½Π° Ruby. ЧисловыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ruby, ΠΏΡ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² элСмСнтарный Ρ‚ΠΈΠΏ Π‘ int, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСобразуСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² числовой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ruby.