module Wireway::Standard
接口请求参数标准
Public Instance Methods
attribute_necessary(ideal:, reality:)
click to toggle source
参数项检查
# File lib/wireway/core/standard.rb, line 25 def attribute_necessary(ideal:, reality:) # 检查必须参数是否缺失 necessary_standards = ideal.select{|standard| standard[:necessary] == true} necessary_standards.each do |standard| key = standard[:key] unless (reality[key.to_sym] || reality[key]).present? return [false, "#{standard[:name]}(#{key})为必须项,不能为空"] end end # 检查参数值是否符合正则式要求 reality.each do |key, value| standard = ideal.select{|standard| [key, key.to_sym, key.to_s].uniq.include?(standard[:key])}[0] # return [false, "未找到关于参数:#{key} 的定义"] unless standard next unless standard if standard[:regular] && (value.to_s =~ standard[:regular]).nil? tmp = "参数:#{standard[:name]}(#{key})的参数值(#{value})不满足要求" tmp+= ", 请参考: #{standard[:explain]}" if standard[:explain].present? tmp+= ", 示例值: #{standard[:example]}" if standard[:example].present? tmp+= ", 默认值: #{standard[:default]}" if standard[:default].present? tmp+='.' return [false, tmp] end end [true, ''] end
check_data_format(described:, reality:)
click to toggle source
# File lib/wireway/core/standard.rb, line 116 def check_data_format(described:, reality:) data_format = {} if (reality[:data_format] == ['original']) && (reality[:key_type] == 'zh') described[:data_structure].map do |key, value| data_format.merge!([[value, key]].to_h) end reality[:data_format] = data_format return [true, ''] elsif (reality[:data_format] == ['original']) described[:data_structure].each do |key, value| data_format.merge!([[key, key]].to_h) end reality[:data_format] = data_format return [true, ''] end data_format = reality[:data_format] data_format = data_format.map(&:to_sym) data_structure = {} described[:data_structure].map{|key, value| data_structure.merge!([[key, key], [value.to_sym, key]].to_h)} hit_items = data_structure.select{|key, value| data_format.include?(key)} missed = (data_format - hit_items.keys).join(',') return [false, "所提供数据格式中:#{missed},未找到对应匹配数据项"] if missed.present? reality[:data_format] = hit_items [true, ''] end
default_value(ideal:, reality:)
click to toggle source
参数默认值检查
# File lib/wireway/core/standard.rb, line 55 def default_value(ideal:, reality:) ideal.select{|standard| !standard[:default].nil?}.each do |standard| unless reality[standard[:key].to_sym].present? reality.merge!({standard[:key].to_sym => standard[:default]}) end end [true, ''] end
inspect_all(ideal:, reality:)
click to toggle source
全自检项检查
# File lib/wireway/core/standard.rb, line 7 def inspect_all(ideal:, reality:) ideal_reality = {ideal: ideal, reality: reality} res = default_value(ideal_reality) return res unless res[0] res = value_type(ideal_reality) return res unless res[0] res = attribute_necessary(ideal_reality) return res unless res[0] # res = check_data_format(described: described, reality: reality) # return res unless res[0] [true, ''] end
value_type(ideal:, reality:)
click to toggle source
参数值格式检查
# File lib/wireway/core/standard.rb, line 66 def value_type(ideal:, reality:) ideal.each do |standard| unless standard[:value_type].present? return [false, "自描述参数标准检查异常: #{standard[:name]}(#{standard[:key]})未设置对应参数值类型(value_type)."] end end ideal.each do |standard| old_value = reality[standard[:key].to_sym] case standard[:value_type].to_sym when :string_or_array, :array_or_string new_value = (JSON.parse(old_value) rescue false) new_value = old_value.split(/, |,/) unless new_value when :array error_msg = [false, "参数:#{standard[:key]},参数类型不符合Json数组要求."] next if old_value.is_a?(Array) new_value = (JSON.parse(old_value) rescue (return error_msg)) return error_msg unless new_value.is_a?(Array) when :key_value error_msg = [false, "参数:#{standard[:key]},参数类型不符合Json键值对要求."] next if old_value.is_a?(Hash) new_value = (JSON.parse(old_value) rescue (return error_msg)) return error_msg unless new_value.is_a?(Hash) when :boolean new_value = [true, 'true', '1', 1].include?(old_value) when :integer max_value = standard[:max] return [false, "参数:#{standard[:key]},参数值:#{old_value} 大于接口定义最大值:#{max_value}."] if max_value.present? && (old_value.to_i > max_value) next if old_value.is_a?(Integer) if old_value == '0' new_value = 0 else return [false, "参数:#{standard[:key]},参数类型不符合数字要求."] if ((old_value.to_i rescue 0) == 0) new_value = old_value.to_i end else next end unless (old_value == new_value) reality.merge!({standard[:key].to_sym => new_value}) end end [true, ''] end