войти зарегистрироваться

RubyЗнакомство с Gem. Часть вторая

Доброго времени суток!

Вместо введения


Наконец-то я нашёл немного времени для того, чтобы продолжить своё повествование о разнообразных чудесах в Ruby. Как вы помните, в прошлой части мы познакомились с основами написания своего гема. Мы узнали, какой минимальный набор файлов должен быть для того, чтобы его собрать. Также мы узнали как мы можем опубликовать своё творение в RubyGems. В тот же день (после написания первой части) в RubyGems неожиданно проявился всплеск гемов под названием hello-world. Причём я застал довольно много вариаций оного. Некоторые даже не удосужились поменять строку, где указывается автор гема.
g.author = "krovatti"

Некоторые вовсе задавали гему следующие значения версий:
g.version = "666"
g.version = "111"
g.version = "911"

В общем было достаточно много других вариаций, что меня, как автора, безусловно, не могло не радовать.

RubyЗнакомство с Gem. Часть первая

Доброго времени суток!

Введение


Каждый рубист, да и вообще программист, рано или поздно начинает задумываться о написании своих библиотек. Ему начинает надоедать перетаскивание одних и тех же кусков кода в другие проекты. В Ruby лекарством от данного заболевания являются gem'ы. Итак, давайте познакомимся с ним поближе.

Ruby on RailsInboxes: личные сообщения в Rails-приложении



Одна из тривиальных задач для RoR-разработчика: реализовать функционал “инбоксов”, или личных сообщений. Решать эту задачу приходиться чуть ли не на каждом из проектов, поэтому столкнувшись с этим в очередной раз я принял решение создать удобный компонент мессенджера для приложения на Rails 3.1, который в дальнейшем можно будет легко и удобно подключать к любому приложению.
Представляю gem Inboxes.

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

Для авторизации и идентификации пользователей gem интегрируется с Devise, для проверки прав — с CanCan.

RubyRubyGems — подробно


Для начала определимся с понятиями:
RubyGems — фрэймворк для установки и запаковки Ruby библиотек и приложений.
gem — пакет(файл) с библиотекой или приложением. Имеет стандартизированный вид и расположен в хранилище в сети.
gem command tool — RubyGems предоставляет утилиту «gem» для работы с gem пакетами из командной строки. Она интегрирована с Ruby и позволяет получать доступ к установленным gem'ам как к библиотекам.

В чем же предназначение RubyGems?

До того как появилась RubyGems, для установки новой библиотеки нужно было найти, скачать её, попытаться установить, часто лишь для того, чтобы убедиться в отсутствии нужных зависимостей. Если же библиотека запакована с помощью RubyGems, достаточно попросить RubyGems сделать это за нас и получить установленную, интегрированную библиотеку со всеми нужными зависимостями. В дополнение ко всему утилита gem — платформонезависима, неважно какую ОС вы используете, везде механизм установки библиотек и приложений будет одинаков. Здорово, правда?

Под катом будут описаны:
1) Поиск, получение деталей, установка gem's
2) Доступ документации по установленному gem
3) Использование установленных gem's
4) Работа с версиями gem's
5) Создание собственных gem's

RubyGeoIP

GeoIP позволяет реализовать поиск информации о стране, городе по IP адресу или хосту.

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

Областей применения довольно много.

RubyMysql2

Mysql2 — современная, простая и очень быстрая Mysql библиотека (GEM) для Ruby.

API состоит из 2-х классов:


  1. Mysql2::Client — соединение с базой
  2. Mysql2::Result — результат запроса включающий в себя модуль Enumerable.

Rubytweet-button

tweet-button — gem/plugin для генерации новой Twitter кнопки.

Использование

Включите TweetButton в вашем application хелпере. После этого в любом шаблоне можно вызвать хелпер:

<%= tweet_button %>

Поддерживаются так же дополнительные параметры:

<%= tweet_button(:via => «peterc», :url => «hashtrain.com», :text => «AWESOME.») %>

Исходный код и документация доступны на Github: http://github.com/intridea/tweet-button

ХостингХостер, поставь мне модуль, а?

imageДостаточно регулярно на хостинге не оказывается предустановленной библиотеки для той или иной программы. И не всегда хостер удовлетворяет просьбу установить библиотеку требуемой версии. Бывает, что библиотека есть, но устаревшая. Или сломался у хостера сервер, он перекинул сайт на другой, а там более новая версия библиотеки, не совместимая с той, на которой работает программное обеспечение сайта (пользователи Django прекрасно поймут меня). Что делать? Искать опять новый хостинг? Всегда быть готовым переписать свою программу под другую версию библиотеки? Наш путь — поставить её самостоятельно. В самом крайнем случае, придётся просто переустановить её. Кроме бинарных модулей PHP почти все библиотеки для популярных веб-технологий можно поставить к себе в домашний каталог не трогая хостера и не завися от него. Кстати сказать, это можно делать не только на шаред-хостинге, но также и на виртуальных серверах — проекты становятся слабо зависящими от того, кто и как настраивал виртуальный сервер. Сложно?

RubyКонечные автоматы в Ruby

Статья за авторством хабраюзера preprocessor, который не смог ее опубликовать по всем понятной причине. Так что все плюсики ему:)

Конечный автомат (Finite-state machine) — это такая штука, описывающая поведение объекта с конечным количеством состояний. Пути перехода из одного состояния в другое, условия этого перехода, действия выполняемые во время перехода или после. С теорией у меня всегда было плохо, поэтому больше вдаваться в нее не буду, вместо этого, для тех кто интересуется подробностями, могу порекомендовать посмотреть википедию (как же без нее) http://en.wikipedia.org/wiki/Finite-state_machine и http://ru.wikipedia.org/wiki/Конечный_автомат, а оттуда уже капать на сколько захочется. На практике это можно использовать много где, от парсинга строк (привет Ragel), до модели User в вашем веб-приложении.

RubyДелаем gem для RubyGems

Собираем камешки для Ruby


Зачастую бывает так, что таскаешь из проекта в проект какие-то куски кода. Такие куски очень удобно выносить во внешние файлы, модули. Для этого в Ruby существует RubyGems — менеджер приложений и библиотек, оформленных в один файл-пакет — gem. И собрать такой гем, а главное, сделать его доступным для любой машины, подключенной к интернету, оказалось очень просто.