Sha256: fd6118aebf3e110c50b9a392550c5d61494ce674a7be464ae26695fd5625f91d

Contents?: true

Size: 1.64 KB

Versions: 6

Compression:

Stored size: 1.64 KB

Contents

require 'rspec/core/formatters/base_formatter'

require 'rspec_api_docs'
require 'rspec_api_docs/formatter/resource'
require 'rspec_api_docs/formatter/renderer/json_renderer'
require 'rspec_api_docs/formatter/renderer/raddocs_renderer'
require 'rspec_api_docs/formatter/renderer/slate_renderer'

module RspecApiDocs
  # Unknown renderer configured.
  UnknownRenderer = Class.new(BaseError)

  # The RSpec formatter.
  #
  # Usage:
  #
  #     rspec --format=RspecApiDocs::Formatter
  class Formatter < RSpec::Core::Formatters::BaseFormatter
    RSpec::Core::Formatters.register self, :example_passed, :close

    attr_reader :resources

    def initialize(*args)
      @resources = {}
      super args
    end

    # Initializes and stores {Resource}s.
    #
    # @return [void]
    def example_passed(example_notification)
      rspec_example = example_notification.example
      return unless rspec_example.metadata[METADATA_NAMESPACE]
      resource = Resource.new(rspec_example)
      resources[resource.name] ||= resource
      resources[resource.name].examples << Resource::Example.new(rspec_example)
    end

    # Calls the configured renderer with the stored {Resource}s.
    #
    # @return [void]
    def close(null_notification)
      renderer.new(resources.values).render
    end

    private

    def renderer
      value = RspecApiDocs.configuration.renderer

      case value
      when :json
        Renderer::JSONRenderer
      when :raddocs
        Renderer::RaddocsRenderer
      when :slate
        Renderer::SlateRenderer
      when Class
        value
      else
        raise UnknownRenderer, "unknown renderer #{value.inspect}"
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rspec-api-docs-0.7.0 lib/rspec_api_docs/formatter.rb
rspec-api-docs-0.6.0 lib/rspec_api_docs/formatter.rb
rspec-api-docs-0.5.0 lib/rspec_api_docs/formatter.rb
rspec-api-docs-0.4.0 lib/rspec_api_docs/formatter.rb
rspec-api-docs-0.3.0 lib/rspec_api_docs/formatter.rb
rspec-api-docs-0.2.0 lib/rspec_api_docs/formatter.rb