bindex 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f3058f9c6ca15bbd05c8857a4c13b931c10855c
4
- data.tar.gz: b0dc1e2b67f95cd838f427a11c03608161c03cd6
3
+ metadata.gz: 34aa50088ea6aef2477158e8e8cc6e9c79bc61a9
4
+ data.tar.gz: f28ceecbdfcb050ad460d5b98ce1c49a3b471ae2
5
5
  SHA512:
6
- metadata.gz: 3be4c3659396f2e68c9c3526bc5bd9c8e69325babb902d7bc4e0977bcf3c4b842e8c11a54af00169b926135672e28f836a4b41c88bfaa16b870ca010e41a47f2
7
- data.tar.gz: f0a5337d9a0b35729f44b2d162e1c1e7028f147eaacfd270c10592e0ef8fd2d6f7bf7cf6ad1ef0e233c46b8379707cc06a2074956f6a74ab24b7f3dac1b34d3b
6
+ metadata.gz: 26de5ac63dd38eee300a749896c9eb24e3c2aa76a3f28264282e703fe7052217e4f0bc6c62a768ed85812b3afe1032a1bcc30a01a76fee7f0873f92b99edfe89
7
+ data.tar.gz: add6aec5daa85df64266f3632afb64cf38c098bab43dffa41311537de8ee7f24e400aa1b5c2aba772c8524d878d04dc93eca8f101ca3a0d98692dd40615bc6ab
data/README.md CHANGED
@@ -5,11 +5,25 @@ where did the exception originated in. Bindex gives you the bindings as well.
5
5
  This can help you introspect the state of the Ruby program when the exception
6
6
  happened.
7
7
 
8
- ### Usage
8
+ ## Usage
9
9
 
10
10
  **Do not** use this gem on production environments. The performance penalty isn't
11
11
  worth it anywhere outside of development.
12
12
 
13
+ ### API
14
+
15
+ Bindex defines the following API:
16
+
17
+ #### Exception#bindings
18
+
19
+ Returns all the bindings up to the one in which the exception originated in.
20
+
21
+ #### Bindex.current_bindings
22
+
23
+ Returns all of the current Ruby execution state bindings. The first on is the
24
+ current one, the second is the caller one, the third is the caller of the
25
+ caller one and so on.
26
+
13
27
  ## Support
14
28
 
15
29
  ### CRuby
@@ -0,0 +1,49 @@
1
+ package com.gsamokovarov.bindex;
2
+
3
+ import org.jruby.Ruby;
4
+ import org.jruby.RubyArray;
5
+ import org.jruby.RubyModule;
6
+ import org.jruby.RubyClass;
7
+ import org.jruby.runtime.ThreadContext;
8
+ import org.jruby.runtime.builtin.IRubyObject;
9
+ import org.jruby.runtime.builtin.InstanceVariables;
10
+ import org.jruby.anno.JRubyMethod;
11
+
12
+ public class JRubyIntegration {
13
+ public static void setup(Ruby runtime) {
14
+ RubyModule bindex = runtime.defineModule("Bindex");
15
+ bindex.defineAnnotatedMethods(BindexMethods.class);
16
+
17
+ RubyClass exception = runtime.getException();
18
+ exception.defineAnnotatedMethods(ExceptionExtensionMethods.class);
19
+
20
+ IRubyObject verbose = runtime.getVerbose();
21
+ try {
22
+ runtime.setVerbose(runtime.getNil());
23
+ runtime.addEventHook(new SetExceptionBindingsEventHook());
24
+ } finally {
25
+ runtime.setVerbose(verbose);
26
+ }
27
+ }
28
+
29
+ private static class BindexMethods {
30
+ @JRubyMethod(name = "current_bindings", meta = true)
31
+ public static IRubyObject currentBindings(ThreadContext context, IRubyObject self) {
32
+ return RubyBindingsCollector.collectCurrentFor(context);
33
+ }
34
+ }
35
+
36
+ private static class ExceptionExtensionMethods {
37
+ @JRubyMethod
38
+ public static IRubyObject bindings(ThreadContext context, IRubyObject self) {
39
+ InstanceVariables instanceVariables = self.getInstanceVariables();
40
+
41
+ IRubyObject bindings = instanceVariables.getInstanceVariable("@bindings");
42
+ if (bindings != null && !bindings.isNil()) {
43
+ return bindings;
44
+ }
45
+
46
+ return RubyArray.newArray(context.getRuntime());
47
+ }
48
+ }
49
+ }
@@ -1,5 +1,13 @@
1
1
  #include "bindex.h"
2
2
 
3
+ VALUE bx_mBindex;
4
+
5
+ static VALUE
6
+ bx_current_bindings(VALUE self)
7
+ {
8
+ return current_bindings();
9
+ }
10
+
3
11
  static VALUE
4
12
  bx_exc_set_backtrace(VALUE self, VALUE bt)
5
13
  {
@@ -14,7 +22,7 @@ bx_exc_set_backtrace(VALUE self, VALUE bt)
14
22
  }
15
23
 
16
24
  static VALUE
