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

Version Path
meta-api-0.1.2 lib//meta/route_dsl/uniformed_params_builder.rb
meta-api-0.1.1 lib//meta/route_dsl/uniformed_params_builder.rb
meta-api-0.1.0 lib//meta/route_dsl/uniformed_params_builder.rb
meta-api-0.0.9 lib//meta/route_dsl/uniformed_params_builder.rb
meta-api-0.0.8 lib/meta/route_dsl/uniformed_params_builder.rb