Repeater for blocks of Ruby
There's not much weak points I can see. 

The biggest one is the way to use it. One needs to declare a variable to be caught in the block (closure), and I think it's unnecessary. You should be able to do this:

  Repeater.new do
    event_present_in_database
  end.until do |result|
    result
  end.repeat(times: 10, delay: 0.1)


If you changed the break like like this: 

  break if @until_block.present? &amp;&amp; @until_block.call(result)


The second, tiny point would be: make it clearer to understand the extraction to method conditionals: 

  # ...
  break if exit_criteria_satisfied?(result)
  # ...

  private 
  def exit_criteria_satisfied?(result)
    @until_block.present? &amp;&amp; @until_block.call
  end


That's all I got. The rest of the code seems pretty clear to me. 


  I know Ruby has all sorts of tricks


Yeah, but I don't know a single one that could help with the readability here.