Файлы
Справка
Телеграм чат начинающих программистов. Общаемся и помогаем друг другу
Если ссылка не открывается, можно найти нас в поиске по чатам @rubyrush
или
пойти другим путем
Сегодня мы на примере простой программы для отправки электронной почты познакомимся с понятием подключаемых модулей - библиотек в Ruby.
Мы научимся работать с библиотеками, узнаем, как пользоваться утилитой gem
и ёе командами: gem update
, gem list
, gem install
. Как находить и устанавливать нужные библиотеки.
Узнаем, как с помощью require
добавлять в программу установленные библиотеки и напишем простенькую программу для отправки почты с помощью гема «Pony».
Программисты — очень прагматичные и ленивые люди, они ненавидят писать одно и то же в одной и той же программе несколько раз. Поэтому они придумали циклы и методы, потом они решили, что они не хотят писать одно и то же в разных программах и придумали классы и подключаемые файлы.
Через какое-то время, эти твари обленились окончательно и начали заимствовать код друг у друга: так появились библиотеки.
Библиотека — это набор программ, классов, методов и других файлов, который служит для решения какой-то задачи. И предназначенный для того, чтобы использоваться внутри других программ. Например, Windows это не библиотека (хотя тоже набор программ и классов по сути) — потому что не предназначена для использования внутри других программ, это самостоятельная и независимая программа.
А вот скажем, библиотека Pony для отправки электронной почты, которая позволяет написать свою программу на Ruby для отправки e-mail, это другое дело — она предназначена для использования в программах.
Библиотеки как правило пишут уже очень крутые разработчики, однако пользоваться библиотеками можно и нужно всем, даже самым полным новичкам.
Это во-первых, сокращает время на написание программ, во-вторых, вам не нужно знать до конца, как работает та или иная библиотека, чтобы её использовать.
Использование библиотеки для написания программ — как использование микроволновки для приготовления еды: вы не понимаете, как она работает внутри, но через какое-то время уже не можете без неё жить, здорово сокращая время процесса.
Библиотеки придумали очень давно, поэтому сейчас для любой цели есть своя библиотека в любом языке программирования. И не одна. Библиотеки для работы с файлами, для работы с сайтами, с базами данных, с картинками, с музыкой и так далее.
Когда разработчик пишет библиотеку и она лежит только на его компьютере, от этого никому ни холодно, ни жарко. Чтобы эффективно обмениваться этими библиотеками, необходимо было создать центральное хранилище этих библиотек, как такой научный городок, в котором только библиотеки. Каждый, кому нужна какая-то книга, знает, куда ему ехать.
В 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 обычно), где вы сможете найти нужную вам библиотеку.
Поставим задачу на сегодня — написать программу, которая будет отправлять 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
Теперь при вводе пароля в консоли не будет ничего отображаться. Но символы при этом будут запоминаться, поэтому будьте внимательны и не ошибитесь при вводе пароля!
Наконец, пора запускать нашу программу. Для этого как обычно в консоли переходим в нашу папку и запускаем программу:
cd c:\rubytut\lesson15
ruby send_mail.rb
Программа попросит вас ввести пароль от вашей почты: обратите внимание, вы печатаете что-то, а в консоли ничего не появляется. Не пугайтесь, набирайте в слепую - не очень удобно, зато безопасно.
Набирайте адрес, текст письма и если вы все сделали правильно и с интернетом у вас порядок — программа сразу отошлет письмо адресату. Можете проверить, послав письмо самим себе.
Если возникли ошибки — разберитесь, что не так. Возьмите наши исходники из файлов к уроку и попробуйте их. Главное не сдавайтесь, каждая найденная вами и исправленная ошибка добавляет 10 очков к мастерству. Серьезно, по себе знаем.
Итак, в этом уроке мы научились работать с библиотеками, узнали, как пользоваться утилитой gem
и ёе командами gem update
, gem list
, gem install
.
Узнали, как с помощью require
добавлять в программу установленные у вас в системе библиотеки и написали простенькую программу для отправки почты с помощью библиотеки «Pony».