Программирование на Ruby - Новости

Отчет и мысли о конференции EuRuKo 2013

28 и 29 июня в Афинах проходила ежегодная конференция европейских рубистов EuRuKo 2013.

Мы там были, кофе пили, а я старался прокомментировать самое интересное.

Источник: rubyflow.ru

Скажите спасибо! Это ведь шикарно!

Отличный способ сказать спасибо всем тем людям, которые сделали возможными или намного упростили реализацию ваших идей и проектов – https://github.com/gazay/share_some_love

Источник: rubyflow.ru

Продвинутое использование генератора моделей Rails

В этой статье я описал как можно использовать генераторы моделей в rails с пользой - http://railsguides.net/2013/06/29/advanced-rails-model-generators/

Уверен, что многим будет полезно посмотреть хотя бы примеры

Источник: rubyflow.ru

Финальный релиз Rails 4.0

Видать постоянные анонсы новых RC и затянутость релиза усыпили бдительность комъюнити, но вчера это все таки свершилось!

25.06.2012 DHH сам лично написал в блоге о выходе финала Rails 4.0.

Официаный guide.
Описывать фичи нет смысла - уже давно все написано. В посте традиционные благодарности и немного ссылок на книги и касты.

В общем, поздравляю товарищи!

Источник: rubyflow.ru

Легкая верстка в вынужденных местах: хелперы, декораторы, элементы форм

Многие уже знают о том что во вьюхах не рекомендуется использовать логику и вообще какие-либо манипуляции с данными. Для этого подобный код выносят в <a href="https://github.com/drapergem/draper">декораторы</a>, <a href="https://github.com/plataformatec/simple_form/wiki/Adding-custom-input-components">кастомные элементы формы</a>, <a href="https://github.com/apotonick/cells">компоненты</a> и просто хелперы в конце-концов.

Действительно, при таком подходе view-файлы начинают выглядить лучше. Но кастомные элементы форм и хелперы становятся просто невыносимыми.

Но есть простой и элегантный способ как сделать их чище и проще..


К примеру возьмем кастомный элемент формы <code>PriceRangeInput</code>.

class PriceRangeInput &lt; SimpleForm::Inputs::Base
  def input
    output = template.content_tag(:div, class: 'j-price-slider') do
      div = ''
      div &lt;&lt; template.content_tag(:div, class: 'row') do
        row = ""
        row &lt;&lt; template.content_tag(:span, class: 'span3') do
          @builder.input(:min_total_price, label: false, input_html: { class: 'input-small j-min-total-price'})
        end
        row &lt;&lt; template.content_tag(:span, class: 'span3') do
          @builder.input(:max_total_price, label: false, input_html: { class: 'input-small j-max-total-price'})
        end
        row.html_safe
      end

      div &lt;&lt; template.content_tag(:div, class: 'row') do
        template.content_tag(:span, class: 'span6') do
          template.content_tag(:div, class: 'j-slider', :data =&gt; :slider_data) do
          end
        end
      end
      div.html_safe
    end
    output.html_safe
  end
end

</source>
Этот элемент легко вызвать из формы:

= simple_form_for current_search_form, :url =&gt; :search, :method =&gt; "get" do |f|
    = f.input :price_range, :label =&gt; false, :as =&gt; :price_range

но упростив саму форму, кастомны элемент стало сложно понимать. В его структуре легко запутаться.

<h3>Выход есть</h3>

Решение - использовать <a href="https://github.com/gregbell/arbre">Arbre - Ruby Object Oriented HTML Views.</a>

Он позволяет легко использовать верстку в коде, а также создавать повторно используемые компоненты. Arbre рожден в проекте <a href="http://activeadmin.info/">acive_admin</a> и является, по сути, его основой.

<h3>Ближе к делу</h3>

Начнем с добавление помощничка в базовый класс элементов форм. Это один из редких примеров уместного monkey patch.

class SimpleForm::Inputs::Base
private
  def arbre assigns={}, &amp;block
    Arbre::Context.new assigns.reverse_merge(:builder=&gt;@builder), template, &amp;block
  end
end

Теперь можем зарефаторить элемент формы:

