fictium 0.1.0 → 0.2.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/.gitignore +2 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +4 -4
- data/README.md +11 -1
- data/lib/fictium/configurations/api_blueprint.rb +31 -0
- data/lib/fictium/configurations/configuration.rb +20 -10
- data/lib/fictium/exporters/api_blueprint_exporter.rb +65 -0
- data/lib/fictium/exporters/api_blueprint_exporter/action_formatter.rb +32 -0
- data/lib/fictium/exporters/api_blueprint_exporter/base_formatter.rb +16 -0
- data/lib/fictium/exporters/api_blueprint_exporter/example_formatter.rb +67 -0
- data/lib/fictium/exporters/api_blueprint_exporter/footer_formatter.rb +43 -0
- data/lib/fictium/exporters/api_blueprint_exporter/header_formatter.rb +28 -0
- data/lib/fictium/exporters/api_blueprint_exporter/resource_formatter.rb +31 -0
- data/lib/fictium/loader.rb +4 -0
- data/lib/fictium/rspec/actions.rb +8 -0
- data/lib/fictium/rspec/autocomplete/example.rb +28 -2
- data/lib/fictium/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 421d8ab0b9aa1bb7982edf6cf39a156179f2ec1f02c72b7b79bb96e8cfc33f05
|
4
|
+
data.tar.gz: 936e8e3849fe1ef47f5c4af212cb7b3985def25284c1f755188f0b42a545b4e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cc22b7038a90471b18054314feaa182d558fcf29c6f79926ec9c1ccdce4267b69e1fda8b416b1605abbf3b0395c7210c1a17e11c29939fb86ef68e7a491f371
|
7
|
+
data.tar.gz: 29044b70d6d0ad7ad05f08eaa565979d43f0827dc554ab81c3c87926bede9b3ecd4b06c171e0071970c76017a5d0b7bfc0b43ca31a10b9b231b3d289614df54a
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -17,6 +17,15 @@
|
|
17
17
|
|
18
18
|
## LOG
|
19
19
|
|
20
|
+
### 0.2.0 (2019-11-12)
|
21
|
+
|
22
|
+
New exporter: API Blueprint.
|
23
|
+
|
24
|
+
#### Changes
|
25
|
+
|
26
|
+
- Fixed some autocomplete from RSpec.
|
27
|
+
- Created the new API Blueprint exporter.
|
28
|
+
|
20
29
|
### 0.1.0 (2019-11-06)
|
21
30
|
|
22
31
|
Initial release, with Swagger exporter and RSpec integration.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fictium (0.
|
4
|
+
fictium (0.2.0)
|
5
5
|
activesupport (>= 5.3, < 6.2)
|
6
6
|
json-schema (~> 2.8)
|
7
7
|
verbs (~> 2.1.4)
|
@@ -71,7 +71,7 @@ GEM
|
|
71
71
|
builder (3.2.3)
|
72
72
|
byebug (11.0.1)
|
73
73
|
concurrent-ruby (1.1.5)
|
74
|
-
crass (1.0.
|
74
|
+
crass (1.0.5)
|
75
75
|
diff-lcs (1.3)
|
76
76
|
docile (1.3.2)
|
77
77
|
erubi (1.9.0)
|
@@ -85,7 +85,7 @@ GEM
|
|
85
85
|
json (2.2.0)
|
86
86
|
json-schema (2.8.1)
|
87
87
|
addressable (>= 2.4)
|
88
|
-
loofah (2.
|
88
|
+
loofah (2.3.1)
|
89
89
|
crass (~> 1.0.2)
|
90
90
|
nokogiri (>= 1.5.9)
|
91
91
|
mail (2.7.1)
|
@@ -98,7 +98,7 @@ GEM
|
|
98
98
|
mini_portile2 (2.4.0)
|
99
99
|
minitest (5.12.0)
|
100
100
|
nio4r (2.5.2)
|
101
|
-
nokogiri (1.10.
|
101
|
+
nokogiri (1.10.5)
|
102
102
|
mini_portile2 (~> 2.4.0)
|
103
103
|
parallel (1.18.0)
|
104
104
|
parser (2.6.5.0)
|
data/README.md
CHANGED
@@ -7,7 +7,17 @@ you can then transform it into easy REST documentation.
|
|
7
7
|
|
8
8
|
For the initial release, the support is focused explicitly on generating documentation from [RSpec](https://rspec.info/) tests, and generate an [OpenAPI](https://github.com/OAI/OpenAPI-Specification) [V3.0.2](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md) Document.
|
9
9
|
|
10
|
-
|
10
|
+
The current Gem version allows to export into the following formats:
|
11
|
+
|
12
|
+
| Exporter | Class name | Notes |
|
13
|
+
|--- |--- |--- |
|
14
|
+
| [OpenApi 3.0](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md) | `Fictium::OpenApi::V3Exporter` | The default exporter for the current Gem version. It doesn't include 100% of the OpenAPI specification, but it works for the most common use cases. It's the format [Swagger](https://swagger.io/) uses for documentation. |
|
15
|
+
| [API Blueprint](https://apiblueprint.org/documentation/specification.html) | `Fictium::ApiBlueprintExporter`| Used by [Apiary](https://apiary.io/). A superset of Markdown with special keywords and controls. |
|
16
|
+
|
17
|
+
Future versions may provide:
|
18
|
+
|
19
|
+
- OpenApi 1.0 and 2.0
|
20
|
+
- Custom HTML exporter
|
11
21
|
|
12
22
|
## Installation
|
13
23
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Fictium
|
2
|
+
class Configuration
|
3
|
+
class ApiBlueprint
|
4
|
+
attr_accessor :resources_group_name, :host, :footer_header,
|
5
|
+
:api_version_formatter, :terms_of_service_formatter, :license_formatter
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
self.host = 'https://change.me.at.api_blueprint.config'
|
9
|
+
self.resources_group_name = 'Resources'
|
10
|
+
self.footer_header = 'Information and references'
|
11
|
+
self.api_version_formatter = method(:format_api_version)
|
12
|
+
self.terms_of_service_formatter = method(:format_terms_of_service)
|
13
|
+
self.license_formatter = method(:format_license)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def format_api_version(api_version)
|
19
|
+
"API version: #{api_version}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def format_terms_of_service(terms_of_service)
|
23
|
+
"[Terms of service](#{terms_of_service})."
|
24
|
+
end
|
25
|
+
|
26
|
+
def format_license(license)
|
27
|
+
"[#{license[:name]}](#{license[:url]}) license."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -8,18 +8,19 @@ module Fictium
|
|
8
8
|
http_cookie path_info x-frame-options x-xss-protection x-content-type-options
|
9
9
|
x-download-options x-permitted-cross-domain-policies referrer-policy
|
10
10
|
https script_name http_host remote_addr http_user_agent
|
11
|
-
http_authorization content_length raw_post_data
|
11
|
+
http_authorization content_length raw_post_data referrer-policy
|
12
12
|
].freeze
|
13
13
|
private_constant :VOWEL
|
14
14
|
|
15
|
-
attr_reader :info
|
15
|
+
attr_reader :info, :api_blueprint
|
16
16
|
attr_accessor :exporters, :summary_format, :default_action_descriptors,
|
17
17
|
:unknown_action_descriptor, :default_subject, :fixture_path,
|
18
18
|
:export_path, :default_response_content_type, :pretty_print,
|
19
|
-
:ignored_header_values, :ignored_header_groups
|
19
|
+
:ignored_header_values, :ignored_header_groups, :default_person
|
20
20
|
|
21
21
|
def initialize
|
22
22
|
@info = Fictium::Configuration::Info.new
|
23
|
+
@api_blueprint = Fictium::Configuration::ApiBlueprint.new
|
23
24
|
@exporters = [Fictium::OpenApi::V3Exporter.new]
|
24
25
|
|
25
26
|
@summary_format = method(:default_summary_format)
|
@@ -36,6 +37,7 @@ module Fictium
|
|
36
37
|
@default_action_descriptors = {
|
37
38
|
default_summary_for_index: method(:default_summary_for_index),
|
38
39
|
default_summary_for_show: method(:default_summary_for_show),
|
40
|
+
default_summary_for_create: method(:default_summary_for_create),
|
39
41
|
default_summary_for_update: method(:default_summary_for_update),
|
40
42
|
default_summary_for_destroy: method(:default_summary_for_destroy)
|
41
43
|
}
|
@@ -43,9 +45,10 @@ module Fictium
|
|
43
45
|
end
|
44
46
|
|
45
47
|
def setup_strings
|
46
|
-
@default_subject =
|
48
|
+
@default_subject = nil
|
47
49
|
@export_path = 'doc'
|
48
50
|
@default_response_content_type = 'text/plain'
|
51
|
+
@default_person = :second
|
49
52
|
end
|
50
53
|
|
51
54
|
def default_summary_format(resources)
|
@@ -54,30 +57,37 @@ module Fictium
|
|
54
57
|
|
55
58
|
def default_unknown_action_descriptor(action, action_name)
|
56
59
|
name = action_name.humanize
|
57
|
-
"#{conjugate(name)}
|
60
|
+
"#{conjugate(name)} #{get_preposition(name)} #{action.resource.name}."
|
58
61
|
end
|
59
62
|
|
60
63
|
def default_summary_for_index(action)
|
61
|
-
"
|
64
|
+
"List all available #{action.resource.name.pluralize}"
|
62
65
|
end
|
63
66
|
|
64
67
|
def default_summary_for_show(action)
|
65
68
|
name = action.resource.name
|
66
|
-
"
|
69
|
+
"Show details of #{get_preposition(name)} #{name}."
|
70
|
+
end
|
71
|
+
|
72
|
+
def default_summary_for_create(action)
|
73
|
+
name = action.resource.name
|
74
|
+
"Create a new #{name}."
|
67
75
|
end
|
68
76
|
|
69
77
|
def default_summary_for_update(action)
|
70
78
|
name = action.resource.name
|
71
|
-
"
|
79
|
+
"Update #{get_preposition(name)} #{name}."
|
72
80
|
end
|
73
81
|
|
74
82
|
def default_summary_for_destroy(action)
|
75
83
|
name = action.resource.name
|
76
|
-
"
|
84
|
+
"Destroy #{get_preposition(name)} #{name}."
|
77
85
|
end
|
78
86
|
|
79
87
|
def conjugate(name)
|
80
|
-
::Verbs::Conjugator.conjugate name, subject: default_subject,
|
88
|
+
::Verbs::Conjugator.conjugate name, subject: default_subject,
|
89
|
+
tense: :present,
|
90
|
+
person: default_person
|
81
91
|
end
|
82
92
|
|
83
93
|
def get_preposition(resource_name)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative 'api_blueprint_exporter/base_formatter'
|
2
|
+
|
3
|
+
require_relative 'api_blueprint_exporter/header_formatter'
|
4
|
+
require_relative 'api_blueprint_exporter/resource_formatter'
|
5
|
+
require_relative 'api_blueprint_exporter/action_formatter'
|
6
|
+
require_relative 'api_blueprint_exporter/example_formatter'
|
7
|
+
require_relative 'api_blueprint_exporter/footer_formatter'
|
8
|
+
|
9
|
+
module Fictium
|
10
|
+
class ApiBlueprintExporter
|
11
|
+
def export(document)
|
12
|
+
result = process_file(document).presence || ''
|
13
|
+
FileUtils.mkdir_p(File.dirname(export_file))
|
14
|
+
File.write(export_file, result)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def process_file(document)
|
20
|
+
list = [build_header(document), build_footer(document), build_resources(document)]
|
21
|
+
clean_items(list)
|
22
|
+
end
|
23
|
+
|
24
|
+
def export_file
|
25
|
+
@export_file ||=
|
26
|
+
File.join(Fictium.configuration.export_path, 'api_blueprint', 'api.apib')
|
27
|
+
end
|
28
|
+
|
29
|
+
def build_header(document)
|
30
|
+
header_formatter.format(document)
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_resources(document)
|
34
|
+
mapped_resources = document.resources.map do |resource|
|
35
|
+
resource_formatter.format(resource)
|
36
|
+
end
|
37
|
+
mapped_resources = clean_items(mapped_resources)
|
38
|
+
mapped_resources.present? ? "# Group #{resources_group_name} \n\n#{mapped_resources}" : ''
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_footer(document)
|
42
|
+
footer_formatter.format(document)
|
43
|
+
end
|
44
|
+
|
45
|
+
def header_formatter
|
46
|
+
HeaderFormatter.new
|
47
|
+
end
|
48
|
+
|
49
|
+
def resource_formatter
|
50
|
+
@resource_formatter ||= ResourceFormatter.new
|
51
|
+
end
|
52
|
+
|
53
|
+
def footer_formatter
|
54
|
+
FooterFormatter.new
|
55
|
+
end
|
56
|
+
|
57
|
+
def resources_group_name
|
58
|
+
Fictium.configuration.api_blueprint.resources_group_name
|
59
|
+
end
|
60
|
+
|
61
|
+
def clean_items(items)
|
62
|
+
items.select(&:present?).join("\n\n")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Fictium
|
2
|
+
class ApiBlueprintExporter
|
3
|
+
class ActionFormatter < Fictium::ApiBlueprintExporter::BaseFormatter
|
4
|
+
protected
|
5
|
+
|
6
|
+
def format_sections(action)
|
7
|
+
[build_header(action), build_examples(action)]
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def build_header(action)
|
13
|
+
result = "## #{action.summary} [#{action.method.to_s.upcase} #{action.path}]"
|
14
|
+
description = action.description.present? ? "\n\n#{action.description}\n" : ''
|
15
|
+
"#{result}#{description}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def build_examples(action)
|
19
|
+
default_example = action.default_example
|
20
|
+
examples = action.examples.reject { |example| example == default_example }
|
21
|
+
sections = ([default_example] + examples).map do |example|
|
22
|
+
example_formatter.format(example)
|
23
|
+
end
|
24
|
+
join_sections(sections)
|
25
|
+
end
|
26
|
+
|
27
|
+
def example_formatter
|
28
|
+
@example_formatter ||= ExampleFormatter.new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fictium
|
2
|
+
class ApiBlueprintExporter
|
3
|
+
class BaseFormatter
|
4
|
+
def format(subject)
|
5
|
+
sections = format_sections(subject)
|
6
|
+
join_sections(sections)
|
7
|
+
end
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def join_sections(sections)
|
12
|
+
sections.each(&:strip).select(&:present?).join("\n\n")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Fictium
|
2
|
+
class ApiBlueprintExporter
|
3
|
+
class ExampleFormatter < Fictium::ApiBlueprintExporter::BaseFormatter
|
4
|
+
protected
|
5
|
+
|
6
|
+
def format_sections(example)
|
7
|
+
[format_request(example), format_response(example)]
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def format_request(example)
|
13
|
+
return '' if example.request[:body].blank?
|
14
|
+
|
15
|
+
result = request_head(example)
|
16
|
+
result += "\n #{example.description}\n" if example.description.present?
|
17
|
+
result += parse_http_object(example.request)
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
def format_response(example)
|
22
|
+
result = response_head(example)
|
23
|
+
result += parse_http_object(example.response)
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
def parse_http_object(http_object)
|
28
|
+
"#{parse_header(http_object[:header])}#{parse_body(http_object)}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def parse_header(header)
|
32
|
+
return '' if header.blank?
|
33
|
+
|
34
|
+
mapped_headers = header.map do |key, value|
|
35
|
+
" #{key}: #{value}"
|
36
|
+
end
|
37
|
+
<<~HEREDOC
|
38
|
+
\x20
|
39
|
+
+ Header
|
40
|
+
|
41
|
+
#{mapped_headers.join("\n")}
|
42
|
+
HEREDOC
|
43
|
+
end
|
44
|
+
|
45
|
+
def request_head(example)
|
46
|
+
"+ Request #{example.summary} \n"
|
47
|
+
end
|
48
|
+
|
49
|
+
def response_head(example)
|
50
|
+
"+ Response #{example.response[:status]} (#{example.response[:content_type]})\n"
|
51
|
+
end
|
52
|
+
|
53
|
+
def parse_body(http_element)
|
54
|
+
return "\n + Body" if http_element[:body].blank?
|
55
|
+
|
56
|
+
<<~HEREDOC
|
57
|
+
\x20
|
58
|
+
+ Body
|
59
|
+
|
60
|
+
```
|
61
|
+
#{http_element[:body]}
|
62
|
+
```
|
63
|
+
HEREDOC
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Fictium
|
2
|
+
class ApiBlueprintExporter
|
3
|
+
class FooterFormatter < Fictium::ApiBlueprintExporter::BaseFormatter
|
4
|
+
delegate :configuration, to: :Fictium
|
5
|
+
delegate :info, :api_blueprint, to: :configuration
|
6
|
+
delegate :api_version_formatter, :terms_of_service_formatter, :license_formatter,
|
7
|
+
to: :api_blueprint
|
8
|
+
|
9
|
+
def format(document)
|
10
|
+
list = super(document)
|
11
|
+
list.present? ? "# #{api_blueprint.footer_header}\n\n#{list}" : ''
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def format_sections(_document)
|
17
|
+
[
|
18
|
+
api_version_reference,
|
19
|
+
terms_of_service_reference,
|
20
|
+
license_reference
|
21
|
+
]
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def api_version_reference
|
27
|
+
return '' if info.version.blank?
|
28
|
+
|
29
|
+
api_version_formatter.call(info.version)
|
30
|
+
end
|
31
|
+
|
32
|
+
def terms_of_service_reference
|
33
|
+
return '' if info.terms_of_service.blank?
|
34
|
+
|
35
|
+
terms_of_service_formatter.call(info.terms_of_service)
|
36
|
+
end
|
37
|
+
|
38
|
+
def license_reference
|
39
|
+
info.license.present? ? license_formatter.call(info.license) : ''
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Fictium
|
2
|
+
class ApiBlueprintExporter
|
3
|
+
class HeaderFormatter
|
4
|
+
delegate :title, :description, to: :info
|
5
|
+
|
6
|
+
def format(_document)
|
7
|
+
<<~HEREDOC
|
8
|
+
Format: 1A
|
9
|
+
Host: #{host}
|
10
|
+
|
11
|
+
# #{title}
|
12
|
+
|
13
|
+
#{description}
|
14
|
+
HEREDOC
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def info
|
20
|
+
Fictium.configuration.info
|
21
|
+
end
|
22
|
+
|
23
|
+
def host
|
24
|
+
Fictium.configuration.api_blueprint.host
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Fictium
|
2
|
+
class ApiBlueprintExporter
|
3
|
+
class ResourceFormatter < Fictium::ApiBlueprintExporter::BaseFormatter
|
4
|
+
protected
|
5
|
+
|
6
|
+
def format_sections(resource)
|
7
|
+
[build_header(resource), build_actions(resource)]
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def build_header(resource)
|
13
|
+
header = "# #{resource.name&.pluralize&.humanize} [#{resource.base_path}]"
|
14
|
+
header += "\n#{resource.summary.capitalize}\n" if resource.summary.present?
|
15
|
+
description = resource.description.present? ? "\n#{resource.description}\n" : ''
|
16
|
+
"#{header}#{description}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_actions(resource)
|
20
|
+
sections = resource.actions.map do |action|
|
21
|
+
action_formatter.format(action)
|
22
|
+
end
|
23
|
+
join_sections(sections)
|
24
|
+
end
|
25
|
+
|
26
|
+
def action_formatter
|
27
|
+
@action_formatter ||= ActionFormatter.new
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/fictium/loader.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'configurations/configuration'
|
2
2
|
require_relative 'configurations/info'
|
3
|
+
require_relative 'configurations/api_blueprint'
|
3
4
|
|
4
5
|
require_relative 'evaluators/parameter_evaluator'
|
5
6
|
require_relative 'evaluators/schema_evaluator'
|
@@ -13,3 +14,6 @@ require_relative 'poros/resource'
|
|
13
14
|
|
14
15
|
# Require default (OpenApi v3) exporter
|
15
16
|
require_relative 'exporters/open_api/v3_exporter'
|
17
|
+
|
18
|
+
# Other exporters created by this gem
|
19
|
+
require_relative 'exporters/api_blueprint_exporter'
|
@@ -20,6 +20,14 @@ module Fictium
|
|
20
20
|
metadata[:fictium_action].add_params_in(section, &block)
|
21
21
|
end
|
22
22
|
|
23
|
+
def action_summary(text)
|
24
|
+
metadata[:fictium_action].summary = text
|
25
|
+
end
|
26
|
+
|
27
|
+
def action_description(text)
|
28
|
+
metadata[:fictium_action].description = text
|
29
|
+
end
|
30
|
+
|
23
31
|
def example(*args, **kwargs)
|
24
32
|
Fictium::RSpec::Proxies::Example.new(self, args, kwargs)
|
25
33
|
end
|
@@ -8,7 +8,8 @@ module Fictium
|
|
8
8
|
example.response.merge!(
|
9
9
|
status: response.status,
|
10
10
|
body: response.body,
|
11
|
-
content_type: response.content_type
|
11
|
+
content_type: response.content_type,
|
12
|
+
header: filter_header(response.header.to_h)
|
12
13
|
)
|
13
14
|
process_http_request(example, response.request)
|
14
15
|
return unless example.default?
|
@@ -26,7 +27,8 @@ module Fictium
|
|
26
27
|
example.request ||= {}
|
27
28
|
example.request.merge!(
|
28
29
|
content_type: request.content_type,
|
29
|
-
body: request.body.string
|
30
|
+
body: request.body.string,
|
31
|
+
header: filter_header(request.headers.to_h)
|
30
32
|
)
|
31
33
|
extract_method(example, request)
|
32
34
|
return unless example.default?
|
@@ -38,6 +40,30 @@ module Fictium
|
|
38
40
|
action = example.action
|
39
41
|
action.method = request.method.downcase.to_sym if action.method.blank?
|
40
42
|
end
|
43
|
+
|
44
|
+
def filter_header(header)
|
45
|
+
valid_keys = header.keys.select { |name| valid_header?(name) }
|
46
|
+
header.slice(*valid_keys).transform_keys do |key|
|
47
|
+
(key.start_with?('HTTP_') ? key.sub('HTTP_', '') : key).sub('_', '-')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def valid_header?(name)
|
52
|
+
downcase_name = name.downcase
|
53
|
+
out_of_header_group?(downcase_name) && out_of_excluded_headers?(downcase_name)
|
54
|
+
end
|
55
|
+
|
56
|
+
def out_of_header_group?(name)
|
57
|
+
ignored_header_groups.none? { |group| name.start_with?(group) }
|
58
|
+
end
|
59
|
+
|
60
|
+
def out_of_excluded_headers?(name)
|
61
|
+
Fictium.configuration.ignored_header_values.exclude?(name)
|
62
|
+
end
|
63
|
+
|
64
|
+
def ignored_header_groups
|
65
|
+
Fictium.configuration.ignored_header_groups
|
66
|
+
end
|
41
67
|
end
|
42
68
|
end
|
43
69
|
end
|
data/lib/fictium/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fictium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ramiro Rojo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -258,11 +258,19 @@ files:
|
|
258
258
|
- bin/setup
|
259
259
|
- fictium.gemspec
|
260
260
|
- lib/fictium.rb
|
261
|
+
- lib/fictium/configurations/api_blueprint.rb
|
261
262
|
- lib/fictium/configurations/configuration.rb
|
262
263
|
- lib/fictium/configurations/info.rb
|
263
264
|
- lib/fictium/engine.rb
|
264
265
|
- lib/fictium/evaluators/parameter_evaluator.rb
|
265
266
|
- lib/fictium/evaluators/schema_evaluator.rb
|
267
|
+
- lib/fictium/exporters/api_blueprint_exporter.rb
|
268
|
+
- lib/fictium/exporters/api_blueprint_exporter/action_formatter.rb
|
269
|
+
- lib/fictium/exporters/api_blueprint_exporter/base_formatter.rb
|
270
|
+
- lib/fictium/exporters/api_blueprint_exporter/example_formatter.rb
|
271
|
+
- lib/fictium/exporters/api_blueprint_exporter/footer_formatter.rb
|
272
|
+
- lib/fictium/exporters/api_blueprint_exporter/header_formatter.rb
|
273
|
+
- lib/fictium/exporters/api_blueprint_exporter/resource_formatter.rb
|
266
274
|
- lib/fictium/exporters/open_api/schemas/3.0.0.json
|
267
275
|
- lib/fictium/exporters/open_api/v3_exporter.rb
|
268
276
|
- lib/fictium/exporters/open_api/v3_exporter/content_formatter.rb
|