rspec_api_documentation 0.6.0 → 0.7.1

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.
@@ -21,14 +21,18 @@ module RspecApiDocumentation
21
21
  process :delete, *args
22
22
  end
23
23
 
24
+ def response_status
25
+ status
26
+ end
27
+
24
28
  private
25
29
 
26
- def process(method, path, params = {})
27
- do_request(method, path, params)
28
- document_example(method.to_s.upcase, path, params)
30
+ def process(method, path, params = {}, headers ={})
31
+ do_request(method, path, params, headers)
32
+ document_example(method.to_s.upcase, path)
29
33
  end
30
34
 
31
- def document_example(method, path, params)
35
+ def document_example(method, path)
32
36
  return unless metadata[:document]
33
37
 
34
38
  input = last_request.env["rack.input"]
@@ -63,12 +67,8 @@ module RspecApiDocumentation
63
67
  Hash[arrays]
64
68
  end
65
69
 
66
- def headers(method, path, params)
67
- if options && options[:headers]
68
- options[:headers]
69
- else
70
- {}
71
- end
70
+ def headers(method, path, params, request_headers)
71
+ request_headers || {}
72
72
  end
73
73
  end
74
74
  end
@@ -0,0 +1,18 @@
1
+ require 'rspec_api_documentation/json_writer'
2
+
3
+ module RspecApiDocumentation
4
+ class CombinedJsonWriter
5
+ def self.write(index, configuration)
6
+ File.open(configuration.docs_dir.join("combined.json"), "w+") do |f|
7
+ examples = []
8
+ index.examples.each do |rspec_example|
9
+ examples << JsonExample.new(rspec_example, configuration).to_json
10
+ end
11
+
12
+ f.write "["
13
+ f.write examples.join(",")
14
+ f.write "]"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,100 @@
1
+ module RspecApiDocumentation
2
+ class CombinedTextWriter
3
+ def self.write(index, configuration)
4
+ index.examples.each do |rspec_example|
5
+ example = CombinedTextExample.new(rspec_example)
6
+ FileUtils.mkdir_p(configuration.docs_dir.join(example.resource_name))
7
+ File.open(configuration.docs_dir.join(example.resource_name, "index.txt"), "a+") do |f|
8
+ f.print example.description
9
+ f.print example.parameters
10
+
11
+ example.requests.each do |request, response|
12
+ f.puts "Request:"
13
+ f.puts request
14
+ f.puts
15
+ f.puts "Response:"
16
+ f.puts response
17
+ end
18
+
19
+ unless rspec_example == index.examples.last
20
+ f.puts
21
+ f.puts
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ def self.format_hash(hash, separator="=")
28
+ hash.sort_by { |k, v| k }.inject("") do |out, (k, v)|
29
+ out << " #{k}#{separator}#{v}\n"
30
+ end
31
+ end
32
+ end
33
+
34
+ class CombinedTextExample
35
+ attr_reader :example
36
+
37
+ def initialize(example)
38
+ @example = example
39
+ end
40
+
41
+ def resource_name
42
+ example.resource_name.downcase.gsub(/\s+/, '_')
43
+ end
44
+
45
+ def description
46
+ example.description + "\n" + "-" * example.description.length + "\n\n"
47
+ end
48
+
49
+ def parameters
50
+ return "" unless example.metadata[:parameters]
51
+ "Parameters:\n" + example.metadata[:parameters].inject("") do |out, parameter|
52
+ out << " * #{parameter[:name]} - #{parameter[:description]}\n"
53
+ end + "\n"
54
+ end
55
+
56
+ def requests
57
+ return [] unless example.metadata[:requests]
58
+ example.metadata[:requests].map do |request|
59
+ [format_request(request), format_response(request)]
60
+ end
61
+ end
62
+
63
+ private
64
+ def format_request(request)
65
+ [
66
+ [
67
+ " #{request[:request_method]} #{request[:request_path]}",
68
+ format_hash(request[:request_headers], ": ")
69
+ ],
70
+ [
71
+ format_string(request[:request_body]) || format_hash(request[:request_query_parameters])
72
+ ]
73
+ ].map { |x| x.compact.join("\n") }.reject(&:blank?).join("\n\n") + "\n"
74
+ end
75
+
76
+ def format_response(request)
77
+ [
78
+ [
79
+ " Status: #{request[:response_status]} #{request[:response_status_text]}",
80
+ format_hash(request[:response_headers], ": ")
81
+ ],
82
+ [
83
+ format_string(request[:response_body])
84
+ ]
85
+ ].map { |x| x.compact.join("\n") }.reject(&:blank?).join("\n\n") + "\n"
86
+ end
87
+
88
+ def format_string(string)
89
+ return unless string
90
+ string.split("\n").map { |line| " #{line}" }.join("\n")
91
+ end
92
+
93
+ def format_hash(hash, separator="=")
94
+ return unless hash
95
+ hash.sort_by { |k, v| k }.map do |k, v|
96
+ " #{k}#{separator}#{v}"
97
+ end.join("\n")
98
+ end
99
+ end
100
+ end
@@ -17,6 +17,7 @@ module RspecApiDocumentation
17
17
  subconfig = self.class.new(self)
