Sha256: 3027214c9bde83f8ae086e828d5fee3e7cf32ba963409c640ea55fbc0faa8cd9

Contents?: true

Size: 1.52 KB

Versions: 2

Compression:

Stored size: 1.52 KB

Contents

module Compel
  module Builder

    module CommonValue

      def in(value)
        options[:in] = coerce_values_ary!(value, :in)
        self
      end

      def range(value)
        options[:range] = coerce_values_ary!(value, :range)
        self
      end

      def min(value)
        options[:min] = coerce_value!(value, :min)
        self
      end

      def max(value)
        options[:max] = coerce_value!(value, :max)
        self
      end

      def coerce_values_ary!(values, method)
        begin
          fail if values.nil?

          Coercion.coerce!(values, Coercion::Array)
        rescue
          raise_array_error(method)
        end

        values.map{ |value| Coercion.coerce!(value, self.type) }

        rescue
          raise_array_values_error(method)
      end

      def coerce_value!(value, method)
        begin
          fail if value.nil?

          Coercion.coerce!(value, self.type)
        rescue
          raise_value_error(method)
        end
      end

      def raise_array_error(method)
        raise TypeError, "#{self.class.human_name} ##{method} " \
                         "value must an Array"
      end

      def raise_array_values_error(method)
        raise TypeError, "All #{self.class.human_name} ##{method} values " \
                         "must be a valid #{self.type.human_name}"
      end

      def raise_value_error(method)
        raise TypeError, "#{self.class.human_name} ##{method} value " \
                         "must be a valid #{self.type.human_name}"
      end

    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
compel-0.4.0 lib/compel/builder/common_value.rb
compel-0.3.7 lib/compel/builder/common_value.rb