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

FiniteMachine - еще одна библиотека, реализующая конечные автоматы

Я еще не проводил испытания FiniteMachine, но описание выглядит просто замечательно. Больше всего меня привлекает то, что эта библиотека имеет все необходимое для описания конечного автомата, но при этом оставляет вопрос интеграции с другими библиотеками (например, ActiveRecord) за разработчиком.

Созданный с помощью FiniteMachine автомат - это простой Ruby-объект и вы сами решаете как его интегрировать с другими классами и объектами вашего приложения.

Вот простой пример описания автомата:

fm = FiniteMachine.define do
  initial :red

  events {
    event :ready, :red    => :yellow
    event :go,    :yellow => :green
    event :stop,  :green  => :red
  }

  callbacks {
    on_enter :ready { |event| ... }
    on_enter :go    { |event| ... }
    on_enter :stop  { |event| ... }
  }
end

Вы сможете найти больше количество примеров и описание всех возможностей в README на GitHub - github.com/peter-murach/finite_machine

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

HackDay#30

С 21 по 23 февраля в пространстве DI Telegraph, пройдет HackDay#30. На HackDay участники создают работающие прототипы своих проектов и через 48 часов презентуют их коллегам, экспертам и инвесторам.

Бессменный организатор - Студия Михаила Кечинова, - привезет в Москву обновленный формат мероприятия, отработанный в городах по всей России, а также спикеров и менторов, за спиной у которых работающие технологические проекты и бесценный опыт.

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

На HackDay участники могут прийти с уже готовой идей, на реализацию которой у них никак не находилось времени. Можно собрать команду непосредственно на HackDay, можно влиться в готовую команду. HackDay – это место и время для работы над реальными проектами в максимально сжатые сроки.

В пятницу вечером участники заявят о своих идеях и смогут собрать команды. Суббота и воскресенье целиком будут отданы разработке прототипов и общению с менторами. На демофесте каждая команда сможет представить разработанный своими силами прототип широкой аудитории коллег, менторов и экспертов рынка. А победители получат специальные призы от партнеров и спонсоров.

HackDay – это всегда настоящий вызов. Для людей, одержимых технологиями, мероприятие станет настоящим праздником, где они смогут воплотить в жизнь свои самые смелые идеи. Впрочем, это также и уникальный опыт общения с единомышленниками и специалистами, которые создают и развивают собственные продукты. Таким образом, каждый сможет почувствовать на себе, что значит получить свой персональный God Mode, высвободить творческий потенциал, начать двигаться в верном направлении с уже проработанной идеей. 

«Мы не занимаем время участников разговорами. Для нас важны: простота, креативность, и техническое решение. Поэтому мы ждем тех, кто действительно имеет желание и готовность разработать в течение 48 часов что-то по-настоящему интересное и при этом работоспособное. До встречи!» – Михаил Кулаков, организатор HackDay Russia.

Мероприятие условно-платное. Стоимость билета - 800 рублей, которые идут на организацию трехразового питания и кофе-брейков. Вход на демофест свободный.

  • Дата: 21-23 февраля
  • Старт: 18.00 в пятницу

  • Демофест: 21.00 в воскресенье.
  • Площадка: Рабочее пространство DI Telegraph, Тверская улица, дом 7, 5 этаж. Вход со стороны газетного переулка
  • Регистрация: http://hackday.ru/events/hackday-30
  • Организатор: Студия Михаила Кечинова
  • Контакты: 
Михаил Кулаков (менеджер проекта)
+7 (964) 329 67 71, mikhail.kulakov@mkechinov.ru
, Андрей Жеглов (работа с инфопартнерами и аккредитация прессы) +7 (965) 085 43 56, andrey.zheglov@mkechinov.ru

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

Безопасный Rails код в миграциях

Доводилось ли вам когда-либо заполнять данными базу в миграциях, когда проект уже давным давно в продакшене?

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

В этой статье вы найдете, какие проблемы могут возникнуть в популярных решениях. А также увидете, как же все таки можно писать код для миграций данных надежно с помощью недавно релизнутого гема migration_data.

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

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

gem 'sandi_meter' – автоматическая проверка кода на правила Sandi Metz

Во время последней BaRuCo Sandi Metz сделала отличный доклад, где объяснила философию, которая стоит за Sandi Metz rules. На следующий день был выпущен гем, который сканирует код на следование этим правилам.

gem install sandi_meter

Гем можно использовать из консоли (для однократной проверки, например):

> sandi_meter -p ~/path/to/project