18
18
  subconfig.filter = name
19
19
  subconfig.docs_dir = self.docs_dir.join(name.to_s)
20
+ subconfig.url_prefix = "#{self.url_prefix}/#{name}"
20
21
  yield subconfig
21
22
  groups << subconfig
22
23
  end
@@ -57,6 +58,7 @@ module RspecApiDocumentation
57
58
 
58
59
  add_setting :curl_host, :default => nil
59
60
  add_setting :keep_source_order, :default => false
61
+ add_setting :api_name, :default => "API Documentation"
60
62
 
61
63
  def settings
62
64
  @settings ||= {}
@@ -4,7 +4,7 @@ module RspecApiDocumentation::DSL
4
4
  module Endpoint
5
5
  extend ActiveSupport::Concern
6
6
 
7
- delegate :response_headers, :status, :response_body, :to => :client
7
+ delegate :response_headers, :status, :response_status, :response_body, :to => :client
8
8
 
9
9
  module ClassMethods
10
10
  def example_request(description, params = {}, &block)
@@ -41,7 +41,7 @@ module RspecApiDocumentation::DSL
41
41
  params_or_body = respond_to?(:raw_post) ? raw_post : params
42
42
  end
43
43
 
44
- client.send(method, path_or_query, params_or_body)
44
+ client.send(method, path_or_query, params_or_body, headers)
45
45
  end
46
46
 
47
47
  def query_string
@@ -61,6 +61,10 @@ module RspecApiDocumentation::DSL
61
61
  parameters
62
62
  end
63
63
 
64
+ def headers
65
+ example.metadata[:headers]
66
+ end
67
+
64
68
  def method
65
69
  example.metadata[:method]
66
70
  end
@@ -35,6 +35,10 @@ module RspecApiDocumentation::DSL
35
35
  parameters.push(options.merge(:name => name.to_s, :description => description))
36
36
  end
37
37
 
38
+ def header(name, value)
39
+ headers[name] = value
40
+ end
41
+
38
42
  def required_parameters(*names)
39
43
  names.each do |name|
40
44
  param = parameters.find { |param| param[:name] == name.to_s }
@@ -67,6 +71,14 @@ module RspecApiDocumentation::DSL
67
71
  metadata[:parameters]
68
72
  end
69
73
 
74
+ def headers
75
+ metadata[:headers] ||= {}
76
+ if superclass_metadata && metadata[:headers].equal?(superclass_metadata[:headers])
77
+ metadata[:headers] = Marshal.load(Marshal.dump(superclass_metadata[:headers]))
78
+ end
79
+ metadata[:headers]
80
+ end
81
+
70
82
  def parameter_keys
71
83
  parameters.map { |param| param[:name] }
72
84
  end
@@ -14,6 +14,15 @@ module RspecApiDocumentation
14
14
  headers
15
15
  end
16
16
 
17
+ def headers_to_env(headers)
18
+ headers.inject({}) do |hsh, (k, v)|
19
+ new_key = k.upcase.gsub("-", "_")
20
+ new_key = "HTTP_#{new_key}" unless new_key == "CONTENT_TYPE"
21
+ hsh[new_key] = v
22
+ hsh
23
+ end
24
+ end
25
+
17
26
  def format_headers(headers)
18
27
  headers.map do |key, value|
19
28
  "#{key}: #{value}"
@@ -35,6 +35,10 @@ module RspecApiDocumentation
35
35
  self.template_path = configuration.template_path
