Sha256: f93002b9556c49f82f50a077f440662ca69f61b76e0a7f041240f4c3c7d550d3

Contents?: true

Size: 1.21 KB

Versions: 15

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

require "dry/validation"
require "refinements/array"

module Tana
  module Requests
    # Validates a generic node within an API request.
    class Node < Dry::Validation::Contract
      TYPES = %w[boolean date field file plain reference url].freeze

      using Refinements::Array

      def initialize(types: TYPES, **)
        @types = types
        super(**)
      end

      json do
        optional(:attributeId).filled :string
        optional(:contentType).filled :string
        optional(:dataType).filled :string
        optional(:description).filled :string
        optional(:file).filled :string
        optional(:filename).filled :string
        optional(:id).filled :string
        optional(:name).filled :string
        optional(:supertags).array(:hash) { required(:id).filled :string }
        optional(:type).filled :string
        optional(:value).filled :bool
      end

      rule :type do
        key.failure "is invalid. Use: #{types.to_usage :or}" if key? && !types.include?(value)
      end

      rule :dataType do
        key.failure "is invalid. Use: #{types.to_usage :or}" if key? && !types.include?(value)
      end

      private

      attr_reader :types
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
tana-0.15.0 lib/tana/requests/node.rb
tana-0.14.0 lib/tana/requests/node.rb
tana-0.13.0 lib/tana/requests/node.rb
tana-0.12.0 lib/tana/requests/node.rb
tana-0.11.0 lib/tana/requests/node.rb
tana-0.10.0 lib/tana/requests/node.rb
tana-0.9.0 lib/tana/requests/node.rb
tana-0.8.0 lib/tana/requests/node.rb
tana-0.7.0 lib/tana/requests/node.rb
tana-0.6.0 lib/tana/requests/node.rb
tana-0.4.0 lib/tana/requests/node.rb
tana-0.3.0 lib/tana/requests/node.rb
tana-0.2.0 lib/tana/requests/node.rb
tana-0.1.0 lib/tana/requests/node.rb
tana-0.0.0 lib/tana/requests/node.rb