Сервисные FormObject'ыAlexander

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

GutHub source

Пример контроллера:

def create
   @form = UserRegistrationForm.new(User.new(params[:user]))
   @form.bonus_code = 'STARS600'
   @form.submit!
end

Пример объекта:

class UserRegistrationForm < FormLogic::Base
   declare_model_name :user

   property :email, :password, :password_confirmation, to: :user

   virtual :bonus_code

   def while_validation
     if bonus_code.present? && bonus.nil?
       errors.add(:bonus_code, :invalid)
     end
   end

   def submit!
     user.transaction do
        BonusTransaction.create!
        user.create!
     end
   end

    def bonus
       @bonus ||= Bonus.registration.coded(bonus_code).first
    end
end
Комментарии
Anton Taraev

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

Первая онлайн-школа программирования Ruby в РоссииПавел Боревич

Ruby Ninja School

Мы сделали свою школу программирования, потому что стали получать запросы обучить людей Ruby из разных точек России. И изначально подход, который мы закладывали, был от простого к сложному, от практики только с самой необходимой теорией, потому что нам никогда не нравилась излишняя академичность, можно долго спорить на тему образования, базисных знаний, необходимых для начала, но лучше взять и сделать! Главный принцип нашей школы программирования: для того чтобы научиться надо много делать, а научить может только тот, кто сам много делал.

alt text

Сегодня все преподаватели проекта Ruby Ninja School – это парни, у которых за спиной сотни тысяч строчек кода, написанного для более чем 60-ти коммерческих проектов. То, чему они обучают – реально нужно для решения прикладных задач, а не для написания пузырьковой сортировки или программ по вычислению факториала. Настоящими программистами-ниндзя становятся только те, кто хочет научиться реальному программированию, и кто готов посвятить этому своё время, поэтому наши программы составлены таким образом, чтобы домашние задания нельзя было не делать, а code review и ответы на вопросы по заданиям занимают со второго занятия около четверти времени обучения.

alt text

Сегодня Ruby Ninja School обучает около 20 студентов ежемесячно, география расположения которых простирается от Владивостока до Варшавы. Эти ребята и иногда девушки ставят перед собой различные цели: перейти на новый язык программирования, разобраться в работе своих подчинённых и понимать , что они делают, начать программировать с нуля, есть даже те, кто просто хотят сделать это своим хобби. Но всех их объединяет то, что они хотят развиваться, а не просто получать знания.

Хочешь узнать о нас подробнее? Заходи на наш сайт rubyninja.ru

Svitla Ruby Conference Kyiv, 31 MAY - 1 June 2014Ruby Conference Kyiv

31 мая – 1 июня 2014 года в Киеве пройдет вторая конференция RubyC, посвященная Ruby и Ruby on Rails

Посетить RubyC 2014 будет полезно тем, кто хочет:

  • пообщаться с лучшими рубистами со всего мира;
  • лучшие варианты практического использования Ruby на примере реальных проектов;
  • услышать все о последних трендах в Ruby и Ruby on Rails;
  • с пользой провести два дня среди талантливых, умных людей, набраться новых идей и почувствовать вдохновение для дальнейших достижений.

В этом году RubyC вновь собирает звездный состав докладчиков из Америки, Европы и стран СНГ. Среди приглашенных гуру: Стив Клабник (США), Бен Ловелл (Великобритания), Хавьер Рамирес (Великобритания), Александр де Оливера (Бразилия), Дэвид Хеннер (США), Джереми Эванс (США), Константин Теннахард (Германия), а также Богдан Гусев (Украина), Тимофей Цветков (Россия), Евгений Пирогов (Россия).

Подробнее о спикерах и их темах можно узнать на сайте http://rubyc.eu/. Организаторы приглашают всех желающих поделиться своим опытом и стать спикером конференции. Заявки могут быть поданы на сайте конференции. Прием заявок продолжится до конца апреля.

Полезности:

  • Продажа билетов уже открыта на сайте конференции!
  • Место проведения конференции: БЦ «ИНКОМ», ул. Смоленская, 31-33.
  • Рабочие языки конференции – английский, русский, украинский.
  • Присоединяйтесь к группам RubyC на Twitter и Facebook.

До встречи на RubyC 2014!

alt text


Впервые RubyC состоялась в 2011 году, став одним из наиболее значимых событий для руби-сообщества того года, поскольку собрало вместе не только высококлассных докладчиков из разных уголков земного шара, но и около 200 посетителей из Украины, России, Беларуси, Латвии и США . Спикерами RubyC среди прочих стали: Райан Бигг (Австралия), Стив Клабник (США), Джонас Никлас (Швеция), Дарси Лейкок (Австралия), Алексей Найден (Россия) и многие другие.

Организатор RubyC — Svitla Systems Inc., американская аутсорсинговая компания, которая занимается разработкой приложений на Ruby, .NET, PHP, Java, Magento, Flash, а также мобильных приложений. Офисы компании находятся в Киеве, Львове, Харькове, Севастополе, Черкассах, Черновцах и Тернополе. Головной офис располагается в Сан-Франциско. http://svitla.com/

