brainstem 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +77 -0
  3. data/README.md +119 -0
  4. data/docs/api_doc_generator.markdown +45 -4
  5. data/docs/brainstem_executable.markdown +1 -1
  6. data/docs/oas_2_docgen.png +0 -0
  7. data/docs/oas_2_docgen_ascii.txt +78 -0
  8. data/lib/brainstem/api_docs.rb +23 -9
  9. data/lib/brainstem/api_docs/abstract_collection.rb +0 -13
  10. data/lib/brainstem/api_docs/atlas.rb +0 -14
  11. data/lib/brainstem/api_docs/builder.rb +0 -14
  12. data/lib/brainstem/api_docs/controller.rb +7 -16
  13. data/lib/brainstem/api_docs/controller_collection.rb +0 -3
  14. data/lib/brainstem/api_docs/endpoint.rb +73 -19
  15. data/lib/brainstem/api_docs/endpoint_collection.rb +0 -7
  16. data/lib/brainstem/api_docs/formatters/abstract_formatter.rb +0 -2
  17. data/lib/brainstem/api_docs/formatters/markdown/controller_formatter.rb +1 -9
  18. data/lib/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter.rb +1 -9
  19. data/lib/brainstem/api_docs/formatters/markdown/endpoint_formatter.rb +39 -24
  20. data/lib/brainstem/api_docs/formatters/markdown/helper.rb +0 -13
  21. data/lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb +22 -35
  22. data/lib/brainstem/api_docs/formatters/open_api_specification/helper.rb +66 -0
  23. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/controller_formatter.rb +57 -0
  24. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/param_definitions_formatter.rb +311 -0
  25. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/response_definitions_formatter.rb +197 -0
  26. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_collection_formatter.rb +60 -0
  27. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_formatter.rb +162 -0
  28. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/info_formatter.rb +126 -0
  29. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/presenter_formatter.rb +132 -0
  30. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/security_definitions_formatter.rb +99 -0
  31. data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/tags_formatter.rb +123 -0
  32. data/lib/brainstem/api_docs/introspectors/abstract_introspector.rb +0 -7
  33. data/lib/brainstem/api_docs/introspectors/rails_introspector.rb +1 -20
  34. data/lib/brainstem/api_docs/presenter.rb +21 -27
  35. data/lib/brainstem/api_docs/presenter_collection.rb +1 -11
  36. data/lib/brainstem/api_docs/resolver.rb +1 -8
  37. data/lib/brainstem/api_docs/sinks/abstract_sink.rb +0 -4
  38. data/lib/brainstem/api_docs/sinks/controller_presenter_multifile_sink.rb +0 -9
  39. data/lib/brainstem/api_docs/sinks/open_api_specification_sink.rb +234 -0
  40. data/lib/brainstem/api_docs/sinks/stdout_sink.rb +0 -5
  41. data/lib/brainstem/cli.rb +0 -13
  42. data/lib/brainstem/cli/abstract_command.rb +0 -7
  43. data/lib/brainstem/cli/generate_api_docs_command.rb +48 -24
  44. data/lib/brainstem/concerns/controller_dsl.rb +288 -145
  45. data/lib/brainstem/concerns/formattable.rb +0 -5
  46. data/lib/brainstem/concerns/optional.rb +0 -1
  47. data/lib/brainstem/concerns/presenter_dsl.rb +2 -21
  48. data/lib/brainstem/dsl/configuration.rb +0 -11
  49. data/lib/brainstem/presenter.rb +0 -4
  50. data/lib/brainstem/version.rb +1 -1
  51. data/spec/brainstem/api_docs/abstract_collection_spec.rb +0 -11
  52. data/spec/brainstem/api_docs/atlas_spec.rb +0 -6
  53. data/spec/brainstem/api_docs/builder_spec.rb +0 -4
  54. data/spec/brainstem/api_docs/controller_collection_spec.rb +0 -2
  55. data/spec/brainstem/api_docs/controller_spec.rb +29 -18
  56. data/spec/brainstem/api_docs/endpoint_collection_spec.rb +0 -6
  57. data/spec/brainstem/api_docs/endpoint_spec.rb +343 -13
  58. data/spec/brainstem/api_docs/formatters/abstract_formatter_spec.rb +0 -2
  59. data/spec/brainstem/api_docs/formatters/markdown/controller_formatter_spec.rb +0 -1
  60. data/spec/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter_spec.rb +0 -5
  61. data/spec/brainstem/api_docs/formatters/markdown/endpoint_formatter_spec.rb +94 -8
  62. data/spec/brainstem/api_docs/formatters/markdown/helper_spec.rb +0 -8
  63. data/spec/brainstem/api_docs/formatters/markdown/presenter_formatter_spec.rb +0 -7
  64. data/spec/brainstem/api_docs/formatters/open_api_specification/helper_spec.rb +210 -0
  65. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/controller_formatter_spec.rb +81 -0
  66. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/param_definitions_formatter_spec.rb +672 -0
  67. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/response_definitions_formatter_spec.rb +335 -0
  68. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_collection_formatter_spec.rb +59 -0
  69. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_formatter_spec.rb +308 -0
  70. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/info_formatter_spec.rb +89 -0
  71. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/presenter_formatter_spec.rb +430 -0
  72. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/security_definitions_formatter_spec.rb +190 -0
  73. data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/tags_formatter_spec.rb +217 -0
  74. data/spec/brainstem/api_docs/introspectors/abstract_introspector_spec.rb +0 -2
  75. data/spec/brainstem/api_docs/introspectors/rails_introspector_spec.rb +0 -2
  76. data/spec/brainstem/api_docs/presenter_collection_spec.rb +0 -2
  77. data/spec/brainstem/api_docs/presenter_spec.rb +58 -18
  78. data/spec/brainstem/api_docs/resolver_spec.rb +0 -1
  79. data/spec/brainstem/api_docs/sinks/controller_presenter_multifile_sink_spec.rb +0 -2
  80. data/spec/brainstem/api_docs/sinks/open_api_specification_sink_spec.rb +371 -0
  81. data/spec/brainstem/api_docs_spec.rb +2 -0
  82. data/spec/brainstem/cli/abstract_command_spec.rb +0 -4
  83. data/spec/brainstem/cli/generate_api_docs_command_spec.rb +53 -2
  84. data/spec/brainstem/concerns/controller_dsl_spec.rb +430 -64
  85. data/spec/brainstem/concerns/presenter_dsl_spec.rb +0 -20
  86. data/spec/brainstem/preloader_spec.rb +0 -7
  87. data/spec/brainstem/presenter_spec.rb +0 -1
  88. data/spec/dummy/rails.rb +0 -1
  89. data/spec/spec_helpers/db.rb +0 -1
  90. metadata +37 -2
