Sha256: 32002a9009b2a3c1fdd33b05d5e655a27b11e725041ef9f9dbcfae4cf9ae0185

Contents?: true

Size: 1.04 KB

Versions: 2

Compression:

Stored size: 1.04 KB

Contents

module Modelizer
  module Validations
    def test_validations_for attribute, *validations
      @klass ||= name.gsub(/Test$/, "").constantize
      @model ||= ::Modelizer.underscore @klass.name

      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_not_nil 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-2.1.0 lib/modelizer/validations.rb
modelizer-2.0.0 lib/modelizer/validations.rb