vigia 0.0.9 → 0.1.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 +13 -5
- data/README.md +191 -58
- data/Rakefile +13 -2
- data/lib/vigia/adapter.rb +63 -0
- data/lib/vigia/adapters/blueprint.rb +105 -0
- data/lib/vigia/config.rb +27 -16
- data/lib/vigia/http_client/options.rb +30 -0
- data/lib/vigia/http_client/requests.rb +10 -0
- data/lib/vigia/http_client/rest_client.rb +35 -13
- data/lib/vigia/parameters.rb +20 -9
- data/lib/vigia/rspec.rb +31 -14
- data/lib/vigia/sail/context.rb +67 -0
- data/lib/vigia/sail/example.rb +65 -0
- data/lib/vigia/sail/group.rb +47 -0
- data/lib/vigia/sail/group_instance.rb +24 -0
- data/lib/vigia/sail/rspec_object.rb +73 -0
- data/lib/vigia/spec/api_spec.rb +1 -25
- data/lib/vigia/spec/support/utils.rb +1 -14
- data/lib/vigia/url.rb +4 -20
- data/lib/vigia/version.rb +1 -1
- data/lib/vigia.rb +11 -5
- metadata +59 -41
- data/lib/vigia/blueprint.rb +0 -14
- data/lib/vigia/example.rb +0 -92
- data/lib/vigia/headers.rb +0 -48
- data/lib/vigia/spec/support/shared_examples/apib_example.rb +0 -33
- data/lib/vigia/spec/support/shared_examples/skip_example.rb +0 -15
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vigia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Tapiador
|
@@ -9,160 +9,174 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-12-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ! '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ! '>='
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: redsnow
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ! '>='
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ! '>='
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rest-client
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ! '>='
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ! '>='
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rspec
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ! '>='
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ! '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: addressable
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ! '>='
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ! '>='
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: bundler
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ! '>='
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ! '>='
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: sinatra
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ! '>='
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ! '>='
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: celluloid
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- -
|
116
|
+
- - ! '>='
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: json
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
|
-
- -
|
130
|
+
- - ! '>='
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- -
|
137
|
+
- - ! '>='
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: pry-debugger
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
|
-
- -
|
144
|
+
- - ! '>='
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '0'
|
147
147
|
type: :development
|
148
148
|
prerelease: false
|
149
149
|
version_requirements: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
|
-
- -
|
151
|
+
- - ! '>='
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
- !ruby/object:Gem::Dependency
|
155
155
|
name: simplecov
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - ! '>='
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
type: :development
|
162
162
|
prerelease: false
|
163
163
|
version_requirements: !ruby/object:Gem::Requirement
|
164
164
|
requirements:
|
165
|
-
- -
|
165
|
+
- - ! '>='
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: cucumber
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ! '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
166
180
|
- !ruby/object:Gem::Version
|
167
181
|
version: '0'
|
168
182
|
description: Test your Apiary Blueprint specification on ruby
|
@@ -173,23 +187,27 @@ executables: []
|
|
173
187
|
extensions: []
|
174
188
|
extra_rdoc_files: []
|
175
189
|
files:
|
176
|
-
- Gemfile
|
177
|
-
- README.md
|
178
190
|
- Rakefile
|
179
|
-
-
|
180
|
-
- lib/vigia/
|
181
|
-
- lib/vigia/
|
182
|
-
- lib/vigia/example.rb
|
183
|
-
- lib/vigia/headers.rb
|
191
|
+
- Gemfile
|
192
|
+
- lib/vigia/http_client/requests.rb
|
193
|
+
- lib/vigia/http_client/options.rb
|
184
194
|
- lib/vigia/http_client/rest_client.rb
|
185
|
-
- lib/vigia/parameters.rb
|
186
|
-
- lib/vigia/rspec.rb
|
187
|
-
- lib/vigia/spec/api_spec.rb
|
188
|
-
- lib/vigia/spec/support/shared_examples/apib_example.rb
|
189
|
-
- lib/vigia/spec/support/shared_examples/skip_example.rb
|
190
195
|
- lib/vigia/spec/support/utils.rb
|
191
|
-
- lib/vigia/
|
196
|
+
- lib/vigia/spec/api_spec.rb
|
192
197
|
- lib/vigia/version.rb
|
198
|
+
- lib/vigia/adapters/blueprint.rb
|
199
|
+
- lib/vigia/parameters.rb
|
200
|
+
- lib/vigia/sail/group.rb
|
201
|
+
- lib/vigia/sail/group_instance.rb
|
202
|
+
- lib/vigia/sail/example.rb
|
203
|
+
- lib/vigia/sail/rspec_object.rb
|
204
|
+
- lib/vigia/sail/context.rb
|
205
|
+
- lib/vigia/url.rb
|
206
|
+
- lib/vigia/adapter.rb
|
207
|
+
- lib/vigia/config.rb
|
208
|
+
- lib/vigia/rspec.rb
|
209
|
+
- lib/vigia.rb
|
210
|
+
- README.md
|
193
211
|
homepage: https://github.com/nogates/vigia
|
194
212
|
licenses:
|
195
213
|
- MIT
|
@@ -200,17 +218,17 @@ require_paths:
|
|
200
218
|
- lib
|
201
219
|
required_ruby_version: !ruby/object:Gem::Requirement
|
202
220
|
requirements:
|
203
|
-
- -
|
221
|
+
- - ! '>='
|
204
222
|
- !ruby/object:Gem::Version
|
205
223
|
version: '0'
|
206
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
225
|
requirements:
|
208
|
-
- -
|
226
|
+
- - ! '>='
|
209
227
|
- !ruby/object:Gem::Version
|
210
228
|
version: '0'
|
211
229
|
requirements: []
|
212
230
|
rubyforge_project:
|
213
|
-
rubygems_version: 2.
|
231
|
+
rubygems_version: 2.1.11
|
214
232
|
signing_key:
|
215
233
|
specification_version: 4
|
216
234
|
summary: Test your Apiary Blueprint specification on ruby
|
data/lib/vigia/blueprint.rb
DELETED
data/lib/vigia/example.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
module Vigia
|
2
|
-
class Example
|
3
|
-
|
4
|
-
attr_reader :action, :resource, :apib_example, :requests, :headers
|
5
|
-
|
6
|
-
def initialize(resource:, action:, apib_example:)
|
7
|
-
@resource = resource
|
8
|
-
@action = action
|
9
|
-
@apib_example = apib_example
|
10
|
-
@error = []
|
11
|
-
@requests = {}
|
12
|
-
@parameters = Vigia::Parameters.new(resource, action)
|
13
|
-
@headers = Vigia::Headers.new(resource)
|
14
|
-
@url = Vigia::Url.new(resource.uri_template)
|
15
|
-
end
|
16
|
-
|
17
|
-
# do the request only once ??
|
18
|
-
def perform_request(response)
|
19
|
-
return @requests[response.name] if @requests.key?(response.name)
|
20
|
-
|
21
|
-
@requests[response.name] = http_client_request(http_options_for(response))
|
22
|
-
@requests[response.name]
|
23
|
-
end
|
24
|
-
|
25
|
-
def expectations_for(response)
|
26
|
-
{
|
27
|
-
code: response.name.to_i,
|
28
|
-
headers: @headers.expected(response),
|
29
|
-
body: response.body
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
|
-
def url
|
34
|
-
@url.expand(parameters)
|
35
|
-
end
|
36
|
-
|
37
|
-
def custom_examples
|
38
|
-
Vigia.config.custom_examples_for(self)
|
39
|
-
end
|
40
|
-
|
41
|
-
def skip?
|
42
|
-
resource.description.include?('@skip') or action.description.include?('@skip')
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def parameters
|
48
|
-
@parameters.to_hash
|
49
|
-
end
|
50
|
-
|
51
|
-
def http_options_for(response)
|
52
|
-
options = default_http_options_for(response)
|
53
|
-
|
54
|
-
if with_payload?
|
55
|
-
options.merge!(payload: request_for(response).body)
|
56
|
-
end
|
57
|
-
|
58
|
-
options
|
59
|
-
end
|
60
|
-
|
61
|
-
def http_client_request(http_options)
|
62
|
-
Vigia.config.http_client_class.new(http_options).run!
|
63
|
-
end
|
64
|
-
|
65
|
-
def default_http_options_for(response)
|
66
|
-
options = {
|
67
|
-
method: action.method,
|
68
|
-
url: url,
|
69
|
-
headers: headers(response)
|
70
|
-
}
|
71
|
-
end
|
72
|
-
|
73
|
-
def headers(response)
|
74
|
-
if with_payload?
|
75
|
-
@headers.http_client_with_payload(response, request_for(response))
|
76
|
-
else
|
77
|
-
@headers.http_client(response)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def with_payload?
|
82
|
-
%w(POST PUT PATCH).include? action.method
|
83
|
-
end
|
84
|
-
|
85
|
-
def request_for(response)
|
86
|
-
index = apib_example.responses.index(response)
|
87
|
-
apib_example.requests.fetch(index)
|
88
|
-
rescue => e
|
89
|
-
raise "Unable to load payload for response #{ response.name }"
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
data/lib/vigia/headers.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
module Vigia
|
2
|
-
class Headers
|
3
|
-
|
4
|
-
# ToDo: resource should be an instance variable
|
5
|
-
def initialize(resource)
|
6
|
-
@resource = resource
|
7
|
-
end
|
8
|
-
|
9
|
-
def expected(response)
|
10
|
-
compile_headers(headers_for_response(response))
|
11
|
-
end
|
12
|
-
|
13
|
-
def http_client(response)
|
14
|
-
compile_headers(headers_for_response(response)).merge(config_headers)
|
15
|
-
end
|
16
|
-
|
17
|
-
def http_client_with_payload(response, payload)
|
18
|
-
compile_headers(headers_for_response_and_payload(response, payload)).merge(config_headers)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
def compile_headers(headers, options = {})
|
23
|
-
headers.inject({}) do |hash, header|
|
24
|
-
# Find a better way to match headers in expectations (Hash with indifferent access?).s
|
25
|
-
# Right now, this is needed to match RestClient headers format.
|
26
|
-
normalize_header_name = header[:name].gsub('-', '_').downcase.to_sym
|
27
|
-
hash.merge!(normalize_header_name => header[:value])
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def config_headers
|
32
|
-
Vigia.config.headers
|
33
|
-
end
|
34
|
-
|
35
|
-
def headers_for_response(response)
|
36
|
-
collection = []
|
37
|
-
collection << [*@resource.model.headers.collection]
|
38
|
-
collection << [*response.headers.collection]
|
39
|
-
collection.flatten
|
40
|
-
end
|
41
|
-
|
42
|
-
def headers_for_response_and_payload(response, payload)
|
43
|
-
collection = headers_for_response(response)
|
44
|
-
collection << [*payload.headers.collection]
|
45
|
-
collection.flatten
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
shared_examples 'apib example' do |runner_example|
|
2
|
-
|
3
|
-
let(:runner_example) { runner_example }
|
4
|
-
|
5
|
-
runner_example.apib_example.responses.each do |response|
|
6
|
-
context description_for(response) do
|
7
|
-
context "when requesting #{ runner_example.url }" do
|
8
|
-
|
9
|
-
let(:response) { response }
|
10
|
-
let!(:expectations) { runner_example.expectations_for(response) }
|
11
|
-
let!(:result) { runner_example.perform_request(response) }
|
12
|
-
|
13
|
-
it 'returns the expected HTTP code' do
|
14
|
-
expect(result[:code]).to eql(expectations[:code]),
|
15
|
-
-> { format_error(result, expectations) }
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'returns the expected HTTP headers' do
|
19
|
-
expect(result[:headers]).to include(expectations[:headers]),
|
20
|
-
-> { format_error(result, expectations) }
|
21
|
-
end
|
22
|
-
|
23
|
-
if runner_example.custom_examples.any?
|
24
|
-
context 'when running custom rspec examples' do
|
25
|
-
runner_example.custom_examples.each do |example_name|
|
26
|
-
include_examples example_name, runner_example, response
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
shared_examples 'skip example' do |runner_example|
|
2
|
-
|
3
|
-
let(:runner_example) { runner_example }
|
4
|
-
|
5
|
-
runner_example.apib_example.responses.each do |response|
|
6
|
-
context description_for(response) do
|
7
|
-
context "when requesting #{ runner_example.url }" do
|
8
|
-
|
9
|
-
it '# disabled with @skip' do
|
10
|
-
expect(runner_example.skip?).to be_truthy
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|