Наш чатик

Телеграм чат начинающих программистов. Общаемся и помогаем друг другу

Если ссылка не открывается, можно найти нас в поиске по чатам @rubyrush или пойти другим путем

Библиотеки и RubyGems

Сегодня мы на примере простой программы для отправки электронной почты познакомимся с понятием подключаемых модулей - библиотек в Ruby.

Мы научимся работать с библиотеками, узнаем, как пользоваться утилитой gem и ёе командами: gem update, gem list, gem install. Как находить и устанавливать нужные библиотеки.

Узнаем, как с помощью require добавлять в программу установленные библиотеки и напишем простенькую программу для отправки почты с помощью гема «Pony».

План урока

  1. Использование библиотек — зачем, почему и как
  2. Система библиотек Ruby Gems
  3. Пишем свою программу для отправки электронной почты

Что такое библиотеки в программировании?

Программисты — очень прагматичные и ленивые люди, они ненавидят писать одно и то же в одной и той же программе несколько раз. Поэтому они придумали циклы и методы, потом они решили, что они не хотят писать одно и то же в разных программах и придумали классы и подключаемые файлы.

Рабочее место программиста

Через какое-то время, эти твари обленились окончательно и начали заимствовать код друг у друга: так появились библиотеки.

Библиотека — это набор программ, классов, методов и других файлов, который служит для решения какой-то задачи. И предназначенный для того, чтобы использоваться внутри других программ. Например, Windows это не библиотека (хотя тоже набор программ и классов по сути) — потому что не предназначена для использования внутри других программ, это самостоятельная и независимая программа.

А вот скажем, библиотека Pony для отправки электронной почты, которая позволяет написать свою программу на Ruby для отправки e-mail, это другое дело — она предназначена для использования в программах.

Библиотеки как правило пишут уже очень крутые разработчики, однако пользоваться библиотеками можно и нужно всем, даже самым полным новичкам.

Это во-первых, сокращает время на написание программ, во-вторых, вам не нужно знать до конца, как работает та или иная библиотека, чтобы её использовать.

Использование библиотеки для написания программ — как использование микроволновки для приготовления еды: вы не понимаете, как она работает внутри, но через какое-то время уже не можете без неё жить, здорово сокращая время процесса.

Микроволновка

Библиотеки придумали очень давно, поэтому сейчас для любой цели есть своя библиотека в любом языке программирования. И не одна. Библиотеки для работы с файлами, для работы с сайтами, с базами данных, с картинками, с музыкой и так далее.

Система управления библиотеками RubyGems

Драгоценные камни

Когда разработчик пишет библиотеку и она лежит только на его компьютере, от этого никому ни холодно, ни жарко. Чтобы эффективно обмениваться этими библиотеками, необходимо было создать центральное хранилище этих библиотек, как такой научный городок, в котором только библиотеки. Каждый, кому нужна какая-то книга, знает, куда ему ехать.

В Ruby такая система работы с библиотеками называется RubyGems. Она устанавливается вместе с Ruby и, скорее всего, уже есть на вашем компьютере, если вы проходите этот курс.

Проверьте это, выполнив в консоли команду

gem -v

Чтобы обновить эту утилиту до последней версии, просто напишите

gem update --system

RubyGems сама себя скачает и установит, написав вам, когда закончит этот процесс (вы снова увидите курсор для ввода текста).

Установка библиотек

Теперь немного о хранении библиотек: они все лежат на далёком-далёком сайте и занимают там, скажу я вам, немало места: сама утилита gem весит сущие килобайты, а вот всё, что она может скачать, измеряется, наверное, терабайтами.

Именно поэтому для использования библиотеки её сперва необходимо скачать и установить на ваш локальный компьютер.

Список того, что скачалось и установилось вместе с ruby, вы можете посмотреть, набрав в консоли:

gem list

А чтобы скачать и поставить новую библиотеку, нужно знать, как она называется.

Например, чтобы установить библиотеку unicode_utils, которая здорово помогла бы нам в наших выкрутасах с кодировкой в Windows, нужно использовать команду gem install, после которой написать название библиотеки:

gem install unicode_utils

Поиск библиотек для ваших целей

Где искать библиотеки? Если вкратце, то в гугле.

Все библиотеки хранятся на сайте rubygems.org, но искать их удобнее через сайт ruby-toolbox.com, где самые популярные Ruby библиотеки описаны и рассортированы по категориям.

Но лично мы всегда, подчёркиваю, всегда ищем библиотеки на google.com, чего и вам советуем.

Просто наберите в поисковой строке гугла:

ruby gem unicode

И он выдаст вам несколько ссылок на различные страницы сайтов (rubygems.org обычно), где вы сможете найти нужную вам библиотеку.

Библиотека pony для отправки почты

Поставим задачу на сегодня — написать программу, которая будет отправлять e-mail прямо из консоли.

Для отправки почты в Ruby существует масса различных по сложности и возможностям библиотек. Мы выберем простую — pony.

