binding_of_caller 0.6.2 → 0.6.4

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.
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
4
+ - rbx-18mode
5
+ - rbx-19mode
6
+
7
+ notifications:
8
+ irc: "irc.freenode.org#pry"
9
+ recipients:
10
+ - jrmair@gmail.com
11
+
12
+ branches:
13
+ only:
14
+ - master
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/README.md CHANGED
@@ -3,7 +3,7 @@ binding_of_caller
3
3
 
4
4
  (C) John Mair (banisterfiend) 2011
5
5
 
6
- _Retrieve the binding of a method's caller in MRI 1.9.2_
6
+ _Retrieve the binding of a method's caller in MRI 1.9.2+_
7
7
 
8
8
  The `binding_of_caller` gem provides the `Binding#of_caller` method.
9
9
 
data/Rakefile CHANGED
@@ -1,21 +1,23 @@
1
- dlext = Config::CONFIG['DLEXT']
1
+ dlext = RbConfig::CONFIG['DLEXT']
2
+ direc = File.dirname(__FILE__)
2
3
 
3
4
  $:.unshift 'lib'
4
5
 
5
6
  PROJECT_NAME = "binding_of_caller"
6
7
 
7
8
  require 'rake/clean'
8
- require 'rake/gempackagetask'
9
+ require 'rubygems/package_task'
10
+
9
11
  require "#{PROJECT_NAME}/version"
10
12
 
11
13
  CLOBBER.include("**/*.#{dlext}", "**/*~", "**/*#*", "**/*.log", "**/*.o")
12
14
  CLEAN.include("ext/**/*.#{dlext}", "ext/**/*.log", "ext/**/*.o",
13
15
  "ext/**/*~", "ext/**/*#*", "ext/**/*.obj", "**/*#*", "**/*#*.*",
14
- "ext/**/*.def", "ext/**/*.pdb", "**/*_flymake*.*", "**/*_flymake")
16
+ "ext/**/*.def", "ext/**/*.pdb", "**/*_flymake*.*", "**/*_flymake", "**/*.rbc")
15
17
 
16
18
  def apply_spec_defaults(s)
17
19
  s.name = PROJECT_NAME
18
- s.summary = "Retrieve the binding of a method's caller. Can also retrieve bindings even further up the stack. Currently only works for MRI 1.9.2+"
20
+ s.summary = "Retrieve the binding of a method's caller. Can also retrieve bindings even further up the stack."
19
21
  s.version = BindingOfCaller::VERSION
20
22
  s.date = Time.now.strftime '%Y-%m-%d'
21
23
  s.author = "John Mair (banisterfiend)"
@@ -23,16 +25,24 @@ def apply_spec_defaults(s)
23
25
  s.description = s.summary
24
26
  s.require_path = 'lib'
25
27
  s.add_development_dependency("bacon","~>1.1")
28
+ s.add_development_dependency('rake', '~> 0.9')
26
29
  s.homepage = "http://github.com/banister/binding_of_caller"
27
30
  s.has_rdoc = 'yard'
28
- s.required_ruby_version = '>= 1.9.2'
29
31
  s.files = `git ls-files`.split("\n")
30
32
  s.test_files = `git ls-files -- test/*`.split("\n")
31
33
  end
32
34
 
35
+ desc "Show version"
36
+ task :version do
37
+ puts "BindingOfCaller version: #{BindingOfCaller::VERSION}"
38
+ end
39
+
40
+ desc "run tests"
41
+ task :default => :test
42
+
33
43
  desc "Run tests"
34
44
  task :test do
35
- sh "bacon -Itest -rubygems test.rb -q"
45
+ sh "bacon -Itest -rubygems -a -q"
36
46
  end
37
47
 
38
48
  task :pry do
@@ -40,6 +50,9 @@ task :pry do
40
50
  sh "pry -r ./lib/binding_of_caller"
41
51
  end
42
52
 
53
+ desc "generate gemspec"
54
+ task :gemspec => "ruby:gemspec"
55
+
43
56
  namespace :ruby do
44
57
  spec = Gem::Specification.new do |s|
45
58
  apply_spec_defaults(s)
@@ -47,12 +60,31 @@ namespace :ruby do
47
60
  s.extensions = ["ext/#{PROJECT_NAME}/extconf.rb"]
48
61
  end
49
62
 
50
- Rake::GemPackageTask.new(spec) do |pkg|
63
+ Gem::PackageTask.new(spec) do |pkg|
51
64
  pkg.need_zip = false
52
65
  pkg.need_tar = false
53
66
  end
67
+
68
+ desc "Generate gemspec file"
69
+ task :gemspec do
70
+ File.open("#{spec.name}.gemspec", "w") do |f|
71
+ f << spec.to_ruby
72
+ end
73
+ end
54
74
  end
55
75
 
