peeky 0.0.31 → 0.0.42
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 +4 -4
- data/.github/workflows/ruby.yml +2 -3
- data/.rubocop.yml +9 -4
- data/Gemfile +15 -9
- data/Guardfile +4 -4
- data/README.md +33 -3
- data/Rakefile +15 -0
- data/USAGE.md +116 -0
- data/USAGE2.md +5 -0
- data/lib/peeky/api.rb +15 -0
- data/lib/peeky/attr_info.rb +4 -0
- data/lib/peeky/class_info.rb +70 -40
- data/lib/peeky/method_info.rb +109 -27
- data/lib/peeky/parameter_info.rb +30 -29
- data/lib/peeky/predicates/attr_reader_predicate.rb +6 -1
- data/lib/peeky/renderer/class_debug_render.rb +103 -0
- data/lib/peeky/renderer/class_interface_render.rb +10 -4
- data/lib/peeky/renderer/class_interface_yard_render.rb +50 -43
- data/lib/peeky/renderer/method_call_minimum_params_render.rb +7 -3
- data/lib/peeky/version.rb +1 -1
- data/lib/peeky.rb +8 -0
- data/peeky.gemspec +5 -17
- metadata +8 -9
- data/lib/peeky/example/yard_sample.rb +0 -124
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 920d6f10ed0e11acad5844cc60e290ba9e7ee85e27e801cf766e6934e6e3ea06
|
4
|
+
data.tar.gz: 4637e61e368dba0a5c4a9c3e8b0e8ff058b11c939ea848040eeff4a71a15e627
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56c35b423fb6b786a187548d9b9fe9a1d76f47da18dd6fb53eea1143593cbcfb6ff19de8f2ac5237193b6df7250726ef73d9e3c287655ded452331f99bca05f0
|
7
|
+
data.tar.gz: cd58b3be796b1e185a697ac3f6dca2836154750bf856b4455e4dbd6c7224d6b629e3bd3184dd67ebd0195b0293affbb3feadfc62f9032fb07948f0b1bfafa2c0
|
data/.github/workflows/ruby.yml
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
2
2
|
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
3
|
-
|
4
3
|
name: Ruby
|
5
4
|
|
6
5
|
on:
|
@@ -19,10 +18,10 @@ jobs:
|
|
19
18
|
- name: Set up Ruby
|
20
19
|
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
21
20
|
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
22
|
-
|
23
|
-
uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
|
21
|
+
uses: ruby/setup-ruby@v1
|
24
22
|
with:
|
25
23
|
ruby-version: 2.6
|
24
|
+
# bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
26
25
|
- name: Install dependencies
|
27
26
|
run: bundle install
|
28
27
|
- name: Run tests
|
data/.rubocop.yml
CHANGED
@@ -1,15 +1,20 @@
|
|
1
1
|
AllCops:
|
2
|
+
TargetRubyVersion: 2.5
|
2
3
|
DisplayCopNames: true
|
3
4
|
ExtraDetails: true
|
4
5
|
NewCops: enable
|
5
6
|
Exclude:
|
6
7
|
- "_/**/*"
|
7
|
-
- "
|
8
|
+
- "spec/sample/**/*"
|
8
9
|
|
9
10
|
# My Preferences - Start
|
11
|
+
Metrics/ClassLength:
|
12
|
+
Enabled: false
|
10
13
|
Naming/MemoizedInstanceVariableName:
|
11
14
|
Enabled: false
|
12
|
-
|
15
|
+
Naming/VariableNumber:
|
16
|
+
Exclude:
|
17
|
+
- "**/spec/**/*"
|
13
18
|
Style/EmptyMethod:
|
14
19
|
Exclude:
|
15
20
|
- "**/spec/**/*"
|
@@ -33,9 +38,9 @@ Layout/SpaceBeforeComma:
|
|
33
38
|
|
34
39
|
Metrics/BlockLength:
|
35
40
|
Exclude:
|
36
|
-
- "**/spec
|
41
|
+
- "**/spec/**/*"
|
37
42
|
- "*.gemspec"
|
38
|
-
|
43
|
+
IgnoredMethods:
|
39
44
|
- configure
|
40
45
|
- context
|
41
46
|
- define
|
data/Gemfile
CHANGED
@@ -5,19 +5,25 @@ source 'https://rubygems.org'
|
|
5
5
|
# Specify your gem's dependencies in poc_github_ap.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
|
8
|
+
group :development do
|
9
|
+
# pry on steroids
|
10
|
+
# gem 'pry-coolline', github: 'owst/pry-coolline', branch: 'support_new_pry_config_api'
|
11
|
+
# gem 'jazz_fingers'
|
12
|
+
end
|
13
13
|
|
14
14
|
group :development, :test do
|
15
|
-
gem 'guard-bundler'
|
16
|
-
gem 'guard-rspec'
|
17
|
-
gem 'guard-rubocop'
|
15
|
+
gem 'guard-bundler', '~> 3.0'
|
16
|
+
gem 'guard-rspec', '~> 4.0'
|
17
|
+
gem 'guard-rubocop', '~> 1.2'
|
18
18
|
gem 'rake', '~> 12.0'
|
19
19
|
# this is used for cmdlets 'self-executing gems'
|
20
20
|
gem 'rake-compiler'
|
21
21
|
gem 'rspec', '~> 3.0'
|
22
|
-
gem 'rubocop'
|
22
|
+
gem 'rubocop', '~> 1.9'
|
23
|
+
gem 'rubocop-rake', require: false
|
24
|
+
gem 'rubocop-rspec', require: false
|
23
25
|
end
|
26
|
+
|
27
|
+
# group :test do
|
28
|
+
# gem 'k_usecases', path: '~/dev/kgems/k_usecases'
|
29
|
+
# end
|
data/Guardfile
CHANGED
@@ -23,8 +23,8 @@ group :green_pass_then_cop, halt_on_fail: true do
|
|
23
23
|
watch(%r{^lib/peeky/commands/(.+)\.rb$}) { |m| "spec/unit/commands/#{m[1]}_spec.rb" }
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
guard :rubocop, all_on_start: false, cli: ['--format', 'clang'] do
|
27
|
+
watch(%r{.+\.rb$})
|
28
|
+
watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) }
|
29
|
+
end
|
30
30
|
end
|
data/README.md
CHANGED
@@ -4,6 +4,10 @@
|
|
4
4
|
|
5
5
|
When using the source code for this gem, start by running `bin/setup` to install locally or `bundle install`
|
6
6
|
|
7
|
+
## TODO
|
8
|
+
|
9
|
+
@klueless-io - look at [show-source](https://stackoverflow.com/questions/13012109/get-class-location-from-class-object)
|
10
|
+
|
7
11
|
## Installation
|
8
12
|
|
9
13
|
Add this line to your application's Gemfile:
|
@@ -40,7 +44,7 @@ See all [stories](./STORIES.md)
|
|
40
44
|
|
41
45
|
## Usage
|
42
46
|
|
43
|
-
See all [
|
47
|
+
See all [usage examples](./USAGE.md)
|
44
48
|
|
45
49
|
### Basic Example
|
46
50
|
|
@@ -104,6 +108,32 @@ class SimpleClass
|
|
104
108
|
end
|
105
109
|
```
|
106
110
|
|
111
|
+
#### Class debug
|
112
|
+
Render debug information
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
puts api.render_class(:class_debug, instance: Sample::SimpleClass.new)
|
116
|
+
```
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
```text
|
121
|
+
----------------------------------------------------------------------
|
122
|
+
class name : SimpleClass
|
123
|
+
module name : Sample
|
124
|
+
class full name : Sample::SimpleClass
|
125
|
+
|
126
|
+
-- Attributes --------------------------------------------------------
|
127
|
+
attr_accessor : read_write
|
128
|
+
|
129
|
+
-- Public Methods ----------------------------------------------------
|
130
|
+
position_and_optional::
|
131
|
+
name param format type
|
132
|
+
----------------------------------------------------------------------
|
133
|
+
aaa aaa param_required
|
134
|
+
bbb bbb = nil param_optional
|
135
|
+
```
|
136
|
+
|
107
137
|
|
108
138
|
|
109
139
|
|
@@ -115,7 +145,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
115
145
|
|
116
146
|
## Contributing
|
117
147
|
|
118
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
148
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/klueless-io/peeky. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
119
149
|
|
120
150
|
## License
|
121
151
|
|
@@ -123,7 +153,7 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
123
153
|
|
124
154
|
## Code of Conduct
|
125
155
|
|
126
|
-
Everyone interacting in the Peeky project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
156
|
+
Everyone interacting in the Peeky project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/klueless-io/peeky/blob/master/CODE_OF_CONDUCT.md).
|
127
157
|
|
128
158
|
## Copyright
|
129
159
|
|
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
GEM_NAME = 'peeky'
|
4
|
+
|
3
5
|
require 'bundler/gem_tasks'
|
4
6
|
require 'rspec/core/rake_task'
|
5
7
|
|
@@ -14,3 +16,16 @@ Rake::ExtensionTask.new('peeky') do |ext|
|
|
14
16
|
end
|
15
17
|
|
16
18
|
task default: %i[clobber compile spec]
|
19
|
+
|
20
|
+
desc 'Publish the gem to RubyGems.org'
|
21
|
+
task :publish do
|
22
|
+
system 'gem build'
|
23
|
+
system "gem push #{GEM_NAME}-#{Peeky::VERSION}.gem"
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'Remove old *.gem files'
|
27
|
+
task :clean do
|
28
|
+
system 'rm *.gem'
|
29
|
+
end
|
30
|
+
|
31
|
+
task default: %i[clobber compile spec]
|
data/USAGE.md
CHANGED
@@ -320,3 +320,119 @@ end
|
|
320
320
|
```
|
321
321
|
|
322
322
|
#### Debug class info
|
323
|
+
Render debug information on complex class
|
324
|
+
|
325
|
+
```ruby
|
326
|
+
puts api.render_class(:class_debug, instance: Sample::ComplexClass.new)
|
327
|
+
```
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
```text
|
332
|
+
----------------------------------------------------------------------
|
333
|
+
class name : ComplexClass
|
334
|
+
module name : Sample
|
335
|
+
class full name : Sample::ComplexClass
|
336
|
+
|
337
|
+
-- Attributes --------------------------------------------------------
|
338
|
+
attr_accessor : a_read_write1
|
339
|
+
attr_accessor : a_read_write2
|
340
|
+
attr_reader : b_another_reader
|
341
|
+
attr_reader : b_reader
|
342
|
+
attr_reader : looks_like_an_attr_reader
|
343
|
+
attr_writer : c_another_writer
|
344
|
+
attr_writer : c_writer
|
345
|
+
|
346
|
+
-- Public Methods ----------------------------------------------------
|
347
|
+
alpha_sort1::
|
348
|
+
name param format type
|
349
|
+
----------------------------------------------------------------------
|
350
|
+
|
351
|
+
alpha_sort2::
|
352
|
+
name param format type
|
353
|
+
----------------------------------------------------------------------
|
354
|
+
|
355
|
+
destructive!::
|
356
|
+
name param format type
|
357
|
+
----------------------------------------------------------------------
|
358
|
+
|
359
|
+
do_something_method::
|
360
|
+
name param format type
|
361
|
+
----------------------------------------------------------------------
|
362
|
+
|
363
|
+
method_01::
|
364
|
+
name param format type
|
365
|
+
----------------------------------------------------------------------
|
366
|
+
aaa aaa param_required
|
367
|
+
|
368
|
+
method_02::
|
369
|
+
name param format type
|
370
|
+
----------------------------------------------------------------------
|
371
|
+
aaa aaa param_required
|
372
|
+
bbb bbb = nil param_optional
|
373
|
+
|
374
|
+
method_03::
|
375
|
+
name param format type
|
376
|
+
----------------------------------------------------------------------
|
377
|
+
aaa aaa param_required
|
378
|
+
bbb bbb = nil param_optional
|
379
|
+
ccc ccc = nil param_optional
|
380
|
+
|
381
|
+
method_04::
|
382
|
+
name param format type
|
383
|
+
----------------------------------------------------------------------
|
384
|
+
aaa *aaa splat
|
385
|
+
|
386
|
+
method_05::
|
387
|
+
name param format type
|
388
|
+
----------------------------------------------------------------------
|
389
|
+
aaa aaa param_required
|
390
|
+
bbb bbb = nil param_optional
|
391
|
+
ccc *ccc splat
|
392
|
+
|
393
|
+
method_06::
|
394
|
+
name param format type
|
395
|
+
----------------------------------------------------------------------
|
396
|
+
aaa **aaa double_splat
|
397
|
+
|
398
|
+
method_07::
|
399
|
+
name param format type
|
400
|
+
----------------------------------------------------------------------
|
401
|
+
aaa aaa param_required
|
402
|
+
bbb *bbb splat
|
403
|
+
ccc **ccc double_splat
|
404
|
+
|
405
|
+
method_08::
|
406
|
+
name param format type
|
407
|
+
----------------------------------------------------------------------
|
408
|
+
aaa aaa param_required
|
409
|
+
bbb *bbb splat
|
410
|
+
ccc **ccc double_splat
|
411
|
+
ddd &ddd block
|
412
|
+
|
413
|
+
method_09::
|
414
|
+
name param format type
|
415
|
+
----------------------------------------------------------------------
|
416
|
+
aaa aaa: key_required
|
417
|
+
|
418
|
+
method_10::
|
419
|
+
name param format type
|
420
|
+
----------------------------------------------------------------------
|
421
|
+
aaa aaa: key_required
|
422
|
+
bbb bbb: nil key_optional
|
423
|
+
|
424
|
+
method_with_every_type_of_paramater::
|
425
|
+
name param format type
|
426
|
+
----------------------------------------------------------------------
|
427
|
+
aaa aaa param_required
|
428
|
+
bbb bbb = nil param_optional
|
429
|
+
ccc *ccc splat
|
430
|
+
ddd ddd: key_required
|
431
|
+
eee eee: nil key_optional
|
432
|
+
fff **fff double_splat
|
433
|
+
ggg &ggg block
|
434
|
+
|
435
|
+
questionable?::
|
436
|
+
name param format type
|
437
|
+
----------------------------------------------------------------------
|
438
|
+
```
|
data/USAGE2.md
ADDED
data/lib/peeky/api.rb
CHANGED
@@ -16,6 +16,9 @@ module Peeky
|
|
16
16
|
# ClassInfo stores information about the instance of a
|
17
17
|
# class that is passed in including methods, attr_accessors
|
18
18
|
# attr_readers and attr_writers.
|
19
|
+
#
|
20
|
+
# @param instance [Object] instance of class to gather information about (required)
|
21
|
+
# @param lazy [TrueClass] lazy load method and parameter information, laze: is optional, defaults to true
|
19
22
|
def build_class_info(instance, lazy: true)
|
20
23
|
ci = Peeky::ClassInfo.new(instance)
|
21
24
|
ci.load unless lazy
|
@@ -23,6 +26,14 @@ module Peeky
|
|
23
26
|
end
|
24
27
|
|
25
28
|
# Render a class using a predefined class renderer
|
29
|
+
#
|
30
|
+
# ^1: One of class_info and instance must supplied, they are mutually
|
31
|
+
# exclusive to each other.
|
32
|
+
#
|
33
|
+
# @param render_key [Symbol] class render key (required)
|
34
|
+
# @param class_info [Object] class_info: is optional^1, defaults to nil
|
35
|
+
# @param instance [Object] instance: is optional^1, defaults to nil
|
36
|
+
# @param _opts [<key: value>...] **_opts - list of key/values that can help configure render
|
26
37
|
def render_class(render_key, class_info: nil, instance: nil, **_opts)
|
27
38
|
raise 'Call render_class with class_info OR instance.' if class_info.nil? && instance.nil?
|
28
39
|
raise 'Call render_class with class_info OR instance, these parameters are mutually exclusive' if !class_info.nil? && !instance.nil?
|
@@ -37,6 +48,7 @@ module Peeky
|
|
37
48
|
# Get a method renderer by :key
|
38
49
|
#
|
39
50
|
# TODO: Refactor to a configurable system
|
51
|
+
# @param key [String] key is a shortcut to a specific Peeky::Render that handles method_info (required)
|
40
52
|
def method_renderer(key)
|
41
53
|
case key
|
42
54
|
when :signature
|
@@ -53,8 +65,11 @@ module Peeky
|
|
53
65
|
# Get a class renderer by :key
|
54
66
|
#
|
55
67
|
# TODO: Refactor to a configurable system
|
68
|
+
# @param key [String] key is a shortcut to a specific Peeky::Renderer that handles class_info (required)
|
56
69
|
def class_renderer(key)
|
57
70
|
case key
|
71
|
+
when :class_debug
|
72
|
+
Peeky::Renderer::ClassDebugRender
|
58
73
|
when :class_interface
|
59
74
|
Peeky::Renderer::ClassInterfaceRender
|
60
75
|
when :class_interface_yard
|
data/lib/peeky/attr_info.rb
CHANGED
@@ -6,7 +6,9 @@ module Peeky
|
|
6
6
|
# Attr Info is a container that holds read, write or read/write
|
7
7
|
# attributes in the form of MethodInfo objects
|
8
8
|
class AttrInfo
|
9
|
+
# reader stores a MethodInfo for a matching reader, nil if readable style method_info not found
|
9
10
|
attr_reader :reader
|
11
|
+
# writer stores a MethodInfo for a matching writer, nil if writable style method_info not found
|
10
12
|
attr_reader :writer
|
11
13
|
|
12
14
|
def initialize(reader: nil, writer: nil)
|
@@ -16,6 +18,7 @@ module Peeky
|
|
16
18
|
@writer = writer
|
17
19
|
end
|
18
20
|
|
21
|
+
# Type of the attribute [:attr_writer, :attr_reader or :attr_accessor]
|
19
22
|
def type
|
20
23
|
@type ||= if @reader.nil?
|
21
24
|
:attr_writer
|
@@ -24,6 +27,7 @@ module Peeky
|
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
30
|
+
# Name of the attribute
|
27
31
|
def name
|
28
32
|
@name ||= @reader.nil? ? @writer.clean_name : @reader.clean_name
|
29
33
|
end
|
data/lib/peeky/class_info.rb
CHANGED
@@ -17,9 +17,33 @@ module Peeky
|
|
17
17
|
@instance = instance
|
18
18
|
end
|
19
19
|
|
20
|
+
# rubocop:disable Metrics/AbcSize
|
20
21
|
def to_s
|
21
|
-
|
22
|
+
result = []
|
23
|
+
result.push kv('class', class_full_name)
|
24
|
+
if defined?(@_ruby_instance_method_names)
|
25
|
+
result.push kv('# of instance methods', @_ruby_instance_method_names.join(', '))
|
26
|
+
else
|
27
|
+
result.push kv('# of instance methods', '')
|
28
|
+
end
|
29
|
+
if defined?(@signatures)
|
30
|
+
result.push kv('# of accessors', accessors.length)
|
31
|
+
result.push kv('# of readers', readers.length)
|
32
|
+
result.push kv('# of writers', writers.length)
|
33
|
+
result.push kv('# of methods', all_methods.length)
|
34
|
+
result.push kv('# of methods - public', public_methods.length)
|
35
|
+
result.push kv('# of methods - private', private_methods.length)
|
36
|
+
else
|
37
|
+
result.push kv('# of accessors', '')
|
38
|
+
result.push kv('# of readers', '')
|
39
|
+
result.push kv('# of writers', '')
|
40
|
+
result.push kv('# of methods', '')
|
41
|
+
result.push kv('# of methods - public', '')
|
42
|
+
result.push kv('# of methods - private', '')
|
43
|
+
end
|
44
|
+
result.join("\n")
|
22
45
|
end
|
46
|
+
# rubocop:enable Metrics/AbcSize
|
23
47
|
|
24
48
|
# Load class_info
|
25
49
|
#
|
@@ -30,7 +54,7 @@ module Peeky
|
|
30
54
|
# pre-load this information early.
|
31
55
|
def load
|
32
56
|
ruby_instance_methods
|
33
|
-
ruby_instance_method_names
|
57
|
+
# ruby_instance_method_names
|
34
58
|
signatures
|
35
59
|
end
|
36
60
|
|
@@ -41,19 +65,19 @@ module Peeky
|
|
41
65
|
|
42
66
|
# Class name
|
43
67
|
def class_name
|
44
|
-
@
|
68
|
+
@class_name ||= class_full_name.to_s.gsub(/^.*::/, '')
|
45
69
|
# instance.class.name.split('::').last
|
46
70
|
end
|
47
71
|
|
48
72
|
# Module name
|
49
73
|
def module_name
|
50
|
-
@
|
74
|
+
@module_name ||= class_full_name.to_s.gsub(/(.*)::.*/, '\1')
|
51
75
|
end
|
52
76
|
|
53
77
|
# Get a list of :attr_accessor on the class
|
54
78
|
# @return [Array<AttrInfo>] list of AttrInfo where type is :attr_accessor
|
55
79
|
def accessors
|
56
|
-
@
|
80
|
+
@accessors ||= attribute_infos.select { |attribute_info| attribute_info.type == :attr_accessor }
|
57
81
|
end
|
58
82
|
|
59
83
|
# Get a list of :attr_accessors ordered the way they are in the source code
|
@@ -66,7 +90,7 @@ module Peeky
|
|
66
90
|
|
67
91
|
# Attribute infos
|
68
92
|
def attribute_infos
|
69
|
-
@
|
93
|
+
@attribute_infos ||= begin
|
70
94
|
grouped_method_infos = signatures.select { |signature| signature.readable? || signature.writable? }.group_by(&:clean_name)
|
71
95
|
|
72
96
|
grouped_method_infos.keys.map { |key| AttrInfo.create(*grouped_method_infos[key]) }
|
@@ -82,8 +106,20 @@ module Peeky
|
|
82
106
|
|
83
107
|
# Get a list methods
|
84
108
|
# @return [Array<MethodInfo>] list of MethodInfo where type is :method
|
85
|
-
def
|
86
|
-
@
|
109
|
+
def all_methods
|
110
|
+
@all_methods ||= signatures.select { |signature| signature.implementation_type == :method }
|
111
|
+
end
|
112
|
+
|
113
|
+
# Get a list of private methods
|
114
|
+
# @return [Array<MethodInfo>] list of MethodInfo where type is :method
|
115
|
+
def private_methods
|
116
|
+
@private_methods ||= signatures.select { |signature| signature.implementation_type == :method && signature.access_control == :private }
|
117
|
+
end
|
118
|
+
|
119
|
+
# Get a list of public methods
|
120
|
+
# @return [Array<MethodInfo>] list of MethodInfo where type is :method
|
121
|
+
def public_methods
|
122
|
+
@public_methods ||= signatures.select { |signature| signature.implementation_type == :method && signature.access_control == :public }
|
87
123
|
end
|
88
124
|
|
89
125
|
# Get a list methods ordered the way they are in the source code
|
@@ -91,7 +127,7 @@ module Peeky
|
|
91
127
|
def methods_source_order
|
92
128
|
# TODO: This feature is required
|
93
129
|
# May be best to have a sort object that can be created for each type of ordering that is needed
|
94
|
-
|
130
|
+
all_methods
|
95
131
|
end
|
96
132
|
|
97
133
|
# Reader by name
|
@@ -104,7 +140,7 @@ module Peeky
|
|
104
140
|
# Get a list of :attr_reader on the class
|
105
141
|
# @return [Array<AttrInfo>] list of AttrInfo where type is :attr_accessor
|
106
142
|
def readers
|
107
|
-
@
|
143
|
+
@readers ||= attribute_infos.select { |attribute_info| attribute_info.type == :attr_reader }
|
108
144
|
end
|
109
145
|
|
110
146
|
# Get a list of :attr_reader ordered the way they are in the source code
|
@@ -118,7 +154,7 @@ module Peeky
|
|
118
154
|
# Get a list of :attr_writer on the class
|
119
155
|
# @return [Array<AttrInfo>] list of AttrInfo where type is :attr_writer
|
120
156
|
def writers
|
121
|
-
@
|
157
|
+
@writers ||= attribute_infos.select { |attribute_info| attribute_info.type == :attr_writer }
|
122
158
|
end
|
123
159
|
|
124
160
|
# Get a list of :attr_writer ordered the way they are in the source code
|
@@ -141,7 +177,13 @@ module Peeky
|
|
141
177
|
# such as static, private vs public
|
142
178
|
# deep, deep_to_level, this_instance.
|
143
179
|
def signatures
|
144
|
-
@
|
180
|
+
return @signatures if defined? @signatures
|
181
|
+
|
182
|
+
@signatures = begin
|
183
|
+
instance_methods = ruby_instance_methods.map { |im| MethodInfo.new(im, @instance) }
|
184
|
+
private_methods = ruby_private_methods.map { |im| MethodInfo.new(im, @instance, access_control: :private) }
|
185
|
+
instance_methods + private_methods
|
186
|
+
end
|
145
187
|
end
|
146
188
|
|
147
189
|
# Signatures by clean name
|
@@ -161,40 +203,28 @@ module Peeky
|
|
161
203
|
signatures.select { |im| im.name == name && im.implementation_type == filter_type }
|
162
204
|
end
|
163
205
|
|
164
|
-
# Debug
|
165
|
-
#
|
166
|
-
# Refact: PATTERN: Come up it an debug inclusion system so that
|
167
|
-
# so that debug helpers can be included for development and excluded
|
168
|
-
# for production
|
169
|
-
# @param format [String] format: <value for format> (optional)
|
170
|
-
def debug(format: [:signatures])
|
171
|
-
debug_method_names if format.include?(:method_names)
|
172
|
-
|
173
|
-
return unless format.include?(:signatures)
|
174
|
-
|
175
|
-
puts '-' * 70
|
176
|
-
puts 'Methods'
|
177
|
-
puts '-' * 70
|
178
|
-
signatures.each(&:debug)
|
179
|
-
end
|
180
|
-
|
181
|
-
def debug_method_names
|
182
|
-
puts '-' * 70
|
183
|
-
puts 'Method Names'
|
184
|
-
puts '-' * 70
|
185
|
-
ruby_instance_method_names.each do |method_name|
|
186
|
-
puts method_name
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
206
|
private
|
191
207
|
|
208
|
+
def kv(key, value)
|
209
|
+
"#{key.to_s.ljust(25)}: #{value}"
|
210
|
+
end
|
211
|
+
|
192
212
|
def ruby_instance_method_names
|
193
|
-
@
|
213
|
+
@ruby_instance_method_names ||= instance.class.instance_methods(false).sort
|
214
|
+
end
|
215
|
+
|
216
|
+
def ruby_private_method_names
|
217
|
+
@ruby_private_method_names ||= instance.private_methods(false).sort
|
218
|
+
end
|
219
|
+
|
220
|
+
def ruby_private_methods
|
221
|
+
@ruby_private_methods ||= ruby_private_method_names.map { |method_name| instance.method(method_name) }
|
222
|
+
rescue StandardError => e
|
223
|
+
puts e
|
194
224
|
end
|
195
225
|
|
196
226
|
def ruby_instance_methods
|
197
|
-
@
|
227
|
+
@ruby_instance_methods ||= ruby_instance_method_names.map { |method_name| instance.method(method_name) }
|
198
228
|
rescue StandardError => e
|
199
229
|
puts e
|
200
230
|
end
|