lib/sup/hook.rb in sup-0.2 vs lib/sup/hook.rb in sup-0.3

- old
+ new

@@ -7,41 +7,51 @@ ## ## how does rails do it, when you pass :locals into a partial? ## ## i don't bother providing setters, since i'm pretty sure the ## charade will fall apart pretty quickly with respect to scoping. - ## this is basically fail-fast. + ## "fail-fast", we'll call it. class HookContext def initialize name + @__say_id = nil @__name = name @__locals = {} end attr_writer :__locals def method_missing m, *a case @__locals[m] when Proc - @__locals[m].call(*a) + @__locals[m] = @__locals[m].call(*a) # only call the proc once when nil super else @__locals[m] end end def say s - @__say_id = BufferManager.say s, @__say_id - BufferManager.draw_screen + if BufferManager.instantiated? + @__say_id = BufferManager.say s, @__say_id + BufferManager.draw_screen + else + log s + end end def log s Redwood::log "hook[#@__name]: #{s}" end def ask_yes_or_no q - BufferManager.ask_yes_or_no q + if BufferManager.instantiated? + BufferManager.ask_yes_or_no q + else + print q + gets.chomp.downcase == 'y' + end end def __binding binding end @@ -73,10 +83,11 @@ begin result = context.instance_eval @hooks[name], fn_for(name) rescue Exception => e log "error running hook: #{e.message}" log e.backtrace.join("\n") + @hooks[name] = nil # disable it BufferManager.flash "Error running hook: #{e.message}" end context.__cleanup result end @@ -98,9 +109,11 @@ File: #{fn_for name} #{desc} EOS end end + + def enabled? name; !hook_for(name).nil? end private def hook_for name unless @hooks.member? name