rspec_api_documentation 0.6.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rspec_api_documentation/client_base.rb +10 -10
- data/lib/rspec_api_documentation/combined_json_writer.rb +18 -0
- data/lib/rspec_api_documentation/combined_text_writer.rb +100 -0
- data/lib/rspec_api_documentation/configuration.rb +2 -0
- data/lib/rspec_api_documentation/dsl/endpoint.rb +6 -2
- data/lib/rspec_api_documentation/dsl/resource.rb +12 -0
- data/lib/rspec_api_documentation/headers.rb +9 -0
- data/lib/rspec_api_documentation/html_writer.rb +4 -0
- data/lib/rspec_api_documentation/oauth2_mac_client.rb +2 -2
- data/lib/rspec_api_documentation/rack_test_client.rb +6 -2
- data/lib/rspec_api_documentation/wurl_writer.rb +4 -0
- data/lib/rspec_api_documentation.rb +2 -0
- data/lib/tasks/docs.rake +4 -6
- data/templates/rspec_api_documentation/html_example.mustache +11 -11
- data/templates/rspec_api_documentation/html_index.mustache +4 -4
- data/templates/rspec_api_documentation/wurl_example.mustache +14 -14
- data/templates/rspec_api_documentation/wurl_index.mustache +4 -4
- metadata +30 -28
@@ -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
|
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
|
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
|
-
|
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}"
|
@@ -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
|
data/lib/tasks/docs.rake
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'rspec/core/rake_task'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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="
|
6
|
-
<link rel="stylesheet" href="
|
7
|
-
<link rel="stylesheet" href="
|
8
|
-
<script src="
|
9
|
-
<script src="
|
10
|
-
<script src="
|
11
|
-
<script src="
|
12
|
-
<script src="
|
13
|
-
<script src="
|
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="{{
|
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="{{
|
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>
|
5
|
-
<link rel="stylesheet" href="
|
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>
|
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="
|
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="
|
5
|
-
<link rel="stylesheet" href="
|
6
|
-
<link rel="stylesheet" href="
|
7
|
-
<script src="
|
8
|
-
<script src="
|
9
|
-
<script src="
|
10
|
-
<script src="
|
11
|
-
<script src="
|
12
|
-
<script src="
|
13
|
-
<script src="
|
14
|
-
<script src="
|
15
|
-
<script src="
|
16
|
-
<script src="
|
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>
|
5
|
-
<link rel="stylesheet" href="
|
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>
|
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="
|
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.
|
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-
|
14
|
+
date: 2012-07-03 00:00:00.000000000Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|
18
|
-
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: *
|
26
|
+
version_requirements: *70135105134860
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
|
-
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: *
|
37
|
+
version_requirements: *70135105133960
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: i18n
|
40
|
-
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: *
|
48
|
+
version_requirements: *70135105132820
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: mustache
|
51
|
-
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: *
|
59
|
+
version_requirements: *70135105131980
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: webmock
|
62
|
-
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: *
|
70
|
+
version_requirements: *70135105130500
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: json
|
73
|
-
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: *
|
81
|
+
version_requirements: *70135105129420
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: fakefs
|
84
|
-
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: *
|
92
|
+
version_requirements: *70135105128660
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: sinatra
|
95
|
-
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: *
|
103
|
+
version_requirements: *70135105127860
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: aruba
|
106
|
-
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: *
|
114
|
+
version_requirements: *70135105115500
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: capybara
|
117
|
-
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: *
|
125
|
+
version_requirements: *70135105114560
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rake
|
128
|
-
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: *
|
136
|
+
version_requirements: *70135105112420
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
138
|
name: rack-test
|
139
|
-
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: *
|
147
|
+
version_requirements: *70135105111420
|
148
148
|
- !ruby/object:Gem::Dependency
|
149
149
|
name: rack-oauth2
|
150
|
-
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: *
|
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
|