grape 1.8.0 → 2.0.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.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/README.md +19 -22
  4. data/UPGRADING.md +35 -0
  5. data/grape.gemspec +1 -4
  6. data/lib/grape/dsl/desc.rb +1 -1
  7. data/lib/grape/dsl/inside_route.rb +9 -9
  8. data/lib/grape/endpoint.rb +9 -1
  9. data/lib/grape/exceptions/missing_group_type.rb +1 -1
  10. data/lib/grape/exceptions/unsupported_group_type.rb +1 -1
  11. data/lib/grape/http/headers.rb +12 -2
  12. data/lib/grape/middleware/auth/strategies.rb +1 -2
  13. data/lib/grape/middleware/error.rb +4 -4
  14. data/lib/grape/middleware/formatter.rb +5 -5
  15. data/lib/grape/railtie.rb +9 -0
  16. data/lib/grape/request.rb +8 -2
  17. data/lib/grape/router/route.rb +1 -1
  18. data/lib/grape/validations/validators/base.rb +1 -1
  19. data/lib/grape/validations/validators/values_validator.rb +2 -2
  20. data/lib/grape/version.rb +1 -1
  21. data/lib/grape.rb +15 -2
  22. metadata +8 -243
  23. data/spec/grape/api/custom_validations_spec.rb +0 -213
  24. data/spec/grape/api/deeply_included_options_spec.rb +0 -56
  25. data/spec/grape/api/defines_boolean_in_params_spec.rb +0 -38
  26. data/spec/grape/api/documentation_spec.rb +0 -59
  27. data/spec/grape/api/inherited_helpers_spec.rb +0 -114
  28. data/spec/grape/api/instance_spec.rb +0 -103
  29. data/spec/grape/api/invalid_format_spec.rb +0 -45
  30. data/spec/grape/api/namespace_parameters_in_route_spec.rb +0 -38
  31. data/spec/grape/api/nested_helpers_spec.rb +0 -50
  32. data/spec/grape/api/optional_parameters_in_route_spec.rb +0 -43
  33. data/spec/grape/api/parameters_modification_spec.rb +0 -41
  34. data/spec/grape/api/patch_method_helpers_spec.rb +0 -79
  35. data/spec/grape/api/recognize_path_spec.rb +0 -21
  36. data/spec/grape/api/required_parameters_in_route_spec.rb +0 -37
  37. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +0 -26
  38. data/spec/grape/api/routes_with_requirements_spec.rb +0 -59
  39. data/spec/grape/api/shared_helpers_exactly_one_of_spec.rb +0 -41
  40. data/spec/grape/api/shared_helpers_spec.rb +0 -36
  41. data/spec/grape/api_remount_spec.rb +0 -509
  42. data/spec/grape/api_spec.rb +0 -4356
  43. data/spec/grape/dsl/callbacks_spec.rb +0 -45
  44. data/spec/grape/dsl/desc_spec.rb +0 -98
  45. data/spec/grape/dsl/headers_spec.rb +0 -62
  46. data/spec/grape/dsl/helpers_spec.rb +0 -100
  47. data/spec/grape/dsl/inside_route_spec.rb +0 -531
  48. data/spec/grape/dsl/logger_spec.rb +0 -24
  49. data/spec/grape/dsl/middleware_spec.rb +0 -60
  50. data/spec/grape/dsl/parameters_spec.rb +0 -180
  51. data/spec/grape/dsl/request_response_spec.rb +0 -225
  52. data/spec/grape/dsl/routing_spec.rb +0 -275
  53. data/spec/grape/dsl/settings_spec.rb +0 -261
  54. data/spec/grape/dsl/validations_spec.rb +0 -55
  55. data/spec/grape/endpoint/declared_spec.rb +0 -846
  56. data/spec/grape/endpoint_spec.rb +0 -1085
  57. data/spec/grape/entity_spec.rb +0 -336
  58. data/spec/grape/exceptions/base_spec.rb +0 -81
  59. data/spec/grape/exceptions/body_parse_errors_spec.rb +0 -185
  60. data/spec/grape/exceptions/invalid_accept_header_spec.rb +0 -358
  61. data/spec/grape/exceptions/invalid_formatter_spec.rb +0 -15
  62. data/spec/grape/exceptions/invalid_response_spec.rb +0 -11
  63. data/spec/grape/exceptions/invalid_versioner_option_spec.rb +0 -15
  64. data/spec/grape/exceptions/missing_group_type_spec.rb +0 -17
  65. data/spec/grape/exceptions/missing_mime_type_spec.rb +0 -17
  66. data/spec/grape/exceptions/missing_option_spec.rb +0 -15
  67. data/spec/grape/exceptions/unknown_options_spec.rb +0 -15
  68. data/spec/grape/exceptions/unknown_validator_spec.rb +0 -15
  69. data/spec/grape/exceptions/unsupported_group_type_spec.rb +0 -19
  70. data/spec/grape/exceptions/validation_errors_spec.rb +0 -92
  71. data/spec/grape/exceptions/validation_spec.rb +0 -19
  72. data/spec/grape/extensions/param_builders/hash_spec.rb +0 -83
  73. data/spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb +0 -105
  74. data/spec/grape/extensions/param_builders/hashie/mash_spec.rb +0 -79
  75. data/spec/grape/grape_spec.rb +0 -9
  76. data/spec/grape/integration/global_namespace_function_spec.rb +0 -29
  77. data/spec/grape/integration/rack_sendfile_spec.rb +0 -48
  78. data/spec/grape/integration/rack_spec.rb +0 -51
  79. data/spec/grape/loading_spec.rb +0 -44
  80. data/spec/grape/middleware/auth/base_spec.rb +0 -31
  81. data/spec/grape/middleware/auth/dsl_spec.rb +0 -60
  82. data/spec/grape/middleware/auth/strategies_spec.rb +0 -120
  83. data/spec/grape/middleware/base_spec.rb +0 -221
  84. data/spec/grape/middleware/error_spec.rb +0 -85
  85. data/spec/grape/middleware/exception_spec.rb +0 -294
  86. data/spec/grape/middleware/formatter_spec.rb +0 -461
  87. data/spec/grape/middleware/globals_spec.rb +0 -30
  88. data/spec/grape/middleware/stack_spec.rb +0 -155
  89. data/spec/grape/middleware/versioner/accept_version_header_spec.rb +0 -122
  90. data/spec/grape/middleware/versioner/header_spec.rb +0 -345
  91. data/spec/grape/middleware/versioner/param_spec.rb +0 -171
  92. data/spec/grape/middleware/versioner/path_spec.rb +0 -62
  93. data/spec/grape/middleware/versioner_spec.rb +0 -21
  94. data/spec/grape/named_api_spec.rb +0 -19
  95. data/spec/grape/parser_spec.rb +0 -86
  96. data/spec/grape/path_spec.rb +0 -252
  97. data/spec/grape/presenters/presenter_spec.rb +0 -71
  98. data/spec/grape/request_spec.rb +0 -126
  99. data/spec/grape/util/inheritable_setting_spec.rb +0 -242
  100. data/spec/grape/util/inheritable_values_spec.rb +0 -79
  101. data/spec/grape/util/reverse_stackable_values_spec.rb +0 -134
  102. data/spec/grape/util/stackable_values_spec.rb +0 -128
  103. data/spec/grape/util/strict_hash_configuration_spec.rb +0 -38
  104. data/spec/grape/validations/attributes_doc_spec.rb +0 -153
  105. data/spec/grape/validations/instance_behaivour_spec.rb +0 -43
  106. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +0 -38
  107. data/spec/grape/validations/params_scope_spec.rb +0 -1420
  108. data/spec/grape/validations/single_attribute_iterator_spec.rb +0 -56
  109. data/spec/grape/validations/types/array_coercer_spec.rb +0 -33
  110. data/spec/grape/validations/types/primitive_coercer_spec.rb +0 -150
  111. data/spec/grape/validations/types/set_coercer_spec.rb +0 -32
  112. data/spec/grape/validations/types_spec.rb +0 -111
  113. data/spec/grape/validations/validators/all_or_none_spec.rb +0 -162
  114. data/spec/grape/validations/validators/allow_blank_spec.rb +0 -575
  115. data/spec/grape/validations/validators/at_least_one_of_spec.rb +0 -205
  116. data/spec/grape/validations/validators/base_spec.rb +0 -38
  117. data/spec/grape/validations/validators/coerce_spec.rb +0 -1261
  118. data/spec/grape/validations/validators/default_spec.rb +0 -463
  119. data/spec/grape/validations/validators/exactly_one_of_spec.rb +0 -233
  120. data/spec/grape/validations/validators/except_values_spec.rb +0 -192
  121. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +0 -214
  122. data/spec/grape/validations/validators/presence_spec.rb +0 -315
  123. data/spec/grape/validations/validators/regexp_spec.rb +0 -161
  124. data/spec/grape/validations/validators/same_as_spec.rb +0 -57
  125. data/spec/grape/validations/validators/values_spec.rb +0 -733
  126. data/spec/grape/validations/validators/zh-CN.yml +0 -10
  127. data/spec/grape/validations_spec.rb +0 -2030
  128. data/spec/integration/eager_load/eager_load_spec.rb +0 -15
  129. data/spec/integration/multi_json/json_spec.rb +0 -7
  130. data/spec/integration/multi_xml/xml_spec.rb +0 -7
  131. data/spec/shared/deprecated_class_examples.rb +0 -16
  132. data/spec/shared/versioning_examples.rb +0 -215
  133. data/spec/spec_helper.rb +0 -52
  134. data/spec/support/basic_auth_encode_helpers.rb +0 -11
  135. data/spec/support/chunks.rb +0 -14
  136. data/spec/support/content_type_helpers.rb +0 -15
  137. data/spec/support/endpoint_faker.rb +0 -25
  138. data/spec/support/file_streamer.rb +0 -13
  139. data/spec/support/integer_helpers.rb +0 -13
  140. data/spec/support/versioned_helpers.rb +0 -55
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module DSL
5
- module CallbacksSpec
6
- class Dummy
7
- include Grape::DSL::Callbacks
8
- end
9
- end
10
-
11
- describe Callbacks do
12
- subject { Class.new(CallbacksSpec::Dummy) }
13
-
14
- let(:proc) { -> {} }
15
-
16
- describe '.before' do
17
- it 'adds a block to "before"' do
18
- expect(subject).to receive(:namespace_stackable).with(:befores, proc)
19
- subject.before(&proc)
20
- end
21
- end
22
-
23
- describe '.before_validation' do
24
- it 'adds a block to "before_validation"' do
25
- expect(subject).to receive(:namespace_stackable).with(:before_validations, proc)
26
- subject.before_validation(&proc)
27
- end
28
- end
29
-
30
- describe '.after_validation' do
31
- it 'adds a block to "after_validation"' do
32
- expect(subject).to receive(:namespace_stackable).with(:after_validations, proc)
33
- subject.after_validation(&proc)
34
- end
35
- end
36
-
37
- describe '.after' do
38
- it 'adds a block to "after"' do
39
- expect(subject).to receive(:namespace_stackable).with(:afters, proc)
40
- subject.after(&proc)
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Grape::DSL::Desc do
4
- subject { dummy_class }
5
-
6
- let(:dummy_class) do
7
- Class.new do
8
- extend Grape::DSL::Desc
9
- end
10
- end
11
-
12
- describe '.desc' do
13
- it 'sets a description' do
14
- desc_text = 'The description'
15
- options = { message: 'none' }
16
- subject.desc desc_text, options
17
- expect(subject.namespace_setting(:description)).to eq(options.merge(description: desc_text))
18
- expect(subject.route_setting(:description)).to eq(options.merge(description: desc_text))
19
- end
20
-
21
- it 'can be set with a block' do
22
- expected_options = {
23
- summary: 'summary',
24
- description: 'The description',
25
- detail: 'more details',
26
- params: { first: :param },
27
- entity: Object,
28
- default: { code: 400, message: 'Invalid' },
29
- http_codes: [[401, 'Unauthorized', 'Entities::Error']],
30
- named: 'My named route',
31
- body_name: 'My body name',
32
- headers: [
33
- XAuthToken: {
34
- description: 'Valdates your identity',
35
- required: true
36
- },
37
- XOptionalHeader: {
38
- description: 'Not really needed',
39
- required: false
40
- }
41
- ],
42
- hidden: false,
43
- deprecated: false,
44
- is_array: true,
45
- nickname: 'nickname',
46
- produces: %w[array of mime_types],
47
- consumes: %w[array of mime_types],
48
- tags: %w[tag1 tag2],
49
- security: %w[array of security schemes]
50
- }
51
-
52
- subject.desc 'The description' do
53
- summary 'summary'
54
- detail 'more details'
55
- params(first: :param)
56
- success Object
57
- default code: 400, message: 'Invalid'
58
- failure [[401, 'Unauthorized', 'Entities::Error']]
59
- named 'My named route'
60
- body_name 'My body name'
61
- headers [
62
- XAuthToken: {
63
- description: 'Valdates your identity',
64
- required: true
65
- },
66
- XOptionalHeader: {
67
- description: 'Not really needed',
68
- required: false
69
- }
70
- ]
71
- hidden false
72
- deprecated false
73
- is_array true
74
- nickname 'nickname'
75
- produces %w[array of mime_types]
76
- consumes %w[array of mime_types]
77
- tags %w[tag1 tag2]
78
- security %w[array of security schemes]
79
- end
80
-
81
- expect(subject.namespace_setting(:description)).to eq(expected_options)
82
- expect(subject.route_setting(:description)).to eq(expected_options)
83
- end
84
-
85
- it 'can be set with options and a block' do
86
- expect(ActiveSupport::Deprecation).to receive(:warn).with('Passing a options hash and a block to `desc` is deprecated. Move all hash options to block.')
87
-
88
- desc_text = 'The description'
89
- detail_text = 'more details'
90
- options = { message: 'none' }
91
- subject.desc desc_text, options do
92
- detail detail_text
93
- end
94
- expect(subject.namespace_setting(:description)).to eq(description: desc_text, detail: detail_text)
95
- expect(subject.route_setting(:description)).to eq(description: desc_text, detail: detail_text)
96
- end
97
- end
98
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module DSL
5
- module HeadersSpec
6
- class Dummy
7
- include Grape::DSL::Headers
8
- end
9
- end
10
- describe Headers do
11
- subject { HeadersSpec::Dummy.new }
12
-
13
- let(:header_data) do
14
- { 'First Key' => 'First Value',
15
- 'Second Key' => 'Second Value' }
16
- end
17
-
18
- context 'when headers are set' do
19
- describe '#header' do
20
- before do
21
- header_data.each { |k, v| subject.header(k, v) }
22
- end
23
-
24
- describe 'get' do
25
- it 'returns a specifc value' do
26
- expect(subject.header['First Key']).to eq 'First Value'
27
- expect(subject.header['Second Key']).to eq 'Second Value'
28
- end
29
-
30
- it 'returns all set headers' do
31
- expect(subject.header).to eq header_data
32
- expect(subject.headers).to eq header_data
33
- end
34
- end
35
-
36
- describe 'set' do
37
- it 'returns value' do
38
- expect(subject.header('Third Key', 'Third Value'))
39
- expect(subject.header['Third Key']).to eq 'Third Value'
40
- end
41
- end
42
-
43
- describe 'delete' do
44
- it 'deletes a header key-value pair' do
45
- expect(subject.header('First Key')).to eq header_data['First Key']
46
- expect(subject.header).not_to have_key('First Key')
47
- end
48
- end
49
- end
50
- end
51
-
52
- context 'when no headers are set' do
53
- describe '#header' do
54
- it 'returns nil' do
55
- expect(subject.header['First Key']).to be_nil
56
- expect(subject.header('First Key')).to be_nil
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,100 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module DSL
5
- module HelpersSpec
6
- class Dummy
7
- include Grape::DSL::Helpers
8
-
9
- def self.mods
10
- namespace_stackable(:helpers)
11
- end
12
-
13
- def self.first_mod
14
- mods.first
15
- end
16
- end
17
- end
18
-
19
- module BooleanParam
20
- extend Grape::API::Helpers
21
-
22
- params :requires_toggle_prm do
23
- requires :toggle_prm, type: Boolean
24
- end
25
- end
26
-
27
- class Base < Grape::API
28
- helpers BooleanParam
29
- end
30
-
31
- class Child < Base; end
32
-
33
- describe Helpers do
34
- subject { Class.new(HelpersSpec::Dummy) }
35
-
36
- let(:proc) do
37
- lambda do |*|
38
- def test
39
- :test
40
- end
41
- end
42
- end
43
-
44
- describe '.helpers' do
45
- it 'adds a module with the given block' do
46
- expect(subject).to receive(:namespace_stackable).with(:helpers, kind_of(Grape::DSL::Helpers::BaseHelper)).and_call_original
47
- expect(subject).to receive(:namespace_stackable).with(:helpers).and_call_original
48
- subject.helpers(&proc)
49
-
50
- expect(subject.first_mod.instance_methods).to include(:test)
51
- end
52
-
53
- it 'uses provided modules' do
54
- mod = Module.new
55
-
56
- expect(subject).to receive(:namespace_stackable).with(:helpers, kind_of(Grape::DSL::Helpers::BaseHelper)).and_call_original.twice
57
- expect(subject).to receive(:namespace_stackable).with(:helpers).and_call_original
58
- subject.helpers(mod, &proc)
59
-
60
- expect(subject.first_mod).to eq mod
61
- end
62
-
63
- it 'uses many provided modules' do
64
- mod = Module.new
65
- mod2 = Module.new
66
- mod3 = Module.new
67
-
68
- expect(subject).to receive(:namespace_stackable).with(:helpers, kind_of(Grape::DSL::Helpers::BaseHelper)).and_call_original.exactly(4).times
69
- expect(subject).to receive(:namespace_stackable).with(:helpers).and_call_original.exactly(3).times
70
-
71
- subject.helpers(mod, mod2, mod3, &proc)
72
-
73
- expect(subject.mods).to include(mod)
74
- expect(subject.mods).to include(mod2)
75
- expect(subject.mods).to include(mod3)
76
- end
77
-
78
- context 'with an external file' do
79
- it 'sets Boolean as a Grape::API::Boolean' do
80
- subject.helpers BooleanParam
81
- expect(subject.first_mod::Boolean).to eq Grape::API::Boolean
82
- end
83
- end
84
-
85
- context 'in child classes' do
86
- it 'is available' do
87
- klass = Child
88
- expect do
89
- klass.instance_eval do
90
- params do
91
- use :requires_toggle_prm
92
- end
93
- end
94
- end.not_to raise_exception
95
- end
96
- end
97
- end
98
- end
99
- end
100
- end