Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
this ground. The brave men, living and dead who struggled here
have consecrated it far above our poor power to add or
detract. The world will little note nor long remember what
we say here, but it can never forget what they did here. It
is for us the living rather to be dedicated here to the
unfinished work which they who fought here have thus far so
nobly advanced. It is rather for us to be here dedicated to
the great task remaining before us that from these honored
dead we take increased devotion to that cause for which they
gave the last full measure of devotion that we here highly
resolve that these dead shall not have died in vain, that
this nation under God shall have a new birth of freedom, and
that government of the people, by the people, for the people
shall not perish from the earth.
EOS
pdf.text(speech, justification => :full, :font_size => 14,
:left => 50, :right => 50)
pdf.move_pointer(36)
pdf.text("U.S. President Abraham Lincoln, 19 November 1863",
:justification => :right, :right => 100)
pdf.text("Gettysburg, Pennsylvania", :justification => :right,
:right => 100)
pdf.rounded_rectangle(pdf.left_margin + 25, y0, pdf.margin_width - 50,
y0 - pdf.y + 18, 10).stroke
end
pdf.save_as("4page.pdf")
Рис. 15.4. Пример документа, состоящего из четырех страниц в разных квадрантах
Итак, в четырех квадрантах расположены следующие страницы:
• левый верхний:
demo.rb
• правый верхний: фотография Грампианских холмов, Шотландия;
• левый нижний:
individual-i.rb
• правый нижний: Геттисбергское обращение.
Для краткости будем называть эти квадранты UL, UR, LL и LR. В тексте программы используются соответствующие символы (
:ul
Первый квадрант (UL) заполнен вертикальными линиями, толщина которых постепенно уменьшается, начиная с 40 единиц, с одновременным осветлением. Затем рисуются круги увеличивающегося радиуса, при этом толщина линий уменьшается, а цвет становится светлее. И наконец, выводятся два набора текстов: один — сверху вниз с постепенным уменьшением размера шрифта, а другой — с поворотом вокруг центральной оси как раз там, где кончаются вертикальные линии.
Страница во втором квадранте (UR) содержит картинку и ее описание. Особый интерес представляет строка с датой. Мы вставляем в поток байт с кодом
0x01
В третьем квадранте (UR) с помощью программы Individual-I мы снова демонстрируем технику переноса осей и масштабирования. Самое интересное здесь — инверсия осей. Если по оси выбирается отрицательный масштаб, то команды вывода текста и рисования меняют направление. Следовательно, при рисовании буквы I достаточно задать лишь правила формирования половины рисунка, а потом инвертировать ось X, вызвав метод
pdf.scale_axis(-1, 1)
Последний квадрант (LR) заполняется сравнительно легко. Мы форматируем и заключаем в прямоугольник со скругленными углами текст речи, которую президент Линкольн произнес в Геттисберге.
Сохранение PDF-документа — воплощенная простота. Если нужно записать его на диск, мы вызываем метод
save_as
pdf.save_as("4page.pdf")
Нетрудно также отправить PDF-документ браузеру из CGI-программы:
require 'cgi'
cgi = CGI.new
out = pdf.render
puts <<-EOS
Content-Type: application/pdf
Content-Disposition: inline; filename="4page.pdf"
Size: #{out.size}
EOS
Конечно, в этом разделе мы сумели затронуть лишь малую толику библиотеки
PDF::Writer.
15.5. Заключение
В этой главе мы показали, как с помощью библиотеки REXML можно разбирать XML-документы, представленные в виде дерева DOM или потока. Познакомились мы и с интерфейсом REXML к языку XPath.
Был продемонстрирован разбор информации из новостных каналов, представленных в формате на базе XML. Библиотека
rss
feedtools
Мы также видели, как можно читать и манипулировать графическими изображениями разного формата с помощью библиотеки RMagick. Рассмотрели мы и API рисования, позволяющий включать в изображение произвольный текст и геометрические фигуры. Наконец, мы показали, как с помощью библиотеки
PDF::Writer
Следующая глава посвящена совсем другой теме. Речь пойдет об эффективном тестировании и отладке написанных на Ruby программ.
Глава 16. Тестирование и отладка
Неполадки в блоке АЕ-35. В ближайшие семьдесят два часа блок может отказать.
Тестирование — вещь важная. Все компетентные программисты об этом знают, хотя не всегда этот вопрос стоит для них на первом месте.
Конечно, исчерпывающее тестирование, как правило, невозможно. Программа сколько-нибудь заметного размера на протяжении своего жизненного цикла обязательно преподнесет сюрпризы. Максимум, что мы можем сделать, — тестировать тщательно и избирательно, стараясь проверить как можно больше.
Исторически сложилось так, что программисты не всегда тестируют как положено. Объясняют это обычно тем, что тесты трудно готовить и прогонять, что вся процедура требует ручного вмешательства или отнимает слишком много времени.