rspec-api-docs 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eee6ccdbceb3b61271298301b471e3d09a9b7edb
4
- data.tar.gz: 8a1e3b753359755cde4ca89586ffd5f3163d3d4e
3
+ metadata.gz: 921c43cbac7e32c779901db4a5519ad6b5fefbc0
4
+ data.tar.gz: 68cb6ae49fbf805cb4786ef8494a9466693ea143
5
5
  SHA512:
6
- metadata.gz: 97555c1200f96e8370b333fc9ff86e5ffb011a782fa51aab4231d74527d1e0d21484bad7326233b7248c3cedb816fc29e1fdc91d851704810ea2a07216e2c98c
7
- data.tar.gz: 6f93f8c19a225543f023a737e52a0ac8c6829c7fd62d97ed8f62b8c3e21d5697599e7594f73f41e51e3d5b8be6e15bad7ed1f57ef6be23899577b81fedb44cc5
6
+ metadata.gz: 97c817ca345c1a021d701fea14a7881ff58f6b57f283ae413067287ff0b0dc7ebc46b9e8fd08761c79f84437b9a4e071b4a02a5f4154178740df3d064fec50ca
7
+ data.tar.gz: f3ce3df2074ed3032314b78d2c1ec6cdd27f8fccbf31cee4431f98032662bfba8b693cdd8408496de1b3e155e7b082bdbc85de4750e5cdaae66ab63e80fec004
@@ -5,7 +5,7 @@ require 'rspec_api_docs/after/type_checker'
5
5
  module RspecApiDocs
6
6
  UndocumentedParameter = Class.new(BaseError)
7
7
 
8
- class After
8
+ module After
9
9
  Hook = -> (example) do
10
10
  metadata = example.metadata[METADATA_NAMESPACE]
11
11
  return unless metadata
@@ -1,5 +1,5 @@
1
1
  module RspecApiDocs
2
- class After
2
+ module After
3
3
  class TypeChecker
4
4
  UnknownType = Class.new(BaseError)
5
5
  TypeError = Class.new(BaseError)
@@ -1,6 +1,7 @@
1
1
  require 'rspec/core/formatters/base_formatter'
2
2
 
3
3
  require 'rspec_api_docs'
4
+ require 'rspec_api_docs/resource_collection'
4
5
  require 'rspec_api_docs/formatter/resource'
5
6
  require 'rspec_api_docs/formatter/renderer/json_renderer'
6
7
  require 'rspec_api_docs/formatter/renderer/raddocs_renderer'
@@ -18,10 +19,10 @@ module RspecApiDocs
18
19
  class Formatter < RSpec::Core::Formatters::BaseFormatter
19
20
  RSpec::Core::Formatters.register self, :example_passed, :close
20
21
 
21
- attr_reader :resources
22
+ attr_reader :renderer
22
23
 
23
- def initialize(*args)
24
- @resources = {}
24
+ def initialize(*args, renderer: default_renderer)
25
+ @renderer = renderer
25
26
  super args
26
27
  end
27
28
 
@@ -31,21 +32,23 @@ module RspecApiDocs
31
32
  def example_passed(example_notification)
32
33
  rspec_example = example_notification.example
33
34
  return unless rspec_example.metadata[METADATA_NAMESPACE]
34
- resource = Resource.new(rspec_example)
35
- resources[resource.name] ||= resource
36
- resources[resource.name].add_example Resource::Example.new(rspec_example)
35
+ resource_collection.add_example(rspec_example)
37
36
  end
38
37
 
39
38
  # Calls the configured renderer with the stored {Resource}s.
40
39
  #
41
40
  # @return [void]
42
41
  def close(null_notification)
43
- renderer.new(resources.values.sort_by { |resource| [resource.precedence, resource.name].join }).render
42
+ renderer.new(resource_collection.all).render
44
43
  end
45
44
 
46
45
  private
47
46
 
48
- def renderer
47
+ def resource_collection
48
+ @resource_collection ||= ResourceCollection.new
49
+ end
50
+
51
+ def default_renderer
49
52
  value = RspecApiDocs.configuration.renderer
50
53
 
51
54
  case value
