Веб-програмування мовою Ruby

Подальший опис — для перевірки з допомогю сервера, створеного засобами XAMPP на ПК під керуванням ОС Linux Mint таким чином, що початковою текою сайту є /opt/lampp/htdocs. У свою чергу ця тека містить підтеку work, до якої мають повний доступ усі користувачі. Саме таким чином організовано роботу на ПК в ауд. 49 Інституту післядипломної освіти Київського університету імені Бориса Грінченка. І саме таким чином рекомендуємо організувати роботу з XAMPP в інших навчальних закладах. У разі іншої структури теки у тих частинах кодів, що містять /opt/lampp/htdocs, localhost чи work, потрібно внести відповідні зміни.

Веб-застосунки, у тому числі з використанням бібліотеки CGI, є одними з найпоширеніших використань Ruby.

Використання бібліотеки CGI. Cтворити об’єкт CGI й використали його, наприклад, для виведення рядка тексту латиницею у вікні браузера можна таким чином.

  1. У теці /opt/lampp/htdocs/work створити файл test.cgi.
    #!/usr/bin/ruby
    require 'cgi'
    cgi = CGI.new
    puts cgi.header
    puts "<html><body>This is a test</body></html>"
    
  2. У браузері перейти за посиланням http://localhost/work/test.cgi.
  3. Пересвідчитися у виведенні тексту: "This is a test" у вікні браузера.

Опрацювання форми. Ruby автоматично опрацює методи GET і POST, тобто не передбачено різних дій для цих двох методів. Розглянемо форму на сторінці, яка може надсилати дані на опрацюванням файлом http://localhost/work/test.cgi — у файловій системі ПК /opt/lampp/htdocs/work/test.cgi. Код HTML сторінки може мати такий вигляд.

<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head>
  <body>
    <form method = "POST" action = "http://localhost/work/test.cgi">
      Ім'я:     <input type = "text" name = "FirstName" value = ""><br>
      Прізвище: <input type = "text" name = "LastName"  value = ""> 
      <input type = "submit" value = "Submit Data" />
    </form>
  </body>
</html>

Якщо файл test.cgi матиме такий код,

#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
puts cgi.header
puts "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head><body>"
puts cgi['FirstName']+"<br>" # Виведення значення поля FirstName
puts cgi[ 'LastName']+"<br>" # Виведення значення поля LastName

                    # Альтернативний спосіб отримання даних
h = cgi.params      # Cловник (асоціативний масив) з даними форми
puts h              # Звернути увагу на кирилицю                                         
puts "<br>"
puts h['FirstName'] # Виведення значення поля FirstName
puts "<br>"
puts h['LastName']  # Виведення значення поля LastName
puts "<br>"
puts h.keys         # Виведення ключів словника з даними форми
puts "<br>"
puts h.values       # Виведення значень словника з даними форми
puts "</body></html>"

то після введення слів "Іван", "Франко" й надсилання даних отримаємо таке виведення.

Іван
Франко
{"FirstName"=>["\u0406\u0432\u0430\u043D"], "LastName"=>["\u0424\u0440\u0430\u043D\u043A\u043E"]}
Іван
Франко
FirstName LastName
Іван Франко

Примітка. Якщо форма містить кілька полів з однаковими назвами, відповідні значення буде повернено у вигляді масиву. Метод доступу [] повертає лише перший елемент з них. Потрібно індексувати результат методу params, щоб отримати усі значення.

Створення коду HTML. CGI містить різноманітні методи для створення коду HTML по одному для кожного тегу. Ці методи потрібно застосовувати до об’єкту CGI у порядку, узгодженому з потрібним порядком вкладення тегів. Відповідний блок коду повертає рядок, який буде використано як вміст для тегу. Наприклад, такий код test.cgi

#!/usr/bin/ruby
require "cgi"
cgi = CGI.new("html4")
cgi.out {
   cgi.html {
      cgi.head { "\n"+cgi.title{"Title"} } +
      cgi.body { "\n"+
         cgi.form {"\n"+
            cgi.hr +
            cgi.h1 { "Input Text" } + "\n"+
            cgi.textarea("get_text") +"\n"+
            cgi.br +
            cgi.submit
         }
      }
   }
}

буде відображено таким чином.

При спробі переглянути код сторінки побачимо таке.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD>
<TITLE>Title</TITLE></HEAD><BODY>
<FORM METHOD="post" ACTION="/work/test.cgi" ENCTYPE="application/x-www-form-urlencoded">
<HR><H1>Input Text</H1>
<TEXTAREA NAME="get_text" COLS="70" ROWS="10"></TEXTAREA>
<BR><INPUT TYPE="submit"></FORM></BODY></HTML>

Примітка. Метод форми класу CGI може приймати параметр методу, який встановлює метод HTTP (GET, POST тощо), який буде використано під час подання форми. Як усталено у цьому прикладі використано POST.

Цитування рядків. При роботі з URL-адресами та HTML-кодом, потрібно бути обережними, використовуючи певні символи. Наприклад, похила риска / має особливе значення в URL-адресі, тому її потрібно екранувати, якщо вона не є частиною шляху. Наприклад, будь-який символ / у частині запиту URL-адреси буде перетворено на рядок %2F і його потрібно перетворити назад на / для правильного використання. Пробіл і амперсанд також є спеціальними символами. Щоб впоратися з цим, CGI надає підпрограми CGI.escape і CGI.unescape. Наприклад, такий код test.cgi

#!/usr/bin/ruby
require "cgi"
cgi = CGI.new
puts cgi.header
puts CGI.escape("Boris / boy & my friend")
puts "<br>"
puts CGI.escapeHTML('<h1>Boris / boy & my friend</h1>')
puts "<br>"
puts CGI.unescape('<h1>Boris / boy & my friend</h1>')

буде відображено таким чином.

При спробі переглянути код сторінки побачимо таке.


Текст упорядкував Олександр Рудик.