def input
    arbre slider_data: slider_data do
      div class: 'j-price-slider' do
        div class: 'row' do
          span class: 'span3' do
            builder.input :min_total_price, label: false, input_html: { class: 'input-small j-min-total-price'}
          end
          span class: 'span3' do
            builder.input :max_total_price, label: false, input_html: { class: 'input-small j-max-total-price'}
          end
        end

        div class: 'row' do
          span class: 'span6' do
            div class: 'j-slider', data: slider_data
          end
        end
      end
    end
  end

Убрали все лишнее, оставили только то, что действительно нужно. Код выглядит приятнее и понятнее.

<h4>Достоинства Arbre</h4>

И так подведем краткое резюме.

  1. Использование <blockquote>Arbre</blockquote> позволяет избавиться от буфера, для хранение генерируемых тегов:

было

buffer = ''
buffer &lt;&lt; template.content_tag(:div, class: 'row') do
  ...
buffer &lt;&lt; template.content_tag(:div, class: 'row') do
buffer.html_safe

стало

div class: 'row' do
...
div class: 'row' do
 ...
  1. Избавляет нас от необходимости применять мусорный <code>content_tag</code> в коде и дает возмжоность прямо указывать необходимый тег:

было

template.content_tag(:div, class: 'row')

стало

div class: 'row'
  1. И самое интересное - компоненты.

<h4>Собственные компоненты</h4>
Удивительное еще и то, что <code>Arbre</code> позволяет легко добавлять собственные элементы и использовать их в любом контексте.

class Row &lt; Arbre::Component
  builder_method :row

  def build(title, attributes = {})
    super(attributes.merge class: 'row')
  end
end

Сразу после обьявления компонент готов к использованию в любом месте arbre-контекста. Теперь вместо:

template.content_tag(:div, class: 'row') do
  ...

можно писать

row do
  ...

а на выходе полчим код:

&lt;div class="row"&gt;
   ...

В общем arbre помогает сделать неизбежное - верстку в коде, более приятным. Рекомендую.

Оригинальная ссылка- http://habrahabr.ru/post/184528/

Источник: rubyflow.ru

Документация к Ruby 2.0 и любым gem-библиотекам в Dictionary.app

Если вы работаете в Mac OS X, то должны быть знакомы с Dictionary.app. Небольшой, но быстрой и удобной программой-словарем.

С помощью gem-библиотеки rubydictionary вы сможете создать словарь документации к Ruby 2.0 или любой gem-библиотеки.

rubydictionary добавляет новый формат документации к RDoc, который позволяет получить .dictionary файл, используемый Dictionary.app.

Пример того, как можно сгенерировать документацию для Sinatra.

  1. Генерируем .dictionary файл

    $ rubydictionary --dict-name=Sinatra --dict-id=com.sinatrarb.Dictionary

  2. Сохраняем полученный Sinatra.dictionary в каталоге ~/Library/Dictionaries/

Один важный момент: для создания своих словарей вам понадобятся Command Line Tools for Xcode и Dictionary Development Kit, которые можно бесплатно скачать с сайта Apple.

Больше подробностей можно узнать в README в репозитории проекта - github.com/priithaamer/rubydictionary.

Готовые словари для Ruby 2.0.0-p195 и Rails 4.0.0rc2 можно найти на сайте разработчика - http://prii.it/blog/rails4-and-ruby2-dictionaries

Источник: rubyflow.ru

Nginx как прокси для Amazon S3 публичных и приватных файлов

Amazon S3 - великолепное распределенное безразмерное хранилище с удобным интерфейсом доступа. Все бы ничего, но долгий SSL handshake, узкий tcp cognestion window, отсутствие SPDY и невозможность маскировать URL не дает использовать S3 в полной мере.

Посмотрим, как решить все эти проблемы https://coderwall.com/p/rlguog

Источник: rubyflow.ru

Rails Email Preview

Rails Engine для предпросмотра и даже редактирования писем в текстовом и HTML форматах.

В отличии от letter_opener, который перехватывает отправляемые приложением письма и отображает их в браузере, rails_email_preview работает совершенно иначе. Он предоставляет специальный URL, открыв который вы попадаете на страницу предпросмотра всех имеющихся в приложении шаблонов писем.

Для начала использования требуется некоторая настройка, поэтому советую читать README в репозитории проекта - github.com/glebm/rails_email_preview.

Источник: rubyflow.ru

