Работать с API - очень просто. gem - simple_uri.Aleksandr

simple_uri - это гем, позволяющий очень просто делать http-запросы, к чему-либо. Я его написал, когда появилась необходимость произвести интеграцию сразу с несколькими API.

подключаем гем

gem 'simple_uri'

Пример использования:

SimpleUri.send_request(url: 'http://somesite.com/qwerty/', method: :post)

headers = { 'HEADER-X' => '1',
        'HEADER-Y' => '2' }
body = SimpleUri.body_to_str_params({ a: 1, b: 2 })
SimpleUri.send_request(url: 'http://somesite.com/qwerty/', method: :post, req_body: body, req_headers: headers, user: 'user', password: 'password', cookies: true, debug: true)

Больше примеров и информации - тут https://github.com/niksan/simple_uri

Комментарии
Airborne - фреймворк для тестирования APIAlex Soulim

Фреймворк Airborne создан на базе RSpec. Он позволяет упростить работу по написанию тестов для API.

Пример:

require 'airborne'

describe 'sample spec' do
  it 'should validate types' do
    get 'http://example.com/api/v1/simple_get' #json api that returns { "name" : "John Doe" } 
    expect_json_types({name: :string})
  end

  it 'should validate values' do 
    get 'http://example.com/api/v1/simple_get' #json api that returns { "name" : "John Doe" } 
    expect_json({:name => "John Doe"})
  end
end

Намного больше подробностей на официальном сайте проекта - http://brooklyndev.github.io/airborne/

JSON Schema + RSpec = мощный инструмент для тестирования APIAlex Soulim

Команда thoughtbot в очередной раз поделилась мудростью в своем блоге. На этот они рассказывают как можно использовать JSON Schema для упрощения тестирования ответов API.

Например, у вас есть код:

describe "Fetching the current user" do
  context "with valid auth token" do
    it "returns the current user" do
      user = create(:user)
      auth_header = { "Auth-Token" => user.auth_token }

      get v1_current_user_url, {}, auth_header

      current_user = response_body["user"]
      expect(response.status).to eq 200
      expect(current_user["auth_token"]).to eq user.auth_token
      expect(current_user["email"]).to eq user.email
      expect(current_user["first_name"]).to eq user.first_name
      expect(current_user["last_name"]).to eq user.last_name
      expect(current_user["id"]).to eq user.id
      expect(current_user["phone_number"]).to eq user.phone_number
    end
  end

  def response_body
    JSON.parse(response.body)
  end
end

Который может быть преобразован в такой вариант:

describe "Fetching the current user" do
  context "with valid auth token" do
    it "returns the current user" do
      user = create(:user)
      auth_header = { "Auth-Token" => user.auth_token }

      get v1_current_user_url, {}, auth_header

      expect(response.status).to eq 200
      expect(response).to match_response_schema("user")
    end
  end
end

Читайте все подробности в статье "Validating JSON Schemas with an RSpec Matcher"

Вышел Ruby 2.2.0-preview1Alex Soulim

Первый превью-релиз ветки Ruby 2.2.0. Этот релиз включает большое количество новых о возможностей и улучшений.

Например, сборщик мусора теперь работает с символами тоже. Кстати, Rails 5.0 будет требовать как минимум Ruby 2.2.

Остальные подробности читайте в официальном пресс-релизе Ruby 2.2.0-preview1 Released.

RoHoster: Скоростной VDS/VPS-хостинг на SSD-дискахАндрей

Хостинг-провайдер RoHoster сдает в аренду отличные VDS-сервера на SSD-дисках. Твердотельные диски хорошо подходят для размещения высоконагруженных сайтов, сайтов с высокой посещаемостью, "тяжелых" баз данных.

Специально для читателей данного ресурса, используйте промо-код на скидку 50% на первый месяц использования VDS-сервера:

Промо-код: rohoster-rubyflow-09-2014

Если вы давно хотели попробовать SSD-диски в действии, то сейчас самое время для тестирования!

Внимание! Количество купонов ограничено, доступно всего 30 штук

Сайт проекта

RailsClub'Moscow 2014: Интервью с Божидаром БацовымAlex Soulim

Конференция RailsClub 2014 уже совсем близко! Команда организаторов предлагает вашему вниманию очередное интервью.

Божидар Бацов - автор Ruby coding style guide и Ruby on Rails style guide.

Над чем ты сейчас работаешь?

На работе я занимаюсь достаточно сложным социальным трейдинговым приложением. В свободное время в основном работаю над RuboCop и CIDER (Clojure IDE для Emacs). А еще у меня есть куча других проектов, если кому-то интересно, можете посмотреть на github.com/bbatsov. Последнее время я еще работаю над классной презентацией для RailsClub.ru :-)

Что является лучшей и худшей частью твоей работы?

