Архив рубрики «Ruby»

Ставим рубиновый типограф на Рельсы

25.11.2009

В продолжение вчерашней темы, добавил простой способ типографить избранные поля в модели ActiveRecord.

Достаточно написать в нужной модели примерно следующее:

class Article < ActiveRecord::Base
  typograf :title, :use_p => false, :use_br => false
  typograf :content, :teaser
end

И тогда каждый раз перед сохранением (конкретнее, перед проверкой правильности полей) будет проходить типографирование этих полей, посредством Типографа студии Артемия Лебедева.

Поддерживается несколько возможных синтаксисов объявления моделей для типографирования:

  • для одного конкретного поля:
    typograf :content
  • можно указать параметры для типографирования этого поля:
    typograf :content, :entity_type => AlsTypograf::NO_ENTITIES
  • для нескольких полей сразу (тоже с возможностью объявить параметрами типографирования, общие для всех объявленных полей):
    typograf :skills, :achievements, :additional, :use_br => false, :use_p => true
  • для нескольких полей сразу (но с объявлением параметров для каждого конкретного поля):
    typograf :foo => {:entity_type => AlsTypograf::HTML_ENTITIES},
             :bar => {:use_p => true, :use_br => false},
             :baz => {:max_nobr => 5},
             :some_other_field_name => {}

Все эти варианты могут комбинироваться друг с другом внутри одной модели произвольное количество раз (но если параметры типографирования для одного и того же поля были указаны в вызовах несколько раз, будут применяться только последние).

Типограф студии Артемия Лебедева с отблеском Рубина

24.11.2009

Понадобилось мне типографировать тексты, добавляемые в админке одного из приложений. Поиск в интернете ни одного годного типографа на Ruby не показал.
Зато, я вспомнил, что студия Артемия Лебедева позволяет типографировать тексты с помощью их веб-сервиса. Поэтому, я написал маленькую обёртку к их сервису.

Пользоваться очень просто.

  1. Установите:
    sudo gem install als_typograf --source=http://gemcutter.org/
  2. В коде приложения используйте метод process модуля AlsTypograf следующим образом:
    require 'als_typograf'
    AlsTypograf.process('- Это что, "Типограф"?') # "<p>— Это что, «Типограф»?</p>"

Обёртка поддерживает несколько опций, предоставляемых веб-сервисом Студии, их можно подставлять как к конкретному запросу:

AlsTypograf.process('- Это что, "Типограф"?', :use_p => false, :use_br => true)

так и выставлять глобально, для всех запросов на типографирование:

AlsTypograf.encoding = 'CP1251' # По-умолчанию используется кодировка UTF-8
AlsTypograf.html_entities! # Заставляет использовать сущности HTML, такие как: &nbsp;, &mdash; &hellip;

Документация для рубинового типографа хранится (и автоматически обновляется при любых изменениях) на сервисе rdoc.info, который весьма рекомендую всем разработчикам.

Метапрограммирование в Ruby

30.09.2009

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

Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime. In many cases, this allows programmers to get more done in the same amount of time as they would take to write all the code manually, or it gives programs greater flexibility to efficiently handle new situations without recompilation. (via Wikipedia)

Это руководство перечисляет все стандартные методы Ruby, используемые для метапрограммирования, а так же приводит примеры их обычного употребления. В конце мы получим пример использования метапрограммирования для динамического создания классов, соответствующих таблицам в БД, включающих методы, соответствующие полям таблицы, на манер ActiveRecord.
(далее…)