76
+ # namespace :rbx do
77
+ # spec = Gem::Specification.new do |s|
78
+ # apply_spec_defaults(s)
79
+ # s.platform = Gem::Platform::RUBY #.new(["universal", "rubinius"])
80
+ # end
81
+
82
+ # Gem::PackageTask.new(spec) do |pkg|
83
+ # pkg.need_zip = false
84
+ # pkg.need_tar = false
85
+ # end
86
+ # end
87
+
56
88
  desc "build the binaries"
57
89
  task :compile do
58
90
  chdir "./ext/#{PROJECT_NAME}/" do
@@ -63,6 +95,12 @@ task :compile do
63
95
  end
64
96
  end
65
97
 
98
+ desc "reinstall gem"
99
+ task :reinstall => :gems do
100
+ sh "gem uninstall binding_of_caller" rescue nil
101
+ sh "gem install #{direc}/pkg/#{PROJECT_NAME}-#{BindingOfCaller::VERSION}.gem"
102
+ end
103
+
66
104
  desc "build all platform gems at once"
67
105
  task :gems => [:clean, :rmgems, "ruby:gem"]
68
106
 
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "binding_of_caller"
5
+ s.version = "0.6.4"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["John Mair (banisterfiend)"]
9
+ s.date = "2012-02-29"
10
+ s.description = "Retrieve the binding of a method's caller. Can also retrieve bindings even further up the stack."
11
+ s.email = "jrmair@gmail.com"
12
+ s.extensions = ["ext/binding_of_caller/extconf.rb"]
13
+ s.files = [".gemtest", ".gitignore", ".travis.yml", ".yardopts", "Gemfile", "HISTORY", "LICENSE", "README.md", "Rakefile", "binding_of_caller.gemspec", "examples/example.rb", "ext/binding_of_caller/binding_of_caller.c", "ext/binding_of_caller/extconf.rb", "ext/binding_of_caller/ruby_headers/192/debug.h", "ext/binding_of_caller/ruby_headers/192/dln.h", "ext/binding_of_caller/ruby_headers/192/eval_intern.h", "ext/binding_of_caller/ruby_headers/192/gc.h", "ext/binding_of_caller/ruby_headers/192/id.h", "ext/binding_of_caller/ruby_headers/192/iseq.h", "ext/binding_of_caller/ruby_headers/192/method.h", "ext/binding_of_caller/ruby_headers/192/node.h", "ext/binding_of_caller/ruby_headers/192/regenc.h", "ext/binding_of_caller/ruby_headers/192/regint.h", "ext/binding_of_caller/ruby_headers/192/regparse.h", "ext/binding_of_caller/ruby_headers/192/thread_pthread.h", "ext/binding_of_caller/ruby_headers/192/thread_win32.h", "ext/binding_of_caller/ruby_headers/192/timev.h", "ext/binding_of_caller/ruby_headers/192/transcode_data.h", "ext/binding_of_caller/ruby_headers/192/version.h", "ext/binding_of_caller/ruby_headers/192/vm_core.h", "ext/binding_of_caller/ruby_headers/192/vm_exec.h", "ext/binding_of_caller/ruby_headers/192/vm_insnhelper.h", "ext/binding_of_caller/ruby_headers/192/vm_opts.h", "ext/binding_of_caller/ruby_headers/193/addr2line.h", "ext/binding_of_caller/ruby_headers/193/atomic.h", "ext/binding_of_caller/ruby_headers/193/constant.h", "ext/binding_of_caller/ruby_headers/193/debug.h", "ext/binding_of_caller/ruby_headers/193/dln.h", "ext/binding_of_caller/ruby_headers/193/encdb.h", "ext/binding_of_caller/ruby_headers/193/eval_intern.h", "ext/binding_of_caller/ruby_headers/193/gc.h", "ext/binding_of_caller/ruby_headers/193/id.h", "ext/binding_of_caller/ruby_headers/193/internal.h", "ext/binding_of_caller/ruby_headers/193/iseq.h", "ext/binding_of_caller/ruby_headers/193/method.h", "ext/binding_of_caller/ruby_headers/193/node.h", "ext/binding_of_caller/ruby_headers/193/parse.h", "ext/binding_of_caller/ruby_headers/193/regenc.h", "ext/binding_of_caller/ruby_headers/193/regint.h", "ext/binding_of_caller/ruby_headers/193/regparse.h", "ext/binding_of_caller/ruby_headers/193/revision.h", "ext/binding_of_caller/ruby_headers/193/thread_pthread.h", "ext/binding_of_caller/ruby_headers/193/thread_win32.h", "ext/binding_of_caller/ruby_headers/193/timev.h", "ext/binding_of_caller/ruby_headers/193/transcode_data.h", "ext/binding_of_caller/ruby_headers/193/transdb.h", "ext/binding_of_caller/ruby_headers/193/version.h", "ext/binding_of_caller/ruby_headers/193/vm_core.h", "ext/binding_of_caller/ruby_headers/193/vm_exec.h", "ext/binding_of_caller/ruby_headers/193/vm_insnhelper.h", "ext/binding_of_caller/ruby_headers/193/vm_opts.h", "lib/binding_of_caller.bundle", "lib/binding_of_caller.rb", "lib/binding_of_caller/version.rb", "lib/tester.rb", "test/test_binding_of_caller.rb"]
14
+ s.homepage = "http://github.com/banister/binding_of_caller"
15
+ s.require_paths = ["lib"]
16
+ s.rubygems_version = "1.8.12"
17
+ s.summary = "Retrieve the binding of a method's caller. Can also retrieve bindings even further up the stack."
18
+ s.test_files = ["test/test_binding_of_caller.rb"]
19
+
20
+ if s.respond_to? :specification_version then
21
+ s.specification_version = 3
22
+
23
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
24
+ s.add_development_dependency(%q<bacon>, ["~> 1.1"])
25
+ s.add_development_dependency(%q<rake>, ["~> 0.9"])
26
+ else
27
+ s.add_dependency(%q<bacon>, ["~> 1.1"])
28
+ s.add_dependency(%q<rake>, ["~> 0.9"])
29
+ end
30
+ else
31
+ s.add_dependency(%q<bacon>, ["~> 1.1"])
32
+ s.add_dependency(%q<rake>, ["~> 0.9"])
33
+ end
34
+ end
@@ -1,13 +1,24 @@
1
- require 'mkmf'
1
+ def fake_makefile
2
+ File.open(File.join(File.dirname(__FILE__), "Makefile"), "w") {|f|
3
+ f.puts %[install:\n\techo "Nada."]
4
+ }
5
+ end
6
+
7
+ if RUBY_ENGINE && RUBY_ENGINE =~ /rbx/
8
+ fake_makefile
9
+ else
10
+ require 'mkmf'
11
+
12
+ $CFLAGS += " -O0"
13
+ $CFLAGS += " -std=c99"
2
14
 