Лучшие части:

  • Я технический директор :-)
  • Я работаю с кучей классных технологий (RoR 4.1, node.js, redis, puppet, react, iOS и т.д.).
  • У меня потрясающие коллеги.
  • Работаю над финансовым приложением, а я всегда интересовался финансами.

Худшие части:

  • Приходится иметь дело с допотопными сервисами, написанными кем-то другим.
  • Делать апдейты Rails.
  • Сталкиваться и разбираться с багами в исходниках Node.js.

Что ты считаешь своим главным достижением в жизни / карьере на данный момент?

Несколько лет назад окончание Технического университета Софии казалось мне огромным достижением :-)

Если серьезно, я по-настоящему горжусь всем, что сделал в Tradeo и во многих open source проектах за последние годы. Мне кажется, в нашей работе главное достижение - всегда последнее на этот момент. Что касается open source, пока мои главные достижения - RuboCop и CIDER.

На твой взгляд, в каком направлении будут развиваться Ruby и Ruby on Rails в ближайшие годы?

Я думаю, что Ruby должен освободиться от оков Rails и исследовать новые территории: мобильные приложения (RubyMotion довольно крут), десктоп приложения, системное администрирование и т.д. Хотя Ruby используется сейчас для разных интересных тем, для большинства людей Ruby все еще синоним Rails, а это не очень хорошо. Разнообразие двигает прогресс и инновации.

Что касается Rails, думаю, эра full-stack веб фрэймворков подходит к концу благодаря подъему мобильных и client-side приложений. Мне кажется, что Rails надо на каком-то этапе отказаться от уровня представления и пойти в сторону "rails-api" проектов.

В чём, на твой взгляд, самая важная проблема, которая стоит сейчас перед сообществом разработчиков Ruby и Ruby on Rails?

Ruby надо снова стать крутым. Когда Ruby стал популярным около десятилетия назад, он предлагал множество преимуществ над самыми актуальными тогда языками. Однако в последнее время кажется, что язык немного стагнирует, и все крутые ребята занимаются Clojure, Elixir, Haskell, Scala и так далее. Я жду, что Ruby 3.0 попробует ответить на это большим количеством новых возможностей (например, хорошей работой с concurrency).

Rails сталкивается с похожей проблемой: в мире, который быстро движется в сторону client-side и мобильных приложений ценность традиционных веб фрэймворков снижается. Люди все чаще предпочитают использовать в своих новых приложениях микросервисную архитектуру, а Rails для этого не особо подходит. Самая большая проблема, которую Rails должен решить сейчас, - сохранить актуальность.

Есть гем, на который ты мог бы показать пальцем и сказать: "Вот так нужно писать код"?

RuboCop :-) Другие гемы с отличным кодом, которые приходят мне на ум, - transpec, rspec, parser и sequel.

Является ли хороший стиль написания кода чем-то постоянным или он изменяется со временем? Если изменяется, то какие факторы влияют на эти изменения?

Язык и хорошие практики программирования развиваются вместе. Хотя правильные практики практически вне времени (очень сомнительно, что создание огромных сложных методов когда-нибудь будет считаться хорошим стилем), внедрение новых конкретных фич может привести к изменению представлений о том, что считается хорошим стилем (например, новый синтаксис хеш-литералов в Ruby 1.9, введение именованных аргументов в версии 2.0 и т.д.).

Ты читаешь какой-нибудь блог, посвященный Ruby/RoR?

Не слежу за каким-то определенным блогом. Обычно я читаю те посты о Ruby/Rails, которые попадают в Ruby Weekly. Еще я слушаю два отличных Ruby подкаста - Ruby 5 и Ruby Rogues.

Чем тебе нравится заниматься, когда ты не пишешь код?

Мне всегда нравилось пить пиво с друзьями и смотреть футбол, смотреть кино, телешоу и читать книги. Еще я заядлый геймер, и я немного играю на гитаре. Наверное, у меня есть и какое-то полезное для здоровья хобби, но прямо сейчас ничего такого не припомню :-)

Спасибо за интервью и увидимся в Москве!

Вы можете пообщаться с Божидаром лично - 27 сентября, в центре Digital October. Вся программа - на сайте конференции RailsClub 2014.

Регистрация и оплата участия - тут.

RailsClub'Moscow 2014. Интервью с Аароном ПаттерсономAlex Soulim

RailsClub 2014 стартует уже через 19 дней! Организаторы мероприятия предлагают вашему вниманию серию интервью с докладчиками.

Первый разговор - с самым долгожданным гостем, Аароном Паттерсоном. Аарон член Ruby и Rails СoreTeam, Топ 1 контрибьютор Rails на сегодня и RubyHero 2010.

Над чем ты сейчас работаешь?

Прямо сейчас я работаю над несколькими вещами:

  • Ускоряю генерацию views (включая routing) в Rails
  • Ускоряю тесты в ActiveRecord, экспериментируя с параллельным выполнением
  • Работаю над Rack 2.0

