vigia 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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.9
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-10-22 00:00:00.000000000 Z
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: uri_template
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
- - lib/vigia.rb
180
- - lib/vigia/blueprint.rb
181
- - lib/vigia/config.rb
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/url.rb
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.2.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
@@ -1,14 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Vigia
4
- class Blueprint
5
-
6
- attr_reader :apib, :metadata
7
-
8
- def initialize apib_source
9
- @apib_parsed = RedSnow::parse(apib_source)
10
- @apib = @apib_parsed.ast
11
- @metadata = @apib.metadata
12
- end
13
- end
14
- end
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