Sha256: 774ee8460a59d62bd01165c5c2e1738701f3bbf684a8f3780f3c6c533c85231b

Contents?: true

Size: 1.72 KB

Versions: 2

Compression:

Stored size: 1.72 KB

Contents

require 'pry'
require 'rake'
require 'rspec'
require 'json'
require 'rspec_api_docs/config'

module RspecApiDocs
  class RakeTask < ::Rake::TaskLib
    module RSpecMatchers
      extend RSpec::Matchers
    end

    attr_reader :name

    attr_accessor \
      :verbose,
      :pattern,
      :rspec_opts,
      :existing_file,
      :dir

    def initialize(name = nil, &block)
      @name = name || :'docs:ensure_updated'
      @verbose = true
      @pattern = 'spec/requests/**/*_spec.rb'
      @rspec_opts = []
      @existing_file = 'docs/index.json'

      block.call(self)

      define
    end

    private

    def define
      desc 'Ensure API docs are up to date'
      task name do
        @dir = Dir.mktmpdir

        rspec_task.run_task(verbose)

        configure_rspec

        RSpecMatchers.expect(generated).to RSpecMatchers.eq(existing)

        remove_dir
      end
    end

    def generated
      JSON.parse(File.read(Pathname.new(dir) + 'index.json'))
    end

    def existing
      JSON.parse(File.read(existing_file))
    end

    def rspec_task
      RSpec::Core::RakeTask.new.tap do |task|
        task.pattern = pattern
        task.rspec_opts = rspec_opts + [
          '--format RspecApiDocs::Formatter',
          '--order defined',
          "--require #{spec_helper.path}",
        ]
      end
    end

    def spec_helper
      tempfile = Tempfile.new(['shoebox', '.rb'])
      tempfile.write <<-EOF
        RspecApiDocs.configure do |config|
          config.output_dir = '#{dir}'
        end
      EOF
      tempfile.close
      tempfile
    end

    def configure_rspec
      RSpec.configure do |config|
        config.color = true
      end
    end

    def remove_dir
      FileUtils.remove_entry dir
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rspec-api-docs-0.8.0 lib/rspec_api_docs/rake_task.rb
rspec-api-docs-0.7.0 lib/rspec_api_docs/rake_task.rb