Skip to content

Commit

Permalink
adding Enlighten::Trigger exception which records caller binding
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanb committed Jul 9, 2010
1 parent ba41f09 commit 3c8a515
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
3 changes: 2 additions & 1 deletion lib/enlighten.rb
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
require "enlighten/middleware"
require "enlighten/middleware"
require "enlighten/trigger"
23 changes: 23 additions & 0 deletions lib/enlighten/trigger.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module Enlighten
class Trigger < Exception
attr_reader :binding_of_caller

# From: http://stackoverflow.com/questions/106920/how-can-i-get-source-and-variable-values-in-ruby-tracebacks
def initialize
expected_file, expected_line = caller(1).first.split(':')[0,2]
expected_line = expected_line.to_i
return_count = 5

set_trace_func(proc do |event, file, line, id, binding, kls|
if file == expected_file && line == expected_line
@binding_of_caller = binding
set_trace_func(nil)
end

if event == :return
set_trace_func(nil) if (return_count -= 1) <= 0
end
end)
end
end
end
16 changes: 16 additions & 0 deletions spec/enlighten/trigger_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
require "spec_helper"

describe Enlighten::Trigger do
def trigger
something = "foo"
raise Enlighten::Trigger
end

it "should contain caller's binding" do
begin
trigger
rescue Enlighten::Trigger => e
eval("something", e.binding_of_caller).should == "foo"
end
end
end

0 comments on commit 3c8a515

Please sign in to comment.