RobertDober/lab42_data_class

View on GitHub
lib/lab42/data_class/constraints/constraint.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require "lab42/data_class"
module Lab42
  module DataClass
    module Constraints
      class Constraint
        attr_reader :name, :function

        def call(value)
          function.(value)
        end

        def setter_constraint? = false
        def to_proc = function
        def to_s = "Constraint<#{name}>"

        private
        def initialize(name:, function:)
          raise ArgumentError, "name not a String, but #{name}" unless String === name
          unless function.respond_to?(:arity) && function.arity == 1
            raise ArgumentError, "function not a callable with arity 1 #{function}"
          end

          @name = name
          @function = function
        end
      end
    end
  end
end
# SPDX-License-Identifier: Apache-2.0