binding_of_callers 0.1.4 → 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
- SHA1:
3
- metadata.gz: 4ac927a186f7137b889568cf1edf23678866ff40
4
- data.tar.gz: 5840fca0851464c7b7f7e682cadc6b45b9e3bb20
2
+ SHA256:
3
+ metadata.gz: 5cabef00090223f45e2914553387ecb3e2209d989e5600290cc6143dcb12782f
4
+ data.tar.gz: 5501a68962a4349b0fa918eae099207d5ceb40369dc91de67aaba1f5d31f0df0
5
5
  SHA512:
6
- metadata.gz: 94c9c2bcc9f62bee6252eaea78c6284d3f9394bff76879b6479c8946d56278881f431eda45b7550786a22ee0dceb1b08f5a6925f7ae19c7d5dab1d9a4b20aab6
7
- data.tar.gz: 84cf399c7039e517c02055086bf4f607719ed6843165d5da14d85946609f5ad4c09892dd0e4359f5c899e5c65908a6ed50e1a4daf1fe3c7370f98b980cf3f980
6
+ metadata.gz: e378a3e420892fe16a45baafb6360dafe4a6c89b08d4858115b8c5aa24886fb25193e0184f52acaf02cc42cb7594127a2ba62b85966fc23c6ed5d5eb21766789
7
+ data.tar.gz: b4a28b101878884b5741154c223004f5a6cddb85c13c98941aeb895fd804187a68a57846075ed0684531e24f5bb50e8ba708c1af3972e8d68d51d2c21617c0e9
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
+ # source 'https://gems.ruby-china.com'
2
3
 
3
4
  # Specify your gem's dependencies in binding_of_callers.gemspec
4
5
  gemspec
@@ -20,10 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.13"
23
+ spec.add_development_dependency "bundler", "~> 2.0"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
25
  spec.add_development_dependency "minitest", "~> 5.0"
26
26
 
27
- spec.add_dependency "binding_of_caller", "~> 0.7"
28
- spec.add_dependency "pry", "~> 0.10.4"
27
+ spec.add_dependency "binding_of_caller", "~> 1.0"
28
+ spec.add_dependency "pry", ">= 0.10.0"
29
29
  end
@@ -1,12 +1,17 @@
1
1
  module BindingOfCallers
2
2
  module Reveal
3
3
 
4
+ Klass = Kernel.instance_method(:class)
5
+ InstanceVariables = Kernel.instance_method(:instance_variables)
6
+ InstanceVariableGet = Kernel.instance_method(:instance_variable_get)
7
+ InstanceVariableSet = Kernel.instance_method(:instance_variable_set)
8
+
4
9
  def _binding
5
10
  instance_variable_defined?(:@_binding) ? @_binding : self
6
11
  end
7
12
 
8
13
  def inspect
9
- "#<#{self.class}:#{object_id} #{klass}#{call_symbol}#{frame_env} #{file}:#{line}>"
14
+ "#<#{self.class}:#{object_id} #{file}:#{line} #{klass}#{call_symbol}#{frame_env}>"
10
15
  end
11
16
 
12
17
  def iv *args
@@ -32,13 +37,15 @@ module BindingOfCallers
32
37
  end
33
38
 
34
39
  def klass
35
- @klass ||= _binding.eval(singleton_method? ? 'self' : 'self.class')
40
+ return @klass if instance_variable_defined? :@klass
41
+ determine_klass
42
+ @klass
36
43
  end
37
44
 
38
45
  def singleton_method?
39
46
  return @sm if instance_variable_defined? :@sm
40
- class_name = _binding.eval 'self.class.name'
41
- @sm = (class_name == 'Module' or class_name == 'Class')
47
+ determine_klass
48
+ @sm
42
49
  end
43
50
 
44
51
  def call_symbol
@@ -63,28 +70,61 @@ module BindingOfCallers
63
70
 
64
71
  private
65
72
 
73
+ def determine_klass
74
+ itself = binding_self
75
+ @from_object = (Object === itself)
76
+ binding_class = (@from_object ? itself.class : Klass.bind(itself).call)
77
+ class_name = binding_class.name
78
+ if class_name == 'Module' || class_name == 'Class'
79
+ @sm = true
80
+ @klass = itself
81
+ else
82
+ @sm = false
83
+ @klass = binding_class
84
+ end
85
+ end
86
+
66
87
  def all_iv
67
- _binding.eval <<-EOS
68
- instance_variables.each_with_object({}) do |iv_name, vars|
69
- vars[iv_name] = instance_variable_get(iv_name)
88
+ determine_klass unless instance_variable_defined? :@from_object
89
+ if @from_object
90
+ _binding.eval <<-EOS
91
+ instance_variables.each_with_object({}) do |iv_name, vars|
92
+ vars[iv_name] = instance_variable_get(iv_name)
93
+ end
94
+ EOS
95
+ else
96
+ itself = binding_self
97
+ _instance_variable_get = InstanceVariableGet.bind(itself)
98
+ InstanceVariables.bind(itself).call.each_with_object({}) do |iv_name, vars|
99
+ vars[iv_name] = _instance_variable_get.call iv_name
70
100
  end
71
- EOS
101
+ end
72
102
  end
73
103
 
74
104
  def the_iv name
75
- binding_self.instance_variable_get name
105
+ determine_klass unless instance_variable_defined? :@from_object
106
+ if @from_object
107
+ binding_self.instance_variable_get name
108
+ else
109
+ InstanceVariableGet.bind(binding_self).call name
110
+ end
76
111
  end
77
112
 
78
113
  def set_iv name, value
79
- binding_self.instance_variable_set name, value
114
+ determine_klass unless instance_variable_defined? :@from_object
115
+ if @from_object
116
+ binding_self.instance_variable_set name, value
117
+ else
118
+ InstanceVariableSet.bind(binding_self).call name, value
119
+ end
80
120
  end
81
121
 
82
122
  def binding_self
83
- _binding.eval "self"
123
+ _binding.eval "instance_eval('self')"
84
124
  end
85
125
 
86
126
  def all_lv
87
- _binding.local_variables.each_with_object({}) do |lv_name, vars|
127
+ _binding.send(:local_variables).each_with_object({}) do |lv_name, vars|
88
128
  vars[lv_name] = the_lv lv_name
89
129
  end
90
130
  end
@@ -1,3 +1,3 @@
1
1
  module BindingOfCallers
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: binding_of_callers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ken
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-16 00:00:00.000000000 Z
11
+ date: 2021-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,28 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.7'
61
+ version: '1.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.7'
68
+ version: '1.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.10.4
75
+ version: 0.10.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 0.10.4
82
+ version: 0.10.0
83
83
  description:
84
84
  email:
85
85
  - block24block@gmail.com
@@ -121,8 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  requirements: []
124
- rubyforge_project:
125
- rubygems_version: 2.6.8
124
+ rubygems_version: 3.2.3
126
125
  signing_key:
127
126
  specification_version: 4
128
127
  summary: a wrapper of binding_of_caller, for easy use