Sha256: efc19d2dfe21599c9d862d0af8c2f839b4c8486e69f1c814abe4eaba689f2673

Contents?: true

Size: 1.19 KB

Versions: 14

Compression:

Stored size: 1.19 KB

Contents

module Schemacop
  module V3
    class OneOfNode < CombinationNode
      def type
        :oneOf
      end

      def self.allowed_options
        super + %i[treat_blank_as_nil]
      end

      def cast(value)
        item = match(value)

        unless item
          if options[:treat_blank_as_nil] && value.blank? && !value.is_a?(FalseClass)
            return nil
          else
            return value
          end
        end

        return item.cast(value)
      end

      def _validate(data, result:)
        if options[:treat_blank_as_nil] && data.blank? && !data.is_a?(FalseClass)
          data = nil
        end

        super_data = super(data, result: result)
        return if super_data.nil?

        matches = matches(super_data)

        if matches.size == 1
          matches.first._validate(super_data, result: result)
        else
          result.error <<~PLAIN.strip
            Matches #{matches.size} schemas but should match exactly 1:
            #{schema_messages(data).join("\n")}
          PLAIN
        end
      end

      def validate_self
        if @items.size < 2
          fail 'Node "one_of" makes only sense with at least 2 items.'
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
schemacop-3.0.33 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.32 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.31 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.30 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.29 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.28 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.27 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.26 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.25 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.24 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.23 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.22 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.21 lib/schemacop/v3/one_of_node.rb
schemacop-3.0.20 lib/schemacop/v3/one_of_node.rb