Implementation of insertion sort in Ruby, code correctness
Your block usage yield arr, compare, curr is rather weird:

custom_insertion_sort(array){ |_, i, j| _[i].abs &gt; j.abs }


I would do yield arr[compare], curr:

naki_insert_sort(array){ |i, j| i.abs &gt; j.abs }

You may use ...n syntax instead of ..n-1
You are sorting inplace, operating with an array like with a memory pointer, so you don't have to return arr from the function.
Instead of writing comparision code twice you can either define lambda or put it just inside while condition.


And after a bit more golf I've got this:

def naki_insert_sort arr
    for i in (1...arr.length)
        curr = arr[compare = i]
        while 0 &lt;= (compare -= 1) &amp;&amp; ( block_given? ?
            yield(arr[compare], curr) :
            arr[compare] &lt; curr
        )
            arr[compare + 1] = arr[compare]
        end
        arr[compare + 1] = curr
    end
end


But looks like Insertion sort and Ruby don't actually suit each other, because using indexes isn't functional.