# 1. 94% of classes are under 100 lines.
# 2. 53% of methods are under 5 lines.
# 3. 98% of methods calls accepts are less than 4 parameters.
# 4. 21% of controllers have one instance variable per action.

Так же есть HTML mode, который сохраняет все результаты в лог и рендерит красивый HTML с отчетом и статистикой по времени (для этого режима нужно использовать ключ -g):

sandi_meter -g

alt text

Ruby mode. Результат сканирования можно получить в Ruby скрипте в виде простого хэша:

require 'sandi_meter/file_scanner'
require 'pp'

scanner = SandiMeter::FileScanner.new
data = scanner.scan(PATH_TO_PROJECT)
pp data
# {:first_rule=>
#   {:small_classes_amount=>916,
#    :total_classes_amount=>937,
#    :missindented_classes_amount=>1},
#  :second_rule=>
#   {:small_methods_amount=>1144,
#    :total_methods_amount=>1833,
#    :missindented_methods_amount=>0},
#  :third_rule=>{:proper_method_calls=>5857, :total_method_calls=>5894},
#  :fourth_rule=>{:proper_controllers_amount=>17, :total_controllers_amount=>94}}

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

Каскадные селекты с AJAX для Rails

В этой статье можно почитать о том, как сделать каскадные селекты с подгрузкой ajax-ом.

alt text

Решение работает для rails-приложений. Описанное решение ни коим образом не претендует на открытие. Однако, наблюдая за данной проблемой от приложения к приложению, я считаю, что статья будет актуальна.

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

Benchmark Bundler

Хотите проверить сколько времени занимает загрузка каждого гема из Gemfile?

Эндрю Кейн (Andrew Kane) предлагает очень простой рецепт - перейдите в каталог вашего приложения и выполните команду:

$ curl -fsSL <a href=\"https://gist.github.com/raw/5022636/benchmark.rb\">https://gist.github.com/raw/5022636/benchmark.rb</a> | ruby

В результате вы рейтинг библиотек из Gemfile отсортированных по времени загрузки. Rails всегда занимает первое место, но всегда полезно знать и об остальных.

Результат выполнения команды выглядит примерно так:

Gem                            Time(sec)     Pct %
--------------------------------------------------
rails                             2.4161     26.9%
mongoid                           0.9279     10.3%
fog                               0.7707      8.6%
newrelic_rpm                      0.5839      6.5%
geocoder                          0.3578      4.0%
delayed_job                       0.3162      3.5%
bitly                             0.2703      3.0%
sass                              0.2651      3.0%
tire                              0.2592      2.9%
--------------------------------------------------
Total                             4.8583    100.0%

Для любознательных, кто желает узнать как все работает, вот ссылка на gist - https://gist.github.com/ankane/5022636

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

Devise 3.1.0.rc

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

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

Читайте о подробностях и причинах всех изменений в статье Devise 3.1: Now with more secure defaults.

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

Nit - обертка для git

Nit облегчает вашу ежедневную работу с git. Рассмотрим на примерах.

Статус

$ nit
# On branch master
# Changes not staged for commit:
#   (use "git add &lt;file&gt;..." to update what will be committed)
#   (use "git checkout -- &lt;file&gt;..." to discard changes in working directory)
#
#   modified:   on_stage.rb  [a]
#   modified:   staged.rb  [b]
#
# Untracked files:
#   (use "git add &lt;file&gt;..." to include in what will be committed)
#
#   brandnew.rb  [c]
#   new.rb  [d]

Это git status с доп. возможностями. Обратите особое внимание на то, что каждый файл имеет индекс (буква в квадратных скобках справа).

Коммит

Используем индексы файлов из примера выше и сделаем коммит:

nit commit a c

Это эквивалент следующим командам:

git add on_stage.rb
git add brandnew.rb
git commit

Это только небольшой пример. Nit имеет намного больший арсенал, который ко всему прочему можно расширять. Читайте больше об этом в README проекта на GitHub - github.com/apotonick/nit

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

RailsClub’Moscow 2013

28 сентября 2013 в Москве на территории центра Digital October состоится 12-ая конференция веб-разработчиков на языке Ruby и фреймворке Ruby On Rails – RailsClub’Moscow 2013. RailsClub’Moscow 2013 соберет вместе ведущих российских и известных иностранных Ruby разработчиков, которые поделятся с участниками конференции своими знаниями и опытом.

На RailsClub 2013 будем обсуждать проектирование, разработку, тестирование, отладку, оптимизацию под большие нагрузки, масштабирование и эксплуатацию ruby on rails проектов.