36
36
  end
37
37
 
38
+ def api_name
39
+ @configuration.api_name
40
+ end
41
+
38
42
  def sections
39
43
  IndexWriter.sections(examples, @configuration)
40
44
  end
@@ -42,8 +42,8 @@ module RspecApiDocumentation
42
42
 
43
43
  protected
44
44
 
45
- def do_request(method, path, params)
46
- self.last_response = access_token.send(method, "http://example.com#{path}", :body => params, :header => headers(method, path, params))
45
+ def do_request(method, path, params, request_headers)
46
+ self.last_response = access_token.send(method, "http://example.com#{path}", :body => params, :header => headers(method, path, params, request_headers))
47
47
  end
48
48
 
49
49
  class ProxyApp < Struct.new(:client, :app)
@@ -34,8 +34,12 @@ module RspecApiDocumentation
34
34
 
35
35
  protected
36
36
 
37
- def do_request(method, path, params)
38
- rack_test_session.send(method, path, params, headers(method, path, params))
37
+ def do_request(method, path, params, request_headers)
38
+ rack_test_session.send(method, path, params, headers(method, path, params, request_headers))
39
+ end
40
+
41
+ def headers(*args)
42
+ headers_to_env(super)
39
43
  end
40
44
 
41
45
  private
@@ -35,6 +35,10 @@ module RspecApiDocumentation
35
35
  self.template_path = configuration.template_path
36
36
  end
37
37
 
38
+ def api_name
39
+ @configuration.api_name
40
+ end
41
+
38
42
  def sections
39
43
  IndexWriter.sections(examples, @configuration)
40
44
  end
@@ -28,6 +28,8 @@ module RspecApiDocumentation
28
28
  autoload :WurlWriter
29
29
  autoload :JsonWriter
30
30
  autoload :IndexWriter
31
+ autoload :CombinedTextWriter
32
+ autoload :CombinedJsonWriter
31
33
  autoload :Curl
32
34
 
33
35
  def self.configuration
data/lib/tasks/docs.rake CHANGED
@@ -1,9 +1,7 @@
1
1
  require 'rspec/core/rake_task'
2
2
 
3
- if Rails.env.test? || Rails.env.development?
4
- desc 'Generate API request documentation from API specs'
5
- RSpec::Core::RakeTask.new('docs:generate') do |t|
6
- t.pattern = 'spec/acceptance/**/*_spec.rb'
7
- t.rspec_opts = ["--format RspecApiDocumentation::ApiFormatter"]
8
- end
3
+ desc 'Generate API request documentation from API specs'
4
+ RSpec::Core::RakeTask.new('docs:generate') do |t|
5
+ t.pattern = 'spec/acceptance/**/*_spec.rb'
6
+ t.rspec_opts = ["--format RspecApiDocumentation::ApiFormatter"]
9
7
  end
@@ -2,15 +2,15 @@
2
2
  <html>
3
3
  <head>
4
4
  <title>{{resource_name}} API</title>
5
- <link rel="stylesheet" href="/{{url_prefix}}/assets/stylesheets/bootstrap.css"/>
6
- <link rel="stylesheet" href="/{{url_prefix}}/assets/stylesheets/codemirror.css"/>
7
- <link rel="stylesheet" href="/{{url_prefix}}/assets/stylesheets/application.css"/>
8
- <script src="/{{url_prefix}}/assets/javascripts/jquery-1-7-2.js"></script>
9
- <script src="/{{url_prefix}}/assets/javascripts/codemirror.js"></script>
10
- <script src="/{{url_prefix}}/assets/javascripts/mode/css/css.js"></script>
11
- <script src="/{{url_prefix}}/assets/javascripts/mode/htmlmixed/htmlmixed.js"></script>
12
- <script src="/{{url_prefix}}/assets/javascripts/mode/javascript/javascript.js"></script>
13
- <script src="/{{url_prefix}}/assets/javascripts/mode/xml/xml.js"></script>
5
+ <link rel="stylesheet" href="{{url_prefix}}/assets/stylesheets/bootstrap.css"/>
6
+ <link rel="stylesheet" href="{{url_prefix}}/assets/stylesheets/codemirror.css"/>
7
+ <link rel="stylesheet" href="{{url_prefix}}/assets/stylesheets/application.css"/>
8
+ <script src="{{url_prefix}}/assets/javascripts/jquery-1-7-2.js"></script>
9
+ <script src="{{url_prefix}}/assets/javascripts/codemirror.js"></script>
10
+ <script src="{{url_prefix}}/assets/javascripts/mode/css/css.js"></script>
11
+ <script src="{{url_prefix}}/assets/javascripts/mode/htmlmixed/htmlmixed.js"></script>
12
+ <script src="{{url_prefix}}/assets/javascripts/mode/javascript/javascript.js"></script>
13
+ <script src="{{url_prefix}}/assets/javascripts/mode/xml/xml.js"></script>
14
14
  <script>