@@ -13,6 +13,8 @@ module Brainstem
13
13
  end
14
14
 
15
15
  %w(
16
+ base_path
17
+ oas_filename_pattern
16
18
  controller_filename_pattern
17
19
  presenter_filename_pattern
18
20
  controller_filename_link_pattern
@@ -7,7 +7,6 @@ module Brainstem
7
7
  let(:options) { { } }
8
8
  subject { AbstractCommand.new(options) }
9
9
 
10
-
11
10
  describe ".call" do
12
11
  before do
13
12
  any_instance_of(AbstractCommand) do |instance|
@@ -41,7 +40,6 @@ module Brainstem
41
40
  end
42
41
  end
43
42
 
44
-
45
43
  describe "#extract_options!" do
46
44
  let(:option_parser) { Object.new }
47
45
  let(:args) { %w(--silent --pretend) }
@@ -57,14 +55,12 @@ module Brainstem
57
55
  end
58
56
  end
59
57
 
60
-
61
58
  describe "#option_parser" do
62
59
  it "is not implemented" do
63
60
  expect { AbstractCommand.new }.to raise_error NotImplementedError
64
61
  end
65
62
  end
66
63
 
67
-
68
64
  describe "#initialize" do
69
65
  it "extracts options from args" do
70
66
  any_instance_of(AbstractCommand) do |instance|
@@ -31,6 +31,14 @@ module Brainstem
31
31
  expect(subject.options[:sink][:method].call).to be_a \
32
32
  Brainstem::ApiDocs::Sinks::ControllerPresenterMultifileSink
33
33
  end
34
+
35
+ context "when format is Open API Specification" do
36
+ let(:args) { %w(--open-api-specification=2 --multifile-presenters-and-controllers) }
37
+
38
+ it "raises an error" do
39
+ expect { subject }.to raise_error(NotImplementedError)
40
+ end
41
+ end
34
42
  end
35
43
 
36
44
  context "when --base-application-class" do
@@ -50,6 +58,14 @@ module Brainstem
50
58
  end
51
59
  end
52
60
 
61
+ context "when --api-version" do
62
+ let(:args) { %w(--api-version=2.0.0) }
63
+
64
+ it "sets the api version option of the sink" do
65
+ expect(subject.options[:sink][:options][:api_version]).to eq '2.0.0'
66
+ end
67
+ end
68
+
53
69
  context "when --controller-matches" do
54
70
  let(:matches) { subject.options[:builder][:args_for_atlas][:controller_matches] }
55
71
 
@@ -73,8 +89,44 @@ module Brainstem
73
89
  end
74
90
  end
75
91
  end
76
- end
77
92
 
93
+ context "when --open-api-specification" do
94
+ context "when the correct version is specified" do
95
+ let(:args) { %w(--open-api-specification=2) }
96
+
97
+ it "sets sink to OpenApiSpecificationSink and format to oas_v2" do
98
+ expect(subject.options).to have_key :sink
99
+ expect(subject.options[:sink][:options][:format]).to eq(:oas_v2)
100
+ expect(subject.options[:sink][:method].call).to be_a \
101
+ Brainstem::ApiDocs::Sinks::OpenApiSpecificationSink
102
+ end
103
+ end
104
+
105
+ context "when the incorrect version is specified" do
106
+ let(:args) { %w(--open-api-specification=3) }
107
+
108
+ it "raises a Not Implemented Error" do
109
+ expect { subject }.to raise_error(NotImplementedError)
110
+ end
111
+ end
112
+ end
113
+
114
+ context "when --output-extension" do
115
+ let(:args) { %w(--output-extension=yml) }
116
+
117
+ it "sets the api version option of the sink" do
118
+ expect(subject.options[:sink][:options][:output_extension]).to eq 'yml'
119
+ end
120
+ end
121
+
122
+ context "when --oas-filename-pattern" do
123
+ let(:args) { %w(--oas-filename-pattern=blah/{{version}}.{{extension}}) }
124
+
125
+ it "sets the api version option of the sink" do
126
+ expect(subject.options[:sink][:options][:oas_filename_pattern]).to eq 'blah/{{version}}.{{extension}}'
127
+ end
128
+ end
129
+ end
78
130
 
79
131
  describe "execution" do
80
132
  context "when no sink provided" do
@@ -128,7 +180,6 @@ module Brainstem
128
180
  end
129
181
  end
130
182
  end
131
-
132
183
  end
133
184
  end
134
185
  end
@@ -101,6 +101,58 @@ module Brainstem
101
101
  end
102
102
  end
103
103
 
104
+ describe ".tag" do
105
+ it "sets the tag for the context" do
106
+ subject.brainstem_params do
107
+ tag "TagName"
108
+ end
109
+
110
+ expect(subject.configuration[:_default][:tag]).to eq "TagName"
111
+ end
112
+
113
+ context "when used in an action" do
114
+ it "raises and error" do
115
+ expect {
116
+ subject.brainstem_params do
117
+ actions :show do
118
+ tag "TagName"
119
+ end
120
+ end
121
+ }.to raise_error(StandardError)
122
+ end
123
+ end
124
+ end
125
+
126
+ describe ".tag_groups" do
127
+ it "sets the tag groups" do
128
+ subject.brainstem_params do
129
+ tag_groups "Group Tag 1"
130
+ end
131
+
132
+ expect(subject.configuration[:_default][:tag_groups]).to eq ["Group Tag 1"]
133
+ end
134
+
135
+ it "sets the tag groups when an array is given" do
136
+ subject.brainstem_params do
137
+ tag_groups ["Group Tag 1", "Group Tag 2"]
138
+ end
139
+
140
+ expect(subject.configuration[:_default][:tag_groups]).to eq ["Group Tag 1", "Group Tag 2"]
141
+ end
142
+
143
+ context "when used in an action" do
144
+ it "raises and error" do
145
+ expect {
146
+ subject.brainstem_params do
147
+ actions :show do
148
+ tag_groups ["Group Tag 1", "Group Tag 2"]
149
+ end
150
+ end
151
+ }.to raise_error(StandardError)
152
+ end
153
+ end
154
+ end
155
+
104
156
  describe ".model_params" do
105
157
  let(:root_proc) { Proc.new {} }
106
158
 
@@ -472,70 +524,6 @@ module Brainstem
472
524
  end
473
525
  end
474
526
  end
475
-
476
- context "deprecated type behavior" do
477
- context "when no type is provided" do
478
- before do
479
- mock(subject).deprecated_type_warning
480
- end
481
-
482
- it "defaults to type string" do
483
- subject.brainstem_params do
484
- valid :sprocket_name, required: true
485
- end
486
-
487
- valid_params = subject.configuration[:_default][:valid_params]
488
- expect(valid_params.keys.length).to eq(1)
489
- expect(valid_params.keys[0].call).to eq("sprocket_name")
490
-
491
- configuration = valid_params[valid_params.keys[0]]
492
- expect(configuration[:type]).to eq("string")
493
- expect(configuration[:required]).to be_truthy
494
- end
495
- end
496
-
497
- context "when no type and options are provided" do
498
- before do
499
- mock(subject).deprecated_type_warning
500
- end
501
-
502
- it "defaults type to string and sets default options for the param" do
503
- subject.brainstem_params do
504
- valid :sprocket_name
505
- end
506
-
507
- valid_params = subject.configuration[:_default][:valid_params]
508
- expect(valid_params.keys.length).to eq(1)
509
- expect(valid_params.keys[0].call).to eq("sprocket_name")
510
-
511
- configuration = valid_params[valid_params.keys[0]]
512
- expect(configuration[:nodoc]).to be_falsey
513
- expect(configuration[:required]).to be_falsey
514
- expect(configuration[:type]).to eq("string")
515
- end
516
- end
517
-
518
- context "when type and options are hashes" do
519
- before do
520
- mock(subject).deprecated_type_warning
521
- end
522
-
523
- it "ignores the type and defaults to string" do
524
- subject.brainstem_params do
525
- valid :sprocket_name, { troll: true }, { required: true }
526
- end
527
-
528
- valid_params = subject.configuration[:_default][:valid_params]
529
- expect(valid_params.keys.length).to eq(1)
530
- expect(valid_params.keys[0].call).to eq("sprocket_name")
531
-
532
- configuration = valid_params[valid_params.keys[0]]
533
- expect(configuration[:nodoc]).to be_falsey
534
- expect(configuration[:required]).to be_truthy
535
- expect(configuration[:type]).to eq("string")
536
- end
537
- end
538
- end
539
527
  end
540
528
 
541
529
  describe ".transform" do
@@ -713,6 +701,384 @@ module Brainstem
713
701
  end
714
702
  end
715
703
 
704
+ describe ".response" do
705
+ context "when block given" do
706
+ it "sets the custom_response configuration" do
707
+ subject.brainstem_params do
708
+ actions :show do
709
+ response :array do |response_param|
710
+ response_param.field :blah, :string
711
+ end
712
+ end
713
+ end
714
+
715
+ configuration = subject.configuration[:show][:custom_response]
716
+ expect(configuration).to be_present
717
+ expect(configuration[:_config]).to eq({
718
+ type: 'array',
719
+ item_type: 'hash',
720
+ nodoc: false,
721
+ required: false,
722
+ }.with_indifferent_access)
723
+ end
724
+ end
725
+
726
+ context "when block not given" do
727
+ it "sets the custom_response configuration" do
728
+ subject.brainstem_params do
729
+ actions :show do
730
+ response :array
731
+ end
732
+ end
733
+
734
+ configuration = subject.configuration[:show][:custom_response]
735
+ expect(configuration).to be_present
736
+ expect(configuration[:_config]).to eq({
737
+ type: 'array',
738
+ item_type: 'string',
739
+ nodoc: false,
740
+ required: false,
741
+ }.with_indifferent_access)
742
+ end
743
+ end
744
+ end
745
+
746
+ describe ".fields" do
747
+ context "when used outside of the response block" do
748
+ it "raises an error" do
749
+ expect {
750
+ subject.brainstem_params do
751
+ actions :show do
752
+ fields :contacts, :array do
753
+ field :full_name, :string
754
+ end
755
+ end
756
+ end
757
+ }.to raise_error(StandardError)
758
+ end
759
+ end
760
+
761
+ context "when used within the response block" do
762
+ context "when type is hash" do
763
+ it "adds the field block to custom_response configuration" do
764
+ subject.brainstem_params do
765
+ actions :show do
766
+ response :hash do
767
+ fields :contact, :hash do
768
+ field :full_name, :string
769
+ end
770
+ end
771
+ end
772
+ end
773
+
774
+ configuration = subject.configuration[:show][:custom_response]
775
+ param_keys = configuration.keys
776
+
777
+ expect(param_keys[1].call).to eq('contact')
778
+ expect(configuration[param_keys[1]]).to eq({
779
+ type: 'hash',
780
+ nodoc: false,
781
+ required: false,
782
+ }.with_indifferent_access)
783
+
784
+ expect(param_keys[2].call).to eq('full_name')
785
+ expect(configuration[param_keys[2]]).to eq({
786
+ type: 'string',
787
+ nodoc: false,
788
+ ancestors: [param_keys[1]],
789
+ required: false,
790
+ }.with_indifferent_access)
791
+ end
792
+ end
793
+
794
+ context "when type is array" do
795
+ it "adds the field block to custom_response configuration" do
796
+ subject.brainstem_params do
797
+ actions :show do
798
+ response :hash do
799
+ fields :contacts, :array do
800
+ field :full_name, :string
801
+ end
802
+ end
803
+ end
804
+ end
805
+
806
+ configuration = subject.configuration[:show][:custom_response]
807
+ param_keys = configuration.keys
808
+
809
+ expect(param_keys[1].call).to eq('contacts')
810
+ expect(configuration[param_keys[1]]).to eq({
811
+ type: 'array',
812
+ item_type: 'hash',
813
+ nodoc: false,
814
+ required: false,
815
+ }.with_indifferent_access)
816
+
817
+ expect(param_keys[2].call).to eq('full_name')
818
+ expect(configuration[param_keys[2]]).to eq({
819
+ type: 'string',
820
+ nodoc: false,
821
+ required: false,
822
+ ancestors: [param_keys[1]]
823
+ }.with_indifferent_access)
824
+ end
825
+ end
826
+
827
+ context "when multi nested" do
828
+ it "adds the field block to custom_response configuration" do
829
+ subject.brainstem_params do
830
+ actions :show do
831
+ response :hash do
832
+ fields :contact, :hash, nodoc: true do
833
+ fields :details, :hash do
834
+ field :full_name, :string
835
+ end
836
+ end
837
+ end
838
+ end
839
+ end
840
+
841
+ configuration = subject.configuration[:show][:custom_response]
842
+ param_keys = configuration.keys
843
+
844
+ expect(param_keys[1].call).to eq('contact')
845
+ expect(configuration[param_keys[1]]).to eq({
846
+ type: 'hash',
847
+ nodoc: true,
848
+ required: false,
849
+ }.with_indifferent_access)
850
+
851
+ expect(param_keys[2].call).to eq('details')
852
+ expect(configuration[param_keys[2]]).to eq({
853
+ type: 'hash',
854
+ nodoc: true,
855
+ required: false,
856
+ ancestors: [param_keys[1]]
857
+ }.with_indifferent_access)
858
+
859
+ expect(param_keys[3].call).to eq('full_name')
860
+ expect(configuration[param_keys[3]]).to eq({
861
+ type: 'string',
862
+ nodoc: true,
863
+ required: false,
864
+ ancestors: [param_keys[1], param_keys[2]]
865
+ }.with_indifferent_access)
866
+ end
867
+ end
868
+ end
869
+ end
870
+
871
+ describe ".field" do
872
+ context "when used outside of the response block" do
873
+ it "raises an error" do
874
+ expect {
875
+ subject.brainstem_params do
876
+ actions :show do
877
+ field :full_name, :string
878
+ end
879
+ end
880
+ }.to raise_error(StandardError)
881
+ end
882
+ end
883
+
884
+ context "when used within the response block" do
885
+ context "when type is array" do
886
+ it "adds the field block to custom_response configuration" do
887
+ subject.brainstem_params do
888
+ actions :show do
889
+ response :hash do
890
+ field :names, :array
891
+ end
892
+ end
893
+ end
894
+
895
+ configuration = subject.configuration[:show][:custom_response]
896
+ param_keys = configuration.keys
897
+
898
+ expect(param_keys[1].call).to eq('names')
899
+ expect(configuration[param_keys[1]]).to eq({
900
+ type: 'array',
901
+ item_type: 'string',
902
+ nodoc: false,
903
+ required: false,
904
+ }.with_indifferent_access)
905
+ end
906
+ end
907
+
908
+ context "when type is not array" do
909
+ it "adds the field block to custom_response configuration" do
910
+ subject.brainstem_params do
911
+ actions :show do
912
+ response :hash do
913
+ field :full_name, :string
914
+ end
915
+ end
916
+ end
917
+
918
+ configuration = subject.configuration[:show][:custom_response]
919
+ param_keys = configuration.keys
920
+
921
+ expect(param_keys[1].call).to eq('full_name')
922
+ expect(configuration[param_keys[1]]).to eq({
923
+ type: 'string',
924
+ nodoc: false,
925
+ required: false,
926
+ }.with_indifferent_access)
927
+ end
928
+ end
929
+
930
+ context "when nested under parent field" do
931
+ it "inherits the nodoc attribute" do
932
+ subject.brainstem_params do
933
+ actions :show do
934
+ response :hash do
935
+ fields :contact, :hash, nodoc: true do
936
+ field :full_name, :string
937
+ end
938
+ end
939
+ end
940
+ end
941
+
942
+ configuration = subject.configuration[:show][:custom_response]
943
+ param_keys = configuration.keys
944
+
945
+ expect(param_keys[1].call).to eq('contact')
946
+ expect(configuration[param_keys[1]]).to eq({
947
+ type: 'hash',
948
+ nodoc: true,
949
+ required: false,
950
+ }.with_indifferent_access)
951
+
952
+ expect(param_keys[2].call).to eq('full_name')
953
+ expect(configuration[param_keys[2]]).to eq({
954
+ type: 'string',
955
+ nodoc: true,
956
+ required: false,
957
+ ancestors: [param_keys[1]]
958
+ }.with_indifferent_access)
959
+ end
960
+ end
961
+ end
962
+ end
963
+
964
+ describe ".operation_id" do
965
+ it "sets the operation_id for the context" do
966
+ subject.brainstem_params do
967
+ actions :show do
968
+ operation_id "getPetByID"
969
+ end
970
+ end
971
+
972
+ expect(subject.configuration[:show][:operation_id]).to eq("getPetByID")
973
+ end
974
+
975
+ context "when defined on the default context" do
976
+ it "raises an error" do
977
+ expect {
978
+ subject.brainstem_params do
979
+ operation_id :blah
980
+ end
981
+ }.to raise_error(StandardError)
982
+ end
983
+ end
984
+ end
985
+
986
+ describe ".consumes" do
987
+ it "sets the consumes property for the context" do
988
+ subject.brainstem_params do
989
+ consumes "application/xml", "application/json"
990
+
991
+ actions :show do
992
+ consumes ["application/x-www-form-urlencoded"]
993
+ end
994
+ end
995
+
996
+ expect(subject.configuration[:_default][:consumes]).to \
997
+ eq ["application/xml", "application/json"]
998
+
999
+ expect(subject.configuration[:show][:consumes]).to \
1000
+ eq ["application/x-www-form-urlencoded"]
1001
+ end
1002
+ end
1003
+
1004
+ describe ".produces" do
1005
+ it "sets the produces property for the context" do
1006
+ subject.brainstem_params do
1007
+ produces "application/xml"
1008
+
1009
+ actions :show do
1010
+ produces ["application/x-www-form-urlencoded"]
1011
+ end
1012
+ end
1013
+
1014
+ expect(subject.configuration[:_default][:produces]).to \
1015
+ eq ["application/xml"]
1016
+
1017
+ expect(subject.configuration[:show][:produces]).to \
1018
+ eq ["application/x-www-form-urlencoded"]
1019
+ end
1020
+ end
1021
+
1022
+ describe ".security" do
1023
+ it "sets the security configuration for the context" do
1024
+ subject.brainstem_params do
1025
+ security []
1026
+
1027
+ actions :show do
1028
+ security({"petstore_auth" => [ "write:pets", "read:pets" ]})
1029
+ end
1030
+ end
1031
+
1032
+ expect(subject.configuration[:_default][:security]).to eq []
1033
+ expect(subject.configuration[:show][:security]).to eq([
1034
+ { "petstore_auth" => [ "write:pets", "read:pets" ] }
1035
+ ])
1036
+ end
1037
+ end
1038
+
1039
+ describe ".external_doc" do
1040
+ it "sets the external_doc for the context" do
1041
+ subject.brainstem_params do
1042
+ actions :show do
1043
+ external_doc description: 'External Doc',
1044
+ url: 'www.blah.com'
1045
+ end
1046
+ end
1047
+
1048
+ expect(subject.configuration[:show][:external_doc]).to eq(
1049
+ 'description' => 'External Doc',
1050
+ 'url' => 'www.blah.com'
1051
+ )
1052
+ end
1053
+ end
1054
+
1055
+ describe ".schemes" do
1056
+ it "sets the schemes property for the context" do
1057
+ subject.brainstem_params do
1058
+ schemes "https"
1059
+
1060
+ actions :show do
1061
+ schemes ["http"]
1062
+ end
1063
+ end
1064
+
1065
+ expect(subject.configuration[:_default][:schemes]).to eq ["https"]
1066
+ expect(subject.configuration[:show][:schemes]).to eq ["http"]
1067
+ end
1068
+ end
1069
+
1070
+ describe ".deprecated" do
1071
+ it "sets the deprecated property for the context" do
1072
+ subject.brainstem_params do
1073
+ actions :show do
1074
+ deprecated true
1075
+ end
1076
+ end
1077
+
1078
+ expect(subject.configuration[:show][:deprecated]).to eq true
1079
+ end
1080
+ end
1081
+
716
1082
  describe "#valid_params_tree" do
717
1083
  context "when no root is specified" do
718
1084
  it "returns the field names as the top level keys" do