pry-exception_explorer 0.1.1pre7 → 0.1.1pre8

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -53,6 +53,20 @@ task :example_inline do
53
53
  sh "ruby -I#{direc}/lib/ #{direc}/examples/example_inline.rb "
54
54
  end
55
55
 
56
+ desc "Run example C inline"
57
+ task :example_c_inline do
58
+ require 'pry-exception_explorer/shim_builder'
59
+ binary_name = "lib_overrides.#{PryExceptionExplorer::ShimBuilder::Dyname}"
60
+ if RUBY_PLATFORM =~ /darwin/
61
+ ENV['DYLD_FORCE_FLAT_NAMESPACE'] = "1"
62
+ ENV['DYLD_INSERT_LIBRARIES'] = File.join PryExceptionExplorer::ShimBuilder.dir, binary_name
63
+ else
64
+ ENV['LD_PRELOAD'] = File.join PryExceptionExplorer::ShimBuilder.dir, binary_name
65
+ end
66
+
67
+ sh "ruby -I#{direc}/lib/ #{direc}/examples/example_c_inline.rb "
68
+ end
69
+
56
70
  task :default => :test
57
71
 
58
72
  desc "Show version"
@@ -0,0 +1,27 @@
1
+ unless Object.const_defined? :PryExceptionExplorer
2
+ $:.unshift File.expand_path '../../lib', __FILE__
3
+ require 'pry'
4
+ end
5
+
6
+ require 'pry-exception_explorer'
7
+
8
+ PryExceptionExplorer.enabled = true
9
+ PryExceptionExplorer.intercept(NameError)
10
+
11
+ def alpha
12
+ name = "john"
13
+ beta
14
+ puts name
15
+ end
16
+
17
+ def beta
18
+ x = 20
19
+ gamma
20
+ puts x
21
+ end
22
+
23
+ def gamma
24
+ UnknownConstant
25
+ end
26
+
27
+ alpha
@@ -99,13 +99,11 @@ module PryExceptionExplorer
99
99
  def intercept(*exceptions, &block)
100
100
  return if exceptions.empty? && block.nil?
101
101
 
102
- options = (exceptions.pop if exceptions.last.is_a?(Hash)) || {}
103
-
104
102
  if !exceptions.empty?
105
103
  block = proc { |_, ex| exceptions.any? { |v| v === ex } }
106
104
  end
107
105
 
108
- local_hash[:intercept_object] = Intercept.new(block, options)
106
+ local_hash[:intercept_object] = Intercept.new(block)
109
107
  end
110
108
 
111
109
  # @return [PryExceptionExplorer::Intercept] The object defined earlier by a call to `PryExceptionExplorer.intercept`.
@@ -131,6 +129,28 @@ module PryExceptionExplorer
131
129
  end
132
130
  end
133
131
 
132
+ # Amends (destructively) an exception call stack according to the info in
133
+ # `PryExceptionExplorer.intercept_object`, specifically
134
+ # `PryExceptionExplorer::Intercept#skip_until_block` and `PryExceptionExplorer::Intercept#skip_while_block`.
135
+ # @param [Exception] ex The exception whose call stack will be amended.
136
+ def amend_exception_call_stack!(ex)
137
+ call_stack = ex.exception_call_stack
138
+
139
+ if intercept_object.skip_until_block
140
+ idx = call_stack.each_with_index.find_index do |frame, idx|
141
+ intercept_object.skip_until_block.call(LazyFrame.new(frame, idx, call_stack))
142
+ end
143
+ call_stack = call_stack.drop(idx) if idx
144
+ elsif intercept_object.skip_while_block
145
+ idx = call_stack.each_with_index.find_index do |frame, idx|
146
+ intercept_object.skip_while_block.call(LazyFrame.new(frame, idx, call_stack)) == false
147
+ end
148
+ call_stack = call_stack.drop(idx) if idx
149
+ end
150
+
151
+ ex.exception_call_stack = call_stack
152
+ end
153
+
134
154
  # Prepare the `Pry` instance and associated call-stack when entering
135
155
  # into an exception context.
136
156
  # @param [Exception] ex The exception.
@@ -154,7 +174,7 @@ module PryExceptionExplorer
154
174
  def enter_exception(ex, options={})
