/ spec / support / types.cr
types.cr
 1  class Coffeeshop < Barista::Project; end
 2  
 3  module Barista::Registerable; end
 4  struct MockTask
 5    include Barista::Registerable
 6    getter :name, :value, :dependencies
 7    def initialize(@name : String, @value : String, @dependencies : Array(Barista::Registerable) = [] of Barista::Registerable); end
 8  end
 9  
10  module WithHelpers
11    def with_graph(*, nodes = [] of Symbol, edges = [] of Tuple(Symbol, Symbol), &block : ->)
12      graph = Barista::Graph.new
13      nodes.each do |node|
14        graph.add(node)
15      end
16  
17      edges.each do |tuple|
18        graph.add_edge(tuple[0], tuple[1])
19      end
20  
21     yield graph
22    end
23  
24    def wait_for(duration : Int32 = 5, *, interval : Float64 = 0.5, &block : -> Bool)
25      time = Time.local
26      while (Time.local - time).seconds < duration
27        begin
28          result = yield
29          return if result
30          sleep interval
31        rescue ex : Exception
32          sleep interval
33        end
34      end
35      raise Exception.new("timed out after #{duration}")
36    end
37  
38    def io
39      io = IO::Memory.new
40      multi = IO::MultiWriter.new(io, STDOUT)
41      { io, multi }
42    end
43  
44    def with_io
45      io, multi = io
46      Barista::Log.backend(Log::IOBackend.new(multi))
47      yield(io)
48    ensure
49      Barista::Log.backend(Log::IOBackend.new(STDOUT))
50    end
51  
52    def with_packager(packager)
53      yield packager
54    ensure 
55      packager.cleanup
56    end
57  end