@@ -4,6 +4,8 @@ require 'rspec_api_docs/formatter/resource/response_field'
4
4
 
5
5
  module RspecApiDocs
6
6
  class Resource
7
+ MAX_PRECEDENCE = 9_999
8
+
7
9
  attr_reader :rspec_example
8
10
 
9
11
  def initialize(rspec_example)
@@ -17,7 +19,7 @@ module RspecApiDocs
17
19
  #
18
20
  # @return [String]
19
21
  def name
20
- metadata.fetch(:resource_name, rspec_example.metadata[:example_group][:description])
22
+ metadata.fetch(:resource_name) { rspec_example.metadata[:example_group][:description] }
21
23
  end
22
24
 
23
25
  # The description of the resource.
@@ -33,7 +35,7 @@ module RspecApiDocs
33
35
  #
34
36
  # @return [Array<Example>]
35
37
  def examples
36
- @examples.sort_by { |example| [example.precedence, example.name].join }
38
+ @examples.sort_by { |example| [example.precedence, example.name] }
37
39
  end
38
40
 
39
41
  # Add an example
@@ -43,9 +45,16 @@ module RspecApiDocs
43
45
  @examples << example
44
46
  end
45
47
 
46
- # @return [String, nil]
48
+ # @return [Integer]
47
49
  def precedence
48
- metadata[:resource_precedence]
50
+ @precedence ||= metadata.fetch(:resource_precedence, MAX_PRECEDENCE)
51
+ end
52
+
53
+ # Set the resource precedence
54
+ #
55
+ # @return [void]
56
+ def precedence=(value)
57
+ @precedence = value
49
58
  end
50
59
 
51
60
  def inspect
@@ -4,6 +4,8 @@ require 'rspec_api_docs/formatter/resource/example/deep_hash_set'
4
4
  module RspecApiDocs
5
5
  class Resource
6
6
  class Example
7
+ MAX_PRECEDENCE = 9_999
8
+
7
9
  attr_reader :example
8
10
 
9
11
  def initialize(example)
@@ -90,13 +92,13 @@ module RspecApiDocs
90
92
  metadata.fetch(:note, {})
91
93
  end
92
94
 
93
- # @return [String, nil]
95
+ # @return [Integer]
94
96
  def precedence
95
- metadata[:example_precedence]
97
+ metadata.fetch(:example_precedence, MAX_PRECEDENCE)
96
98
  end
97
99
 
98
100
  def inspect
99
- "#<RspecApiDocs::Resource::Example #{name.inspect}>"
101
+ "#<RspecApiDocs::Resource::Example #{name.inspect}, precedence: #{precedence.inspect}>"
100
102
  end
101
103
 
102
104
  private
@@ -0,0 +1,25 @@
1
+ module RspecApiDocs
2
+ class ResourceCollection
3
+ def initialize(resources = {})
4
+ @resources = resources
5
+ end
6
+
7
+ def all
8
+ @resources.values.sort_by { |resource| [resource.precedence, resource.name] }
9
+ end
10
+
11
+ def add_example(rspec_example)
12
+ resource = Resource.new(rspec_example)
13
+
14
+ existing_resource = @resources[resource.name]
15
+ if existing_resource
16
+ existing_resource.precedence = [existing_resource.precedence, resource.precedence].min
17
+ resource = existing_resource
18
+ else
19
+ @resources[resource.name] = resource
20
+ end
21
+
22
+ resource.add_example Resource::Example.new(rspec_example)
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module RspecApiDocs
2
- VERSION = '0.9.0'
2
+ VERSION = '0.10.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-api-docs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Odin Dutton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-09 00:00:00.000000000 Z
11
+ date: 2017-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -154,6 +154,7 @@ files:
154
154
  - lib/rspec_api_docs/formatter/resource/parameter.rb
155
155
  - lib/rspec_api_docs/formatter/resource/response_field.rb
156
156
  - lib/rspec_api_docs/rake_task.rb
157
+ - lib/rspec_api_docs/resource_collection.rb
157
158
  - lib/rspec_api_docs/version.rb
158
159
  - rspec-api-docs.gemspec
159
160
  homepage: https://github.com/twe4ked