Хотите расти как разработчик и найти крутую работу? Не протирайте штаны — займитесь Open Source проектами. Так легче всего попасть в лучшие команды разработчиков и положить себе в резюме настоящий проект, вместо нелепых «примеров кода». Но найти подходящий проект для участия сложно. Начинаются лень и отговорки, а за ними — отсутствие профессионального роста, критики по-настоящему крутых программистов, уныние и застой.
На Cult of Martians мы собираем интересные задачи для современных веб-программистов. Можно выбрать подходящую по сложности, продолжительности и специализации. Задачи не выдуманы «из воздуха» — каждая решает насущную проблему, и решить ее можно через создание нового Open Source проекта или улучшение существующего. Решайте задачи, прокачивайтесь, присылайте решение на оценку. Лучших могут пригласить к себе на работу компании, программистам которых понравится ваше решен ие.
Для уверенных в себе, задача на неделю
RuboCop RSpec — Ruby gem, проверяющий каноничность и соответствие стилю код тестов, написанных с использованием фреймворка RSpec. Многие проверки ориентируются на стандартные методы из RSpec DSL (например, it
, context
и т.д.). Этого недостаточно, если пользователь определяет псевдонимы (aliases) или использует сторонние гемы, расширяющие базовый функционал RSpec.
Например, если пределить псевдоним к it
, story
, то RuboCop RSpec может ошибочно определить группу примеров (example group) как не содержащую ни одного теста.
Необходимо добавить возможность расширять набор распознаваемых RuboCop RSpec методов через YML конфигурацию и обновить существующие копы.
Польза: познакомиться с работой расширений RuboCop, прокачаться в Ruby, принести пользу сообществу.
Пусть в spec/spec_helper.rb указано:
RSpec.configure do |config|
config.alias_example_to :story
config.alias_example_group_to :storybook
config.alias_it_behaves_like_to :as_in_story
end
В проекте есть спек:
# spec/stories/horror_spec.rb
RSpec.describe Horror do
storybook "in the woods" do
story "there was a dark figure" do
# ...
end
end
context "in the open" do
story "she appeared out of thin air" do
# ...
end
end
as_in_story "she stared with her empty eye wells"
end
Необходимо добавить конфигурацонные опции в .rubocop.yml
таким образом, чтобы копы узнали, что в проекте используется дополнительный DSL.
Например:
AllCops:
RSpec:
ExampleAlias:
- story
ExampleGroupAlias:
- storybook
ItBehavesLikeAlias:
- as_in_story
HookAlias:
before:
- setup
MatcherAlias:
be_sorted_by: a_list_sorted_by
NegatedMatcher:
change: not_change
Это решает реальные задачи, например, проверки спеков Pundit (метод permissions
для группы тестов), failed
/succeed
из Action Policy, setup
(псевдоним для before
) из RSpec Rails, is_able_to
(псевдоним для it_behaves_like
) в CanCanCan.
Подробнее ознакомиться с задачей можно здесь и в связанных тикетах.
Не делать сразу все конфигурационные опции, начать с какой-то одной, например, HookAlias. Утвердить прототип с мейнтейнерами RuboCop RSpec.
Можно посмотреть в качестве примера на попытку реализации здесь.
Стоит подумать над тем, что .rubocop.yml
файлы могут располагаться в разных директориях, таким образом разные конфигурации должны по разому влиять на проверяемые файлы.