lib/rspec_api_docs/formatter.rb in rspec-api-docs-0.1.0 vs lib/rspec_api_docs/formatter.rb in rspec-api-docs-0.2.0
- old
+ new
@@ -1,27 +1,65 @@
require 'rspec/core/formatters/base_formatter'
-require 'json'
+require 'rspec_api_docs'
require 'rspec_api_docs/formatter/resource'
-require 'rspec_api_docs/formatter/renderers/json_renderer'
+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 = []
+ @resources = {}
super args
end
+ # Initializes and stores {Resource}s.
+ #
+ # @return [void]
def example_passed(example_notification)
- return unless example_notification.example.metadata[METADATA_NAMESPACE]
- resources << Resource.new(example_notification.example)
+ 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)
- JSONRender.new(resources).render
+ 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