15
15
  function mirror(textarea, contentType, options) {
16
16
  $textarea = $(textarea);
@@ -108,7 +108,7 @@
108
108
 
109
109
  {{# request_body }}
110
110
  <h4>Body</h4>
111
- <div class="request body" data-content-type="{{ response_content_type }}"><textarea>{{{ request_body }}}</textarea></div>
111
+ <div class="request body" data-content-type="{{ request_content_type }}"><textarea>{{{ request_body }}}</textarea></div>
112
112
  {{/ request_body }}
113
113
 
114
114
  {{# curl }}
@@ -124,7 +124,7 @@
124
124
  <pre class="response status">{{ response_status }} {{ response_status_text}}</pre>
125
125
  {{# response_body }}
126
126
  <h4>Body</h4>
127
- <div class="response body" data-content-type="{{ request_content_type }}"><textarea>{{{ response_body }}}</textarea></div>
127
+ <div class="response body" data-content-type="{{ response_content_type }}"><textarea>{{{ response_body }}}</textarea></div>
128
128
  {{/ response_body }}
129
129
  {{/ response_status }}
130
130
  {{/ requests }}
@@ -1,12 +1,12 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>API Documentation</title>
5
- <link rel="stylesheet" href="/{{ url_prefix }}/assets/stylesheets/bootstrap.css"/>
4
+ <title>{{ api_name }}</title>
5
+ <link rel="stylesheet" href="{{ url_prefix }}/assets/stylesheets/bootstrap.css"/>
6
6
  </head>
7
7
  <body>
8
8
  <div class="container">
9
- <h1>API Documentation</h1>
9
+ <h1>{{ api_name }}</h1>
10
10
 
11
11
  {{# sections }}
12
12
  <div class="article">
@@ -15,7 +15,7 @@
15
15
  <ul>
16
16
  {{# examples }}
17
17
  <li>
18
- <a href="/{{ url_prefix }}{{ dirname }}/{{ filename }}">{{ description }}</a>
18
+ <a href="{{ url_prefix }}/{{ dirname }}/{{ filename }}">{{ description }}</a>
19
19
  </li>
20
20
  {{/ examples }}
21
21
  </ul>
@@ -1,19 +1,19 @@
1
1
  <!DOCTYPE html>
2
2
  <head>
3
3
  <title>{{resource_name}} API</title>
4
- <link rel="stylesheet" href="/{{url_prefix}}/assets/stylesheets/bootstrap.css"/>
5
- <link rel="stylesheet" href="/{{url_prefix}}/assets/stylesheets/codemirror.css"/>
6
- <link rel="stylesheet" href="/{{url_prefix}}/assets/stylesheets/application.css"/>
7
- <script src="/{{url_prefix}}/assets/javascripts/jquery-1-7-2.js"></script>
8
- <script src="/{{url_prefix}}/assets/javascripts/jquery-livequery.js"></script>
9
- <script src="/{{url_prefix}}/assets/javascripts/jquery-base64.js"></script>
10
- <script src="/{{url_prefix}}/assets/javascripts/jquery-ui-1-8-16-min.js"></script>
11
- <script src="/{{url_prefix}}/assets/javascripts/codemirror.js"></script>
12
- <script src="/{{url_prefix}}/assets/javascripts/mode/css/css.js"></script>
13
- <script src="/{{url_prefix}}/assets/javascripts/mode/htmlmixed/htmlmixed.js"></script>
14
- <script src="/{{url_prefix}}/assets/javascripts/mode/javascript/javascript.js"></script>
15
- <script src="/{{url_prefix}}/assets/javascripts/mode/xml/xml.js"></script>
16
- <script src="/{{url_prefix}}/assets/javascripts/application.js"></script>
4
+ <link rel="stylesheet" href="{{url_prefix}}/assets/stylesheets/bootstrap.css"/>
5
+ <link rel="stylesheet" href="{{url_prefix}}/assets/stylesheets/codemirror.css"/>
6
+ <link rel="stylesheet" href="{{url_prefix}}/assets/stylesheets/application.css"/>
7
+ <script src="{{url_prefix}}/assets/javascripts/jquery-1-7-2.js"></script>
8
+ <script src="{{url_prefix}}/assets/javascripts/jquery-livequery.js"></script>
9
+ <script src="{{url_prefix}}/assets/javascripts/jquery-base64.js"></script>
10
+ <script src="{{url_prefix}}/assets/javascripts/jquery-ui-1-8-16-min.js"></script>
11
+ <script src="{{url_prefix}}/assets/javascripts/codemirror.js"></script>
12
+ <script src="{{url_prefix}}/assets/javascripts/mode/css/css.js"></script>
13
+ <script src="{{url_prefix}}/assets/javascripts/mode/htmlmixed/htmlmixed.js"></script>
14
+ <script src="{{url_prefix}}/assets/javascripts/mode/javascript/javascript.js"></script>
15
+ <script src="{{url_prefix}}/assets/javascripts/mode/xml/xml.js"></script>
16
+ <script src="{{url_prefix}}/assets/javascripts/application.js"></script>
17
17
  <script>
18
18
 
19
19
  </script>
@@ -238,4 +238,4 @@
238
238
  </div>
239
239
  </div>
240
240
  </body>
241
- </html>
241
+ </html>
@@ -1,12 +1,12 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>API Documentation</title>
5
- <link rel="stylesheet" href="/{{ url_prefix }}/assets/stylesheets/bootstrap.css"/>
4
+ <title>{{ api_name }}</title>
5
+ <link rel="stylesheet" href="{{ url_prefix }}/assets/stylesheets/bootstrap.css"/>
6
6
  </head>
7
7
  <body>
8
8
  <div class="container">
9
- <h1>API Documentation</h1>
9
+ <h1>{{ api_name }}</h1>
10
10
 
11
11
  {{# sections }}
12
12
  <div class="article">
@@ -15,7 +15,7 @@
15
15
  <ul>
16
16
  {{# examples }}
17
17
  <li>
18
- <a href="/{{ url_prefix }}{{ dirname }}/{{ filename }}">{{ description }}</a>
18
+ <a href="{{ url_prefix }}/{{ dirname }}/{{ filename }}">{{ description }}</a>
19
19
  </li>
20
20
  {{/ examples }}
21
21
  </ul>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec_api_documentation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-05-21 00:00:00.000000000Z
14
+ date: 2012-07-03 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
18
- requirement: &70239312431960 !ruby/object:Gem::Requirement
18
+ requirement: &70135105134860 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: 2.6.0
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *70239312431960
26
+ version_requirements: *70135105134860
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
- requirement: &70239312430760 !ruby/object:Gem::Requirement
29
+ requirement: &70135105133960 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ! '>='
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: 3.0.0
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *70239312430760
37
+ version_requirements: *70135105133960
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: i18n
40
- requirement: &70239312429680 !ruby/object:Gem::Requirement
40
+ requirement: &70135105132820 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ! '>='
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: 0.1.0
46
46
  type: :runtime
47
47
  prerelease: false
48
- version_requirements: *70239312429680
48
+ version_requirements: *70135105132820
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: mustache
51
- requirement: &70239312428600 !ruby/object:Gem::Requirement
51
+ requirement: &70135105131980 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ! '>='
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: 0.99.4
57
57
  type: :runtime
58
58
  prerelease: false
59
- version_requirements: *70239312428600
59
+ version_requirements: *70135105131980
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: webmock
62
- requirement: &70239312427680 !ruby/object:Gem::Requirement
62
+ requirement: &70135105130500 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ! '>='
@@ -67,10 +67,10 @@ dependencies:
67
67
  version: 1.7.0
68
68
  type: :runtime
69
69
  prerelease: false
70
- version_requirements: *70239312427680
70
+ version_requirements: *70135105130500
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: json
73
- requirement: &70239312426980 !ruby/object:Gem::Requirement
73
+ requirement: &70135105129420 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
76
76
  - - ! '>='
@@ -78,10 +78,10 @@ dependencies:
78
78
  version: 1.4.6
79
79
  type: :runtime
80
80
  prerelease: false
81
- version_requirements: *70239312426980
81
+ version_requirements: *70135105129420
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: fakefs
84
- requirement: &70239312426260 !ruby/object:Gem::Requirement
84
+ requirement: &70135105128660 !ruby/object:Gem::Requirement
85
85
  none: false
86
86
  requirements:
87
87
  - - ! '>='
@@ -89,10 +89,10 @@ dependencies:
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
- version_requirements: *70239312426260
92
+ version_requirements: *70135105128660
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: sinatra
95
- requirement: &70239312425460 !ruby/object:Gem::Requirement
95
+ requirement: &70135105127860 !ruby/object:Gem::Requirement
96
96
  none: false
97
97
  requirements:
98
98
  - - ! '>='
@@ -100,10 +100,10 @@ dependencies:
100
100
  version: '0'
101
101
  type: :development
102
102
  prerelease: false
103
- version_requirements: *70239312425460
103
+ version_requirements: *70135105127860
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: aruba
106
- requirement: &70239312424480 !ruby/object:Gem::Requirement
106
+ requirement: &70135105115500 !ruby/object:Gem::Requirement
107
107
  none: false
108
108
  requirements:
109
109
  - - ! '>='
@@ -111,10 +111,10 @@ dependencies:
111
111
  version: '0'
112
112
  type: :development
113
113
  prerelease: false
114
- version_requirements: *70239312424480
114
+ version_requirements: *70135105115500
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: capybara
117
- requirement: &70239312411060 !ruby/object:Gem::Requirement
117
+ requirement: &70135105114560 !ruby/object:Gem::Requirement
118
118
  none: false
119
119
  requirements:
120
120
  - - ! '>='
@@ -122,10 +122,10 @@ dependencies:
122
122
  version: '0'
123
123
  type: :development
124
124
  prerelease: false
125
- version_requirements: *70239312411060
125
+ version_requirements: *70135105114560
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: rake
128
- requirement: &70239312410480 !ruby/object:Gem::Requirement
128
+ requirement: &70135105112420 !ruby/object:Gem::Requirement
129
129
  none: false
130
130
  requirements:
131
131
  - - ! '>='
@@ -133,10 +133,10 @@ dependencies:
133
133
  version: '0'
134
134
  type: :development
135
135
  prerelease: false
136
- version_requirements: *70239312410480
136
+ version_requirements: *70135105112420
137
137
  - !ruby/object:Gem::Dependency
138
138
  name: rack-test
139
- requirement: &70239312409580 !ruby/object:Gem::Requirement
139
+ requirement: &70135105111420 !ruby/object:Gem::Requirement
140
140
  none: false
141
141
  requirements:
142
142
  - - ! '>='
@@ -144,10 +144,10 @@ dependencies:
144
144
  version: 0.5.5
145
145
  type: :development
146
146
  prerelease: false
147
- version_requirements: *70239312409580
147
+ version_requirements: *70135105111420
148
148
  - !ruby/object:Gem::Dependency
149
149
  name: rack-oauth2
150
- requirement: &70239312408200 !ruby/object:Gem::Requirement
150
+ requirement: &70135105110060 !ruby/object:Gem::Requirement
151
151
  none: false
152
152
  requirements:
153
153
  - - ! '>='
@@ -155,7 +155,7 @@ dependencies:
155
155
  version: 0.14.4
156
156
  type: :development
157
157
  prerelease: false
158
- version_requirements: *70239312408200
158
+ version_requirements: *70135105110060
159
159
  description: Generate API docs from your test suite
160
160
  email:
161
161
  - chris@smartlogicsolutions.com
@@ -168,6 +168,8 @@ files:
168
168
  - lib/rspec_api_documentation/api_documentation.rb
169
169
  - lib/rspec_api_documentation/api_formatter.rb
170
170
  - lib/rspec_api_documentation/client_base.rb
171
+ - lib/rspec_api_documentation/combined_json_writer.rb
172
+ - lib/rspec_api_documentation/combined_text_writer.rb
171
173
  - lib/rspec_api_documentation/configuration.rb
172
174
  - lib/rspec_api_documentation/curl.rb
173
175
  - lib/rspec_api_documentation/dsl/callback.rb