Sha256: 71ffb355fac639c28f2e66b827ddca2b95d1a1a3762d32e51252c6c4223cd3ff

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

module TablePal
  class Validate

    attr_reader :meth

    def initialize(meth, options)
      @meth = meth

      options.each do |key, value|
        validate_option(key, value)
      end
    end

    def validate_option(key, value)
      case key
      when :colour        then validate(key: key, value: value, classes: [Symbol, NilClass])
      when :column        then validate(key: key, value: value, classes: [Column])
      when :content       then validate(key: key, value: value, classes: [String, Float, Integer, NilClass])
      when :formatter     then validate(key: key, value: value, classes: [Proc])
      when :heading       then validate(key: key, value: value, classes: [TrueClass])
      when :justification then validate(key: key, value: value, classes: [Symbol])
      when :left_border   then validate(key: key, value: value, classes: [String, NilClass])
      when :left_padding  then validate(key: key, value: value, classes: [String])
      when :right_border  then validate(key: key, value: value, classes: [String, NilClass])
      when :right_padding then validate(key: key, value: value, classes: [String])
      when :row           then validate(key: key, value: value, classes: [Row])
      when :subheading    then validate(key: key, value: value, classes: [TrueClass, FalseClass])
      when :section_end   then validate(key: key, value: value, classes: [TrueClass, FalseClass])
      else raise TablePalError, "#{class_method} received Unexpected option: `#{key}`"
      end
    end

    def validate(key:, value:, classes:)
      return if classes.any? { |klass| value.is_a?(klass) }

      raise TablePalError, "#{class_method} expected `#{key}:` to be a #{for_sentence(classes)}, not a `#{value.class}`"
    end

    def class_method
      "Table.#{meth}"
    end

    def for_sentence(classes)
      classes.map { |klass| "`#{klass}`" }.join(' or ')
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
table_pal-0.3.3 lib/validate.rb