rspec-api-docs 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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