155
175
  hooks = Pry.config.hooks.dup.add_hook(:before_session, :set_exception_flag) do |_, _, _pry_|
156
176
  setup_exception_context(ex, _pry_, options)
157
- end.add_hook(:before_session, :manage_intercept_recurse) do
177
+ end.add_hook(:before_session, :manage_intercept_recurse) do
158
178
  PryExceptionExplorer.intercept_object.disable! if !PryExceptionExplorer.intercept_object.intercept_recurse?
159
179
  end.add_hook(:after_session, :manage_intercept_recurse) do
160
180
  PryExceptionExplorer.intercept_object.enable! if !PryExceptionExplorer.intercept_object.active?
@@ -26,6 +26,6 @@ Pry::CLI.add_options do
26
26
  ENV['LD_PRELOAD'] = File.join PryExceptionExplorer::ShimBuilder.dir, binary_name
27
27
  end
28
28
 
29
- exec("pry")
29
+ exec("pry #{(ARGV - ["--c-exceptions"]).join(' ')}")
30
30
  end
31
31
  end
@@ -16,6 +16,16 @@ module PryExceptionExplorer
16
16
  def enterable_exception?
17
17
  last_exception && last_exception.exception_call_stack
18
18
  end
19
+
20
+ def inline_exception?
21
+ frame_manager && frame_manager.user[:exception] &&
22
+ frame_manager.user[:inline_exception]
23
+ end
24
+
25
+ def normal_exception?
26
+ frame_manager && frame_manager.user[:exception] &&
27
+ frame_manager.user[:exception].continuation
28
+ end
19
29
  end
20
30
 
21
31
  Commands = Pry::CommandSet.new do
@@ -84,15 +94,6 @@ module PryExceptionExplorer
84
94
  raise Pry::CommandError, "No exception to continue!"
85
95
  end
86
96
  end
87
-
88
- private
89
- def inline_exception?
90
- frame_manager && frame_manager.user[:exception] && frame_manager.user[:inline_exception]
91
- end
92
-
93
- def normal_exception?
94
- frame_manager && frame_manager.user[:exception] && frame_manager.user[:exception].continuation
95
- end
96
97
  end
97
98
 
98
99
  end
@@ -31,12 +31,16 @@ class Object
31
31
  ex.set_backtrace(array)
32
32
 
33
33
  # revert to normal exception behaviour if EE not enabled.
34
- if !PryExceptionExplorer.enabled?
34
+ if !PryExceptionExplorer.enabled?
35
35
  return super(ex)
36
36
  end
37
37
 
38
+ intercept_object = PryExceptionExplorer.intercept_object
39
+
38
40
  if PryExceptionExplorer.should_intercept_exception?(binding.of_caller(1), ex)
39
- ex.exception_call_stack = binding.callers.tap { |v| v.shift(1 + PryExceptionExplorer.intercept_object.skip) }
41
+ ex.exception_call_stack = binding.callers.tap { |v| v.shift(1 + intercept_object.skip_num) }
42
+ PryExceptionExplorer.amend_exception_call_stack!(ex)
43
+
40
44
  ex.should_intercept = true
41
45
 
42
46
  if !PryExceptionExplorer.wrap_active?
@@ -1,41 +1,75 @@
1
1
  module PryExceptionExplorer
2
2
  class Intercept
3
3
 
4
+ # @return [Proc] The predicate block that determines if
5
+ # interception takes place.
6
+ attr_reader :block
7
+
4
8
  # @return [Fixnum] Number of frames to skip when session starts.
5
- attr_accessor :skip
9
+ attr_reader :skip_num
10
+
11
+ # @return [Proc] The block that defines the frames to skip.
12
+ attr_reader :skip_while_block
6
13
 
7
- # @return [Boolean] Whether to intercept exceptions raised inside the session.
8
- attr_accessor :intercept_recurse
9
- alias_method :intercept_recurse?, :intercept_recurse
14
+ # @return [Proc] The block that determines when to stop skipping frames.
15
+ attr_reader :skip_until_block
10
16
 
11
17
  # @return [Boolean] Whether this intercept object is active
12
18
  # If it's inactive then calling it will always return `false`
13
19
  # regardless of content inside block.
14
- def active?() @active end
20
+ def active?() !!@active end
15
21
 
16
22
  # Disable the intercept object.
17
- def disable!() @active = false end
23
+ # @return [PryExceptionExplorer::Intercept] The receiver
24
+ def disable!() tap { @active = false } end
18
25
 
19
26
  # Enable if the intercept object.
20
- def enable!() @active = true end
21
-
22
- # @return [Proc] The predicate block that determines if
23
- # interception takes place.
24
- attr_reader :block
27
+ # @return [PryExceptionExplorer::Intercept] The receiver
28
+ def enable!() tap { @active = true } end
29
+
30
+ # @param [Fixnum] num Number of frames to skip when session
31
+ # starts.
32
+ # @return [PryExceptionExplorer::Intercept] The receiver
33
+ def skip(num) tap { @skip_num = num } end
34
+
35
+ # @yield [lazy_frame] The block that defines the frames to
36
+ # skip. The Pry session will start on the first frame for which
37
+ # this block evalutes to `false`.
38
+ # @yieldparam [PryExceptionExplorer::LazyFrame] lazy_frame
39
+ # @yieldreturn [Boolean]
40
+ # @return [PryExceptionExplorer::Intercept] The receiver
41
+ def skip_while(&block) tap { @skip_while_block = block } end
42
+
43
+ # @yield [lazy_frame] The block that determines when to stop skipping frames.
44
+ # The Pry session will start on the first frame for which
45
+ # this block evalutes to `true`.
46
+ # @yieldparam [PryExceptionExplorer::LazyFrame] lazy_frame
47
+ # @yieldreturn [Boolean]
48
+ # @return [PryExceptionExplorer::Intercept] The receiver
49
+ def skip_until(&block) tap { @skip_until_block = block } end
50
+
51
+ # @param [Boolean] should_recurse Whether to intercept exceptions
52
+ # raised inside the session.
53
+ # @return [PryExceptionExplorer::Intercept] The receiver
54
+ def intercept_recurse(should_recurse) tap { @intercept_recurse = should_recurse } end
25
55
 
26
- def initialize(block, options={})
27
- options = {
28
- :skip => 0,
29
- :intercept_recurse => false
30
- }.merge!(options)
56
+ # @return [Boolean] Whether exceptions raised inside the session
57
+ # will be intercepted.
58
+ def intercept_recurse?() !!@intercept_recurse end
31
59
 
32
- @block = block
33
- @skip = options[:skip]
34
- @intercept_recurse = options[:intercept_recurse]
60
+ def initialize(block)
61
+ skip(0)
62
+ intercept_recurse(false)
35
63
 
64
+ @block = block
36
65
  @active = true
37
66
  end
38
67
 
68
+ # Invoke the associated block for this
69
+ # `PryExceptionExplorer::Intercept` object. Note that the block is
70
+ # not invoked if the intercept object is inactive.
71
+ # @param [Array] args The parameters to
72
+ # @return [Boolean] Determines whether a given exception should be intercepted.
39
73
  def call(*args)
40
74
  active? && @block.call(*args)
41
75
  end
@@ -1,17 +1,19 @@
1
1
  module PryExceptionExplorer
2
2
  class LazyFrame
3
+ class NullFrame
4
+ def klass() nil end
5
+ def self() nil end
6
+ def method_name() nil end
7
+ def prev() self end
8
+ end
3
9
 
4
10
  # we need to jump over a few irrelevant frames to begin with
5
11
  START_FRAME_OFFSET = 6
6
12
 
7
- def initialize(frame, frame_counter = 0)
13
+ def initialize(frame, frame_counter = 0, call_stack = nil)
8
14
  @frame = frame
9
15
  @frame_counter = frame_counter
10
- end
11
-
12
- # @return [Binding] The `Binding` object that represents the frame.
13
- def raw_frame
14
- @frame
16
+ @call_stack = call_stack
15
17
  end
16
18
 
17
19
  # @return [Class] The class of the `self` of the frame.
@@ -31,7 +33,15 @@ module PryExceptionExplorer
31
33
 
32
34
  # @return [LazyFrame] The caller frame.
33
35
  def prev
