RB Ruby  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Gems, Bundler и зависимости

Тест «Gems, Bundler и зависимости» проверяет чтение кода, объяснение причин, поиск скрытых рисков, выбор исправления и работу с граничными сценариями. В нём 25 вопросов, 14 заданий с Ruby-кодом и 5 тематических шкал.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 70 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 5 тематических результатов и разбор всех ответов.
Вопрос 1 из 25
Какое описание результата точно соответствует показанному коду «Описание зависимостей в Gemfile»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Описание зависимостей в Gemfile
# Проследите выполнение и выберите точный результат.
source 'https://rubygems.org'

gem 'rack', '~> 3.1'
group :test do
  gem 'rspec'
end
Вопрос 2 из 25
Проследите выполнение фрагмента. Какой результат верен для темы «Lock-файл»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Lock-файл
# Проследите выполнение и выберите точный результат.
lock = <<~LOCK
  GEM
    specs:
      rack (3.1.8)
  DEPENDENCIES
    rack (~> 3.1)
  BUNDLED WITH
     2.6.2
LOCK
puts lock
Вопрос 3 из 25
Какой вариант верно описывает состояние объектов после выполнения кода «Семантическое версионирование»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Семантическое версионирование
# Проследите выполнение и выберите точный результат.
require 'rubygems'
req = Gem::Requirement.new('~> 2.3.1')
%w[2.3.9 2.4.0 3.0.0].each do |v|
  p [v, req.satisfied_by?(Gem::Version.new(v))]
end
Вопрос 4 из 25
Что произойдёт после последней строки в примере по теме «Публикация gem»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Публикация gem
# Проследите выполнение и выберите точный результат.
Gem::Specification.new do |s|
  s.name = 'tiny_report'
  s.version = '1.2.0'
  s.files = Dir['lib/**/*.rb', 'README.md']
  s.required_ruby_version = '>= 3.2'
  s.add_dependency 'json', '>= 2.7'
end
Вопрос 5 из 25
Как следует прочитать результат показанного примера «Читаемость решения»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Читаемость решения
# Проследите выполнение и выберите точный результат.
# lib/report.rb
require 'json'

class Report
  def dump(data)
    JSON.generate(data)
  end
end
p Report.new.dump(ok: true)
Вопрос 6 из 25
Какой рабочий сбой вероятнее всего связан именно с механизмом «Описание зависимостей в Gemfile»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Описание зависимостей в Gemfile
# Обычный запуск проходит. Найдите скрытый риск.
source 'https://rubygems.org'

gem 'rack', '~> 3.1'
group :test do
  gem 'rspec'
end
Вопрос 7 из 25
Какой дефект может проявиться на границе показанного сценария «Lock-файл»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Lock-файл
# Обычный запуск проходит. Найдите скрытый риск.
lock = <<~LOCK
  GEM
    specs:
      rack (3.1.8)
  DEPENDENCIES
    rack (~> 3.1)
  BUNDLED WITH
     2.6.2
LOCK
puts lock
Вопрос 8 из 25
Какое допущение делает этот код по теме «Семантическое версионирование» ненадёжным? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Семантическое версионирование
# Обычный запуск проходит. Найдите скрытый риск.
require 'rubygems'
req = Gem::Requirement.new('~> 2.3.1')
%w[2.3.9 2.4.0 3.0.0].each do |v|
  p [v, req.satisfied_by?(Gem::Version.new(v))]
end
Вопрос 9 из 25
Базовый пример выглядит корректно. Что всё же нарушает контракт в блоке «Публикация gem»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Публикация gem
# Обычный запуск проходит. Найдите скрытый риск.
Gem::Specification.new do |s|
  s.name = 'tiny_report'
  s.version = '1.2.0'
  s.files = Dir['lib/**/*.rb', 'README.md']
  s.required_ruby_version = '>= 3.2'
  s.add_dependency 'json', '>= 2.7'
end
Вопрос 10 из 25
Что может сломаться при переносе этого решения «Читаемость решения» в рабочую систему? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Читаемость решения
# Обычный запуск проходит. Найдите скрытый риск.
# lib/report.rb
require 'json'

class Report
  def dump(data)
    JSON.generate(data)
  end
end
p Report.new.dump(ok: true)
Вопрос 11 из 25
Какое правило остаётся верным, даже если вход и порядок вызовов изменятся, в теме «Описание зависимостей в Gemfile»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 12 из 25
Какой механизм объясняет и обычный, и граничный сценарий «Lock-файл»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 13 из 25
На какой контракт языка или библиотеки опирается результат блока «Семантическое версионирование»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 14 из 25
Как сформулировать правило блока «Публикация gem» без лишних обещаний? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 15 из 25
Какой принцип темы «Читаемость решения» переносится на другие примеры того же типа? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 16 из 25
Какой вариант решения «Описание зависимостей в Gemfile» останется понятным при сопровождении? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Описание зависимостей в Gemfile
# Выберите изменение, которое исправляет причину.
source 'https://rubygems.org'

gem 'rack', '~> 3.1'
group :test do
  gem 'rspec'
end
Вопрос 17 из 25
Какой рефакторинг делает контракт блока «Lock-файл» явным и проверяемым? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Lock-файл
# Выберите изменение, которое исправляет причину.
lock = <<~LOCK
  GEM
    specs:
      rack (3.1.8)
  DEPENDENCIES
    rack (~> 3.1)
  BUNDLED WITH
     2.6.2
LOCK
puts lock
Вопрос 18 из 25
Что следует изменить в решении «Семантическое версионирование», чтобы закрыть исходный риск? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Семантическое версионирование
# Выберите изменение, которое исправляет причину.
require 'rubygems'
req = Gem::Requirement.new('~> 2.3.1')
%w[2.3.9 2.4.0 3.0.0].each do |v|
  p [v, req.satisfied_by?(Gem::Version.new(v))]
end
Вопрос 19 из 25
Как исправить реализацию «Публикация gem» без новой скрытой зависимости? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Публикация gem
# Выберите изменение, которое исправляет причину.
Gem::Specification.new do |s|
  s.name = 'tiny_report'
  s.version = '1.2.0'
  s.files = Dir['lib/**/*.rb', 'README.md']
  s.required_ruby_version = '>= 3.2'
  s.add_dependency 'json', '>= 2.7'
end
Вопрос 20 из 25
Какой рефакторинг делает контракт блока «Читаемость решения» явным и проверяемым? Правильным считается только полностью согласованное утверждение.
Вопрос 21 из 25
Что следует добавить в набор проверок по теме «Описание зависимостей в Gemfile», чтобы поймать редкий отказ? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 22 из 25
Какой случай покажет, что исправление «Lock-файл» не держится на удачном входе? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 23 из 25
Чем дополнить базовый тест, чтобы проверить ограничение темы «Семантическое версионирование»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 24 из 25
Какой регрессионный пример обнаружит ошибочное обобщение в теме «Публикация gem»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 25 из 25
Что нужно воспроизвести отдельно перед выпуском изменения «Читаемость решения»? Оценивайте ответ целиком: обе части утверждения должны быть точными.

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу