Sha256: 8c53d8c1904b6f8c4c684593c4fb03da1ef17cb53c6789898b40394478c622de
Contents?: true
Size: 1.64 KB
Versions: 5
Compression:
Stored size: 1.64 KB
Contents
# frozen_string_literal: true module Meta module RouteDSL class UniformedParamsBuilder def initialize(route_full_path:, route_method:, &block) @route_full_path = route_full_path @route_method = route_method @parameters_builder = ParametersBuilder.new(route_full_path: @route_full_path, route_method: @route_method) @parameter_options = {} instance_exec &block if block_given? end def param(name, options = {}, &block) options = (options || {}).dup if path_param_names.include?(name) options = Utils::KeywordArgs::Checker.fix!(options, in: 'path', required: true) elsif @route_method == :get options = Utils::KeywordArgs::Checker.merge_defaults!(options, in: 'query') else options = Utils::KeywordArgs::Checker.merge_defaults!(options, in: 'body') end if options[:in] == 'body' options.delete(:in) property name, options, &block else @parameters_builder.param name, options end end def property(name, options = {}, &block) @request_body_builder ||= JsonSchema::ObjectSchemaBuilder.new @request_body_builder.property name, options, &block end def build [@parameters_builder.build, @request_body_builder&.to_schema] end private def path_param_names @_path_param_names ||= @route_full_path.split('/') .filter { |part| part =~ /[:*].+/ } .map { |part| part[1..-1].to_sym } end end end end
Version data entries
5 entries across 5 versions & 1 rubygems