34
- LazyFrame.new(binding.of_caller(@frame_counter + START_FRAME_OFFSET), @frame_counter + 1)
36
+ if @call_stack
37
+ if @frame_counter < (@call_stack.size - 1)
38
+ LazyFrame.new(@call_stack[@frame_counter + 1], @frame_counter + 1, @call_stack)
39
+ else
40
+ NullFrame.new
41
+ end
42
+ else
43
+ LazyFrame.new(binding.of_caller(@frame_counter + START_FRAME_OFFSET), @frame_counter + 1)
44
+ end
35
45
  end
36
46
  end
37
47
  end
@@ -2,12 +2,14 @@ require 'rbconfig'
2
2
  require 'fileutils'
3
3
 
4
4
  module PryExceptionExplorer
5
+ CompileError = Class.new(StandardError)
6
+
5
7
  module ShimBuilder
6
8
  class << self
7
9
  attr_reader :dir, :file
8
10
  end
9
11
 
10
- @dir = File.expand_path('~/.pry-exception_explorer')
12
+ @dir = File.expand_path("~/.pry-exception_explorer/#{RUBY_VERSION}")
11
13
  @file = File.join(@dir, "raise_shim.c")
12
14
 
13
15
  if RUBY_PLATFORM =~ /darwin/
@@ -26,27 +28,15 @@ module PryExceptionExplorer
26
28
  void
27
29
  rb_raise(unsigned long exc, const char *fmt, ...)
28
30
  {
29
- static void (*libruby_rb_raise)
30
- (unsigned long exc, const char *fmt, ...) = NULL;
31
-
32
- void * handle;
33
- char * error;
34
-
35
- if (!libruby_rb_raise) {
36
- handle = dlopen("#{RbConfig::CONFIG['libdir']}/libruby.#{Dyname}", RTLD_LAZY);
37
- if (!handle) {
38
- fputs(dlerror(), stderr);
39
- exit(1);
40
- }
41
- libruby_rb_raise = dlsym(handle, "rb_raise");
42
- if ((error = dlerror()) != NULL) {
43
- fprintf(stderr, "%s", error);
44
- exit(1);
45
- }
46
- }
47
-
48
31
  rb_funcall(rb_cObject, rb_intern("raise"), 2, exc, rb_str_new2("hooked exception (pry)"));
49
32
  }
33
+
34
+ void
35
+ rb_name_error(ID id, const char *fmt, ...)
36
+ {
37
+ rb_funcall(rb_cObject, rb_intern("raise"), 2, rb_eNameError, rb_str_new2("hooked exception (pry)"));
38
+ }
39
+
50
40
  EOF
51
41
 
52
42
  def self.create_directory_and_source_file
@@ -74,7 +64,9 @@ EOF
74
64
  end
75
65
 
76
66
  FileUtils.chdir @dir do
77
- system(compile_line)
67
+ if !system(compile_line)
68
+ raise CompileError, "There was a problem building the shim, aborted!"
69
+ end
78
70
  end
79
71
 
80
72
  end
@@ -1,3 +1,3 @@
1
1
  module PryExceptionExplorer
2
- VERSION = "0.1.1pre7"
2
+ VERSION = "0.1.1pre8"
3
3
  end
@@ -2,14 +2,14 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "pry-exception_explorer"
5
- s.version = "0.1.1pre6"
5
+ s.version = "0.1.1pre8"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["John Mair (banisterfiend)"]
9
- s.date = "2012-01-28"
9
+ s.date = "2012-01-31"
10
10
  s.description = "Enter the context of exceptions"
11
11
  s.email = "jrmair@gmail.com"
