Sha256: edcafa1ad700d78328b6cfb45f684448b6193818f519a6a9ff78cdacc8061aa6

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

module Modelizer
  module Validations
    def test_validations_for attribute, *validations
      @klass ||= ::Modelizer.model_class_for self
      @model ||= ::Modelizer.method_name_for @klass

      unless instance_methods.collect { |m| m.to_s }.include? "new_#{@model}"
        raise "no model template for #{@klass.name}"
      end

      # FIX: location in original test file

      validations.each do |v|
        test = send "validation_lambda_for_#{v}", @klass, @model, attribute
        define_method "test_#{attribute}_#{v}", &test
      end
    end

    private

    def validation_lambda_for_presence klass, model, attribute
      lambda do
        assert_invalid attribute, send("new_#{model}", attribute => nil)
      end
    end

    def validation_lambda_for_uniqueness klass, model, attribute
      lambda do
        existing = klass.first
        assert existing, "There's at least one #{model} fixture."

        assert_invalid attribute,
          send("new_#{model}", attribute => existing.send(attribute))
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
modelizer-4.0.0 lib/modelizer/validations.rb
modelizer-3.0.0 lib/modelizer/validations.rb