Sha256: 1474fae1fc3b867c445de7567f85b9c5b85e0ff7959bc2664aa8d46417f9a6c6

Contents?: true

Size: 1.79 KB

Versions: 5

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

require_relative '../../utils/kwargs/builder'

module Meta
  module JsonSchema
    module SchemaOptions
      @default_options = {
        scope: [],
        required: false
      }
      @allowable_options = (
        %i[type description in value using default presenter convert scope items using] +
        @default_options.keys + 
        JsonSchema::Validators.keys
      ).uniq

      class << self
        def divide_to_param_and_render(options)
          common_opts = (options || {}).dup
          param_opts = common_opts.delete(:param)
          render_opts = common_opts.delete(:render)

          param_opts = merge_common_to_stage(common_opts, param_opts)
          render_opts = merge_common_to_stage(common_opts, render_opts)
          [param_opts, render_opts, common_opts]
        end

        def normalize(options)
          # 只要 options 中设置为 nil 的选项没有明确的意义,则下行代码是永远有效的
          options = (@default_options.compact).merge(options.compact)
          if options[:using]
            if options[:type].nil?
              options[:type] = 'object'
            elsif options[:type] != 'object' && options[:type] != 'array'
              raise "当使用 using 时,type 必须声明为 object 或 array"
            end
          end

          # 处理 validators
          unknown_validators = options.keys - @allowable_options
          raise "未知的选项:#{unknown_validators.join(', ')}" unless unknown_validators.empty?

          options
        end

        private

        def merge_common_to_stage(common_opts, stage_opts)
          stage_opts = {} if stage_opts.nil? || stage_opts == true
          stage_opts = common_opts.merge(stage_opts) if stage_opts
          stage_opts
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
meta-api-0.0.8 lib/meta/json_schema/support/schema_options.rb
meta-api-0.0.7 lib/meta/json_schema/support/schema_options.rb
meta-api-0.0.6 lib/meta/json_schema/support/schema_options.rb
meta-api-0.0.5 lib/meta/json_schema/support/schema_options.rb
meta-api-0.0.4 lib/meta/json_schema/support/schema_options.rb