def __assign!(property, value)
      @types.test!(@path.add(property), value)
      v = @blocks.evaluate!(@path.add(property), value)

      value = v unless v.nil?
      super(property, value)
    end
def __assign!(property, value)
      @types.test!(@path.add(property), value)
      v = @blocks.evaluate!(@path.add(property), value)

      value = v unless v.nil?
      super(property, value)
    end
Assigns a value after running the assertions
 @param [Symbol] property the property to type test
 @param [Any] value the given value