3
- $CFLAGS += " -O0"
4
- $CFLAGS += " -std=c99"
15
+ case RUBY_VERSION
16
+ when /1.9.2/
17
+ $CFLAGS += " -I./ruby_headers/192/ -DRUBY_192"
18
+ when /1.9.3/
19
+ $CFLAGS += " -I./ruby_headers/193/ -DRUBY_193"
20
+ end
5
21
 
6
- case RUBY_VERSION
7
- when /1.9.2/
8
- $CFLAGS += " -I./ruby_headers/192/ -DRUBY_192"
9
- when /1.9.3/
10
- $CFLAGS += " -I./ruby_headers/193/ -DRUBY_193"
22
+ create_makefile('binding_of_caller')
11
23
  end
12
24
 
13
- create_makefile('binding_of_caller')
@@ -1,3 +1,3 @@
1
- module BindingOfCaller
2
- VERSION = "0.6.2"
3
- end
1
+ module BindingOfCaller
2
+ VERSION = "0.6.4"
3
+ end
Binary file
@@ -0,0 +1,86 @@
1
+ dlext = Config::CONFIG['DLEXT']
2
+ direc = File.dirname(__FILE__)
3
+
4
+ if RUBY_ENGINE && RUBY_ENGINE == "ruby"
5
+ require File.join direc, "binding_of_caller.#{dlext}"
6
+
7
+ elsif defined?(Rubinius)
8
+ module BindingOfCaller
9
+ module BindingExtensions
10
+
11
+ def of_caller(n)
12
+ bt = Rubinius::VM.backtrace(1 + n, true).first
13
+
14
+ b = Binding.setup(
15
+ bt.variables,
16
+ bt.variables.method,
17
+ bt.static_scope,
18
+ bt.variables.self,
19
+ bt
20
+ )
21
+
22
+ b.instance_variable_set(:@frame_description, bt.describe)
23
+
24
+ b
25
+ rescue
26
+ raise RuntimeError, "Invalid frame, gone beyond end of stack!"
27
+ end
28
+
29
+ def frame_description
30
+ @frame_description
31
+ end
32
+
33
+ def callers
34
+ ary = []
35
+ n = 0
36
+ loop {
37
+ begin
38
+ ary << Binding.of_caller(n)
39
+ rescue
40
+ break
41
+ end
42
+
43
+ n += 1
44
+ }
45
+
46
+ ary
47
+ end
48
+
49
+ def frame_count
50
+ n = 1
51
+ loop {
52
+ begin
53
+ Binding.of_caller(n)
54
+ rescue
55
+ break
56
+ end
57
+
58
+ n += 1
59
+ }
60
+
61
+ n
62
+ end
63
+
64
+ def frame_type
65
+ case self.variables.method.metadata.to_a.first.to_s
66
+ when /block/
67
+ :block
68
+ when /eval/
69
+ :eval
70
+ else
71
+ if frame_description =~ /__(?:class|module)_init__/
72
+ :class
73
+ else
74
+ :method
75
+ end
76
+ end
77
+ end
78
+
79
+ end
80
+ end
81
+
82
+ class ::Binding
83
+ include BindingOfCaller::BindingExtensions
84
+ extend BindingOfCaller::BindingExtensions
85
+ end
86
+ end
data/lib/tester.rb ADDED
@@ -0,0 +1,15 @@
1
+ require './binding_of_caller'
2
+
3
+ def a
4
+ x = 1
5
+ y = 2
6
+ b()
7
+ end
8
+
9
+ def b
10
+ proc do
11
+ puts binding.of_caller(2).eval('__method__')
12
+ end.call
13
+ end
14
+
15
+ a
metadata CHANGED
@@ -1,42 +1,71 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: binding_of_caller
3
- version: !ruby/object:Gem::Version
4
- version: 0.6.2
3
+ version: !ruby/object:Gem::Version
4
+ hash: 550684568609937877
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 6
9
+ - 4
10
+ version: 0.6.4
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - John Mair (banisterfiend)
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-02-02 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-03-01 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: bacon
16
- requirement: &70103760947940 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
25
+ requirements:
19
26
  - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '1.1'
