esplanade 1.5.0 → 1.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3373c627cdf10a0e2f896e87f1d35ac03f54e35633a405feb2948e550ed8a1c
4
- data.tar.gz: f264e61df01786b3d14ecb9771691c330b6e028ddba7e2067e0a73b2fbfbace5
3
+ metadata.gz: f5a2030af1a5071793987d6ee1bab57942a83efd21ae68b6323de133c0667e4b
4
+ data.tar.gz: 2474417384e61677938e602e48657bb8acffaeed13cdbf1593c64c4d97620f42
5
5
  SHA512:
6
- metadata.gz: ffa353a02394d3bafe0d2197932b3e1243bed4dd2fe11c47cc7a235f733db739c00fa698bdb9f689624fd1064c24f0af2c74a2ff26b31dbe6c4eb7e359e4cb13
7
- data.tar.gz: b9a19774d5bdd62d65854525b1a8606bc4babb0cd1eb02ffcb0737c5e12f05f72e0c81fb60866fcb86e5db5e5cebad9f7849aab75a520aec3a8176feacd06812
6
+ metadata.gz: 490ca6b622daf918b964966a523d751744923048a5ea78a7eaea7bb4fee5bd6d4623a8951d5255ba0fae49ac78eeba5bc00b6bff876f05c38d9cec88e706a170
7
+ data.tar.gz: b8bfb543326e2d7789d4a1842c96ae163e1a84ba6b3118ee95b57fe53451a308429dc103f7678b613f081d61e29df9668842e2ef8c9062dcdc139bdfa80a0c65
@@ -0,0 +1,33 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+
21
+ steps:
22
+ - uses: actions/checkout@v2
23
+ - name: Set up Ruby
24
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
25
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
26
+ # uses: ruby/setup-ruby@v1
27
+ uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
28
+ with:
29
+ ruby-version: 2.6
30
+ - name: Install dependencies
31
+ run: bundle install
32
+ - name: Run tests
33
+ run: bundle exec rake
@@ -1,8 +1,9 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.2
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.4
3
4
 
4
- Metrics/LineLength:
5
- Max: 120
5
+ Layout/LineLength:
6
+ Enabled: false
6
7
 
7
8
  Style/Documentation:
8
9
  Enabled: false
@@ -13,6 +14,12 @@ Style/FrozenStringLiteralComment:
13
14
  Metrics/BlockLength:
14
15
  Enabled: false
15
16
 
17
+ Metrics/ParameterLists:
18
+ Enabled: false
19
+
20
+ Metrics/MethodLength:
21
+ Enabled: false
22
+
16
23
  Style/IfUnlessModifier:
17
24
  Enabled: false
18
25
 
@@ -1 +1 @@
1
- ruby 2.2.0
1
+ ruby 2.7.1
@@ -1,6 +1,15 @@
1
1
  # Change log
2
2
 
