pry-hier 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/pry-hier.rb +51 -0
  3. metadata +96 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 851ccbfef429e3902365311d9b8e10fa026b609473007ec03113761eb52025a6
4
+ data.tar.gz: 5af5f87fa387c499b0f296576f16cacfbbadd465e8730900c87a4a850cf683b7
5
+ SHA512:
6
+ metadata.gz: 72b7eba7f6085d7aee90ec4349600c681d3d27c9a9e3c070e41bb39a237b75d010ff759ed476eb5733572a9fccaeed6c268eab271ef41def6c5dfeaf77c72de0
7
+ data.tar.gz: 045fa7ca163196916f78aa9a90e417b2da8044ab535ade57e6fd4a67e72e537c5543465b8e5114634aa3f4e5ea76153d2d5759aff7883560bcfd6f08809dd243
data/lib/pry-hier.rb ADDED
@@ -0,0 +1,51 @@
1
+ require 'pry'
2
+ require 'tty-tree'
3
+
4
+ class Pry
5
+ Commands.create_command 'hier' do
6
+ description 'Shows descendants of a class: hier [Class|Module]'
7
+
8
+ def process
9
+ klass = WrappedModule.from_str(args[0])
10
+ raise CommandError, 'class or module name required' unless klass
11
+ print_tree_for(klass.wrapped)
12
+ end
13
+
14
+ def options(opt)
15
+ opt.on :s, :include_singletons, 'Include singleton classes'
16
+ end
17
+
18
+ private
19
+
20
+ def print_tree_for(klass)
21
+ set_class_list(klass)
22
+ tree = hash_for(klass)
23
+ case tree
24
+ when Hash then output.print TTY::Tree.new(hash_for(klass)).render
25
+ else output.puts colour_name(klass)
26
+ end
27
+ end
28
+
29
+ def hash_for(klass)
30
+ children = children_of(klass).map(&method(:hash_for))
31
+ colour_name(klass).yield_self do |name|
32
+ children.empty? ? name : { name => children }
33
+ end
34
+ end
35
+
36
+ def children_of(klass)
37
+ @classes.select { |obj| obj.superclass == klass }
38
+ end
39
+
40
+ def colour_name(klass)
41
+ Pry.config.color ? colorize_code(klass) : klass.inspect
42
+ end
43
+
44
+ def set_class_list(klass)
45
+ @classes = ObjectSpace.each_object.select do |obj|
46
+ obj.is_a?(Class) &&
47
+ (opts.include_singletons? || ! obj.singleton_class?)
48
+ end
49
+ end
50
+ end
51
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pry-hier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Paul Sonkoly
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-02-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: tty-tree
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.8'
55
+ description: |
56
+ Given an class or module name hier command shows an ascii tree (similar to
57
+ the tree shell command) of the descendants of the given class.
58
+
59
+ at pry prompt:
60
+
61
+ [0](main) λ hier Numeric
62
+ Numeric
63
+ ├── Complex
64
+ ├── Rational
65
+ ├── Float
66
+ └── Integer
67
+ email: sonkoly.pal@gmail.com
68
+ executables: []
69
+ extensions: []
70
+ extra_rdoc_files: []
71
+ files:
72
+ - lib/pry-hier.rb
73
+ homepage: http://github.com/phaul/pry-hier
74
+ licenses:
75
+ - MIT
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubygems_version: 3.0.2
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Shows an ascii art tree of the descendants of a class.
96
+ test_files: []