27
+ - !ruby/object:Gem::Version
28
+ hash: 3882215148898798703
29
+ segments:
30
+ - 1
31
+ - 1
32
+ version: "1.1"
22
33
  type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake
23
37
  prerelease: false
24
- version_requirements: *70103760947940
25
- description: Retrieve the binding of a method's caller. Can also retrieve bindings
26
- even further up the stack. Currently only works for MRI 1.9.2+
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 2854635824043747355
44
+ segments:
45
+ - 0
46
+ - 9
47
+ version: "0.9"
48
+ type: :development
49
+ version_requirements: *id002
50
+ description: Retrieve the binding of a method's caller. Can also retrieve bindings even further up the stack.
27
51
  email: jrmair@gmail.com
28
52
  executables: []
29
- extensions:
53
+
54
+ extensions:
30
55
  - ext/binding_of_caller/extconf.rb
31
56
  extra_rdoc_files: []
32
- files:
57
+
58
+ files:
33
59
  - .gemtest
34
60
  - .gitignore
61
+ - .travis.yml
35
62
  - .yardopts
63
+ - Gemfile
36
64
  - HISTORY
37
65
  - LICENSE
38
66
  - README.md
39
67
  - Rakefile
68
+ - binding_of_caller.gemspec
40
69
  - examples/example.rb
41
70
  - ext/binding_of_caller/binding_of_caller.c
42
71
  - ext/binding_of_caller/extconf.rb
@@ -88,32 +117,43 @@ files:
88
117
  - ext/binding_of_caller/ruby_headers/193/vm_exec.h
89
118
  - ext/binding_of_caller/ruby_headers/193/vm_insnhelper.h
90
119
  - ext/binding_of_caller/ruby_headers/193/vm_opts.h
120
+ - lib/binding_of_caller.bundle
121
+ - lib/binding_of_caller.rb
91
122
  - lib/binding_of_caller/version.rb
92
- - test/test.rb
123
+ - lib/tester.rb
124
+ - test/test_binding_of_caller.rb
93
125
  homepage: http://github.com/banister/binding_of_caller
94
126
  licenses: []
127
+
95
128
  post_install_message:
96
129
  rdoc_options: []
97
- require_paths:
130
+
131
+ require_paths:
98
132
  - lib
99
- required_ruby_version: !ruby/object:Gem::Requirement
133
+ required_ruby_version: !ruby/object:Gem::Requirement
100
134
  none: false
101
- requirements:
102
- - - ! '>='
103
- - !ruby/object:Gem::Version
104
- version: 1.9.2
105
- required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ hash: 2002549777813010636
139
+ segments:
140
+ - 0
141
+ version: "0"
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
143
  none: false
107
- requirements:
108
- - - ! '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ hash: 2002549777813010636
148
+ segments:
149
+ - 0
150
+ version: "0"
111
151
  requirements: []
152
+
112
153
  rubyforge_project:
113
- rubygems_version: 1.8.6
154
+ rubygems_version: 1.8.12
114
155
  signing_key:
115
156
  specification_version: 3
116
- summary: Retrieve the binding of a method's caller. Can also retrieve bindings even
117
- further up the stack. Currently only works for MRI 1.9.2+
118
- test_files:
119
- - test/test.rb
157
+ summary: Retrieve the binding of a method's caller. Can also retrieve bindings even further up the stack.
158
+ test_files:
159
+ - test/test_binding_of_caller.rb
File without changes