Module: Crew::Util
- Included in:
- Context, Task, Task::Test, Tester
- Defined in:
- lib/crew/util.rb
Instance Method Summary collapse
- #assert(value, message = nil) ⇒ Object
- #escape(*words) ⇒ Object
- #logger ⇒ Object
- #poll(name, opts = {}) ⇒ Object
- #retryable(opts = {}) ⇒ Object
Instance Method Details
#assert(value, message = nil) ⇒ Object
8 9 10 11 12 13 |
# File 'lib/crew/util.rb', line 8 def assert(value, = nil) value or begin ||= "expected #{value.inspect} to be true at #{caller.first}" raise AssertionError, end end |
#escape(*words) ⇒ Object
66 67 68 |
# File 'lib/crew/util.rb', line 66 def escape(*words) Shellwords.shelljoin(words) end |
#logger ⇒ Object
37 38 39 |
# File 'lib/crew/util.rb', line 37 def logger @home ? @home.logger : @logger end |
#poll(name, opts = {}) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/crew/util.rb', line 41 def poll(name, opts = {}) interval = opts[:interval] || 1 timeout = opts[:timeout] spinner = logger.spinner(name) val = nil begin logger.muted do Timeout::timeout(timeout) do begin val = yield rescue spinner[false] sleep interval retry else spinner[true] end end end rescue Timeout::Error assert false, "timeout of #{timeout} exceeded" end val end |
#retryable(opts = {}) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/crew/util.rb', line 15 def retryable(opts = {}) intervals = 10.times.map { 0.1 }.to_a timeout = opts[:timeout] max = opts[:max] || 1.0 out = nil begin Timeout::timeout(max) do begin Timeout::timeout(timeout) { out = yield } end end rescue if intervals.empty? raise else sleep intervals.shift retry end end out end |