# frozen_string_literal: true

require "bundler/gem_tasks"

require "rspec/core/rake_task"
RSpec::Core::RakeTask.new(:spec)

require "rubocop/rake_task"
RuboCop::RakeTask.new(:rubocop) do |task|
  task.options = %w[--parallel]
end

desc "update the rubocop todo config"
RuboCop::RakeTask.new("rubocop:config") do |task|
  task.options = %w[--auto-gen-config]
end

desc "Generate test protobuf stubs"
task :gen_test_proto do
  system "grpc_tools_ruby_protoc --ruby_out=. --grpc_out=. spec/support/grpc_service/test.proto"

  # Fix require statement to use require_relative for test environment.
  # This is a workaround for https://github.com/grpc/grpc/issues/29027.
  services_file = "spec/support/grpc_service/test_services_pb.rb"
  content = File.read(services_file)
  content.gsub!(%r{^require ['"]spec/support/grpc_service/test_pb['"]$}, "require_relative 'test_pb'")
  File.write(services_file, content)
end

task :fix => ["rubocop:autocorrect"]

task :verify => %w[spec rubocop]

task :default => %w[verify build]

desc "Start an IRB console with gem pre-loaded"
task :console do
  $LOAD_PATH.unshift(File.expand_path("lib", __dir__))
  require "irb"
  require "gitlab-labkit"
  ARGV.clear
  IRB.start
end