Для того, чтобы её установить, как мы уже писали, нужно написать в консоли (в какой угодно папке) команду gem install:

gem install pony

Подключение библиотек в программах

Вы купили микроволновку и поставили куда-нибудь на кухне. Но греть еду в ней всё равно пока не можете. Её нужно подключить.

Также и в программировании: чтобы методы и классы библиотеки были доступны в вашей программе, вам необходимо сперва её подключить.

Это делается уже знакомым нам методом require (кстати, от английского "запросить, потребовать").

На этот раз в качестве параметра методу require нужно передать не строку с путём к файлу, а строку с названием библиотеки

require "pony"

Пишем программу для отправки почты

Шлём, наконец, уже почту

Задачу мы поставили пару абзацев выше по тексту, приступим к делу. Сразу отметим, что пароль от почты программа также будет спрашивать у пользователя.

Никогда не храните пароли в текстах программ, чтобы злоумышленники, получив каким-то образом доступ к вашей программе, не могли слать с её помощью письма от вашего имени. Так-то.

Создадим нашу программу для отправки почты send_mail.rb в нашей рабочей папке 15-го урока: с:\rubytut\lesson15 и напишем в ней код отправки почты.

Сперва мы сохраним в переменную my_mail наш адрес почты.

Вам необходимо сюда написать адрес вашей электронной почты — тот адрес с которого вы будете слать письма:

my_mail = my_mail@mail.ru

После этого мы спрашиваем уже знакомой нам конструкцией gets у пользователя все нужные нам поля: пароль от почты, кому слать письмо и текст самого письма. Сохраняем каждое поле в отдельную переменную.

puts "Введите пароль от вашей почты #{my_mail} для отправки письма:"
password = STDIN.gets.chomp

puts "Кому отправить письмо? Введите адрес:"
send_to = STDIN.gets.chomp

puts "Что написать в письме?"
body = STDIN.gets.chomp.encode("UTF-8")>

А потом отправляем почту:

Pony.mail({
  :subject => "Привет из программы на руби!",
  :body => body,
  :to => send_to,
  :from => my_mail,
  :via => :smtp,
  :via_options => {
    :address => 'smtp.mail.ru',
    :port => '465',
    :tls => true,
    :user_name => my_mail,
    :password => password,
    :authentication => :plain
  }
})

Обратите внимание, что для отправки почты мы вызвали метод mail нового класса Pony, который подключился с помощью require 'pony'.

В качестве параметров этому методу передаётся ассоциативный массив, что это такое мы расскажем уже в следующем блоке нашего курса, пока просто скопируйте это себе в программу.

Также важно понимать, что настройки, которые указаны после via_options работают только для отправки писем с помощью сервера** mail.ru**, поэтому если у вас почта у другого провайдера, вам нужно заменить этот блок другим кодом.

Каким — смотрите в материалах к этому уроку. В исходниках этой программы мы в комментариях перечислили несколько типичных настроек для популярных почтовых сайтов.

Скрытие пароля при вводе

Если оставить всё, как есть, то при вводе пароля пользователь засветит его любому, кто в этот момент будет смотреть на его монитор.

Это не здорово. Не безопасно.

Поэтому мы скроем пароль от посторонних глаз при вводе. Делается это с помощью другой библиотеки io/console.

Эта библиотека устанавливается вместе с Ruby, но все равно надо подключить ее в программе методом require

require 'io/console'

После этого нам станет доступен метод noecho, в который можно будет передать в качестве параметра наш метод gets, в несколько странном виде.

Не будем сейчас подробно останавливаться на том, как это работает, просто скажем, что теперь нужно написать вместо обычного gets вот так:

password = STDIN.noecho(&:gets).chomp

Теперь при вводе пароля в консоли не будет ничего отображаться. Но символы при этом будут запоминаться, поэтому будьте внимательны и не ошибитесь при вводе пароля!

Запуск программы send_mail.rb

Наконец, пора запускать нашу программу. Для этого как обычно в консоли переходим в нашу папку и запускаем программу:

cd c:\rubytut\lesson15
ruby send_mail.rb

Программа попросит вас ввести пароль от вашей почты: обратите внимание, вы печатаете что-то, а в консоли ничего не появляется. Не пугайтесь, набирайте в слепую - не очень удобно, зато безопасно.

Набирайте адрес, текст письма и если вы все сделали правильно и с интернетом у вас порядок — программа сразу отошлет письмо адресату. Можете проверить, послав письмо самим себе.

Если возникли ошибки — разберитесь, что не так. Возьмите наши исходники из файлов к уроку и попробуйте их. Главное не сдавайтесь, каждая найденная вами и исправленная ошибка добавляет 10 очков к мастерству. Серьезно, по себе знаем.

Итак, в этом уроке мы научились работать с библиотеками, узнали, как пользоваться утилитой gem и ёе командами gem update, gem list, gem install.

Узнали, как с помощью require добавлять в программу установленные у вас в системе библиотеки и написали простенькую программу для отправки почты с помощью библиотеки «Pony».