Что является лучшей и худшей частью твоей работы?

Лучшая часть - помощь другим разработчикам и, конечно, удаление кода. Думаю, мое любимое занятие - удаление кода! Худшая - попытки разобраться, почему некоторый код такой, какой он есть. Работать над Rails иногда тяжело, потому что в некоторых местах код устарел, так что трудно отследить, откуда взялся какой-то кусок или почему определенный кусок кода именно такой.

Что ты считаешь своим главным достижением в жизни/карьере на данный момент?

Думаю, пока мое главное достижение - улучшения производительности, которых я добился в ActiveRecord (этот проект называется AdequateRecord). Я годами учился рефакторить код, чтобы в последствии у меня получилось сделать такие улучшения производительности. Приятное чувство, когда трудишься над чем-то так долго и, наконец, видишь результат. Еще я счастлив, что удалось улучшить производительность без необходимости изменять публичное API.

На твой взгляд, в каком направлении будут развиваться Ruby и Ruby on Rails в ближайшие годы?

Я надеюсь, что в Rails мы сможем улучшить работу HTTP в Ruby веб-серверах. Я хочу, чтобы стриминг лучше поддерживался, и потом мы бы использовали это как стартовую площадку для поддержки HTTP 2. Что касается Ruby, меня воодушевляют улучшения в сборщике мусора. Думаю, в долгосрочной перспективе будущее Ruby связано с добавлением конструкций для работы с concurrency, возможно, с встроенным actor pattern.

В чём, на твой взгляд, самая важная проблема, которая стоит сейчас перед сообществом разработчиков Ruby и Ruby on Rails?

В перспективе для Rails сообщества, думаю, будет очень важно поддерживать HTTP 2, и это будет непросто. У нас большое количество программ, которые зависят от HTTP 1.1, и я думаю, проапргрейдиться будет непростой задачей.

Есть гем, на который ты мог бы показать пальцем и сказать: "Вот так нужно писать код"?

Думаю, minitest - это хороший пример. Он небольшой и простой для понимания. Но я должен сказать, ни один гем не идеален. Везде есть свои проблемы, вы можете их просто пока не видеть!

Какие правила ты бы предложил установить для успешного развития проекта на Ruby с 250+ тыс. строк кода силами множества разработчиков с очень разным уровнем квалификации?

Полагаю, лучшее правило, которое я могу предложить, — это хорошая коммуникация внутри команды. Помимо этого, придерживайтесь принципов SOLID. Я думаю, это хорошие правила для новичков, а когда вы наберетесь опыта, то начнете понимать, когда их можно нарушать.

Есть ли хоть какой-то шанс, что в обозримом будущем MRI избавится от GIL?

Возможно, не в ближайшем будущем. Но я правда думаю, что это случится.

Ты читаешь какой-нибудь блог, посвященный Ruby/RoR?

Я обычно читаю ruby subreddit. Еще мне нравится слушать подкаст Giant Robots, хотя они совсем не часто говорят о гигантских роботах.

Чем тебе нравится заниматься, когда ты не пишешь код?

В основном готовкой и видеоиграми. Хотя больше готовкой. Прямо сейчас я собственноручно засаливаю бекон!

Спасибо за интервью и увидимся в Москве!

Все вопросы, которые не задали мы, вы сможете задать Аарону и другим нашим участникам лично - 27 сентября, в центре Digital October. Вся программа - на сайте конференции RailsClub 2014.

Регистрация и оплата участия - тут.

Web Expert DayProvectus IT

20 сентября 2014 года в Казани при организации Provectus IT, Inc. совместно с Институтом Вычислительной Математики и Информационных Технологий Казанского Федерального Университета пройдет очередной Expert Day, на этот раз посвященный web-разработке.

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

  • Сергей Укустов (Provectus IT): "Несоциалочка на Рельсах"
  • Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
  • Николай Ясинский (weel.pro): "Современные технологии разработки: От сервера до страницы 404 "
  • Михаил Кольцов (Luxoft): "Разработка корпоративных веб-приложений на AngularJS, Grunt, Spring, Play! "
  • Николай Телепенин, ведущий архитектор "БАРС Груп": "Realtime Web: миф или реальность"
  • Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура серверной и клиентской части”
  • Глеб Синявский, Team Leader в Racoons Group development company: "Бизнес-процессы для веб разработчика"

Если у вас есть интересная тема и желание поделиться своим докладом с аудиторией, укажите тему и краткое описание в регистрационной форме.

Участие бесплатное, регистрация обязательна!

Место проведения: КФУ (420008, Казань, ул. Кремлевская, 18) Начало мероприятия: 12:00

За дополнительной информацией обращайтесь:

Татьяна Козовая, PR-менеджер в Provectus IT +3 8096 237 06 46, Skype: tkozovaya До встречи на Web Expert Day!