order_query для поиска следующих записейGleb Mazovetskiy

order_query находит следующие и предыдущие записи ActiveRecord относительно данной.

Например, есть записи отсортированные по приоритету. Их 10,000! Если пользователь смотрит на страницу отдельной записи, хочется показать ему ссылки на следующую и предыдущую запись.

order_query позволяет эффективно получить эти записи, используя только LIMIT и WHERE, но не OFFSET:

class Post < ActiveRecord::Base
  include OrderQuery
  order_query :order_list, [
    [:pinned, [true, false]],
    [:published_at, :desc],
    [:id, :desc]
  ]
end

Теперь можем пользоваться:

# get the order object, scope default: Post.all
p = Post.find(31).order_list(Post.published) #=> OrderQuery::RelativeOrder<...>
p.before     #=> ActiveRecord::Relation<...>
p.previous   #=> Post<...>
p.position   #=> 5
p.next       #=> Post<...>
p.after      #=> ActiveRecord::Relation<...>

Секретный соус в генерируемом WHERE, который исключает все предыдущие или следующие записи:

-- post: pinned=true published_at='2014-03-21 15:01:35.064096' id=9
SELECT "posts".* FROM "posts"  WHERE
  ("posts"."pinned" = 'f' OR
   "posts"."pinned" = 't' AND (
      "posts"."published_at" < '2014-03-21 15:01:35.064096' OR
      "posts"."published_at" = '2014-03-21 15:01:35.064096' AND "posts"."id" < 9))
ORDER BY
  "posts"."pinned"='t' DESC,
  "posts"."pinned"='f' DESC, "posts"."published_at" DESC, "posts"."id" DESC
LIMIT 1

Остальное на Github.

Гем-хелпер для построения Slug параметровIlya N. Zykin

the_string_to_slug - обеспечивает параметризацию и транслитерацию строки, помогает строить slug'и для урлов.

Все выполняется нативными средствами i18n - без полного набора средств гема russian, который как правило подключают для подобных целей

Если нужна именно генерация слагов, без других возможностей gem russian - то этот гем может оказаться кстати

Комментарии
Artemev Yuri

Манки патчинг и зависимость от рельсы это плохо. Сам давненько писал нечто подобное https://github.com/artemeff/slugg

Курс по Ruby on Rails от Злых марсиан Andrey “A.I” Sitnik

29, 30 марта и 1 апреля в Москве Злые марсиане проводят курс по Ruby on Rails.

В этом году мы решили полностью переработать курс, чтобы сделать его еще круче.

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

Равиль и Лёша объясняют практическое задание по Rack

На курсе мы углубляем понимание работы Rails, делимся опытом, который мы получили в крупных проектах, даем полезную выжимку знаний и развеиваем популярные заблуждения. Иными словами, за короткий срок «прокачиваем» разработчиков на Ruby on Rails, тимлидов и технических директоров Rails проектов.

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

Комментарии
araslanov.e.i.

Было бы круто, если бы они гастролировали В)

Курс "Профессиональная разработка на Ruby on Rails"

Объявлен 2-й набор на курс "Профессиональная разработка на Ruby on Rails"

Курс предназначен для тех, кто уже знает основы Ruby on Rails и хочет стать уверенным разработчиком и найти работу в этой области или начать создавать свои проекты на этом фреймворке.

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

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

  • TDD/BDD
  • Git flow
  • написание хорошего кода
  • разработка правильной архитектуры
  • Множество стандартных и не очень gem'ов
  • Background jobs
  • REST API
  • и прочее..

Все подробности и регистрация здесь

Rails Expert DayProvectus IT

29 марта в Казани при организации Provectus пройдет конференция Rails Expert Day, посвященная разработке на Ruby.

Наши спикеры:

- Николай Рыжиков, тренер ScrumTrek

Технический лидер (художественный руководитель) команды "health samurai" (waveaccess/hospital-systems), которая уже 6 лет делает на Ruby медицинские корпоративные приложения для США. Активист питерского руби сообщества и мета-сообщества «piter-united».

Тема доклада: «Clojure для рубистов и не только» Clojure - современный "боевой" диалект lispа, который может исполняться на JVMах & JSVMах (ClojureScript). В clojure реализованы эффективные персистентные (иммутабельные) структуры данных (vector, hash-map, list, set) и поощряется функциональное и мета-программирование. Clojure написал один из молодых современный IT-гениев - Rich Hickey. Даже если вы не будете писать на clojure, то сможете черпать вдохновение из идей этого "мощного" человека.

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

- Руслан Деревякин, Java/Grails/RoR Developer в Provectus IT

Ведущий инженер с опытом разработки на Java EE, Python (Django), Grails, Ruby On Rails.

Тема доклада: «Разработка Web приложений на GRails» Grails - фреймворк для быстрой разработки веб приложений, объединяющий в себе инфраструктуру Java EE (Sping MVC, Hibernate, Maven и т.д.) и современный подход Ruby on Rails. В докладе будут рассмотрены особенности, преимущества и недостатки Grails в сравнении с другими популярными Web-фреймворками.

