Skip to content

Commit c413dc9

Browse files
committed
Add requst param parser regestry
1 parent 011800a commit c413dc9

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

lib/grape-swagger.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,17 @@
1010

1111
require 'grape-swagger/doc_methods'
1212
require 'grape-swagger/model_parsers'
13+
require 'grape-swagger/request_param_parser_registry'
1314

1415
module GrapeSwagger
1516
class << self
1617
def model_parsers
1718
@model_parsers ||= GrapeSwagger::ModelParsers.new
1819
end
20+
21+
def request_param_parsers
22+
@request_param_parsers ||= GrapeSwagger::RequestParamParserRegistry.new
23+
end
1924
end
2025
autoload :Rake, 'grape-swagger/rake/oapi_tasks'
2126

lib/grape-swagger/endpoint.rb

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,6 @@
88

99
module Grape
1010
class Endpoint # rubocop:disable Metrics/ClassLength
11-
REQUEST_PARAM_PARSERS = [
12-
GrapeSwagger::RequestParamParsers::Headers,
13-
GrapeSwagger::RequestParamParsers::Route,
14-
GrapeSwagger::RequestParamParsers::Body
15-
].freeze
16-
1711
def content_types_for(target_class)
1812
content_types = (target_class.content_types || {}).values
1913

@@ -389,7 +383,7 @@ def build_file_response(memo)
389383
end
390384

391385
def build_request_params(route, settings)
392-
REQUEST_PARAM_PARSERS.each_with_object({}) do |parser_klass, accum|
386+
GrapeSwagger.request_param_parsers.each_with_object({}) do |parser_klass, accum|
393387
params = parser_klass.parse(
394388
route,
395389
accum,
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# frozen_string_literal: true
2+
3+
require_relative 'request_param_parsers/headers'
4+
require_relative 'request_param_parsers/route'
5+
require_relative 'request_param_parsers/body'
6+
7+
module GrapeSwagger
8+
class RequestParamParserRegistry
9+
DEFAULT_PARSERS = [
10+
GrapeSwagger::RequestParamParsers::Headers,
11+
GrapeSwagger::RequestParamParsers::Route,
12+
GrapeSwagger::RequestParamParsers::Body
13+
].freeze
14+
15+
include Enumerable
16+
17+
def initialize
18+
@parsers = DEFAULT_PARSERS.dup
19+
end
20+
21+
def register(klass)
22+
@parsers << klass
23+
end
24+
25+
def insert_before(before_klass, klass)
26+
insert_at = @parsers.index(before_klass)
27+
insert_at = @parsers.length - 1 if insert_at.nil?
28+
@parsers.insert(insert_at, klass)
29+
end
30+
31+
def insert_after(after_klass, klass)
32+
insert_at = @parsers.index(after_klass)
33+
insert_at = @parsers.length - 1 if insert_at.nil?
34+
@parsers.insert(insert_at + 1, klass)
35+
end
36+
37+
def each
38+
@parsers.each do |klass|
39+
yield klass
40+
end
41+
end
42+
end
43+
end

0 commit comments

Comments
 (0)