peeky 0.0.42 → 0.0.43
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/peeky/class_info.rb +23 -5
- data/lib/peeky/method_info.rb +19 -20
- data/lib/peeky/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5ace1c867116904f98e261077b746cd8d2621f657a391e79c80f3f57edf4583
|
4
|
+
data.tar.gz: 195ab81abb7ab1198c19613c4fe2f4e730fd2b6a6c2654938396ad191dde8e25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db4dd2ec06b1722637d716611c9d6ae6080f1b52ffa2da6129e8a421e0a034ea5923f56ea041869d69e7bd0fe48656a759f01c29d8067ec64cbd5e7ee7956c24
|
7
|
+
data.tar.gz: 56982a728fc581b06080ede29139b2245770affe03d9ce97633d18ac7d56341536740d4b15b52e1264ff26bc4b7e27ad4f7548489b0d0879f1c9569c34c1dd90
|
data/lib/peeky/class_info.rb
CHANGED
@@ -53,8 +53,6 @@ module Peeky
|
|
53
53
|
# At times during debug or other edge cases, it may be useful to
|
54
54
|
# pre-load this information early.
|
55
55
|
def load
|
56
|
-
ruby_instance_methods
|
57
|
-
# ruby_instance_method_names
|
58
56
|
signatures
|
59
57
|
end
|
60
58
|
|
@@ -122,6 +120,12 @@ module Peeky
|
|
122
120
|
@public_methods ||= signatures.select { |signature| signature.implementation_type == :method && signature.access_control == :public }
|
123
121
|
end
|
124
122
|
|
123
|
+
# Get a list of class methods
|
124
|
+
# @return [Array<MethodInfo>] list of MethodInfo where type is :method
|
125
|
+
def class_methods
|
126
|
+
@class_methods ||= signatures.select { |signature| signature.implementation_type == :class_method }
|
127
|
+
end
|
128
|
+
|
125
129
|
# Get a list methods ordered the way they are in the source code
|
126
130
|
# @return [Array<MethodInfo>] list of MethodInfo
|
127
131
|
def methods_source_order
|
@@ -180,9 +184,10 @@ module Peeky
|
|
180
184
|
return @signatures if defined? @signatures
|
181
185
|
|
182
186
|
@signatures = begin
|
183
|
-
instance_methods
|
184
|
-
private_methods
|
185
|
-
|
187
|
+
instance_methods = ruby_instance_methods.map { |im| MethodInfo.new(im, @instance) }
|
188
|
+
private_methods = ruby_private_methods.map { |im| MethodInfo.new(im, @instance, access_control: :private) }
|
189
|
+
class_methods = ruby_class_methods.map { |im| MethodInfo.new(im, @instance, implementation_type: :class_method) }
|
190
|
+
instance_methods + private_methods + class_methods
|
186
191
|
end
|
187
192
|
end
|
188
193
|
|
@@ -209,6 +214,10 @@ module Peeky
|
|
209
214
|
"#{key.to_s.ljust(25)}: #{value}"
|
210
215
|
end
|
211
216
|
|
217
|
+
def ruby_class_method_names
|
218
|
+
@ruby_class_method_names ||= instance.class.singleton_class.instance_methods(false).sort
|
219
|
+
end
|
220
|
+
|
212
221
|
def ruby_instance_method_names
|
213
222
|
@ruby_instance_method_names ||= instance.class.instance_methods(false).sort
|
214
223
|
end
|
@@ -217,15 +226,24 @@ module Peeky
|
|
217
226
|
@ruby_private_method_names ||= instance.private_methods(false).sort
|
218
227
|
end
|
219
228
|
|
229
|
+
def ruby_class_methods
|
230
|
+
@ruby_class_methods ||= ruby_class_method_names.map { |method_name| instance.class.method(method_name) }
|
231
|
+
rescue StandardError => e
|
232
|
+
# puts 'ruby_class_methods'
|
233
|
+
puts e
|
234
|
+
end
|
235
|
+
|
220
236
|
def ruby_private_methods
|
221
237
|
@ruby_private_methods ||= ruby_private_method_names.map { |method_name| instance.method(method_name) }
|
222
238
|
rescue StandardError => e
|
239
|
+
# puts 'ruby_private_methods'
|
223
240
|
puts e
|
224
241
|
end
|
225
242
|
|
226
243
|
def ruby_instance_methods
|
227
244
|
@ruby_instance_methods ||= ruby_instance_method_names.map { |method_name| instance.method(method_name) }
|
228
245
|
rescue StandardError => e
|
246
|
+
# puts 'ruby_instance_methods'
|
229
247
|
puts e
|
230
248
|
end
|
231
249
|
end
|
data/lib/peeky/method_info.rb
CHANGED
@@ -22,21 +22,21 @@ module Peeky
|
|
22
22
|
#
|
23
23
|
|
24
24
|
# Implementation type indicates the probable representation of this
|
25
|
-
# method in ruby, was it
|
25
|
+
# method in ruby, was it
|
26
|
+
# instance method `def method`
|
27
|
+
# instance method reader `attr_reader`
|
28
|
+
# instance method writer `attr_writer`
|
29
|
+
# class method `def self.method`
|
26
30
|
attr_reader :implementation_type
|
27
31
|
|
28
|
-
def initialize(method, target_instance, access_control: :public)
|
32
|
+
def initialize(method, target_instance, implementation_type: :method, access_control: :public)
|
29
33
|
@focal_method = method
|
30
34
|
@target_instance = target_instance
|
31
35
|
@access_control = access_control
|
36
|
+
@implementation_type = implementation_type
|
32
37
|
@parameters = ParameterInfo.from_method(method)
|
33
|
-
# stage 1
|
34
|
-
# @implementation_type = :method
|
35
38
|
|
36
|
-
# stage 2
|
37
39
|
infer_implementation_type
|
38
|
-
|
39
|
-
# stage 3
|
40
40
|
infer_default_paramaters
|
41
41
|
end
|
42
42
|
|
@@ -55,20 +55,13 @@ module Peeky
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
# Infer implementation type [:method, :attr_reader or :attr_writer]
|
59
|
-
# rubocop:disable Lint/DuplicateBranch
|
58
|
+
# Infer implementation type [:class_method, :method, :attr_reader or :attr_writer]
|
60
59
|
def infer_implementation_type
|
61
|
-
@implementation_type
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
elsif match(Peeky::Predicates::AttrWriterPredicate)
|
66
|
-
:attr_writer
|
67
|
-
else
|
68
|
-
:method
|
69
|
-
end
|
60
|
+
return unless @implementation_type == :method
|
61
|
+
|
62
|
+
@implementation_type = :attr_reader if match(Peeky::Predicates::AttrReaderPredicate)
|
63
|
+
@implementation_type = :attr_writer if match(Peeky::Predicates::AttrWriterPredicate)
|
70
64
|
end
|
71
|
-
# rubocop:enable Lint/DuplicateBranch
|
72
65
|
|
73
66
|
# Get parameter by name
|
74
67
|
#
|
@@ -101,7 +94,13 @@ module Peeky
|
|
101
94
|
return unless optional?
|
102
95
|
|
103
96
|
tracer.enable do
|
104
|
-
@
|
97
|
+
if @implementation_type == :method
|
98
|
+
@target_instance.instance_eval(minimalist_method)
|
99
|
+
end
|
100
|
+
if @implementation_type == :class_method
|
101
|
+
minimalist_method = "#{@target_instance.class.name}.#{minimalist_method}"
|
102
|
+
@target_instance.class.instance_eval(minimalist_method)
|
103
|
+
end
|
105
104
|
rescue StandardError => e
|
106
105
|
# just print the error for now, we are only attempting to capture the
|
107
106
|
# first call, any errors inside the call cannot be dealt with and should
|
data/lib/peeky/version.rb
CHANGED