pretty_irb 0.1.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.
@@ -0,0 +1,146 @@
1
+ module PrettyIRB
2
+ class VariableInspector
3
+ def initialize(binding)
4
+ @binding = binding
5
+ end
6
+
7
+ # List all local variables
8
+ def list_variables
9
+ variables = @binding.local_variables
10
+ return "📦 No variables defined yet" if variables.empty?
11
+
12
+ output = "📦 Local Variables (#{variables.length}):\n\n"
13
+ variables.each do |var|
14
+ value = @binding.local_variable_get(var)
15
+ output += format_variable(var, value)
16
+ end
17
+ output
18
+ end
19
+
20
+ # Get variable details
21
+ def inspect_var(var_name)
22
+ begin
23
+ value = @binding.local_variable_get(var_name.to_sym)
24
+ detailed_info(var_name, value)
25
+ rescue NameError
26
+ "❌ Variable '#{var_name}' not found"
27
+ end
28
+ end
29
+
30
+ # Get variable value
31
+ def get(var_name)
32
+ begin
33
+ @binding.local_variable_get(var_name.to_sym)
34
+ rescue NameError
35
+ nil
36
+ end
37
+ end
38
+
39
+ # List variables of a specific type
40
+ def by_type(type)
41
+ variables = @binding.local_variables
42
+ filtered = variables.select do |var|
43
+ value = @binding.local_variable_get(var)
44
+ value.class.name.include?(type.capitalize)
45
+ end
46
+
47
+ return "❌ No variables of type #{type}" if filtered.empty?
48
+
49
+ output = "📦 Variables of type #{type} (#{filtered.length}):\n\n"
50
+ filtered.each do |var|
51
+ value = @binding.local_variable_get(var)
52
+ output += format_variable(var, value)
53
+ end
54
+ output
55
+ end
56
+
57
+ # Search variables by name
58
+ def search(keyword)
59
+ variables = @binding.local_variables
60
+ filtered = variables.select { |var| var.to_s.include?(keyword) }
61
+
62
+ return "🔍 No variables matching '#{keyword}'" if filtered.empty?
63
+
64
+ output = "🔍 Found #{filtered.length} variable(s):\n\n"
65
+ filtered.each do |var|
66
+ value = @binding.local_variable_get(var)
67
+ output += format_variable(var, value)
68
+ end
69
+ output
70
+ end
71
+
72
+ # Memory usage estimation
73
+ def memory_usage
74
+ variables = @binding.local_variables
75
+ total_size = variables.sum do |var|
76
+ value = @binding.local_variable_get(var)
77
+ estimate_size(value)
78
+ end
79
+
80
+ output = "💾 Memory Usage:\n\n"
81
+ output += "Total: ~#{total_size / 1024} KB\n\n"
82
+
83
+ variables.each do |var|
84
+ value = @binding.local_variable_get(var)
85
+ size = estimate_size(value)
86
+ output += " #{var}: ~#{size} bytes\n"
87
+ end
88
+ output
89
+ end
90
+
91
+ private
92
+
93
+ def format_variable(name, value)
94
+ type = value.class.name
95
+ size = estimate_size(value)
96
+
97
+ " #{name}: #{type} (#{size} bytes)\n = #{value.inspect.truncate(60)}\n\n"
98
+ end
99
+
100
+ def detailed_info(name, value)
101
+ output = "📦 Variable: #{name}\n\n"
102
+ output += "Type: #{value.class}\n"
103
+ output += "Size: ~#{estimate_size(value)} bytes\n"
104
+ output += "Value: #{value.inspect}\n\n"
105
+
106
+ case value
107
+ when String
108
+ output += "String Info:\n"
109
+ output += " Length: #{value.length}\n"
110
+ output += " Encoding: #{value.encoding}\n"
111
+ when Array
112
+ output += "Array Info:\n"
113
+ output += " Length: #{value.length}\n"
114
+ output += " First: #{value.first.inspect}\n"
115
+ output += " Last: #{value.last.inspect}\n"
116
+ when Hash
117
+ output += "Hash Info:\n"
118
+ output += " Size: #{value.length}\n"
119
+ output += " Keys: #{value.keys.inspect}\n"
120
+ when Numeric
121
+ output += "Number Info:\n"
122
+ output += " Value: #{value}\n"
123
+ output += " Even?: #{value.even?}\n" if value.is_a?(Integer)
124
+ end
125
+
126
+ output
127
+ end
128
+
129
+ def estimate_size(obj)
130
+ case obj
131
+ when String
132
+ obj.bytesize
133
+ when Array
134
+ obj.length * 8 + obj.sum { |item| estimate_size(item) }
135
+ when Hash
136
+ obj.length * 16 + obj.sum { |k, v| estimate_size(k) + estimate_size(v) }
137
+ when Numeric
138
+ 24
139
+ when TrueClass, FalseClass, NilClass
140
+ 8
141
+ else
142
+ obj.to_s.bytesize
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,3 @@
1
+ module PrettyIRB
2
+ VERSION = "0.1.0"
3
+ end
data/lib/pretty_irb.rb ADDED
@@ -0,0 +1,26 @@
1
+ require "irb"
2
+ require "rouge"
3
+ require "colorize"
4
+ require "did_you_mean"
5
+ require "reline"
6
+
7
+ require_relative "pretty_irb/version"
8
+ require_relative "pretty_irb/formatter"
9
+ require_relative "pretty_irb/auto_corrector"
10
+ require_relative "pretty_irb/ai_helper"
11
+ require_relative "pretty_irb/history_manager"
12
+ require_relative "pretty_irb/snippet_manager"
13
+ require_relative "pretty_irb/variable_inspector"
14
+ require_relative "pretty_irb/benchmarker"
15
+ require_relative "pretty_irb/cheat_sheet"
16
+ require_relative "pretty_irb/shell"
17
+
18
+ module PrettyIRB
19
+ class Error < StandardError; end
20
+
21
+ class << self
22
+ def start(config = {})
23
+ Shell.new(config).run
24
+ end
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,200 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pretty_irb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jayesh
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2025-11-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: irb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rouge
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.26'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.26'
41
+ - !ruby/object:Gem::Dependency
42
+ name: colorize
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.8'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: did_you_mean
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '1.5'
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '3.0'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '1.5'
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: reline
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.3'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.3'
89
+ - !ruby/object:Gem::Dependency
90
+ name: bundler
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '2.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '2.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rake
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '13.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '13.0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rspec
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.0'
131
+ description: An enhanced interactive Ruby shell with pretty formatting, syntax highlighting,
132
+ and auto-correct functionality
133
+ email:
134
+ - jayesh@example.com
135
+ executables:
136
+ - pretty_irb
137
+ - irb1
138
+ extensions: []
139
+ extra_rdoc_files: []
140
+ files:
141
+ - 00-MANIFEST.md
142
+ - ADVANCED_FEATURES.md
143
+ - AI_HELP.md
144
+ - AI_QUICK_START.md
145
+ - COMPLETE.md
146
+ - EXAMPLES.md
147
+ - FEATURE_SHOWCASE.md
148
+ - FILE_STRUCTURE.md
149
+ - Gemfile
150
+ - IMPLEMENTATION_COMPLETE.md
151
+ - INDEX.md
152
+ - INSTALL.md
153
+ - LICENSE.txt
154
+ - PUBLISH_TO_RUBYGEMS.md
155
+ - QUICKSTART.md
156
+ - QUICK_REFERENCE.md
157
+ - README.md
158
+ - Rakefile
159
+ - SETUP.md
160
+ - START_HERE.md
161
+ - SUMMARY.md
162
+ - WELCOME.md
163
+ - WHAT_IS_NEW.md
164
+ - exe/irb1
165
+ - exe/pretty_irb
166
+ - lib/pretty_irb.rb
167
+ - lib/pretty_irb/ai_helper.rb
168
+ - lib/pretty_irb/auto_corrector.rb
169
+ - lib/pretty_irb/benchmarker.rb
170
+ - lib/pretty_irb/cheat_sheet.rb
171
+ - lib/pretty_irb/formatter.rb
172
+ - lib/pretty_irb/history_manager.rb
173
+ - lib/pretty_irb/shell.rb
174
+ - lib/pretty_irb/snippet_manager.rb
175
+ - lib/pretty_irb/variable_inspector.rb
176
+ - lib/pretty_irb/version.rb
177
+ homepage: https://github.com/jayesh/pretty_irb
178
+ licenses:
179
+ - MIT
180
+ metadata: {}
181
+ post_install_message:
182
+ rdoc_options: []
183
+ require_paths:
184
+ - lib
185
+ required_ruby_version: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 2.7.0
190
+ required_rubygems_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ requirements: []
196
+ rubygems_version: 3.5.3
197
+ signing_key:
198
+ specification_version: 4
199
+ summary: A pretty IRB replacement with auto-correct and beautiful fonts
200
+ test_files: []