bindex 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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