brainstem 1.4.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +77 -0
- data/README.md +119 -0
- data/docs/api_doc_generator.markdown +45 -4
- data/docs/brainstem_executable.markdown +1 -1
- data/docs/oas_2_docgen.png +0 -0
- data/docs/oas_2_docgen_ascii.txt +78 -0
- data/lib/brainstem/api_docs.rb +23 -9
- data/lib/brainstem/api_docs/abstract_collection.rb +0 -13
- data/lib/brainstem/api_docs/atlas.rb +0 -14
- data/lib/brainstem/api_docs/builder.rb +0 -14
- data/lib/brainstem/api_docs/controller.rb +7 -16
- data/lib/brainstem/api_docs/controller_collection.rb +0 -3
- data/lib/brainstem/api_docs/endpoint.rb +73 -19
- data/lib/brainstem/api_docs/endpoint_collection.rb +0 -7
- data/lib/brainstem/api_docs/formatters/abstract_formatter.rb +0 -2
- data/lib/brainstem/api_docs/formatters/markdown/controller_formatter.rb +1 -9
- data/lib/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter.rb +1 -9
- data/lib/brainstem/api_docs/formatters/markdown/endpoint_formatter.rb +39 -24
- data/lib/brainstem/api_docs/formatters/markdown/helper.rb +0 -13
- data/lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb +22 -35
- data/lib/brainstem/api_docs/formatters/open_api_specification/helper.rb +66 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/controller_formatter.rb +57 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/param_definitions_formatter.rb +311 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/response_definitions_formatter.rb +197 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_collection_formatter.rb +60 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_formatter.rb +162 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/info_formatter.rb +126 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/presenter_formatter.rb +132 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/security_definitions_formatter.rb +99 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/tags_formatter.rb +123 -0
- data/lib/brainstem/api_docs/introspectors/abstract_introspector.rb +0 -7
- data/lib/brainstem/api_docs/introspectors/rails_introspector.rb +1 -20
- data/lib/brainstem/api_docs/presenter.rb +21 -27
- data/lib/brainstem/api_docs/presenter_collection.rb +1 -11
- data/lib/brainstem/api_docs/resolver.rb +1 -8
- data/lib/brainstem/api_docs/sinks/abstract_sink.rb +0 -4
- data/lib/brainstem/api_docs/sinks/controller_presenter_multifile_sink.rb +0 -9
- data/lib/brainstem/api_docs/sinks/open_api_specification_sink.rb +234 -0
- data/lib/brainstem/api_docs/sinks/stdout_sink.rb +0 -5
- data/lib/brainstem/cli.rb +0 -13
- data/lib/brainstem/cli/abstract_command.rb +0 -7
- data/lib/brainstem/cli/generate_api_docs_command.rb +48 -24
- data/lib/brainstem/concerns/controller_dsl.rb +288 -145
- data/lib/brainstem/concerns/formattable.rb +0 -5
- data/lib/brainstem/concerns/optional.rb +0 -1
- data/lib/brainstem/concerns/presenter_dsl.rb +2 -21
- data/lib/brainstem/dsl/configuration.rb +0 -11
- data/lib/brainstem/presenter.rb +0 -4
- data/lib/brainstem/version.rb +1 -1
- data/spec/brainstem/api_docs/abstract_collection_spec.rb +0 -11
- data/spec/brainstem/api_docs/atlas_spec.rb +0 -6
- data/spec/brainstem/api_docs/builder_spec.rb +0 -4
- data/spec/brainstem/api_docs/controller_collection_spec.rb +0 -2
- data/spec/brainstem/api_docs/controller_spec.rb +29 -18
- data/spec/brainstem/api_docs/endpoint_collection_spec.rb +0 -6
- data/spec/brainstem/api_docs/endpoint_spec.rb +343 -13
- data/spec/brainstem/api_docs/formatters/abstract_formatter_spec.rb +0 -2
- data/spec/brainstem/api_docs/formatters/markdown/controller_formatter_spec.rb +0 -1
- data/spec/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter_spec.rb +0 -5
- data/spec/brainstem/api_docs/formatters/markdown/endpoint_formatter_spec.rb +94 -8
- data/spec/brainstem/api_docs/formatters/markdown/helper_spec.rb +0 -8
- data/spec/brainstem/api_docs/formatters/markdown/presenter_formatter_spec.rb +0 -7
- data/spec/brainstem/api_docs/formatters/open_api_specification/helper_spec.rb +210 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/controller_formatter_spec.rb +81 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/param_definitions_formatter_spec.rb +672 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/response_definitions_formatter_spec.rb +335 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_collection_formatter_spec.rb +59 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_formatter_spec.rb +308 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/info_formatter_spec.rb +89 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/presenter_formatter_spec.rb +430 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/security_definitions_formatter_spec.rb +190 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/tags_formatter_spec.rb +217 -0
- data/spec/brainstem/api_docs/introspectors/abstract_introspector_spec.rb +0 -2
- data/spec/brainstem/api_docs/introspectors/rails_introspector_spec.rb +0 -2
- data/spec/brainstem/api_docs/presenter_collection_spec.rb +0 -2
- data/spec/brainstem/api_docs/presenter_spec.rb +58 -18
- data/spec/brainstem/api_docs/resolver_spec.rb +0 -1
- data/spec/brainstem/api_docs/sinks/controller_presenter_multifile_sink_spec.rb +0 -2
- data/spec/brainstem/api_docs/sinks/open_api_specification_sink_spec.rb +371 -0
- data/spec/brainstem/api_docs_spec.rb +2 -0
- data/spec/brainstem/cli/abstract_command_spec.rb +0 -4
- data/spec/brainstem/cli/generate_api_docs_command_spec.rb +53 -2
- data/spec/brainstem/concerns/controller_dsl_spec.rb +430 -64
- data/spec/brainstem/concerns/presenter_dsl_spec.rb +0 -20
- data/spec/brainstem/preloader_spec.rb +0 -7
- data/spec/brainstem/presenter_spec.rb +0 -1
- data/spec/dummy/rails.rb +0 -1
- data/spec/spec_helpers/db.rb +0 -1
- metadata +37 -2
@@ -40,7 +40,6 @@ module Brainstem
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
|
44
43
|
describe "formatting" do
|
45
44
|
describe "#format_endpoints!" do
|
46
45
|
it "joins each documentable endpoint" do
|
@@ -50,7 +49,6 @@ module Brainstem
|
|
50
49
|
end
|
51
50
|
end
|
52
51
|
|
53
|
-
|
54
52
|
describe "#format_zero_text!" do
|
55
53
|
it "appends the zero text" do
|
56
54
|
subject.send(:format_zero_text!)
|
@@ -59,7 +57,6 @@ module Brainstem
|
|
59
57
|
end
|
60
58
|
end
|
61
59
|
|
62
|
-
|
63
60
|
describe "#all_formatted_endpoints" do
|
64
61
|
it "retrieves all formatted endpoints" do
|
65
62
|
documentable_collection = Object.new
|
@@ -77,8 +74,6 @@ module Brainstem
|
|
77
74
|
end
|
78
75
|
end
|
79
76
|
end
|
80
|
-
|
81
|
-
|
82
77
|
end
|
83
78
|
end
|
84
79
|
end
|
@@ -18,6 +18,7 @@ module Brainstem
|
|
18
18
|
describe "#call" do
|
19
19
|
before do
|
20
20
|
stub(endpoint).nodoc? { nodoc }
|
21
|
+
stub(endpoint).custom_response { {} }
|
21
22
|
end
|
22
23
|
|
23
24
|
context "when it is nodoc" do
|
@@ -78,7 +79,6 @@ module Brainstem
|
|
78
79
|
end
|
79
80
|
end
|
80
81
|
|
81
|
-
|
82
82
|
describe "#format_description!" do
|
83
83
|
context "when present" do
|
84
84
|
before do
|
@@ -106,7 +106,6 @@ module Brainstem
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
|
110
109
|
describe "#format_endpoint!" do
|
111
110
|
let(:endpoint_args) { { http_methods: %w(get post), path: "/widgets(.:format)" } }
|
112
111
|
|
@@ -127,7 +126,6 @@ module Brainstem
|
|
127
126
|
end
|
128
127
|
end
|
129
128
|
|
130
|
-
|
131
129
|
describe "#format_params!" do
|
132
130
|
let(:const) do
|
133
131
|
Class.new do
|
@@ -316,15 +314,103 @@ module Brainstem
|
|
316
314
|
end
|
317
315
|
|
318
316
|
describe "#format_presents!" do
|
319
|
-
|
317
|
+
context "when has a custom response" do
|
318
|
+
before do
|
319
|
+
stub(endpoint).custom_response { true }
|
320
|
+
stub(endpoint).custom_response_configuration_tree { custom_response_configuration }
|
321
|
+
end
|
320
322
|
|
321
|
-
|
322
|
-
|
323
|
-
|
323
|
+
context "when the response type is a hash" do
|
324
|
+
let(:custom_response_configuration) do
|
325
|
+
{
|
326
|
+
'_config' => {
|
327
|
+
'type' => 'hash',
|
328
|
+
},
|
329
|
+
'widget_name' => {
|
330
|
+
'_config' => {
|
331
|
+
'type' => 'string',
|
332
|
+
'info' => 'the name of the widget',
|
333
|
+
'nodoc' => false
|
334
|
+
},
|
335
|
+
},
|
336
|
+
'widget_permission' => {
|
337
|
+
'_config' => {
|
338
|
+
'type' => 'hash',
|
339
|
+
'nodoc' => false
|
340
|
+
},
|
341
|
+
'can_edit' => {
|
342
|
+
'_config' => {
|
343
|
+
'type' => 'boolean',
|
344
|
+
'info' => 'can edit the widget',
|
345
|
+
'nodoc' => false
|
346
|
+
},
|
347
|
+
}
|
348
|
+
},
|
349
|
+
}.with_indifferent_access
|
350
|
+
end
|
351
|
+
|
352
|
+
it "formats the custom response" do
|
353
|
+
subject.send(:format_presents!)
|
354
|
+
|
355
|
+
output = subject.output
|
356
|
+
expect(output).to include("The resulting JSON is a hash with the following properties\n\n")
|
357
|
+
expect(output).to include("- `widget_name` (`String`) - the name of the widget\n")
|
358
|
+
expect(output).to include("- `widget_permission` (`Hash`)\n")
|
359
|
+
expect(output).to include(" - `can_edit` (`Boolean`) - can edit the widget\n")
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
context "when the response is an array" do
|
364
|
+
let(:custom_response_configuration) do
|
365
|
+
{
|
366
|
+
'_config' => {
|
367
|
+
'type' => 'array',
|
368
|
+
'item_type' => 'hash',
|
369
|
+
},
|
370
|
+
'widget_name' => {
|
371
|
+
'_config' => {
|
372
|
+
'type' => 'string',
|
373
|
+
'info' => 'the name of the widget',
|
374
|
+
'nodoc' => false
|
375
|
+
},
|
376
|
+
},
|
377
|
+
'widget_permissions' => {
|
378
|
+
'_config' => {
|
379
|
+
'type' => 'array',
|
380
|
+
'item_type' => 'hash',
|
381
|
+
'info' => 'the permissions of the widget',
|
382
|
+
'nodoc' => false
|
383
|
+
},
|
384
|
+
'can_edit' => {
|
385
|
+
'_config' => {
|
386
|
+
'type' => 'boolean',
|
387
|
+
'info' => 'can edit the widget',
|
388
|
+
'nodoc' => false
|
389
|
+
},
|
390
|
+
}
|
391
|
+
},
|
392
|
+
}.with_indifferent_access
|
393
|
+
end
|
394
|
+
|
395
|
+
it "formats the custom response" do
|
396
|
+
subject.send(:format_presents!)
|
397
|
+
|
398
|
+
output = subject.output
|
399
|
+
expect(output).to include "The resulting JSON is an array of objects with the following properties\n\n"
|
400
|
+
expect(output).to include("- `widget_name` (`String`) - the name of the widget\n")
|
401
|
+
expect(output).to include("- `widget_permissions` (`Array<Hash>`) - the permissions of the widget\n")
|
402
|
+
expect(output).to include(" - `can_edit` (`Boolean`) - can edit the widget\n")
|
403
|
+
end
|
404
|
+
end
|
324
405
|
end
|
325
406
|
|
326
|
-
context "when present" do
|
407
|
+
context "when custom response is absent and presenter is present" do
|
408
|
+
let(:presenter) { Object.new }
|
409
|
+
|
327
410
|
before do
|
411
|
+
stub(endpoint).custom_response { false }
|
412
|
+
stub(endpoint).presenter_title { "Sprocket Widget" }
|
413
|
+
stub(endpoint).relative_presenter_path_from_controller(:markdown) { "../../sprocket_widget.markdown" }
|
328
414
|
stub(endpoint).presenter { presenter }
|
329
415
|
end
|
330
416
|
|
@@ -32,21 +32,18 @@ module Brainstem
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
35
|
describe "#md_p" do
|
37
36
|
it "appends two newlines" do
|
38
37
|
expect(subject.md_p(lipsum)).to eq(lipsum + "\n\n")
|
39
38
|
end
|
40
39
|
end
|
41
40
|
|
42
|
-
|
43
41
|
describe "#md_strong" do
|
44
42
|
it "wraps the text in asterisk pairs" do
|
45
43
|
expect(subject.md_strong("Popeye")).to eq "**Popeye**"
|
46
44
|
end
|
47
45
|
end
|
48
46
|
|
49
|
-
|
50
47
|
describe "#md_code" do
|
51
48
|
it "renders the code between backtick blocks" do
|
52
49
|
expect(subject.md_code('var my_var = 1;')).to eq "```\nvar my_var = 1;\n```\n\n"
|
@@ -57,14 +54,12 @@ module Brainstem
|
|
57
54
|
end
|
58
55
|
end
|
59
56
|
|
60
|
-
|
61
57
|
describe "#md_inline_code" do
|
62
58
|
it "renders the code between single backticks" do
|
63
59
|
expect(subject.md_inline_code('my_var')).to eq "`my_var`"
|
64
60
|
end
|
65
61
|
end
|
66
62
|
|
67
|
-
|
68
63
|
describe "#md_ul" do
|
69
64
|
it "evaluates the block given to it in the instance's context" do
|
70
65
|
mock(subject).md_h1('hello') { }
|
@@ -76,7 +71,6 @@ module Brainstem
|
|
76
71
|
end
|
77
72
|
end
|
78
73
|
|
79
|
-
|
80
74
|
describe "#md_li" do
|
81
75
|
it "renders the text after a dash-space with a newline" do
|
82
76
|
expect(subject.md_li("text")).to eq "- text\n"
|
@@ -87,14 +81,12 @@ module Brainstem
|
|
87
81
|
end
|
88
82
|
end
|
89
83
|
|
90
|
-
|
91
84
|
describe "#md_a" do
|
92
85
|
it "renders the text in a bracket and includes a link in parens" do
|
93
86
|
expect(subject.md_a("text", "link.md")).to eq "[text](link.md)"
|
94
87
|
end
|
95
88
|
end
|
96
89
|
|
97
|
-
|
98
90
|
describe "#md_inline_type" do
|
99
91
|
it "renders the code between single backticks" do
|
100
92
|
expect(subject.md_inline_type("string")).to eq " (`String`)"
|
@@ -68,7 +68,6 @@ module Brainstem
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
|
72
71
|
describe "#format_brainstem_keys!" do
|
73
72
|
before do
|
74
73
|
stub(presenter).brainstem_keys { [ "sprockets", "widgets" ] }
|
@@ -80,7 +79,6 @@ module Brainstem
|
|
80
79
|
end
|
81
80
|
end
|
82
81
|
|
83
|
-
|
84
82
|
describe "#format_description!" do
|
85
83
|
context "when present" do
|
86
84
|
before do
|
@@ -107,7 +105,6 @@ module Brainstem
|
|
107
105
|
end
|
108
106
|
end
|
109
107
|
|
110
|
-
|
111
108
|
describe "#format_fields!" do
|
112
109
|
let(:presenter_class) do
|
113
110
|
Class.new(Brainstem::Presenter) do
|
@@ -315,7 +312,6 @@ module Brainstem
|
|
315
312
|
end
|
316
313
|
end
|
317
314
|
|
318
|
-
|
319
315
|
context "if it is conditional" do
|
320
316
|
before do
|
321
317
|
presenter_class.fields do
|
@@ -383,7 +379,6 @@ module Brainstem
|
|
383
379
|
end
|
384
380
|
end
|
385
381
|
|
386
|
-
|
387
382
|
describe "#format_filters!" do
|
388
383
|
let(:valid_filters) { {} }
|
389
384
|
|
@@ -440,7 +435,6 @@ module Brainstem
|
|
440
435
|
end
|
441
436
|
end
|
442
437
|
|
443
|
-
|
444
438
|
describe "format_sort_orders!" do
|
445
439
|
before do
|
446
440
|
stub(presenter).valid_sort_orders { sort_orders }
|
@@ -492,7 +486,6 @@ module Brainstem
|
|
492
486
|
end
|
493
487
|
end
|
494
488
|
|
495
|
-
|
496
489
|
describe "format_associations!" do
|
497
490
|
let(:associations) { {} }
|
498
491
|
let(:link) { nil }
|
@@ -0,0 +1,210 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'brainstem/api_docs/formatters/open_api_specification/helper'
|
3
|
+
|
4
|
+
module Brainstem
|
5
|
+
module ApiDocs
|
6
|
+
module Formatters
|
7
|
+
module OpenApiSpecification
|
8
|
+
describe Helper do
|
9
|
+
let(:klass) { Class.new { include Helper } }
|
10
|
+
|
11
|
+
subject { klass.new }
|
12
|
+
|
13
|
+
describe "presenter_title" do
|
14
|
+
let(:presenter) { Presenter }
|
15
|
+
let(:target_class) { "cool_stuff" }
|
16
|
+
|
17
|
+
before do
|
18
|
+
mock(presenter).contextual_documentation(:title) { title }
|
19
|
+
stub(presenter).target_class { target_class }
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when presenter has a title" do
|
23
|
+
let(:title) { "Awesome Sauce!" }
|
24
|
+
|
25
|
+
it "returns the title" do
|
26
|
+
expect(subject.presenter_title(presenter)).to eq(title)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when presenter does not have a title" do
|
31
|
+
let(:title) { nil }
|
32
|
+
|
33
|
+
it "returns the formatted target class of the presenter" do
|
34
|
+
expect(subject.presenter_title(presenter)).to eq("Cool Stuff")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "format_tag_name" do
|
40
|
+
context "when name is given" do
|
41
|
+
let(:title) { "awesome_sauce" }
|
42
|
+
|
43
|
+
it "returns the formatted name" do
|
44
|
+
expect(subject.format_tag_name(title)).to eq("Awesome Sauce")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "when name is nil" do
|
49
|
+
let(:title) { nil }
|
50
|
+
|
51
|
+
it "returns nil" do
|
52
|
+
expect(subject.format_tag_name(title)).to be_nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "format_description" do
|
58
|
+
context "when description is given" do
|
59
|
+
let(:description) { " lorem ipsum dolor sit amet " }
|
60
|
+
|
61
|
+
it "returns the formatted description" do
|
62
|
+
expect(subject.format_description(description)).to eq("Lorem ipsum dolor sit amet.")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when description is nil" do
|
67
|
+
let(:description) { "" }
|
68
|
+
|
69
|
+
it "returns nil" do
|
70
|
+
expect(subject.format_description(description)).to eq('')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "uncapitalize" do
|
76
|
+
context "when description is given" do
|
77
|
+
let(:description) { " Lorem ipsum dolor sit amet " }
|
78
|
+
|
79
|
+
it "returns the formatted description" do
|
80
|
+
expect(subject.uncapitalize(description)).to eq("lorem ipsum dolor sit amet")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "when description is nil" do
|
85
|
+
let(:description) { "" }
|
86
|
+
|
87
|
+
it "returns nil" do
|
88
|
+
expect(subject.uncapitalize(description)).to eq("")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "format_http_method" do
|
94
|
+
let(:endpoint) { OpenStruct.new(http_methods: %w(PATCH PUT)) }
|
95
|
+
|
96
|
+
it "returns the first downcased http method" do
|
97
|
+
expect(subject.format_http_method(endpoint)).to eq("patch")
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "type_and_format" do
|
102
|
+
context "when type is 'string'" do
|
103
|
+
it "returns the correct type and format" do
|
104
|
+
expect(subject.type_and_format('string')).to eq({ 'type' => 'string' })
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "when type is 'boolean'" do
|
109
|
+
it "returns the correct type and format" do
|
110
|
+
expect(subject.send(:type_and_format, 'boolean')).to eq({ 'type' => 'boolean' })
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context "when type is 'integer'" do
|
115
|
+
it "returns the correct type and format" do
|
116
|
+
expect(subject.send(:type_and_format, 'integer')).to eq({ 'type' => 'integer', 'format' => 'int32' })
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context "when type is 'long'" do
|
121
|
+
it "returns the correct type and format" do
|
122
|
+
expect(subject.send(:type_and_format, 'long')).to eq({ 'type' => 'integer', 'format' => 'int64' })
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "when type is 'float'" do
|
127
|
+
it "returns the correct type and format" do
|
128
|
+
expect(subject.send(:type_and_format, 'float')).to eq({ 'type' => 'number', 'format' => 'float' })
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "when type is 'double'" do
|
133
|
+
it "returns the correct type and format" do
|
134
|
+
expect(subject.send(:type_and_format, 'double')).to eq({ 'type' => 'number', 'format' => 'double' })
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context "when type is 'byte'" do
|
139
|
+
it "returns the correct type and format" do
|
140
|
+
expect(subject.send(:type_and_format, 'byte')).to eq({ 'type' => 'string', 'format' => 'byte' })
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context "when type is 'binary'" do
|
145
|
+
it "returns the correct type and format" do
|
146
|
+
expect(subject.send(:type_and_format, 'binary')).to eq({ 'type' => 'string', 'format' => 'binary' })
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context "when type is 'date'" do
|
151
|
+
it "returns the correct type and format" do
|
152
|
+
expect(subject.send(:type_and_format, 'date')).to eq({ 'type' => 'string', 'format' => 'date' })
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
context "when type is 'datetime'" do
|
157
|
+
it "returns the correct type and format" do
|
158
|
+
expect(subject.send(:type_and_format, 'datetime')).to eq({ 'type' => 'string', 'format' => 'date-time' })
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context "when type is 'password'" do
|
163
|
+
it "returns the correct type and format" do
|
164
|
+
expect(subject.send(:type_and_format, 'password')).to eq({ 'type' => 'string', 'format' => 'password' })
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context "when type is 'id'" do
|
169
|
+
it "returns the correct type and format" do
|
170
|
+
expect(subject.send(:type_and_format, 'id')).to eq({ 'type' => 'integer', 'format' => 'int32' })
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context "when type is 'decimal'" do
|
175
|
+
it "returns the correct type and format" do
|
176
|
+
expect(subject.send(:type_and_format, 'decimal')).to eq({ 'type' => 'number', 'format' => 'float' })
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context "when type is array" do
|
181
|
+
context "when item type is not specified" do
|
182
|
+
it "returns type as `array` and item type as `string`" do
|
183
|
+
expect(subject.send(:type_and_format, 'array')).to eq({
|
184
|
+
'type' => 'array',
|
185
|
+
'items' => { 'type' => 'string' }
|
186
|
+
})
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
context "when item type is specified" do
|
191
|
+
it "returns type as `array` and given item type" do
|
192
|
+
expect(subject.send(:type_and_format, 'array', 'integer')).to eq({
|
193
|
+
'type' => 'array',
|
194
|
+
'items' => { 'type' => 'integer' }
|
195
|
+
})
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
context "when type is unknown" do
|
201
|
+
it "returns nil" do
|
202
|
+
expect(subject.send(:type_and_format, 'invalid')).to be_nil
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|