-Константин Макарычев, Full Stack Developer в Provectus IT

В Provectus IT Константин является техническим лидером в JavaScript и Objective-C разработке.

Тема доклада: «Backbone.js + Marionette.js tips & tricks» Типичные ошибки и лучшие практики разработки сложного динамичного одностраничного интерфейса с использованием Backbone.js. Как не перемудрить, успеть к дедлайну и выжать максимум продуктивности из данной архитектуры.

-Кирилл Мокевнин, руководитель филиала undev.ru в Ульяновске

Кирилл создает инженерную культуру компании и несет в массы XP, DDD, DevOps. Евангелист ментального программирования, Ruby ниндзя, докладчик на РИТ, devconf и других конференциях. Последние годы активно занимается обучением и немного преподаванием. Соорганизатор конференции nastachku.ru. В свободное время пишет игровую систему на erlang/js для нестандартного обучения программированию.

Тема доклада: «Архитектурные практики» Как создавать гибкие и легко поддерживаемые приложения на rails. Поговорим об иерархии контроллеров и моделей, проектировании и версионировании api, взаимодействии с внешними сервисами, о практиках тестирования, об acl и scope policy, о репозиториях и типах. Пробежимся по нескольким очень полезным, но далеко не всем известным гемам, а так же затронем DDD, CQS и принципы ООП дизайна.

Участие бесплатное, регистрация обязательна. Начало мероприятия: 11:00 (регистрация) Место проведения уточняется.

Информационный партнер:

За дополнительной информацией обращайтесь: Татьяна Козовая, PR-менеджер в Provectus IT +38 096 237 06 46, Skype: tkozovaya

alt text

С нетерпением ждем вас на нашем мероприятии!

Комментарии
araslanov.e.i.

В) только один доклад как то связан с Ruby и Rails, но спикеры очень интересные.

Деплой Ruby on Rails проектов через веб-интерфейс

Зачастую, перед разработчиками RoR встает необходимость централизованного деплоя приложения на продакшн сервер. Конечно, на помощь приходит мощное средство capistrano, но оно не позволяет вести историю деплоев, что бывает необходимо в командах c достаточно большим количеством разработчиков. Ниже будет рассмотрен процесс настройки веб-приложения, которое позволяет упростить эту задачу и сделать выкатку новой версии в «два клика».

Нам потребуется приложение, код которого находится на github.com. Процесс настройки capistrano опустим, в сети много примеров как это делается.

Итак, забираем код:

git clone git@github.com:joelmoss/strano.git

также, можно воспользоваться форком от компании Express42, где sidekiq заменен на старый добрый resque.

Подготавливаем файл database.yml и размещаем его в директории config. Переходим в директорию strano и запускаем script/bootstrap. Скрипт практически все сделает за нас. Скорее всего, при установке джемов могут возникнуть ошибки, связанные с отсутствием определенных хедеров в системе. В моем случае было необходимо: 1) прописать gem ‘pg’ в Gemfile, потому как использую я postgresql 2) для успешного бандлинга выполнить команду:

gem install debugger-ruby_core_source

Проверим, что все работает:

bundle exec rails s

Самое время перейти к конфигурированию нашего инструмента. Для этого скопируем файл config/strano.example.yml в config/strano.yml. Здесь нам необходимо указать всего три переменные: 1) публичный ключ машины, где мы развернули наш инструмент деплоя (public_ssh_key) 2) клиентский идентификатор приложения и его секретный ключ на github.com: github_key и github_secret соответственно. Для получения последних двух параметров необходимо создать приложение на гитхабе, указав там домен, где будет расположен ваш веб-интерфейс.

Самым сердцем нашего инструмента будет фоновый воркер, который собственно и будет запускать все задачи. Запустим его:

bundle exec sidekiq

На этом настройка закончена. Стоит лишь сказать, что не лишним будет закрыть basic_auth`ом домен деплоилки, потому как аутентификация производится через github и мне не удалось заставить работать strano для ограничения лиц, которым приложение должно давать доступ.

Воспользоваться плодами наших трудов очень просто: для этого необходимо авторизоваться, создать проект и указать путь до репозитория. Придется подождать, пока склонируется проект и произойдет установка джемов. Далее необходимо создать нужные таски. На мой взгляд, деплой, выполнение rake тасков и выполнение кода из консоли rails — достаточный набор задач для большинства повседневных нужд.

Оригинал http://blog.rubyruby.ru/blog/2014/02/17/deploy-ruby-on_rails_via_browser/

spec "helper"Alex Soulim

Замечательная статья Мэтью Паркера (Matthew Parker), Pivotal Labs, заставляющая задуматься о том, что зачастую мы используем слишком много зависимостей даже там, где они порой не нужны.

Читайте статью "Spec “Helper”" в блоге Pivotal Labs.

P.S. Так же рекомендую обратить внимание на другие статьи Мэтью - pivotallabs.com/author/mparker