17
- bx_exc_bindings(VALUE self, VALUE bt)
25
+ bx_exc_bindings(VALUE self)
18
26
  {
19
27
  VALUE bindings;
20
28
 
@@ -29,6 +37,10 @@ bx_exc_bindings(VALUE self, VALUE bt)
29
37
  void
30
38
  Init_cruby(void)
31
39
  {
40
+ bx_mBindex = rb_define_module("Bindex");
41
+
42
+ rb_define_singleton_method(bx_mBindex, "current_bindings", bx_current_bindings, 0);
43
+
32
44
  rb_define_method(rb_eException, "set_backtrace", bx_exc_set_backtrace, 1);
33
45
  rb_define_method(rb_eException, "bindings", bx_exc_bindings, 0);
34
46
  }
@@ -17,6 +17,7 @@ when "ruby"
17
17
  $INCFLAGS << " -I./ruby_21/"
18
18
  end
19
19
 
20
+ $CFLAGS << " -Wall"
20
21
  $CFLAGS << " -g3 -O0" if ENV["DEBUG"]
21
22
 
22
23
  create_makefile("bindex/cruby")
@@ -4,17 +4,7 @@ else
4
4
  require 'bindex/jruby_internals'
5
5
  end
6
6
 
7
+ java_import com.gsamokovarov.bindex.JRubyIntegration
7
8
  java_import com.gsamokovarov.bindex.SetExceptionBindingsEventHook
8
9
 
9
- begin
10
- previous_verbose, $VERBOSE = $VERBOSE, nil
11
- JRuby.runtime.add_event_hook(SetExceptionBindingsEventHook.new)
12
- ensure
13
- $VERBOSE = previous_verbose
14
- end
15
-
16
- ::Exception.class_eval do
17
- def bindings
18
- @bindings || []
19
- end
20
- end
10
+ JRubyIntegration.setup(JRuby.runtime)
@@ -1,22 +1,5 @@
1
1
  module Bindex
2
- class Rubinius
3
- # Gets the current bindings for all available Ruby frames.
4
- #
5
- # Filters the internal Rubinius frames.
6
- def self.current_bindings
7
- locations = ::Rubinius::VM.backtrace(1, true)
8
-
9
- InternalLocationFilter.new(locations).filter.map do |location|
10
- Binding.setup(
11
- location.variables,
12
- location.variables.method,
13
- location.constant_scope,
14
- location.variables.self,
15
- location
16
- )
17
- end
18
- end
19
-
2
+ module Rubinius
20
3
  # Filters internal Rubinius locations.
21
4
  #
22
5
  # There are a couple of reasons why we wanna filter out the locations.
@@ -47,6 +30,23 @@ module Bindex
47
30
  end
48
31
  end
49
32
 
33
+ # Gets the current bindings for all available Ruby frames.
34
+ #
35
+ # Filters the internal Rubinius and Bindex frames.
36
+ def Bindex.current_bindings
37
+ locations = ::Rubinius::VM.backtrace(1, true)
38
+
39
+ Bindex::Rubinius::InternalLocationFilter.new(locations).filter.map do |location|
40
+ Binding.setup(
41
+ location.variables,
42
+ location.variables.method,
43
+ location.constant_scope,
44
+ location.variables.self,
45
+ location
46
+ )
47
+ end
48
+ end
49
+
50
50
  ::Exception.class_eval do
51
51
  def bindings
52
52
  @bindings || []
@@ -58,7 +58,7 @@ end
58
58
 
59
59
  define_method(:raise_exception) do |exc|
60
60
  if exc.bindings.empty?
61
- exc.instance_variable_set(:@bindings, Bindex::Rubinius.current_bindings)
61
+ exc.instance_variable_set(:@bindings, Bindex.current_bindings)
62
62
  end
63
63
 
64
64
  raise_exception.bind(self).call(exc)
@@ -1,3 +1,3 @@
1
1
  module Bindex
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class CurrentBindingsTest < BaseTest
4
+ test 'first binding returned is the current one' do
5
+ assert_equal __LINE__, Bindex.current_bindings.first.eval('__LINE__')
6
+ end
7
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bindex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genadi Samokovarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-22 00:00:00.000000000 Z
11
+ date: 2014-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -86,6 +86,7 @@ files:
86
86
  - ext/bindex/bindings.c
87
87
  - ext/bindex/com/gsamokovarov/bindex/BindingBuilder.java.erb
88
88
  - ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java
89
+ - ext/bindex/com/gsamokovarov/bindex/JRubyIntegration.java
89
90
  - ext/bindex/com/gsamokovarov/bindex/RubyBindingsCollector.java
90
91
  - ext/bindex/com/gsamokovarov/bindex/SetExceptionBindingsEventHook.java
91
92
  - ext/bindex/com/gsamokovarov/bindex/ThreadContextInterfaceException.java
@@ -231,6 +232,7 @@ files:
231
232
  - lib/bindex/jruby_internals_9k.jar
232
233
  - lib/bindex/rubinius.rb
233
234
  - lib/bindex/version.rb
235
+ - test/current_bindings_test.rb
234
236
  - test/exception_test.rb
235
237
  - test/fixtures/basic_nested_fixture.rb
236
238
  - test/fixtures/custom_error_fixture.rb
@@ -263,6 +265,7 @@ signing_key:
263
265
  specification_version: 4
264
266
  summary: Bindings for your Ruby exceptions
265
267
  test_files:
268
+ - test/current_bindings_test.rb
266
269
  - test/exception_test.rb
267
270
  - test/fixtures/basic_nested_fixture.rb
268
271
  - test/fixtures/custom_error_fixture.rb