12
- s.files = [".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG", "Gemfile", "LICENSE", "README.md", "Rakefile", "examples/example_inline.rb", "examples/example_wrap.rb", "lib/pry-exception_explorer.rb", "lib/pry-exception_explorer/cli.rb", "lib/pry-exception_explorer/commands.rb", "lib/pry-exception_explorer/core_ext.rb", "lib/pry-exception_explorer/intercept.rb", "lib/pry-exception_explorer/lazy_frame.rb", "lib/pry-exception_explorer/shim_builder.rb", "lib/pry-exception_explorer/version.rb", "pry-exception_explorer.gemspec", "test/helper.rb", "test/test_exceptions_in_pry.rb", "test/test_inline_exceptions.rb", "test/test_wrapped_exceptions.rb"]
12
+ s.files = [".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG", "Gemfile", "LICENSE", "README.md", "Rakefile", "examples/example_c_inline.rb", "examples/example_inline.rb", "examples/example_wrap.rb", "lib/pry-exception_explorer.rb", "lib/pry-exception_explorer/cli.rb", "lib/pry-exception_explorer/commands.rb", "lib/pry-exception_explorer/core_ext.rb", "lib/pry-exception_explorer/intercept.rb", "lib/pry-exception_explorer/lazy_frame.rb", "lib/pry-exception_explorer/shim_builder.rb", "lib/pry-exception_explorer/version.rb", "pry-exception_explorer.gemspec", "test/helper.rb", "test/test_exceptions_in_pry.rb", "test/test_inline_exceptions.rb", "test/test_wrapped_exceptions.rb"]
13
13
  s.homepage = "https://github.com/banister/pry-exception_explorer"
14
14
  s.require_paths = ["lib"]
15
15
  s.rubygems_version = "1.8.11"
@@ -69,31 +69,31 @@ describe PryExceptionExplorer do
69
69
  "O.after_self = self",
70
70
  "continue-exception",
71
71
  "continue-exception")) do
72
- Ratty.new.ratty
72
+ Ratty.new.ratty
73
73
  end
74
74
 
75
75
  O.before_self.should == O.after_self
76
76
  end
77
77
 
78
78
  it 'should allow recursive (in-session) interceptions when :intercept_recurse => true' do
79
- EE.intercept(:intercept_recurse => true) { |frame, ex| frame.klass == Toad }
79
+ EE.intercept { |frame, ex| frame.klass == Toad }.intercept_recurse(true)
80
80
 
81
81
  redirect_pry_io(InputTester.new("O.before_self = self",
82
82
  "Ratty.new.ratty",
83
83
  "O.after_self = self",
84
84
  "continue-exception",
85
85
  "continue-exception")) do
86
- Ratty.new.ratty
86
+ Ratty.new.ratty
87
87
  end
88
88
 
89
89
  O.before_self.should.not == O.after_self
90
90
  end
91
-
91
+
92
92
  end
93
93
 
94
94
  describe "skip" do
95
95
  it 'should skip first frame with :skip => 1' do
96
- EE.intercept(:skip => 1) { |frame, ex| frame.klass == Toad }
96
+ EE.intercept { |frame, ex| frame.klass == Toad }.skip(1)
97
97
 
98
98
  redirect_pry_io(InputTester.new("O.method_name = __method__",
99
99
  "continue-exception")) do
@@ -104,7 +104,7 @@ describe PryExceptionExplorer do
104
104
  end
105
105
 
106
106
  it 'should skip first two framed with :skip => 2' do
107
- EE.intercept(:skip => 2) { |frame, ex| frame.klass == Toad }
107
+ EE.intercept { |frame, ex| frame.klass == Toad }.skip(2)
108
108
 
109
109
  redirect_pry_io(InputTester.new("O.method_name = __method__",
110
110
  "continue-exception")) do
@@ -115,6 +115,54 @@ describe PryExceptionExplorer do
115
115
  end
116
116
  end
117
117
 
118
+ describe "skip_until" do
119
+ it 'should skip frames until it finds a frame that meets the predicate' do
120
+ EE.intercept { |frame, ex| frame.klass == Toad }.skip_until { |frame| frame.prev.method_name == :ratty }
121
+
122
+ redirect_pry_io(InputTester.new("O.method_name = __method__",
123
+ "continue-exception")) do
124
+ Ratty.new.ratty
125
+ end
126
+
127
+ O.method_name.should == :weasel
128
+ end
129
+
130
+ it 'should not skip any frames if predicate not met' do
131
+ EE.intercept { |frame, ex| frame.klass == Toad }.skip_until { |frame| frame.prev.method_name == :will_not_be_matched }
132
+
133
+ redirect_pry_io(InputTester.new("O.method_name = __method__",
134
+ "continue-exception")) do
135
+ Ratty.new.ratty
136
+ end
137
+
138
+ O.method_name.should == :toad
139
+ end
140
+ end
141
+
142
+ describe "skip_while" do
143
+ it 'should skip frames while no frames meets the predicate' do
144
+ EE.intercept { |frame, ex| frame.klass == Toad }.skip_while { |frame| frame.prev.method_name != :ratty }
145
+
146
+ redirect_pry_io(InputTester.new("O.method_name = __method__",
147
+ "continue-exception")) do
148
+ Ratty.new.ratty
149
+ end
150
+
151
+ O.method_name.should == :weasel
152
+ end
153
+
154
+ it 'should not skip any frames if predicate not met' do
155
+ EE.intercept { |frame, ex| frame.klass == Toad }.skip_while { |frame| frame.prev.method_name != :will_not_be_matched }
156
+
157
+ redirect_pry_io(InputTester.new("O.method_name = __method__",
158
+ "continue-exception")) do
159
+ Ratty.new.ratty
160
+ end
161
+
162
+ O.method_name.should == :toad
163
+ end
164
+ end
165
+
118
166
  describe "special case exception-only syntax" do