В этом году в качестве докладчиков к нам приедут знаменитые ruby звезды:

  • Obie Fernandez (США), автор серии книг “The Rails Way”, основатель Hashrocket
  • Linda Liukas (США), обладатель Ruby Hero Award 2013, автор книги “Hello Ruby” и активистка RailsGirls
  • Ernie Miller (США), автор Squeel, докладчик на RailsConf 2013
  • Frederick Cheung (Англия), обладатель Ruby Hero Award 2012
  • Eric Hodel (США), обладатель Ruby Hero Award 2012
  • Jeremy Evans (США), ведущий разработчик Sequel

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

Конференция RailsClub 2013 - это уникальный шанс получить новые знания, пообщаться с друзьями, коллегами и звездами Ruby в комфортной обстановке Digital October.

Зарегистрироваться можно тут.

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

Ruby Hacking Guide

Ruby Hacking Guide - это книга для тех, кто интересуется устройством интерпретатора Ruby (официальная С-версия интерпретатора).

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

Читайте Ruby Hacking Guide на ruby-hacking-guide.github.io

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

Предзагрузка JS-ассетов с помощью директив Sprockets

Sprockets::Preload – маленький гем, расширяющий возможности Sprockets по загрузке JS. С помощью новых директив, ассеты можно отправить в параллельную загрузку, показывая в этот момент пользователям прогресс скачивания.

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

Конференция RuPy 2013

Какие у вас планы на 11-13 октября 2013?

Шестая по счету конференция RuPy будет проходить в это время в Будапеште.

RuPy - это конференция, организуемая сообществом разработчиков.

Разработчики, использующие Ruby, Python, JavaScript, Clojure, соберутся вместе чтобы обменяться опытом и идеями, научиться чему-то новому друг у друга.

Тема конференции в этом году звучит как "On the edge": как мы сочетаем стабильность технологий прошлых лет с новыми разработками.

RuPy - это необычная конференция, состоящая из ряда выступлений. Это целое событие. Это настоящий фестиваль программирования, где разработчики могут знакомиться с новыми людьми, обмениваться опытом и отлично проводить время. Здесь будут кодинг-сессии, вечеринки, еда и напитки.

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

Приезжайте в Будапешт в октябре! :)

Больше информации о конференции RuPy можно узнать на официальном сайте - http://13.rupy.eu/
Следите за новостями в блоге (http://blog.rupy.eu/) и твиттере (@RuPy)

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

TheRole Ролевая система для rails4. Релиз 2.1.0

Сегодня добавил метод массовой проверки ролей в гем TheRole. Поэтому случился релиз версии 2.1.0

Всех заинтересованных приглашаю ознакомиться с описанием релиза.

TheRole 2.1.0 release note

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

Интересный паттерн под названием Page Object

Паттерн Page Object предполагает использование класса-посредника между пользовательским интерфейсом страницы и тестами, работающими с этим интерфейсом.

Рассмотрим на примере сценария для Cucumber. Обычно описание шага выглядит так:

# features/step_definitions/user_steps.rb

Given /^I login with username "Joseph" and password "cuker"$/ do |username, password|
  visit "/login"

  fill_in :user, user
  fill_in :password password
  click 'login'
end

С помощью Page Object мы можем "скрыть" весь UI страницы и действия с ним за интерфейсом класса.

# features/step_definitions/user_steps.rb

Given /^I login with username "Joseph" and password "cuker"$/ do |username, password|
  login_page = LoginPage.new

  login_page.visit
  login_page.login(username, password)
end

Таким образом, мы скрыли детали реализации UI. Код класса LoginPage выглядит так:

# features/pages/login_page.rb
class LoginPage
  def login(user, password)
    fill_in :user, user
    fill_in :password password
    click 'login'
  end

  def visit
    visit "/login"
  end
end

Что нам дает Page Object:

  • простой и читаемый DSL
  • при изменении UI на будет достаточно только поменять класс относящийся к изменившейся странице. Сами тесты останутся без изменений.

Вы можете сказать, что нечто подобное мы уже и так реализуем с помощью хелперов. Все верно. Page Object всего лишь один из методов организации кода.

Если эта тема вас заинтересовала, то советую прочитать статьи:

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

Еще одно правило проверки belongs_to ассоциации

Это статья - продожление предыдущей статьи о правилах валидации на присутствие ассоциации belongs_to. На этот раз расскрываются проблемы связанные с nested attributes.

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

Валидатор на присутствие ассоциативного объекта belongs_to

Вы когда-нибудь задавали вопросом что валидировать на ассоциации belongs_to в rails: название ассоциации или внешний ключ? Здесь раскрыта эта тема -
http://railsguides.net/2013/07/11/belongs-to-and-presence-validation-rule1/

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

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