# frozen_string_literal: true

############################################################################## # Documentation ##############################################################################

namespace :documentation do

namespace :api do
  desc 'Generate API documentation markdown'
  task :blueprint do
    require 'rspec/core/rake_task'

    RSpec::Core::RakeTask.new(:api_docs) do |t|
      t.pattern    = 'spec/controllers/**/v1/**/*_spec.rb'
      t.rspec_opts = %w{
                       --format="Dox::Formatter"
                       --out="./docs/api/index.apib"
                       --order="defined"
                       --tag="dox"
                     }
                       .join(' ')
    end

    ::Rake::Task['api_docs'].invoke
  end

  task json: :blueprint do
    `apib2swagger --input='./docs/api/index.apib' --output='./docs/api/index.json'`
  end

  task yaml: :blueprint do
    command = <<~HEREDOC.tr("\n", ' ')
      apib2swagger
      --yaml
      --input='./docs/api/index.apib'
      --output='./docs/api/index.yaml'
    HEREDOC

    `#{command}`
  end

  task html: :json do
    `redoc-cli bundle --output='./docs/api/index.html' './docs/api/index.json'`
  end

  task preview: :html do
    `open './docs/api/index.html'`
  end

  task publish: :blueprint do
    command = <<~HEREDOC.tr("\n", ' ')
      apiary
      publish
      --path='./docs/api/apispec.apib'
      --api-name='#{::Rails.application.name}'
    HEREDOC

    `#{command}`
  end
end

end