esplanade 1.2.1 → 1.3.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 +4 -4
- data/CHANGELOG.md +10 -4
- data/README.md +9 -7
- data/esplanade.gemspec +1 -1
- data/lib/esplanade/request/doc.rb +11 -2
- data/lib/esplanade/request/error.rb +65 -11
- data/lib/esplanade/request/raw.rb +4 -0
- data/lib/esplanade/request/raw/body.rb +10 -1
- data/lib/esplanade/request/validation.rb +10 -0
- data/lib/esplanade/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff2aa7471fbccccd7a52e52ba79faa5c181c3fc9
|
4
|
+
data.tar.gz: 34d21fc0cb3cf09954ce401805076c206508b9d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4cf2e079c8773cdb0b10241ba8166834ab6b6c03b108273e9b7963efa7d812b8a2a2cc7ba249b7c429fffdb80b0dcf36b5b167665b7fef2e00177568f51a32c
|
7
|
+
data.tar.gz: 62b6623aa9df749907c7d6dc5e6413103bab3083368cc616140c63b9bb3cd4cdfa596a60c857fef5ab57e40b9e8d7a168a606b421ed8db7c079e640387bc8c7a
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
### 1.3.0 - 2018-03-16
|
4
|
+
|
5
|
+
* features
|
6
|
+
* add Esplanade::Request::ContentTypeIsNotJson erro
|
7
|
+
* add reduced version message about request body
|
8
|
+
|
3
9
|
### 1.2.1 - 2018-02-20
|
4
10
|
|
5
|
-
*
|
11
|
+
* features
|
6
12
|
* more information about the invalid request
|
7
13
|
|
8
14
|
### 1.2.0 - 2018-02-15
|
@@ -16,12 +22,12 @@
|
|
16
22
|
|
17
23
|
### 1.1.2 - 2018-02-14
|
18
24
|
|
19
|
-
*
|
25
|
+
* fixes
|
20
26
|
* add rewind rack.input
|
21
27
|
|
22
28
|
### 1.1.1 - 2018-02-13
|
23
29
|
|
24
|
-
*
|
30
|
+
* fixes
|
25
31
|
* read body if Content-Type application/json
|
26
32
|
|
27
33
|
### 1.1.0 - 2017-10-18
|
@@ -31,5 +37,5 @@
|
|
31
37
|
|
32
38
|
### 1.0.1 - 2017-10-09
|
33
39
|
|
34
|
-
*
|
40
|
+
* fixes
|
35
41
|
* allow request body to be nil
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Esplanade
|
2
2
|
|
3
3
|
<a href="https://funbox.ru">
|
4
|
-
<img src="https://funbox.ru/badges/
|
4
|
+
<img src="https://funbox.ru/badges/sponsored_by_funbox_compact.svg" alt="Sponsored by FunBox" width=250 />
|
5
5
|
</a>
|
6
6
|
|
7
7
|
[](https://badge.fury.io/rb/esplanade)
|
@@ -71,21 +71,23 @@ From him the `Esplanade::Request::PrefixNotMatch`, `Esplanade::Request::NotDocum
|
|
71
71
|
|
72
72
|
#### Esplanade::Request::PrefixNotMatch
|
73
73
|
|
74
|
-
Error message: `{:method=>"method", :path=>"path"}`.
|
74
|
+
Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type"}`.
|
75
75
|
|
76
76
|
#### Esplanade::Request::NotDocumented
|
77
77
|
|
78
|
-
Error message: `{:method=>"method", :path=>"path"}`.
|
78
|
+
Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type"}`.
|
79
79
|
|
80
|
-
#### Esplanade::Request::
|
80
|
+
#### Esplanade::Request::ContentTypeIsNotJson
|
81
|
+
|
82
|
+
Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type"}`.
|
81
83
|
|
82
|
-
|
84
|
+
#### Esplanade::Request::BodyIsNotJson
|
83
85
|
|
84
|
-
Error message: `{:method=>"method", :path=>"path", :body=>"{\"state\": 1"}`.
|
86
|
+
Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type", :body=>"{\"state\": 1"}`.
|
85
87
|
|
86
88
|
#### Esplanade::Request::Invalid
|
87
89
|
|
88
|
-
Error message: `{:method=>"method", :path=>"path", :body=>"body", :error=>["error"]}`.
|
90
|
+
Error message: `{:method=>"method", :path=>"path", :content_type=>"content_type", :body=>"body", :error=>["error"]}`.
|
89
91
|
|
90
92
|
### Esplanade::Response::Error
|
91
93
|
|
data/esplanade.gemspec
CHANGED
@@ -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', '~>
|
21
|
+
spec.add_runtime_dependency 'tomograph', '~> 2.0', '>= 2.0.0'
|
22
22
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
23
23
|
spec.add_development_dependency 'byebug', '~> 8.2', '>= 8.2.1'
|
24
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
@@ -8,7 +8,11 @@ module Esplanade
|
|
8
8
|
|
9
9
|
def tomogram
|
10
10
|
raise PrefixNotMatch, message unless @main_documentation.prefix_match?(@raw.path)
|
11
|
-
@tomogram = @main_documentation.
|
11
|
+
@tomogram = @main_documentation.find_request_with_content_type(
|
12
|
+
method: @raw.method,
|
13
|
+
path: @raw.path,
|
14
|
+
content_type: @raw.content_type
|
15
|
+
)
|
12
16
|
raise NotDocumented, message if @tomogram.nil?
|
13
17
|
@tomogram
|
14
18
|
end
|
@@ -25,6 +29,10 @@ module Esplanade
|
|
25
29
|
@path ||= tomogram.path.to_s
|
26
30
|
end
|
27
31
|
|
32
|
+
def content_type
|
33
|
+
@content_type ||= tomogram.content_type.to_s
|
34
|
+
end
|
35
|
+
|
28
36
|
def responses
|
29
37
|
@responses ||= tomogram.responses
|
30
38
|
rescue NotDocumented
|
@@ -36,7 +44,8 @@ module Esplanade
|
|
36
44
|
def message
|
37
45
|
{
|
38
46
|
method: @raw.method,
|
39
|
-
path: @raw.path
|
47
|
+
path: @raw.path,
|
48
|
+
content_type: @raw.content_type
|
40
49
|
}
|
41
50
|
end
|
42
51
|
end
|
@@ -3,17 +3,70 @@ module Esplanade
|
|
3
3
|
class Error < Esplanade::Error; end
|
4
4
|
|
5
5
|
class PrefixNotMatch < Error; end
|
6
|
-
class NotDocumented < Error; end
|
7
|
-
class BodyIsNotJson < Error; end
|
8
6
|
|
9
|
-
class
|
10
|
-
|
7
|
+
class NotDocumented < Error
|
8
|
+
def initialize(method:, path:, content_type:)
|
9
|
+
@method = method
|
10
|
+
@path = path
|
11
|
+
@content_type = content_type
|
12
|
+
|
13
|
+
super(to_hash)
|
14
|
+
end
|
11
15
|
|
12
|
-
def
|
16
|
+
def to_hash
|
17
|
+
{
|
18
|
+
method: @method,
|
19
|
+
path: @path,
|
20
|
+
content_type: @content_type
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class ContentTypeIsNotJson < Error
|
26
|
+
def initialize(method:, path:, content_type:)
|
27
|
+
@method = method
|
28
|
+
@path = path
|
29
|
+
@content_type = content_type
|
30
|
+
|
31
|
+
super(to_hash)
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_hash
|
35
|
+
{
|
36
|
+
method: @method,
|
37
|
+
path: @path,
|
38
|
+
content_type: @content_type
|
39
|
+
}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class BodyIsNotJson < Error
|
44
|
+
def initialize(method:, path:, content_type:, body:)
|
45
|
+
@method = method
|
46
|
+
@path = path
|
47
|
+
@content_type = content_type
|
48
|
+
@body = body
|
49
|
+
|
50
|
+
super(to_hash)
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_hash
|
54
|
+
{
|
55
|
+
method: @method,
|
56
|
+
path: @path,
|
57
|
+
content_type: @content_type,
|
58
|
+
body: @body
|
59
|
+
}
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class Invalid < Error
|
64
|
+
def initialize(method:, path:, content_type:, body:, error:)
|
13
65
|
@method = method
|
14
|
-
@path
|
15
|
-
@
|
16
|
-
@
|
66
|
+
@path = path
|
67
|
+
@content_type = content_type
|
68
|
+
@body = body
|
69
|
+
@error = error
|
17
70
|
|
18
71
|
super(to_hash)
|
19
72
|
end
|
@@ -21,9 +74,10 @@ module Esplanade
|
|
21
74
|
def to_hash
|
22
75
|
{
|
23
76
|
method: @method,
|
24
|
-
path:
|
25
|
-
|
26
|
-
|
77
|
+
path: @path,
|
78
|
+
content_type: @content_type,
|
79
|
+
body: @body,
|
80
|
+
error: @error
|
27
81
|
}
|
28
82
|
end
|
29
83
|
end
|
@@ -26,13 +26,22 @@ module Esplanade
|
|
26
26
|
raise BodyIsNotJson, message
|
27
27
|
end
|
28
28
|
|
29
|
+
def reduced_version
|
30
|
+
@reduced_version ||= if to_string.size >= 1000
|
31
|
+
"#{to_string[0..499]}...#{to_string[500..-1]}"
|
32
|
+
else
|
33
|
+
to_string
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
29
37
|
private
|
30
38
|
|
31
39
|
def message
|
32
40
|
{
|
33
41
|
method: @raw_request.method,
|
34
42
|
path: @raw_request.path,
|
35
|
-
|
43
|
+
content_type: @raw_request.content_type,
|
44
|
+
body: reduced_version
|
36
45
|
}
|
37
46
|
end
|
38
47
|
end
|
@@ -10,6 +10,7 @@ module Esplanade
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def valid!
|
13
|
+
raise ContentTypeIsNotJson, mini_message unless @doc.content_type == 'application/json'
|
13
14
|
@error ||= JSON::Validator.fully_validate(@doc.json_schema, @raw.body.to_hash)
|
14
15
|
|
15
16
|
raise Invalid, message unless @error.empty?
|
@@ -17,10 +18,19 @@ module Esplanade
|
|
17
18
|
|
18
19
|
private
|
19
20
|
|
21
|
+
def mini_message
|
22
|
+
{
|
23
|
+
method: @doc.method,
|
24
|
+
path: @doc.path,
|
25
|
+
content_type: @doc.content_type
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
20
29
|
def message
|
21
30
|
{
|
22
31
|
method: @raw.method,
|
23
32
|
path: @raw.path,
|
33
|
+
content_type: @raw.content_type,
|
24
34
|
body: @raw.body.to_hash,
|
25
35
|
error: @error
|
26
36
|
}
|
data/lib/esplanade/version.rb
CHANGED
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.
|
4
|
+
version: 1.3.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: 2018-
|
11
|
+
date: 2018-03-16 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: '
|
59
|
+
version: '2.0'
|
60
60
|
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
62
|
+
version: 2.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: '
|
69
|
+
version: '2.0'
|
70
70
|
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
72
|
+
version: 2.0.0
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: bundler
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|