Guard::Rubocop

Плагин для Guard, который добавляет возможность проверки стиля вашего кода с помощью rubocop.

Обновляете Gemfile:

group :development do
  gem 'guard-rubocop'
end

Добавляете конфигурацию в Guardfile:

guard :rubocop, all_on_start: false, notification: true do
  # ...
end

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

Репозиторий на GitHub - github.com/yujinakayama/guard-rubocop

Источник: rubyflow.ru

Альфа версия программы DevConf::Ruby

В рамках DevConf 2013, 14 июня 2013, пройдут 5 конференций по разным языкам программирования включая DevConf::Ruby.

Формат конференции DevConf предусматривает первый конференционный день и второй день мастер-классов. Второй день является опциональным и требует отдельной регистрации.

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

Программа выступлений в секции Ruby:

  • Егор Хомяков (специалист по Rails безопасности) c докладом “Безопасный сайт на примере Rails”
  • Николай Рыжиков (Team lead of "MedClient") с докладом “Domain Driven Design on Rails”
  • Андрей Суббота (Ruby developer в Undev.ru) с докладом “Основы отладки Rails приложений”
  • Александр Балашов (Team lead в Evrone.com) с докладом “Быстрое тестирование Ruby on Rails”
  • Игорь Кузнецов (Ruby developer в Undev.ru) с докладом “Проектирование API”
  • Анатолий Макаревич (Ведущий разработчик в Evrone.com) с докладом “Рефакторинг Ruby кода”
  • Игорь Александров (Руководитель в JetRockets) с докладом “Биллинг в SaaS-системах на Rails”
  • Кирилл Мокевнин, (Team lead в Undev.ru) c докладом “Архитектурные практики”
  • Никита Шильников (Руководитель отдела разработки компании Latera) с докладом “Они сошлись — Ruby и Oracle”
  • Николай Шебанов (Ведущий разработчик в Evrone.com) с докладом “Спасение утопающих - покрываем тестами взрослый Ruby on Rails проект”

Официальный сайт - http://devconf.ru

Источник: rubyflow.ru

Attrio 0.3

Сегодня мы (http://www.jetrockets.ru/) выпустили Attrio 0.3. В релизе убраны почти все core ext расширения (после достаточно длинной дискуссии), улучшены спеки, добавлена пропущенная документация.

Для тех, кто ещё не знает, Attrio – библиотека для добавления типизированных атрибутов к объектам Ruby. Подробнее об особенностях и возможностях Attrio можно прочесть в моём блоге:

Страница Attrio на GitHub:

Спасибо.

Источник: rubyflow.ru

Protector

Protector – расширение ORM (ActiveRecord, Sequel, ...) для управления безопасностью на уровне полей.

Ссылки:

Источник: rubyflow.ru

Octokit.rb

Octokit.rb - "обертка" для GitHub API. Теперь с официальной поддержкой со стороны GitHub, но по-прежнему открытая для сообщества разработчиков.

Ссылки:

Источник: rubyflow.ru

RuboCop 0.8.0

RuboCop - это анализатор стиля вашего кода, использующий в качестве эталона The Ruby Style Guide.

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

RuboCop автоматизирует процесс проверки.

В версии 0.8.0 код библиотеки был практически полностью переписан. Ripper, входящий в состав MRI, был заменен на Parser. Это позволило добавить поддержку JRuby и Rubinius.

Ссылки:

Источник: rubyflow.ru

Релиз TheRole 2.0 . Ролевая система для Rails 4 с админкой

TheRole - семантичная, гибкая и легковесная ролевая система для Rails 4. Права доступа хранятся в БД в виде JSON строки, что позволяет легко и просто управлять ролевыми политиками на лету.

Структура ролевых политик (ACL) повторяет устройство Rails контроллеров (controller/action), что делает данную ролевую систему понятной конечному пользователю.

Узнать больше о TheRole

Источник: rubyflow.ru

Введение в Ruby 2.0

Знаменитый Мэтт Аимонетти (Matt Aimonetti) на очередной встрече San Diego's Ruby Community выступил с докладом "Intro to Ruby 2.0".

Ссылки:

P.S. Рекомендую подписаться на SD Ruby Podcast, потому что там очень много интересных выступлений.

Источник: rubyflow.ru

Вход для пользователей