rspec-apib 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +32 -0
- data/lib/rspec/apib/recorder.rb +31 -1
- data/lib/rspec/apib/version.rb +1 -1
- data/lib/rspec/apib.rb +3 -3
- metadata +28 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a86d793744f7736b09fa16e8cb5f3eb3c092528
|
4
|
+
data.tar.gz: 1978a2e469135b871f26da73ebf3636b8d48fc74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09ec789ce64972bba5d445217521d024e138caa8431e37f59778b529b9a97e3d7263a014e2c355a7838512ac88dd78c04eb95e39c409adcc1680643f4d19ffbb
|
7
|
+
data.tar.gz: 83c8da9ba36881a53826bb14dc09daf8c8cf1d32769861fc1952905e01d8c7c2328b754de52bf80d6071cf0dede0d34fafbb899d9519112c14fdffa7a29cd96c
|
data/README.md
CHANGED
@@ -45,6 +45,38 @@ end
|
|
45
45
|
RSpec::Apib.start
|
46
46
|
```
|
47
47
|
|
48
|
+
### Writing tests
|
49
|
+
|
50
|
+
By default, request specs get recorded and written to a `.apib` file afterwards.
|
51
|
+
Rspec-apib is trying to make sense of the test run and generates a meaningful
|
52
|
+
documentation out of it.
|
53
|
+
|
54
|
+
* **Disable single examples:** Add `apib: false` to the examples meta data
|
55
|
+
```ruby
|
56
|
+
it 'does something', apib: false do
|
57
|
+
# ...
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
61
|
+
* **Custom example description:** Add an *apib* comment above the example
|
62
|
+
```ruby
|
63
|
+
# Not contained in the description
|
64
|
+
#
|
65
|
+
# --- apib
|
66
|
+
# Some awesome description of the response
|
67
|
+
#
|
68
|
+
# ```json
|
69
|
+
# {}
|
70
|
+
# ```
|
71
|
+
# ---
|
72
|
+
#
|
73
|
+
# Not contained in the description
|
74
|
+
#
|
75
|
+
it 'has a custom description' do
|
76
|
+
# ...
|
77
|
+
end
|
78
|
+
```
|
79
|
+
|
48
80
|
## Development
|
49
81
|
|
50
82
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/rspec/apib/recorder.rb
CHANGED
@@ -114,6 +114,7 @@ module RSpec
|
|
114
114
|
next unless k.starts_with?('HTTP_')
|
115
115
|
header = k.gsub('HTTP_', '').downcase
|
116
116
|
next if request_header_blacklist.include? header
|
117
|
+
next if v.nil? || v.empty?
|
117
118
|
action[:request][:headers][header] = v
|
118
119
|
end
|
119
120
|
end
|
@@ -135,7 +136,7 @@ module RSpec
|
|
135
136
|
def document_response
|
136
137
|
data = {}
|
137
138
|
return if response_exists?
|
138
|
-
data[:description] = example.description
|
139
|
+
data[:description] = document_extended_description || example.description
|
139
140
|
data[:status] = response.status
|
140
141
|
data[:content_type] = response.content_type.to_s
|
141
142
|
data[:body] = response.body
|
@@ -143,6 +144,35 @@ module RSpec
|
|
143
144
|
action[:response] << data
|
144
145
|
end
|
145
146
|
|
147
|
+
def document_extended_description
|
148
|
+
file = example.metadata[:absolute_file_path]
|
149
|
+
line = example.metadata[:line_number]
|
150
|
+
return if file.nil? || file.empty?
|
151
|
+
return if line.nil? || line <= 0
|
152
|
+
return unless File.exists?(file)
|
153
|
+
lines = IO.readlines(file)
|
154
|
+
return if lines.count < line
|
155
|
+
i = line -2
|
156
|
+
m = false
|
157
|
+
while (i >= 0 && lines[i].match(/\A\W*#/)) do
|
158
|
+
if lines[i - 1].match(/\A\W*# --- apib/)
|
159
|
+
m = true
|
160
|
+
break
|
161
|
+
end
|
162
|
+
i -= 1
|
163
|
+
end
|
164
|
+
return unless m
|
165
|
+
result = []
|
166
|
+
while (i < line && lines[i].match(/\A\W*#/)) do
|
167
|
+
if lines[i].match(/\A\W*# ---/)
|
168
|
+
break
|
169
|
+
end
|
170
|
+
result << lines[i].sub(/^\W*#\W*/, '').strip
|
171
|
+
i += 1
|
172
|
+
end
|
173
|
+
return result.join("\n")
|
174
|
+
end
|
175
|
+
|
146
176
|
def response_exists?
|
147
177
|
action[:response].any? { |r| r[:status] == response.status }
|
148
178
|
end
|
data/lib/rspec/apib/version.rb
CHANGED
data/lib/rspec/apib.rb
CHANGED
@@ -25,9 +25,9 @@ module RSpec
|
|
25
25
|
types = config.record_types
|
26
26
|
RSpec.configure do |config|
|
27
27
|
config.after :each do |example|
|
28
|
-
if
|
29
|
-
|
30
|
-
|
28
|
+
return if example.metadata[:apib] === false
|
29
|
+
return unless types.include?(example.metadata[:type])
|
30
|
+
RSpec::Apib.record(example, request, response, @routes)
|
31
31
|
end
|
32
32
|
|
33
33
|
config.after :all do |example|
|
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-apib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Spieker
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.10'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.10'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: guard
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 2.13.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.13.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard-rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 4.6.4
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 4.6.4
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rails
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '4.2'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '4.2'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec-rails
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '3.4'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '3.4'
|
111
111
|
description:
|
@@ -115,15 +115,15 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
-
|
119
|
-
-
|
120
|
-
-
|
121
|
-
-
|
122
|
-
-
|
123
|
-
-
|
124
|
-
-
|
125
|
-
-
|
126
|
-
-
|
118
|
+
- .codeclimate.yml
|
119
|
+
- .dockerignore
|
120
|
+
- .envrc
|
121
|
+
- .gitignore
|
122
|
+
- .rspec
|
123
|
+
- .rubocop.yml
|
124
|
+
- .ruby-gemset
|
125
|
+
- .ruby-version
|
126
|
+
- .travis.yml
|
127
127
|
- CODE_OF_CONDUCT.md
|
128
128
|
- Dockerfile
|
129
129
|
- Gemfile
|
@@ -150,17 +150,17 @@ require_paths:
|
|
150
150
|
- lib
|
151
151
|
required_ruby_version: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- -
|
153
|
+
- - '>='
|
154
154
|
- !ruby/object:Gem::Version
|
155
155
|
version: '0'
|
156
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - '>='
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
requirements: []
|
162
162
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.0.14.1
|
164
164
|
signing_key:
|
165
165
|
specification_version: 4
|
166
166
|
summary: Generates API Blueprint from request specs
|