3
- ### 1.4.1 - 2020-04-07
3
+ ### 1.6.0 - 2020-10-12
4
+
5
+ * features
6
+ * in the errors write not only a documented path but also a raw [#11](https://github.com/funbox/esplanade/issues/11)
7
+ * write in the documentation that the body is empty and nil is skipped [#13](https://github.com/funbox/esplanade/issues/13)
8
+ * redefine error PrefixNotMatch for response [#17](https://github.com/funbox/esplanade/issues/17)
9
+ * content-type can contain additional parameters [#21](https://github.com/funbox/esplanade/issues/21)
10
+ * update esplanade for the new tomograph [#29](https://github.com/funbox/esplanade/issues/29)
11
+
12
+ ### 1.5.0 - 2020-04-07
4
13
 
5
14
  * improvements
6
15
  * updated dependenses
data/README.md CHANGED
@@ -1,16 +1,36 @@
1
1
  # Esplanade
2
2
 
3
- <a href="https://funbox.ru">
4
- <img src="https://funbox.ru/badges/sponsored_by_funbox_compact.svg" alt="Sponsored by FunBox" width=250 />
5
- </a>
6
-
7
3
  [![Gem Version](https://badge.fury.io/rb/esplanade.svg)](https://badge.fury.io/rb/esplanade)
8
- [![Build Status](https://travis-ci.org/funbox/esplanade.svg?branch=master)](https://travis-ci.org/funbox/esplanade)
9
4
 
10
- This gem will help you to validate and synchronize your API in strict accordance to the documentation in
5
+ This gem helps you to validate and synchronize your API in strict accordance to the documentation in
11
6
  [API Blueprint](https://apiblueprint.org/) format.
12
- To do this it automatically searches received requestes and responses in the documentation and run validates
13
- json-schemas.
7
+ To do this it automatically searches received requests and responses in the documentation and run
8
+ JSON-schemas validators.
9
+
10
+ ## Contents
11
+
12
+ - [Installation](#installation)
13
+ - [Usage](#usage)
14
+ - [Middlewares](#middlewares)
15
+ - [Esplanade::SafeMiddleware](#esplanadesafemiddleware)
16
+ - [Esplanade::DangerousMiddleware](#esplanadedangerousmiddleware)
17
+ - [Esplanade::CheckCustomResponseMiddleware](#esplanadecheckcustomresponsemiddleware)
18
+ - [Esplanade::Error](#esplanadeerror)
19
+ - [Esplanade::Request::Error](#esplanaderequesterror)
20
+ - [Esplanade::Request::PrefixNotMatch](#esplanaderequestprefixnotmatch)
21
+ - [Esplanade::Request::NotDocumented](#esplanaderequestnotdocumented)
22
+ - [Esplanade::Request::ContentTypeIsNotJson](#esplanaderequestcontenttypeisnotjson)
23
+ - [Esplanade::Request::BodyIsNotJson](#esplanaderequestbodyisnotjson)
24
+ - [Esplanade::Request::Invalid](#esplanaderequestinvalid)
25
+ - [Esplanade::Response::Error](#esplanaderesponseerror)
26
+ - [Esplanade::Response::NotDocumented](#esplanaderesponsenotdocumented)
27
+ - [Esplanade::Response::BodyIsNotJson](#esplanaderesponsebodyisnotjson)
28
+ - [Esplanade::Response::Invalid](#esplanaderesponseinvalid)
29
+ - [Middleware args](#middleware-args)
30
+ - [`apib_path`](#apib_path)
31
+ - [`drafter_yaml_path`](#drafter_yaml_path)
32
+ - [`prefix`](#prefix)
33
+ - [License](#license)
14
34
 
15
35
  ## Installation
16
36
 
@@ -20,107 +40,213 @@ Add this line to your application's Gemfile:
20
40
  gem 'esplanade'
21
41
  ```
22
42
 
23
- And then execute:
43
+ After that execute:
24
44
 
25
- $ bundle
45
+ ```bash
46
+ $ bundle
47
+ ```
26
48
 
27
- Or install it yourself as:
49
+ Or install the gem by yourself:
28
50
 
29
- $ gem install esplanade
51
+ ```bash
52
+ $ gem install esplanade
53
+ ```
30
54
 
31
55
  ## Usage
32
56
 
33
- `config/application.rb`
57
+ `config/application.rb`:
34
58
 
35
59
  ```ruby
36
60
  config.middleware.use Esplanade::SafeMiddleware, apib_path: 'doc.apib'
37
61
  ```
38
62
 
39
- ## Middleware
63
+ ## Middlewares
40
64
 
41
65
  ### Esplanade::SafeMiddleware
42
66
 
43
- Only debug logger.
67
+ Debug logger.
44
68
 
45
69
  ### Esplanade::DangerousMiddleware
46
70
 
47
- It throws errors, so you will need to add your own middleware for processing.
71
+ It throws errors, so you should add your own middleware for processing.
48
72
 
49
73
  ```ruby
50
- config.middleware.use YourMiddleware
51
- config.middleware.use Esplanade::DangerousMiddleware, apib_path: 'doc.apib'
74
+ config.middleware.use YourMiddleware
75
+ config.middleware.use Esplanade::DangerousMiddleware, apib_path: 'doc.apib'
52
76
  ```
53
77
 
54
78
  ### Esplanade::CheckCustomResponseMiddleware
55
79
 
56
- If you want to be sure that you have documented new custom responses.
80
+ Use it if you want to be sure that you have documented new custom responses.
57
81
 
58
82
  ```ruby
59
- config.middleware.use Esplanade::CheckCustomResponseMiddleware, apib_path: 'doc.apib'
60
- config.middleware.use YourMiddleware
61
- config.middleware.use Esplanade::DangerousMiddleware, apib_path: 'doc.apib'
83
+ config.middleware.use Esplanade::CheckCustomResponseMiddleware, apib_path: 'doc.apib'
84
+ config.middleware.use YourMiddleware
85
+ config.middleware.use Esplanade::DangerousMiddleware, apib_path: 'doc.apib'
62
86
  ```
63
87
 
64
88
  ## Esplanade::Error
65
89
 
66
- From him the `Esplanade::Request::Error` and `Esplanade::Response::Error` are inherited.
90
+ Parent class for those described below.
67
91
 
68
92
  ### Esplanade::Request::Error
69
93
 
70
- From him the `Esplanade::Request::PrefixNotMatch`, `Esplanade::Request::NotDocumented`, `Esplanade::Request::BodyIsNotJson` and `Esplanade::Request::Invalid` are inherited.
94
+ Parent class for those described below. Inherited from `Esplanade::Error`.
71
95
 
72
96
  #### Esplanade::Request::PrefixNotMatch
73
97
 
74
- Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type"}`.
98
+ Error message format:
99
+
100
+ ```ruby
101
+ {
102
+ :method => "method",
103
+ :path => "path",
104
+ :raw_path => "path",
105
+ :content_type => "content_type"
106
+ }
107
+ ```
75
108
 
76
109
  #### Esplanade::Request::NotDocumented
77
110
 
78
- Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type"}`.
111
+ Error message format:
112
+
113
+ ```ruby
114
+ {
115
+ :method => "method",
116
+ :path => "path",
117
+ :raw_path => "path",
118
+ :content_type => "content_type"
119
+ }
120
+ ```
79
121
 
80
122
  #### Esplanade::Request::ContentTypeIsNotJson
81
123
 
82
- Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type"}`.
124
+ Error message format:
125
+
126
+ ```ruby
127
+ {
128
+ :method => "method",
129
+ :path => "path",
130
+ :raw_path => "path",
131
+ :content_type => "content_type"
132
+ }
133
+ ```
83
134
 
84
135
  #### Esplanade::Request::BodyIsNotJson
85
136
 
86
- Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type", :body=>"{\"state\": 1"}`.
137
+ Throws an error also when the body is empty and equal nil.
138
+
139
+ Error message format:
140
+
141
+ ```ruby
142
+ {
143
+ :method => "method",
144
+ :path => "path",
145
+ :raw_path => "path",
146
+ :content_type => "content_type",
147
+ :body => "body"
148
+ }
149
+ ```
87
150
 
88
151
  #### Esplanade::Request::Invalid
89
152
 
90
- Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type", :body=>"body", :error=>["error"]}`.
153
+ Error message format:
154
+
155
+ ```ruby
156
+ {
157
+ :method => "method",
158
+ :path => "path",
159
+ :raw_path => "path",
160
+ :content_type => "content_type",
161
+ :body => "body",
162
+ :error => ["error"]
163
+ }
164
+ ```
91
165
 
92
166
  ### Esplanade::Response::Error
93
167
 
94
- From him the `Esplanade::Response::NotDocumented`, `Esplanade::Response::BodyIsNotJson` and `Esplanade::Response::Invalid` are inherited.
168
+ Parent class for those described below. Inherited from `Esplanade::Error`.
169
+
170
+ #### Esplanade::Response::PrefixNotMatch
171
+
172
+ Error message format:
173
+
174
+ ```ruby
175
+ {
176
+ :request => {
177
+ :method => "method",
178
+ :path => "path"
179
+ },
180
+ :status => "status"
181
+ }
182
+ ```
95
183
 
96
184
  #### Esplanade::Response::NotDocumented
97
185
 
98
- Error message: `{:request=>{:method=>"method", :path=>"path"}, :status=>"status"}`.
186
+ Error message format:
187
+
188
+ ```ruby
189
+ {
190
+ :request => {
191
+ :method => "method",
192
+ :path => "path",
193
+ :raw_path => "path"
194
+ },
195
+ :status => "status"
196
+ }
197
+ ```
99
198
 
100
199
  #### Esplanade::Response::BodyIsNotJson
101
200
 
102
- Only if the documentation for all the responses of one request indicates that `Content-Type: application/json`.
201
+ It's thrown when expected response to request isn't JSON (not `Content-Type: application/json`) and there's no non-JSON responses documented for the endpoint.
202
+
203
+ Error message format:
103
204
 
104
- Error message: `{:request=>{:method=>"method", :path=>"path"}, :status=>"status", :body=>"body"}`.
205
+ ```ruby
206
+ {
207
+ :request => {
208
+ :method => "method",
209
+ :path => "path",
210
+ :raw_path => "path"
211
+ },
212
+ :status => "status",
213
+ :body => "body"
214
+ }
215
+ ```
105
216
 
106
217
  #### Esplanade::Response::Invalid
107
218
 
108
- Error message: `{:request=>{:method=>"method", :path=>"path"}, :status=>"status", :body=>"body", :error=>["error"]}`.
219
+ Error message format:
220
+
221
+ ```ruby
222
+ {
223
+ :request => {
224
+ :method => "method",
225
+ :path => "path",
226
+ :raw_path => "path"
227
+ },
228
+ :status => "status",
229
+ :body => "body",
230
+ :error => ["error"]
231
+ }
232
+ ```
109
233
 
110
234
  ## Middleware args
111
235
 
112
- ### apib_path
236
+ ### `apib_path`
113
237
 
114
238
  Path to API Blueprint documentation. There must be an installed [drafter](https://github.com/apiaryio/drafter) to parse it.
115
239
 
116
- ### drafter_yaml_path
240
+ ### `drafter_yaml_path`
117
241
 
118
242
  Path to API Blueprint documentation pre-parsed with `drafter` and saved to a YAML file.
119
243
 
120
- ### prefix
244
+ ### `prefix`
121
245
 
122
- Prefix of API requests. Example: `'/api'`. The prefix is added to the requests in the documentation.
246
+ Prefix for API requests. Example: `'/api'`. The prefix is added to the requests in the documentation.
123
247
 
124
248
  ## License
125
249
 
126
250
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
251
+
252
+ [![Sponsored by FunBox](https://funbox.ru/badges/sponsored_by_funbox_centered.svg)](https://funbox.ru)
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.add_runtime_dependency 'json-schema', '~> 2.6', '>= 2.6.2'
20
20
  spec.add_runtime_dependency 'multi_json', '~> 1.11', '>= 1.11.1'
21
- spec.add_runtime_dependency 'tomograph', '~> 2.0', '>= 2.0.0'
21
+ spec.add_runtime_dependency 'tomograph', '~> 3.0.0', '>= 3.0.0'
22
22
  spec.add_development_dependency 'byebug', '>= 10.0.0'
23
23
  spec.add_development_dependency 'rake', '~> 13'
24
24
  spec.add_development_dependency 'rspec', '~> 3.9', '>= 3.9.0'
@@ -19,8 +19,8 @@ module Esplanade
19
19
  @tomogram
20
20
  end
21
21
 
22
- def json_schema
23
- @json_schema ||= tomogram.request
22
+ def json_schemas
23
+ @json_schemas ||= tomogram.requests
24
24
  end
25
25
 
26
26
  def method
@@ -47,6 +47,7 @@ module Esplanade
47
47
  {
48
48
  method: @raw.method,
49
49
  path: @raw.path,
50
+ raw_path: @raw.raw_path,
50
51
  content_type: @raw.content_type
51
52
  }
52
53
  end
@@ -5,9 +5,10 @@ module Esplanade
5
5
  class PrefixNotMatch < Error; end
6
6
 
7
7
  class NotDocumented < Error
8
- def initialize(method:, path:, content_type:)
8
+ def initialize(method:, path:, raw_path:, content_type:)
9
9
  @method = method
10
10
  @path = path
11
+ @raw_path = raw_path
11
12
  @content_type = content_type
12
13
 
13
14
  super(to_hash)
@@ -17,14 +18,16 @@ module Esplanade
17
18
  {
18
19
  method: @method,
19
20
  path: @path,
21
+ raw_path: @raw_path,
20
22
  content_type: @content_type
21
23
  }
22
24
  end
23
25
  end
24
26
 
25
27
  class ContentTypeIsNotJson < Error
26
- def initialize(method:, path:, content_type:)
28
+ def initialize(method:, path:, raw_path:, content_type:)
27
29
  @method = method
30
+ @raw_path = raw_path
28
31
  @path = path
29
32
  @content_type = content_type
30
33
 
@@ -35,15 +38,17 @@ module Esplanade
35
38
  {
36
39
  method: @method,
37
40
  path: @path,
41
+ raw_path: @raw_path,
38
42
  content_type: @content_type
39
43
  }
40
44
  end
41
45
  end
42
46
 
43
47
  class BodyIsNotJson < Error
44
- def initialize(method:, path:, content_type:, body:)
48
+ def initialize(method:, path:, raw_path:, content_type:, body:)
45
49
  @method = method
46
50
  @path = path
51
+ @raw_path = raw_path
47
52
  @content_type = content_type
48
53
  @body = body
49
54
 
@@ -54,6 +59,7 @@ module Esplanade
54
59
  {
55
60
  method: @method,
56
61
  path: @path,
62
+ raw_path: @raw_path,
57
63
  content_type: @content_type,
58
64
  body: @body
59
65
  }
@@ -61,9 +67,10 @@ module Esplanade
61
67
  end
62
68
 
63
69
  class Invalid < Error
64
- def initialize(method:, path:, content_type:, body:, error:)
70
+ def initialize(method:, path:, raw_path:, content_type:, body:, error:)
65
71
  @method = method
66
72
  @path = path
73
+ @raw_path = raw_path
67
74
  @content_type = content_type
68
75
  @body = body
69
76
  @error = error
@@ -75,6 +82,7 @@ module Esplanade
75
82
  {
76
83
  method: @method,
77
84
  path: @path,
85
+ raw_path: @raw_path,
78
86
  content_type: @content_type,
79
87
  body: @body,
80
88
  error: @error
@@ -15,12 +15,16 @@ module Esplanade
15
15
  @path ||= @env['PATH_INFO']
16
16
  end
17
17
 
18
+ def raw_path
19
+ @raw_path ||= "#{@env['PATH_INFO']}/#{@env['QUERY_STRING']}"
20
+ end
21
+
18
22
  def body
19
23
  @body ||= Body.new(self, @env)
20
24
  end
21
25
 
22
26
  def content_type
23
- @content_type ||= @env['CONTENT_TYPE']
27
+ @content_type ||= @env['CONTENT_TYPE'].to_s.split(';').first
24
28
  end
25
29
  end
26
30
  end
@@ -37,6 +37,7 @@ module Esplanade
37
37
  {
38
38
  method: @raw_request.method,
39
39
  path: @raw_request.path,
40
+ raw_path: @raw_request.raw_path,
40
41
  content_type: @raw_request.content_type,
41
42
  body: reduced_version
42
43
  }
@@ -12,17 +12,38 @@ module Esplanade
12
12
  def valid!
13
13
  raise ContentTypeIsNotJson.new(**mini_message) unless @doc.content_type == 'application/json'
14
14
 
15
- @error ||= JSON::Validator.fully_validate(@doc.json_schema, @raw.body.to_hash)
15
+ @error ||= if @doc.json_schemas.size == 1
16
+ one_json_schema
17
+ else
18
+ more_than_one_json_schema
19
+ end
16
20
 
17
21
  raise Invalid.new(**message) unless @error.empty?
18
22
  end
19
23
 
20
24
  private
21
25
 
26
+ def one_json_schema
27
+ JSON::Validator.fully_validate(@doc.json_schemas.first, @raw.body.to_hash)
28
+ end
29
+
30
+ def more_than_one_json_schema
31
+ main_res = @doc.json_schemas.each do |json_schema|
32
+ res = JSON::Validator.fully_validate(json_schema, @raw.body.to_hash)
33
+ break res if res == []
34
+ end
35
+ if main_res != []
36
+ ['invalid']
37
+ else
38
+ []
39
+ end
40
+ end
41
+
22
42
  def mini_message
23
43
  {
24
44
  method: @doc.method,
25
45
  path: @doc.path,
46
+ raw_path: @raw.raw_path,
26
47
  content_type: @doc.content_type
27
48
  }
28
49
  end
@@ -31,6 +52,7 @@ module Esplanade
31
52
  {
32
53
  method: @raw.method,
33
54
  path: @raw.path,
55
+ raw_path: @raw.raw_path,
34
56
  content_type: @raw.content_type,
35
57
  body: @raw.body.to_hash,
36
58
  error: @error
@@ -11,6 +11,8 @@ module Esplanade
11
11
  raise NotDocumented.new(**message) if @tomogram == []
12
12
 
13
13
  @tomogram
14
+ rescue Esplanade::Request::PrefixNotMatch
15
+ raise PrefixNotMatch.new(**message)
14
16
  end
15
17
 
16
18
  def json_schemas
@@ -27,6 +29,7 @@ module Esplanade
27
29
  {
28
30
  request: {
29
31
  method: @request.raw.method,
32
+ raw_path: @request.raw.raw_path,
30
33
  path: @request.raw.path
31
34
  },
32
35
  status: @raw.status
@@ -2,10 +2,13 @@ module Esplanade
2
2
  class Response
3
3
  class Error < Esplanade::Error; end
4
4
 
5
+ class PrefixNotMatch < Error; end
6
+
5
7
  class NotDocumented < Error
6
8
  def initialize(request:, status:)
7
9
  @method = request[:method]
8
10
  @path = request[:path]
11
+ @raw_path = request[:raw_path]
9
12
  @status = status
10
13
 
11
14
  super(to_hash)
@@ -16,7 +19,8 @@ module Esplanade
16
19
  request:
17
20
  {
18
21
  method: @method,
19
- path: @path
22
+ path: @path,
23
+ raw_path: @raw_path
20
24
  },
21
25
  status: @status
22
26
  }
@@ -27,6 +31,7 @@ module Esplanade
27
31
  def initialize(request:, status:, body:)
28
32
  @method = request[:method]
29
33
  @path = request[:path]
34
+ @raw_path = request[:raw_path]
30
35
  @status = status
31
36
  @body = body
32
37
 
@@ -38,7 +43,8 @@ module Esplanade
38
43
  request:
39
44
  {
40
45
  method: @method,
41
- path: @path
46
+ path: @path,
47
+ raw_path: @raw_path
42
48
  },
43
49
  status: @status,
44
50
  body: @body
@@ -50,6 +56,7 @@ module Esplanade
50
56
  def initialize(request:, status:, body:, error:)
51
57
  @method = request[:method]
52
58
  @path = request[:path]
59
+ @raw_path = request[:raw_path]
53
60
  @status = status
54
61
  @body = body
55
62
  @error = error
@@ -62,7 +69,8 @@ module Esplanade
62
69
  request:
63
70
  {
64
71
  method: @method,
65
- path: @path
72
+ path: @path,
73
+ raw_path: @raw_path
66
74
  },
67
75
  status: @status,
68
76
  body: @body,
@@ -27,7 +27,8 @@ module Esplanade
27
27
  {
28
28
  request: {
29
29
  method: @request.raw.method,
30
- path: @request.raw.path
30
+ path: @request.raw.path,
31
+ raw_path: @request.raw.raw_path
31
32
  },
32
33
  status: @raw_response.status,
33
34
  body: @raw_response.body.to_string
@@ -40,7 +40,8 @@ module Esplanade
40
40
  {
41
41
  request: {
42
42
  method: @request.raw.method,
43
- path: @request.raw.path
43
+ path: @request.raw.path,
44
+ raw_path: @request.raw.raw_path
44
45
  },
45
46
  status: @raw.status,
46
47
  body: @raw.body.to_string,
@@ -1,3 +1,3 @@
1
1
  module Esplanade
2
- VERSION = '1.5.0'.freeze
2
+ VERSION = '1.6.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: esplanade
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - d.efimov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-07 00:00:00.000000000 Z
11
+ date: 2020-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema
@@ -56,20 +56,20 @@ dependencies:
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '2.0'
59
+ version: 3.0.0
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 2.0.0
62
+ version: 3.0.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
- version: '2.0'
69
+ version: 3.0.0
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 2.0.0
72
+ version: 3.0.0
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: byebug
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -165,12 +165,11 @@ executables: []
165
165
  extensions: []
166
166
  extra_rdoc_files: []
167
167
  files:
168
- - ".github/workflows/gempush.yml"
168
+ - ".github/workflows/ruby.yml"
169
169
  - ".gitignore"
170
170
  - ".rubocop.yml"
171
171
  - ".ruby-version"
172
172
  - ".tool-versions"
173
- - ".travis.yml"
174
173
  - CHANGELOG.md
175
174
  - CODE_OF_CONDUCT.md
176
175
  - Gemfile
@@ -1,28 +0,0 @@
1
- name: Ruby Gem
2
-
3
- on:
4
- push:
5
- branches: [ master ]
6
- pull_request:
7
- branches: [ master ]
8
-
9
- jobs:
10
- build:
11
- name: Build + Publish
12
- runs-on: ubuntu-latest
13
-
14
- steps:
15
- - uses: actions/checkout@v2
16
- - name: Set up Ruby 2.6
17
- uses: actions/setup-ruby@v1
18
-
19
- - name: Publish to RubyGems
20
- run: |
21
- mkdir -p $HOME/.gem
22
- touch $HOME/.gem/credentials
23
- chmod 0600 $HOME/.gem/credentials
24
- printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
25
- gem build *.gemspec
26
- gem push *.gem
27
- env:
28
- GEM_HOST_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.4
4
- - 2.5
5
- - 2.6
6
- - 2.7
7
- before_install: gem install bundler