Рубрика «ruby» - 12

Это будет история об открытом ПО, доверии и ответственности.

Задача и её решение

Как-то раз мне понадобилось добавить в своё приложение на Ruby симметричное шифрование. Алгоритм AES показался мне хорошим выбором и я решил найти библиотеку шифрования с поддержкой этого алгоритма. Поскольку я писал на Ruby, то сделал то же самое, что сделал бы на моём месте практически каждый программист на Ruby — пошел в Google и написал запрос «ruby gem aes». Конечно же, Google первой строкой предложил мне gem, называющийся (вот неожиданность!) — «aes». Он был очень прост в использовании:

require 'aes'

message = "Super secret message"
key = "password"

encrypted = AES.encrypt(message, key)    # RZhMg/RzyTXK4QKOJDhGJg==$BYAvRONIsfKjX+uYiZ8TCsW7C2Ug9fH7cfRG9mbvx9o=
decrypted = AES.decrypt(encrypted, key)  # Super secret message

Если вы при расшифровке использовали неверный пароль, gem выбрасывал ошибку:

decrypted = AES.decrypt(encrypted, "Some other password") #=> aes.rb:76:in `final': bad decrypt (OpenSSL::Cipher::CipherError)

Ну, отлично. Что же могло пойти не так?
Читать полностью »

в 2:55, , рубрики: cli, ruby, run, un.rb

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

Intro

Относительно недавно искал способ в одну строчку запустить веб-сервер в текущей директории.

На просторах Stack Overflow нашел примерно такую команду:

ruby -run -e httpd -- -p 9090 [DIR]

Что же это за загадочная опция -run и почему ее нет в мануале?

Читать полностью »

Использование send для удобства, от безысходности и ради развлечения - 1
Один из методов библиотеки Sidekiq. Объяснение смайла

send в Ruby вызывает методы объектов по имени. Вот очевидный способ применения:

# До: явно используем присваивание. Неудобно, если полей много или они определяются в рантайме.
user.name = "Иван"
user.age = 29

# После: передаём имя атрибута параметром. Решает проблемы первого способа.
def set(field, value)
  send("#{field}=", value)
end
user.set(:name, "Иван")
user.set(:age, 29)

А ещё вы наверняка видели такие строки:

after_create :send_email

Да-да, коллбэки в рельсах внутри реализованы тоже с помощью send.

Читать полностью »

В Elixir’е есть концепция behaviours, или «поведенческих шаблонов», если угодно. Обратимся к официальной документации:

Протоколы — механизм, позволяющий реализовать полиморфизм в Elixir. Использование протокола доступно для любого типа данных, реализующего этот протокол.

О чем это вообще? Ну, сущности Elixir, или, как их иногда называют, «термы», неизменяемы. В Ruby мы привыкли определять методы на объектах, и эти методы просто изменяют объекты, как требуется. В Elixir’е это невозможно. Наверное, каждый, кто изучал ООП, разбирал стандартный пример, демонстрирующий полиморфизм: класс Animal, с подклассами, по разному определяющими метод sound:Читать полностью »

Для начала я приведу небольшой тестовый проект из трёх классов, проанализирую его покрытие с помощью гема SimpleCov, а напоследок немного поразмышляю о том, как анализ покрытия может приносить пользу проекту, и какие есть недостатки у Coverage в Ruby.

Анализ покрытия кода тестами в Ruby - 1

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

# Мама очень заботится о своём сыне, и не разрешает ему гулять,
# если он не надел шарф. А ещё она заботится о его успеваемости, поэтому если
# сын не сделал домашнюю работу, гулять ему она тоже не разрешит.
class Mother
  def permit_walk?(child)
    child.scarf_put_on && child.homework_done
  end
end

Читать полностью »

image Привет, Хаброжители! Совсем недавно мы перевели бестселлер Сэнди Метц.

Книга посвящена проектированию объектно-ориентированных программ. Это не учебник, а рассказ программиста о том, как следует создавать программный код. Книга научит вас, как скомпоновать программное обеспечение, чтобы его высокая продуктивность не снижалась ни через месяц, ни через год. В ней показано, как создаются приложения, которые могут пользоваться успехом сегодня и адаптироваться к требованиям будущего.

Внимательно изучив это руководство, вы сможете: • Понять, как писать на Ruby качественный код в духе ООП • Решать, что должно входить в состав класса Ruby • Не допускать тесной связи между объектами в тех случаях, когда требуется разграничить функциональность • Определять гибкие интерфейсы между объектами • Освоить утиную типизацию • Эффективно задействовать наследование, композицию и полиморфизм • Разрабатывать экономные тесты • Доводить до совершенства любой legacy-код Ruby.
Читать полностью »

image

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

Вступление

"Elixir — динамический, функциональный язык программирования, разработанный для создания масштабируемых и легко поддерживаемых систем." — elixir-lang.org

Используя Elixir для создания ваших приложений вы обязательно столкнётесь с Mix. Он станет вам незаменимым помощником, так как через него вы сможете выполнять такие команды как создание, сборка, тестирование и публикация приложений, а также управление зависимостями и многое другое. Если вы знакомы с Ruby, то этот инструмент очень похож на Bundler, RubyGems и Rake, вместе взятые. В двух словах Mix — это удобный инструмент, который поставляется с Elixir и выполняет не меньше задач, чем швейцарский нож.

Инициализация нового приложения

Читать полностью »

в 15:07, , рубрики: Elixir, erlang, Erlang/OTP, ruby, ruby on rails

RamblerElixir #1 - 1

8 декабря в 19:00 на Мансарде Rambler&Co состоится meetup Elixir разработчиков. Elixir — функциональный язык программирования c динамической типизацией для разработки распределённых, отказоустойчивых приложений, построенный на базе виртуальной машины Erlang (без GIL), имеет очень приятный синтаксис и низкий порог вхождения.
Читать полностью »

Это очередной перевод статьи про rails, в этот раз моей собственной. Статья носит развлекательный характер и предназначена для людей не знакомых с бэкендом и rails приложениями.

Оригинал статьи тут и картинки взяты там же.

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

Что же, этот мир очень велик и не каждый видел его край. Сейчас он также велик как наш, к счастью, в нем нет границ и с каждым днем он расширяется. Там появляются новые государства, возможно вы слышали о некоторых из них, например PhP или Python, в этих государствах появляются города (мы их называем приложения), а в городах жители (объекты и сущности).

Добро пожаловать в мир Ruby

Читать полностью »

Elixir и Ruby — не ссорьтесь. Взаимодействуйте! (ExPort-ErlPort) - 1

Наконец-то свершилось, я больше не разрабатываю приложения на Rails. Теперь Elixir — мой основной инструмент, и я рад этому.

Тем не менее всё ещё существует множество наработок в Ruby-мире, аналогов которых пока нет в Elixir. Чтобы обойти эту проблему, я решил выяснить могут ли оба мира взаимодействовать друг с другом. И ответ — да! Они могут.

Я попробую описать несколько способов, как это сделать.

Чтобы не смешивать всё в одну кучу, материал будет разбит на несколько статей, каждая из которых будет описывать только один способ. Первая — про ExPort / ErlPort.
Примечание: ExPort также позволяет взаимодействовать с Python.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js