119
167
 
120
168
  describe "single exception" do
metadata CHANGED
@@ -1,55 +1,59 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pry-exception_explorer
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.1pre7
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease: 5
5
+ version: 0.1.1pre8
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - John Mair (banisterfiend)
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-28 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
12
+
13
+ date: 2012-01-31 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
15
16
  name: pry-stack_explorer
16
- requirement: &70111600095300 !ruby/object:Gem::Requirement
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
17
19
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
22
24
  type: :runtime
23
- prerelease: false
24
- version_requirements: *70111600095300
25
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
26
27
  name: bacon
27
- requirement: &70111600094500 !ruby/object:Gem::Requirement
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
28
30
  none: false
29
- requirements:
31
+ requirements:
30
32
  - - ~>
31
- - !ruby/object:Gem::Version
33
+ - !ruby/object:Gem::Version
32
34
  version: 1.1.0
33
35
  type: :development
34
- prerelease: false
35
- version_requirements: *70111600094500
36
- - !ruby/object:Gem::Dependency
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
37
38
  name: rake
38
- requirement: &70111600093540 !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
39
41
  none: false
40
- requirements:
42
+ requirements:
41
43
  - - ~>
42
- - !ruby/object:Gem::Version
43
- version: '0.9'
44
+ - !ruby/object:Gem::Version
45
+ version: "0.9"
44
46
  type: :development
45
- prerelease: false
46
- version_requirements: *70111600093540
47
+ version_requirements: *id003
47
48
  description: Enter the context of exceptions
48
49
  email: jrmair@gmail.com
49
50
  executables: []
51
+
50
52
  extensions: []
53
+
51
54
  extra_rdoc_files: []
52
- files:
55
+
56
+ files:
53
57
  - .gemtest
54
58
  - .gitignore
55
59
  - .travis.yml
@@ -59,6 +63,7 @@ files:
59
63
  - LICENSE
60
64
  - README.md
61
65
  - Rakefile
66
+ - examples/example_c_inline.rb
62
67
  - examples/example_inline.rb
63
68
  - examples/example_wrap.rb
64
69
  - lib/pry-exception_explorer.rb
@@ -76,29 +81,32 @@ files:
76
81
  - test/test_wrapped_exceptions.rb
77
82
  homepage: https://github.com/banister/pry-exception_explorer
78
83
  licenses: []
84
+
79
85
  post_install_message:
80
86
  rdoc_options: []
81
- require_paths:
87
+
88
+ require_paths:
82
89
  - lib
83
- required_ruby_version: !ruby/object:Gem::Requirement
90
+ required_ruby_version: !ruby/object:Gem::Requirement
84
91
  none: false
85
- requirements:
86
- - - ! '>='
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: "0"
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
97
  none: false
91
- requirements:
92
- - - ! '>'
93
- - !ruby/object:Gem::Version
98
+ requirements:
99
+ - - ">"
100
+ - !ruby/object:Gem::Version
94
101
  version: 1.3.1
95
102
  requirements: []
103
+
96
104
  rubyforge_project:
97
105
  rubygems_version: 1.8.11
98
106
  signing_key:
99
107
  specification_version: 3
100
108
  summary: Enter the context of exceptions
101
- test_files:
109
+ test_files:
102
110
  - test/helper.rb
103
111
  - test/test_exceptions_in_pry.rb
104
112
  - test/test_inline_exceptions.rb