irbtools 3.0.4 → 4.0.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
2
  SHA256:
3
- metadata.gz: f2debea09bce10847a9c13d283cb6e7c9f94baa63946b8c08b010126b7efc07b
4
- data.tar.gz: b072c4fcd9edb111acdbc9c690aa21b0e55e5a22f496f7c83a16f0a2e0cb5fa2
3
+ metadata.gz: 1e9a398324ec34c6a93632f3eb26f84be51607b45e1e06e311a3c7507e11e15b
4
+ data.tar.gz: bb9072432d1e2404e9bcb1a763d338458d97d8126bbdd6e26b773aaff98c514e
5
5
  SHA512:
6
- metadata.gz: bc315ac52883a977dc6a06bbac66775c09f68201067dc7de4c711d0fc7a7c92ce2e6f1608970fbcee9c70f7d14c4c1f3d38a29606627f4f53d87184ac38fe335
7
- data.tar.gz: 590a725d8f2ab6989f071da298b856b5ea38e9707a6e72f45982586f2796613172d605a856ea31d322bda36e51f00ee39077aa397d10e4398e0378b39b0ad9f6
6
+ metadata.gz: 33c1fd0e1ee8b60cccbc8cc10620341826aaaebaed527bea9e4a046347d2a1753c91bdb69204619de6624981ed58e838d5b0fdf7c08cf26ce24375ec0d9a39ce
7
+ data.tar.gz: 2c8c5a3668896580a9f0e6f6e8a959eff7b80caacbfb3b6632114063ad1f511e03d56b3dccf84f0d6f5ccc42e3c16c8f065315feed9022f41a3ffd15f182083f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # Irbtools Changelog
2
2
 
3
+ ## 4.0
4
+
5
+ * Requires IRB 1.6 (Ruby 3.2 bundles IRB 1.6.2)
6
+ * Requires Ruby 3.0
7
+
8
+ * Remove a bunch of gems:
9
+ * Drop binding.repl gem since it was only needed for older Rubies
10
+ * Drop ori gem, since IRB now has `show_doc`
11
+ * Drop RubyInfo
12
+
13
+ * Retire irbtools-more:
14
+ * Move looksee to core irbtools
15
+ * Move core_docs to core irbtools
16
+ * Remove bond (outdated)
17
+ * Leave binding_of_caller optional
18
+
19
+ * Add command wrappers for code, howtocall, looksee, shadow
20
+ * Add `$` command to directly call system
21
+
22
+ * Version bumps: looksee, os, methodfinder, code, core_docs, debugging
23
+ * Alias IRB's ls to ils (fixes #53)
24
+ * Remove support for RIPL repl (outdated)
25
+
26
+ ## 3.0.5
27
+ * Bump methodfinder dependency & update usage (fixes #52)
28
+
3
29
  ## 3.0.4
4
30
  * Loosen Ruby dependency to allow Ruby 3.0
5
31
 
data/CONFIGURE.md CHANGED
@@ -43,8 +43,7 @@ The following options are possible
43
43
  : Same as `:thread`, but after loading late libraries.
44
44
  `:sub_session => true`
45
45
  : The library is loaded every time a sub-session starts (using
46
- `IRB.conf[:IRB_RC]`). In [ripl](https://github.com/cldwalker/ripl),
47
- `ripl-after_rc` is used.
46
+ `IRB.conf[:IRB_RC]`).
48
47
  `:autoload => :Constant`
49
48
  : Use Ruby's `autoload` feature. It loads the library as soon as the
50
49
  constant is encountered.
data/MIT-LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2020 Jan Lelis
1
+ Copyright (c) 2010-2022 Jan Lelis
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,21 +1,156 @@
1
- # Irbtools [![version](https://badge.fury.io/rb/irbtools.svg)](https://badge.fury.io/rb/irbtools) [![[travis]](https://travis-ci.org/janlelis/irbtools.svg)](https://travis-ci.org/janlelis/irbtools)
1
+ # Irbtools [![[version]](https://badge.fury.io/rb/irbtools.svg)](https://badge.fury.io/rb/irbtools) [![[ci]](https://github.com/janlelis/irbtools/workflows/Test/badge.svg)](https://github.com/janlelis/irbtools/actions?query=workflow%3ATest)
2
+
3
+ ## Irbtools 4.0 for IRB 1.6+
4
+
5
+ The current version of Irbtools requires [IRB 1.6+](https://github.com/ruby/irb) (which is the default for Ruby
6
+ from 3.2 on). Please use Irbtools 3 for earlier versions of IRB.
7
+
8
+ ## Description
9
+
10
+ Improves Ruby's IRB with:
11
+
12
+ - a default configuration
13
+ - improved syntax highlighting of result objects
14
+ - helpful commands for debugging and introspection
15
+
16
+ ## Examples
17
+
18
+ ### Show lookup chain and method list grouped by visibility
2
19
 
3
20
  ```ruby
4
- _| _|
5
- _|_|_| _|_|_| _|_|_| _| _| _| _|_|_| _|
6
- _| _| _| _| _| _|_|_|_| _|_| _|_| _| _|_|_| _| _| _|
7
- _| _|_|_| _|_|_| _| _| _| _| _| _| _|_| _| _|_| _|
8
- _| _| _| _| _| _| _| _| _| _| _| _|_| _| _| _|
9
- _|_|_| _| _| _|_|_| _| _|_| _|_| _|_| _| _|_|_| _| _|_|_| _|
10
- _| _|
21
+ >> shadow [1,2,3].reverse
22
+ => # ObjectShadow of Object #85280
23
+
24
+ ## Lookup Chain
25
+
26
+ [#<Class:#<Array:0x00007fccd9cfac30>>, Array, Enumerable, Object, "…"]
27
+
28
+ ## 141 Public Methods (Non-Class/Object)
29
+
30
+ [:&, :*, :+, :-, :<<, :<=>, :==, :[], :[]=, :all?, :any?, :append, :assoc, :at, :bsearch, :bsearch_index, :chain,
31
+ :chunk, :chunk_while, :clear, :collect, :collect!, :collect_concat, :combination, :compact, :compact!, :concat,
32
+ :count, :cycle, :deconstruct, :delete, :delete_at, :delete_if, :detect, :difference, :dig, :drop, :drop_while,
33
+ :each, :each_cons, :each_entry, :each_index, :each_slice, :each_with_index, :each_with_object, :empty?, :entries,
34
+ :eql?, :fetch, :fill, :filter, :filter!, :filter_map, :find, :find_all, :find_index, :first, :flat_map, :flatten,
35
+ :flatten!, :grep, :grep_v, :group_by, :hash, :include?, :index, :inject, :insert, :inspect, :intersect?,
36
+ :intersection, :join, :keep_if, :last, :lazy, :length, :map, :map!, :max, :max_by, :member?, :min, :min_by,
37
+ :minmax, :minmax_by, :none?, :one?, :pack, :partition, :permutation, :pop, :prepend, :product, :push, :rassoc,
38
+ :reduce, :reject, :reject!, :repeated_combination, :repeated_permutation, :replace, :reverse, :reverse!,
39
+ :reverse_each, :rindex, :rotate, :rotate!, :sample, :select, :select!, :shelljoin, :shift, :shuffle, :shuffle!,
40
+ :size, :slice, :slice!, :slice_after, :slice_before, :slice_when, :sort, :sort!, :sort_by, :sort_by!, :sum,
41
+ :take, :take_while, :tally, :to_a, :to_ary, :to_h, :to_s, :to_set, :transpose, :union, :uniq, :uniq!, :unshift,
42
+ :values_at, :zip, :|]
43
+
44
+ ## 2 Private Methods (Non-Class/Object)
45
+
46
+ [:initialize, :initialize_copy]
47
+
48
+ ## Object Inspect
49
+
50
+ [3, 2, 1]
11
51
  ```
12
52
 
13
- Improvements for Ruby's IRB console, like syntax highlighted output and a lot of
14
- debugging and introspection methods. Unlike with PRY, you are still in your
15
- normal IRB. It is designed to work out-of-the-box, so there is no reason to not
16
- use it!
53
+ ### Show a method list grouped by ancestors
17
54
 
18
- **Compatible with Ruby 2.7's new IRB**
55
+ ```ruby
56
+ >> look "str"
57
+ .
58
+ .
59
+ .
60
+ Comparable
61
+ < <= == > >= between? clamp
62
+ String
63
+ % crypt inspect squeeze!
64
+ * dedup intern start_with?
65
+ + delete length strip
66
+ +@ delete! lines strip!
67
+ -@ delete_prefix ljust sub
68
+ << delete_prefix! lstrip sub!
69
+ <=> delete_suffix lstrip! succ
70
+ .
71
+ .
72
+ .
73
+ ```
74
+
75
+ ### Show source code of a Ruby-based method
76
+
77
+ ```ruby
78
+ >> code SecureRandom.uuid
79
+ #
80
+ # /home/dan/.rvm/rubies/ruby-3.2.0/lib/ruby/3.2.0/random/formatter.rb:170
81
+ #
82
+ # Generate a random v4 UUID (Universally Unique IDentifier).
83
+ #
84
+ # require 'random/formatter'
85
+ #
86
+ # Random.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
87
+ # Random.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
88
+ # # or
89
+ # prng = Random.new
90
+ # prng.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b"
91
+ #
92
+ # The version 4 UUID is purely random (except the version).
93
+ # It doesn't contain meaningful information such as MAC addresses, timestamps, etc.
94
+ #
95
+ # The result contains 122 random bits (15.25 random bytes).
96
+ #
97
+ # See RFC4122[https://datatracker.ietf.org/doc/html/rfc4122] for details of UUID.
98
+ #
99
+ def uuid
100
+ ary = random_bytes(16).unpack("NnnnnN")
101
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
102
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
103
+ "%08x-%04x-%04x-%04x-%04x%08x" % ary
104
+ end
105
+ ```
106
+
107
+ ### Show source code of a natively implemented method
108
+
109
+ ```ruby
110
+ >> code Array#reverse
111
+ //
112
+ // https://github.com/ruby/ruby/blob/ruby_3_2/array.c#L3282
113
+ //
114
+ // Returns a new \Array with the elements of +self+ in reverse order:
115
+ //
116
+ // a = ['foo', 'bar', 'two']
117
+ // a1 = a.reverse
118
+ // a1 # => ["two", "bar", "foo"]
119
+ static VALUE
120
+ rb_ary_reverse_m(VALUE ary)
121
+ {
122
+ long len = RARRAY_LEN(ary);
123
+ VALUE dup = rb_ary_new2(len);
124
+
125
+ if (len > 0) {
126
+ const VALUE *p1 = RARRAY_CONST_PTR_TRANSIENT(ary);
127
+ VALUE *p2 = (VALUE *)RARRAY_CONST_PTR_TRANSIENT(dup) + len - 1;
128
+ do *p2-- = *p1++; while (--len > 0);
129
+ }
130
+ ARY_SET_LEN(dup, RARRAY_LEN(ary));
131
+ return dup;
132
+ }
133
+ ```
134
+
135
+ ### Find out method signatures (most useful for Ruby-based methods with keyword args)
136
+
137
+ ```ruby
138
+ >> howtocall require
139
+ require(path)
140
+ ```
141
+
142
+ ```ruby
143
+ >> require "rubygems/user_interaction"
144
+ >> ui = Gem::ConsoleUI.new
145
+ >> howtocall ui.choose_from_list
146
+ choose_from_list(question, list)
147
+ ```
148
+
149
+ ### Call system commands with `$`
150
+
151
+ ```ruby
152
+ >> $ git status # displays current git status
153
+ ```
19
154
 
20
155
  ## Setup
21
156
 
@@ -30,55 +165,66 @@ You also need to add irbtools to your project's `Gemfile`:
30
165
 
31
166
  gem 'irbtools', require: 'irbtools/binding'
32
167
 
33
- Then start IRB (with **Irbtools** loaded) from the terminal or directly from your code with:
168
+ Then start IRB (with **Irbtools** loaded) from the terminal or directly from
169
+ your code with:
34
170
 
35
171
  binding.irb
36
172
 
37
- ### Enable More Gems
38
-
39
- Some suggested gems will not be installed to ensure wider general support. For
40
- the full feature set, you can install **irbtools-more**. To do so, change your
41
- `.irbrc` to:
42
-
43
- require 'irbtools/more'
44
-
45
- and edit your `Gemfile` to read like this:
173
+ *Optional:* If the **binding_of_caller** gem is available, you can just call the `irb`
174
+ method and it will start a session with the current binding:
46
175
 
47
- gem 'irbtools-more', require: 'irbtools/binding'
176
+ irb
48
177
 
49
178
  ## Features
50
179
 
51
- ### Irbtools' IRB Improvements
180
+ ### General IRB Improvements
52
181
 
53
182
  - Syntax highlighting ([wirb](https://github.com/janlelis/wirb/) / [fancy_irb](https://github.com/janlelis/fancy_irb))
54
- - Loads included third party libraries effeciently
55
- - Customizable views for specfic options using [hirb](https://tagaholic.me/2009/03/13/hirb-irb-on-the-good-stuff.html)
56
- - ActiveRecord results get displayed as a table
57
- - **(irbtools-more)** [Improved tab-completion](https://tagaholic.me/bond/)
183
+ - Loads included libraries efficiently to reduce IRB start-up time
184
+ - Customizable views for specfic options using [hirb](https://tagaholic.me/2009/03/13/hirb-irb-on-the-good-stuff.html). By default, ActiveRecord results get displayed as a table.
58
185
 
59
- ### Irbtools' Included Methods for IRB
186
+ ### Included Debugging Methods for IRB
60
187
 
61
188
  #### Highlights
62
189
 
63
190
  - Lookup and manipulate instance variables / methods with ease using [object_shadow](https://github.com/janlelis/object_shadow/)
64
- - **(irbtools-more)** Go even further with [looksee](https://github.com/oggy/looksee), the best lookup path inspection tool out there
191
+ - Go even further with [looksee](https://github.com/oggy/looksee), the best lookup path inspection tool out there
65
192
  - Display a method's source code using [code](https://github.com/janlelis/code)
66
- - Inline access to *ri* docs by [ori](https://github.com/dadooda/ori)
67
- - If you have deactivated *ri*, you can re-generate the docs with something like: `rvm docs generate-ri`
68
193
  - Find methods that turn one value into another value with [methodfinder](https://github.com/citizen428/methodfinder)
69
194
  - [Use VIM from inside IRB](https://github.com/jberkel/interactive_editor)
70
195
 
196
+ #### Extra Commands
197
+
198
+ Commands get treated specially by IRB and do not necessarily follow Ruby syntax.
199
+
200
+ Command | Alias | Description | Example
201
+ ------ | ---------- | ---------|---
202
+ `code ` | - | Shows syntax-highlighted source code of a method | `code Array#reverse`
203
+ `howtocall ` | - | Shows the method signature | `howtocall String#gsub`
204
+ `look ` | - | Shows looksee method list | `look [1,2,3]`
205
+ `shadow ` | `+ ` | Shows object shadow method list | `shadow [1,2,3]`
206
+ `sys ` | `$ ` | Calls system shell | `$ top`
207
+
208
+ Two default commands have an additional alias:
209
+
210
+ Command | Alias | Description | Example
211
+ ------ | ---------- | ---------|---
212
+ `show_doc` | `ri ` | Shows documentation | `ri String#gsub`
213
+ `chws` | `co ` | "change into an object" | `co [1,2,3]`
214
+
215
+ ##### IRB's ls?
216
+
217
+ Please note that IRB's own **ls** command is aliased to `ils`, since `ls` already refers to a method listing all files in the current directory. If you haven't tried looksee (`look`) or object shadows (`shadow`) - give it a try ;)
218
+
71
219
  #### Ruby Introspection
72
220
 
73
221
  Method / Constant | Arguments | Description | Provided By
74
222
  ------ | ---------- | -----------|-
75
- `code` | object = self, method_name | Display the method source with syntax highlighting. Will also look up C methods if the **core_docs** gem (which is included in **irbtools-more**) is available. | [code](https://github.com/janlelis/code)
223
+ `Object#lp` or `Object#look` | | Supercharged method introspection in IRB | [looksee](https://github.com/oggy/looksee)
224
+ `Object#shadow` | | Manipulate instance variables and learn about callable methods | [object_shadow](https://github.com/janlelis/object_shadow/)
225
+ `code` | object = self, method_name | Display the method source with syntax highlighting. Will also try to look up C methods. | [code](https://github.com/janlelis/code)
76
226
  `howtocall` | object = self, method_or_proc | Display parameter names and types you will need to call a method | [debugging/howtocall](https://github.com/janlelis/debugging#howtocallobj--self-method_or_proc)
77
227
  `mf` | object1, object2 | Find methods which turn one value into another value | [methodfinder](https://github.com/citizen428/methodfinder)
78
- `mof` | object, depth = 0, grep = // | Print a method list, ordered by modules (looksee lite) | [debugging](https://github.com/janlelis/debugging#mofobj-depth--nil)
79
- `Object#lp` | | **(irbtools-more)** Supercharged method introspection in IRB | [looksee](https://github.com/oggy/looksee)
80
- `Object#ri` | *args | Show ri documentation for this object or method | [ori](https://github.com/dadooda/ori)
81
- `Object#shadow` | | Manipulate instance variables and learn about callable methods | [object_shadow](https://github.com/janlelis/object_shadow/)
82
228
 
83
229
  #### Platform Info
84
230
 
@@ -87,14 +233,15 @@ Method / Constant | Arguments | Description | Provided By
87
233
  `OS` | | Query operating system information | [os](https://github.com/rdp/os)
88
234
  `RubyVersion` | | Show the Ruby version | [ruby_version](https://github.com/janlelis/ruby_version)
89
235
  `RubyEngine` | | Show the Ruby engine | [ruby_engine](https://github.com/janlelis/ruby_engine)
90
- `RubyInfo` | | List general information about the Ruby environment | [ruby_info](https://github.com/janlelis/ruby_info)
91
236
 
92
237
  #### General Utils
93
238
 
94
239
  Method / Constant | Arguments | Description | Provided By
95
240
  ------ | ---------- | -----------|-
96
241
  `beep` | | Ring terminal bell | [debugging/beep](https://github.com/janlelis/debugging#beep)
242
+ `clear` | | Clear the terminal | [every_day_irb](https://github.com/janlelis/every_day_irb)
97
243
  `copy` | string | Copy something to the clipboard | [clipboard](https://github.com/janlelis/clipboard)
244
+ `copy_output` | | Copy session output history to the clipboard | [clipboard](https://github.com/janlelis/clipboard), irbtools
98
245
  `colorize` | string | Syntax-highlight a string of Ruby code | [coderay](https://github.com/rubychan/coderay), irbtools
99
246
  `ed` / `emacs` / `mate` / `mvim` / `nano` / `vi` / `vim` | filename = nil | Start an editor in the session context | [interactive_editor](https://github.com/jberkel/interactive_editor)
100
247
  `ld` | file | Shortcut for `load lib.to_s + '.rb'` | [every_day_irb](https://github.com/janlelis/every_day_irb)
@@ -103,21 +250,12 @@ Method / Constant | Arguments | Description | Provided By
103
250
  `paste` | | Paste clipboard content | [clipboard](https://github.com/janlelis/clipboard)
104
251
  `q` | *args | Like `Kernel#p`, but prints results on one line, with different colors | [debugging/q](https://github.com/janlelis/debugging#qargs)
105
252
  `re` | string, regexg, groups = nil | Regex debugging helper | [debugging/re](https://github.com/janlelis/debugging#qargs)
253
+ `reset!` | | Restart the current IRB session | [every_day_irb](https://github.com/janlelis/every_day_irb)
106
254
  `rq` | lib | Shortcut for `require lib.to_s`. Use it like this: `rq:prime` | [every_day_irb](https://github.com/janlelis/every_day_irb)
107
255
  `rr` | lib | Shortcut for `require_relative lib.to_s` | [every_day_irb](https://github.com/janlelis/every_day_irb)
108
256
  `rrq` / `rerequire` | lib | Hack to remove a library from `$LOADED_FEATURES` and `require` it again | [every_day_irb](https://github.com/janlelis/every_day_irb)
109
257
  `wp` | inspect_string | Syntax-highlight a Ruby return value | [wirb](https://github.com/janlelis/wirb#kernelwp)
110
258
 
111
- #### IRB Support
112
-
113
- Method / Constant | Arguments | Description | Provided By
114
- ------ | ---------- | -----------|-
115
- `clear` | | Clear the terminal | [every_day_irb](https://github.com/janlelis/every_day_irb)
116
- `copy_input` | | Copy session history to the clipboard | [clipboard](https://github.com/janlelis/clipboard), irbtools
117
- `copy_output` | | Copy session output history to the clipboard | [clipboard](https://github.com/janlelis/clipboard), irbtools
118
- `reset!` | | Restart the current IRB session | [every_day_irb](https://github.com/janlelis/every_day_irb)
119
- `session_history` | number_of_lines = nil | Return a string of all commands issued in the current session | [every_day_irb](https://github.com/janlelis/every_day_irb)
120
-
121
259
  #### Files and Navigation
122
260
 
123
261
  Method / Constant | Arguments | Description | Provided By
@@ -130,7 +268,7 @@ Method / Constant | Arguments | Description | Provided By
130
268
  `chown_R` | user, group, path | Set file owner for directory | [fileutils](https://ruby-doc.org/stdlib/libdoc/fileutils/rdoc/FileUtils.html)
131
269
  `cp` | source, destination | Copy file | [fileutils](https://ruby-doc.org/stdlib/libdoc/fileutils/rdoc/FileUtils.html)
132
270
  `cp_r` | source, destination | Copy directory | [fileutils](https://ruby-doc.org/stdlib/libdoc/fileutils/rdoc/FileUtils.html)
133
- `ls` | path = "." | List directory content | [fileutils](https://ruby-doc.org/stdlib/libdoc/fileutils/rdoc/FileUtils.html)
271
+ `ls` | path = "." | List directory content | [cd](https://github.com/janlelis/cd)
134
272
  `ln` | target, link | Create symlink (`ln`) | [fileutils](https://ruby-doc.org/stdlib/libdoc/fileutils/rdoc/FileUtils.html)
135
273
  `ln_s` | target, link | Create symlink (`ln -s`) | [fileutils](https://ruby-doc.org/stdlib/libdoc/fileutils/rdoc/FileUtils.html)
136
274
  `ln_sf` | target, link | Create symlink (`ln -sf`) | [fileutils](https://ruby-doc.org/stdlib/libdoc/fileutils/rdoc/FileUtils.html)
@@ -175,12 +313,7 @@ You can use **Irbtools** without colors/IRB extensions. To do so, put this into
175
313
  require 'irbtools/non_fancy'
176
314
  Irbtools.start
177
315
  ```
178
-
179
- ### Hint: Web Console and Other Approaches
180
-
181
- **Irbtools** works well together with the amazing [web-console!](https://github.com/rails/web-console), and also with the [ripl](https://github.com/cldwalker/ripl) IRB alternative.
182
-
183
316
  ## J-_-L
184
317
 
185
- Copyright (c) 2010-2020 Jan Lelis <https://janlelis.com> released under the MIT
318
+ Copyright (c) 2010-2022 Jan Lelis <https://janlelis.com> released under the MIT
186
319
  license.
data/irbtools.gemspec CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |s|
5
5
  s.name = 'irbtools'
6
6
  s.version = Irbtools::VERSION
7
7
 
8
- s.homepage = 'https://irb.tools'
8
+ s.homepage = 'https://github.com/janlelis/irbtools'
9
9
  s.authors = ["Jan Lelis"]
10
10
  s.email = ["hi@ruby.consulting"]
11
11
  s.summary = 'Irbtools happy IRB.'
@@ -20,6 +20,12 @@ Gem::Specification.new do |s|
20
20
  lib/irbtools/hirb.rb
21
21
  lib/irbtools/minimal.rb
22
22
  lib/irbtools/binding.rb
23
+ lib/irbtools/commands.rb
24
+ lib/irbtools/commands/code.rb
25
+ lib/irbtools/commands/howtocall.rb
26
+ lib/irbtools/commands/look.rb
27
+ lib/irbtools/commands/shadow.rb
28
+ lib/irbtools/commands/sys.rb
23
29
  Rakefile
24
30
  irbtools.gemspec
25
31
  ]
@@ -29,35 +35,35 @@ Gem::Specification.new do |s|
29
35
  CHANGELOG.md
30
36
  MIT-LICENSE.txt
31
37
  ]
38
+ s.metadata = { "rubygems_mfa_required" => "true" }
32
39
  s.license = 'MIT'
33
40
 
34
- s.required_ruby_version = '>= 2.0', '< 4.0'
41
+ s.required_ruby_version = '>= 3.0', '< 4.0'
35
42
 
36
43
  # # #
37
44
  # Dependencies
38
45
 
39
46
  # Core Functionality
40
- s.add_dependency %q<irb>, ">= 0.9.6"
41
- s.add_dependency %q<every_day_irb>, "~> 2.0"
47
+ s.add_dependency %q<irb>, "~> 1.6.2"
48
+ s.add_dependency %q<every_day_irb>, "~> 2.2"
42
49
  s.add_dependency %q<fancy_irb>, "~> 1.2", ">= 1.2.1"
43
50
  s.add_dependency %q<wirb>, "~> 2.0", ">= 2.2.1"
44
51
  s.add_dependency %q<hirb>, "~> 0.7", ">= 0.7.3"
45
- s.add_dependency %q<binding.repl>, "~> 3.0"
46
52
 
47
53
  # Utils
48
54
  s.add_dependency %q<paint>, ">= 0.9", "< 3.0"
49
55
  s.add_dependency %q<clipboard>, "~> 1.3"
50
56
  s.add_dependency %q<interactive_editor>, "~> 0.0", ">= 0.0.10"
51
57
  s.add_dependency %q<coderay>, "~> 1.1"
52
- s.add_dependency %q<debugging>, "~> 1.1"
58
+ s.add_dependency %q<debugging>, "~> 2.1"
53
59
 
54
60
  # Introspection / Docs
61
+ s.add_dependency %q<looksee>, "~> 5.0"
55
62
  s.add_dependency %q<object_shadow>, "~> 1.1"
56
- s.add_dependency %q<code>, ">= 0.9.2", "< 2.0"
57
- s.add_dependency %q<ori>, "~> 0.1.0"
58
- s.add_dependency %q<methodfinder>, "~> 2.2"
63
+ s.add_dependency %q<code>, ">= 0.9.4", "< 2.0"
64
+ s.add_dependency %q<core_docs>, "~> 0.9.9"
65
+ s.add_dependency %q<methodfinder>, "~> 2.2", ">= 2.2.5"
59
66
  s.add_dependency %q<ruby_version>, "~> 1.0"
60
67
  s.add_dependency %q<ruby_engine>, "~> 1.0"
61
- s.add_dependency %q<ruby_info>, "~> 1.0"
62
- s.add_dependency %q<os>
68
+ s.add_dependency %q<os>, "~> 1.1", ">= 1.1.4"
63
69
  end
@@ -3,27 +3,10 @@ begin
3
3
  rescue LoadError
4
4
  end
5
5
 
6
- if RUBY_VERSION >= "2.5.0"
7
- if defined? BindingOfCaller
8
- module Kernel
9
- private def irb
10
- binding.of_caller(1).irb
11
- end
12
- end
13
- end
14
- else
15
- require 'binding.repl'
16
- BindingRepl.auto = %w[irb ripl ir rib pry]
17
-
18
- class Binding
19
- alias irb repl!
20
- end
21
-
22
- if defined? BindingOfCaller
23
- require 'debugging/repl'
24
-
25
- module Debugging
26
- alias irb repl
6
+ if defined? BindingOfCaller
7
+ module Kernel
8
+ private def irb
9
+ binding.of_caller(1).irb
27
10
  end
28
11
  end
29
12
  end
@@ -0,0 +1,35 @@
1
+ require "irb/cmd/nop"
2
+
3
+ module IRB
4
+ module ExtendCommand
5
+ class Code < Nop
6
+ category "Introspection"
7
+ description "Shows the syntax-highlighted source code of a method"
8
+
9
+ class << self
10
+ def transform_args(args)
11
+ if args.strip =~ /\A(?:([\w:]+)([#.]))?(\w+)\z/
12
+ if $1
13
+ if $2 == "#"
14
+ "#{$1}, #{$1}.instance_method(:#{$3})"
15
+ else
16
+ "#{$1}, :#{$3}"
17
+ end
18
+ else
19
+ ":" + $3
20
+ end
21
+ else
22
+ args
23
+ end
24
+ end
25
+ end
26
+
27
+ def execute(*args)
28
+ @irb_context.workspace.binding.send(:code, *args)
29
+ rescue NameError
30
+ warn "code: Class or method not found."
31
+ end
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,35 @@
1
+ require "irb/cmd/nop"
2
+
3
+ module IRB
4
+ module ExtendCommand
5
+ class Howtocall < Nop
6
+ category "Introspection"
7
+ description "Displays method signatures based on Method#parameters"
8
+
9
+ class << self
10
+ def transform_args(args)
11
+ if args.strip =~ /\A(?:([\w:]+)([#.]))?(\w+)\z/
12
+ if $1
13
+ if $2 == "#"
14
+ "#{$1}, #{$1}.instance_method(:#{$3})"
15
+ else
16
+ "#{$1}, :#{$3}"
17
+ end
18
+ else
19
+ ":" + $3
20
+ end
21
+ else
22
+ args
23
+ end
24
+ end
25
+ end
26
+
27
+ def execute(*args)
28
+ @irb_context.workspace.binding.send(:howtocall, *args)
29
+ rescue NameError
30
+ warn "howtocall: Class or method not found"
31
+ end
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,20 @@
1
+ require "irb/cmd/nop"
2
+
3
+ module IRB
4
+ module ExtendCommand
5
+ class Look < Nop
6
+ category "Introspection"
7
+ description 'Method list and lookup path inspection based on looksee gem'
8
+
9
+ def execute(*args)
10
+ if args.empty?
11
+ @irb_context.workspace.binding.look
12
+ else
13
+ obj, *params = *args
14
+ obj.look(*params)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,20 @@
1
+ require "irb/cmd/nop"
2
+
3
+ module IRB
4
+ module ExtendCommand
5
+ class Shadow < Nop
6
+ category "Introspection"
7
+ description 'Method list and lookup path inspection based on object shadow gem'
8
+
9
+ def execute(*args)
10
+ if args.empty?
11
+ @irb_context.workspace.binding.shadow
12
+ else
13
+ obj, *params = *args
14
+ obj.shadow(*params)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,25 @@
1
+ require "irb/cmd/nop"
2
+
3
+ module IRB
4
+ module ExtendCommand
5
+ class Sys < Nop
6
+ category "Misc"
7
+ description 'Run a system command'
8
+
9
+ class << self
10
+ def transform_args(args)
11
+ if args.empty? || string_literal?(args)
12
+ args
13
+ else
14
+ args.strip.dump
15
+ end
16
+ end
17
+ end
18
+
19
+ def execute(*args)
20
+ system(*args)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,5 @@
1
+ require_relative "commands/code"
2
+ require_relative "commands/howtocall"
3
+ require_relative "commands/look"
4
+ require_relative "commands/shadow"
5
+ require_relative "commands/sys"
@@ -1,4 +1,5 @@
1
1
  require_relative 'version'
2
2
 
3
3
  require_relative 'implementation'
4
+ require_relative "commands"
4
5
  require_relative 'libraries' unless Irbtools.minimal
@@ -1,7 +1,6 @@
1
1
  module Irbtools
2
2
  @libraries = { :start => [], :sub_session => [], :autoload => [], :thread => {}, :late => [], :late_thread => {} }
3
3
  @lib_hooks = Hash.new{|h,k| h[k] = [] }
4
- @packages = []
5
4
  @shell_name = File.split($0)[-1].upcase
6
5
  @welcome_message = "Welcome to #{ @shell_name }. You are using #{ RUBY_DESCRIPTION }. Have fun ;)"
7
6
  @minimal ||= false
@@ -20,9 +19,6 @@ module Irbtools
20
19
  # keys determine if lib is required, required on sub-session or autoloaded
21
20
  attr_accessor :libraries
22
21
 
23
- # an array of extension packages that get loaded (e.g. irbtools-more)
24
- attr_accessor :packages
25
-
26
22
  # add a library. the block gets executed, when the library was loaded.
27
23
  # if the second param is true, it's hooked in into IRB.conf[:IRB_RC] instead of the start.
28
24
  def add_library(lib, options = {}, &block)
@@ -83,23 +79,6 @@ module Irbtools
83
79
  @lib_hooks.delete lib
84
80
  end
85
81
 
86
- # add extensions packages
87
- def add_package(pkg)
88
- @packages << pkg.to_s
89
- end
90
-
91
- # remove extension package
92
- def remove_package(pkg)
93
- @packages.delete pkg.to_s
94
- end
95
-
96
- # actually require registered packages
97
- def load_packages
98
- @packages.each{ |pkg|
99
- require "irbtools/#{pkg}"
100
- }
101
- end
102
-
103
82
  # te be triggered when a library has loaded
104
83
  def library_loaded(lib)
105
84
  @lib_hooks[lib.to_s].each{ |hook| hook.call }
@@ -122,30 +101,62 @@ module Irbtools
122
101
  $VERBOSE, $DEBUG = remember_verbose_and_debug
123
102
  end
124
103
 
125
- # configure irb
126
104
  def configure_irb!
127
105
  if defined?(IRB)
128
106
  IRB.conf[:AUTO_INDENT] = true # simple auto indent
129
107
  IRB.conf[:EVAL_HISTORY] = 42424242424242424242 # creates the special __ variable
130
108
  IRB.conf[:SAVE_HISTORY] = 2000 # how many lines will go to ~/.irb_history
131
-
132
- # prompt
133
- (IRB.conf[:PROMPT] ||= {} ).merge!( {:IRBTOOLS => {
134
- :PROMPT_I => ">> ", # normal
135
- :PROMPT_N => "| ", # indenting
136
- :PROMPT_C => " > ", # continuing a statement
137
- :PROMPT_S => "%l> ", # continuing a string
138
- :RETURN => "=> %s \n",
139
- :AUTO_INDENT => true,
140
- }})
141
-
142
- IRB.conf[:PROMPT_MODE] = :IRBTOOLS
109
+ set_propmt
110
+ load_commands
111
+ add_command_aliases
112
+ rename_ls_to_ils
143
113
  end
144
114
  end
145
115
 
146
- # check if we are in a RIPL session
147
- def ripl?
148
- defined?(Ripl) && Ripl.started?
116
+ def set_propmt
117
+ (IRB.conf[:PROMPT] ||= {} ).merge!( {:IRBTOOLS => {
118
+ :PROMPT_I => ">> ", # normal
119
+ :PROMPT_N => "| ", # indenting
120
+ :PROMPT_C => " > ", # continuing a statement
121
+ :PROMPT_S => "%l> ", # continuing a string
122
+ :RETURN => "=> %s \n",
123
+ :AUTO_INDENT => true,
124
+ }})
125
+
126
+ IRB.conf[:PROMPT_MODE] = :IRBTOOLS
127
+ end
128
+
129
+ def load_commands
130
+ ec = IRB::ExtendCommandBundle.instance_variable_get(:@EXTEND_COMMANDS)
131
+
132
+ [
133
+ [:code, :Code, nil, [:code, IRB::ExtendCommandBundle::OVERRIDE_ALL]],
134
+ [:howtocall, :Howtocall, nil, [:howtocall, IRB::ExtendCommandBundle::OVERRIDE_ALL]],
135
+ [:look, :Look, nil, [:look, IRB::ExtendCommandBundle::OVERRIDE_ALL]],
136
+ [:shadow, :Shadow, nil, [:shadow, IRB::ExtendCommandBundle::OVERRIDE_ALL]],
137
+ [:sys, :Sys, nil, [:sys, IRB::ExtendCommandBundle::OVERRIDE_ALL]],
138
+ ].each{ |ecconfig|
139
+ ec.push(ecconfig)
140
+ IRB::ExtendCommandBundle.def_extend_command(*ecconfig)
141
+ }
142
+ end
143
+
144
+ def add_command_aliases
145
+ IRB.conf[:COMMAND_ALIASES] = (IRB.conf[:COMMAND_ALIASES] || {}).merge({
146
+ :ri => :show_doc,
147
+ :co => :chws,
148
+ :'$' => :sys,
149
+ :'+' => :shadow,
150
+ })
151
+ end
152
+
153
+ # prevent clash between IRB's ls and FileUtil's ls
154
+ def rename_ls_to_ils
155
+ if aliases = IRB::ExtendCommandBundle.instance_variable_get(:@ALIASES)
156
+ if irb_ls = aliases.find{|a,*| a == :ls}
157
+ irb_ls[0] = :ils
158
+ end
159
+ end
149
160
  end
150
161
 
151
162
  # loads all the stuff
@@ -21,14 +21,11 @@ Irbtools.add_library 'wirb/wp', thread: :paint do
21
21
  Wirb.start
22
22
  end
23
23
 
24
- unless Irbtools.ripl?
25
- Irbtools.add_library :fancy_irb, thread: :paint do
26
- FancyIrb.start
27
- end
24
+ Irbtools.add_library :fancy_irb, thread: :paint do
25
+ FancyIrb.start
28
26
  end
29
27
 
30
28
  Irbtools.add_library 'debugging/q', thread: :paint
31
- Irbtools.add_library 'debugging/mof', thread: :paint
32
29
  Irbtools.add_library 'debugging/re', thread: :paint
33
30
  Irbtools.add_library 'debugging/beep', thread: :paint
34
31
  Irbtools.add_library 'debugging/howtocall', thread: :paint
@@ -39,41 +36,23 @@ Irbtools.add_library 'object_shadow', thread: :paint do
39
36
  ObjectShadow.include(ObjectShadow::DeepInspect)
40
37
  end
41
38
 
42
- Irbtools.add_library 'readline', thread: :ori
43
- Irbtools.add_library 'ori', thread: :ori do
44
- # TODO Readline history can be empty (issue)
45
- module ORI::Internals
46
- def self.get_ri_arg_prefix(cmd)
47
- if cmd && (mat = cmd.match /\A(\s*.+?\.ri)\s+\S/)
48
- mat[1]
49
- end
50
- end
51
- end
39
+ Irbtools.add_library 'readline', thread: :readline
40
+ Irbtools.add_library 'os', thread: :os
41
+ Irbtools.add_library 'ruby_engine', thread: :re
42
+ Irbtools.add_library 'ruby_version', thread: :rv
52
43
 
53
- class Object
54
- # patch ori to also allow shell-like "Array#slice" syntax
55
- def ri(*args)
56
- if args[0] &&
57
- self == TOPLEVEL_BINDING.eval('self') &&
58
- args[0] =~ /\A(.*)(?:#|\.)(.*)\Z/
59
- begin
60
- klass = Object.const_get $1
61
- klass.ri $2
62
- rescue
63
- super
64
- end
65
- else
66
- super
67
- end
44
+ begin
45
+ # Object#l method for inspecting its lookup path
46
+ Irbtools.add_library 'looksee', thread: :ls do
47
+ Looksee.rename :lp
48
+ class Object
49
+ alias look lp
68
50
  end
69
51
  end
52
+ rescue LoadError
53
+ # do not load if not supported
70
54
  end
71
55
 
72
- Irbtools.add_library 'ruby_info', thread: :ri
73
- Irbtools.add_library 'os', thread: :os
74
- Irbtools.add_library 'ruby_engine', thread: :re
75
- Irbtools.add_library 'ruby_version', thread: :rv
76
-
77
56
  # # # load via autoload
78
57
 
79
58
  Irbtools.add_library 'code', :autoload => :Code do
@@ -105,12 +84,6 @@ Irbtools.add_library :clipboard, :autoload => :Clipboard do
105
84
  Clipboard.paste
106
85
  end
107
86
 
108
- # copies everything you have entered in this irb session
109
- def copy_input
110
- copy session_history
111
- "The session input history has been copied to the clipboard."
112
- end
113
-
114
87
  # copies the output of all irb commands in this irb session
115
88
  def copy_output
116
89
  copy context.instance_variable_get(:@eval_history_values).inspect.gsub(/^\d+ (.*)/, '\1')
@@ -119,7 +92,7 @@ Irbtools.add_library :clipboard, :autoload => :Clipboard do
119
92
  end
120
93
 
121
94
  Irbtools.add_library :methodfinder, autoload: :MethodFinder do
122
- MethodFinder::INSTANCE_METHOD_BLACKLIST[:Object] += [:ri, :vi, :vim, :emacs, :nano, :mate, :mvim, :ed]
95
+ MethodFinder::INSTANCE_METHOD_IGNORELIST[:Object] += [:ri, :vi, :vim, :emacs, :nano, :mate, :mvim, :ed]
123
96
 
124
97
  def mf(*args, &block)
125
98
  args.empty? ? MethodFinder : MethodFinder.find(*args, &block)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Irbtools
4
- VERSION = "3.0.4"
4
+ VERSION = "4.0.0"
5
5
  end
data/lib/irbtools.rb CHANGED
@@ -1,13 +1,5 @@
1
1
  require_relative 'irbtools/configure'
2
-
3
- # # # # #
4
- # Make sure we load IRB if we are not in RIPL
5
-
6
- require 'irb' unless Irbtools.ripl?
7
-
8
- # # # # #
9
- # Load irbtools extension packages
10
- Irbtools.load_packages
2
+ require 'irb'
11
3
 
12
4
  # # # # #
13
5
  # Load: start
@@ -27,19 +19,11 @@ Irbtools.configure_irb!
27
19
 
28
20
  # # # # #
29
21
  # Load: sub-session / after_rc
30
- if Irbtools.ripl?
31
- if defined? Ripl::AfterRc
32
- Irbtools.libraries[:sub_session].each{ |r| Ripl.after_rcs << r }
33
- elsif !Irbtools.libraries[:sub_session].empty?
34
- warn "Couldn't load libraries in Irbtools.libraries[:sub_session]. Please install ripl-after_rc to use this feature in Ripl!"
35
- end
36
- else
37
- original_irbrc_proc = IRB.conf[:IRB_RC]
38
- IRB.conf[:IRB_RC] = proc{
39
- Irbtools.load_libraries(Irbtools.libraries[:sub_session])
40
- original_irbrc_proc.call if original_irbrc_proc
41
- }
42
- end
22
+ original_irbrc_proc = IRB.conf[:IRB_RC]
23
+ IRB.conf[:IRB_RC] = proc{
24
+ Irbtools.load_libraries(Irbtools.libraries[:sub_session])
25
+ original_irbrc_proc.call if original_irbrc_proc
26
+ }
43
27
 
44
28
  # # # # #
45
29
  # Load: threads
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: irbtools
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Lelis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-24 00:00:00.000000000 Z
11
+ date: 2022-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: irb
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.6
19
+ version: 1.6.2
20
20
  type: :runtime
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: 0.9.6
26
+ version: 1.6.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: every_day_irb
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.0'
33
+ version: '2.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.0'
40
+ version: '2.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: fancy_irb
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -98,20 +98,6 @@ dependencies:
98
98
  - - ">="
99
99
  - !ruby/object:Gem::Version
100
100
  version: 0.7.3
101
- - !ruby/object:Gem::Dependency
102
- name: binding.repl
103
- requirement: !ruby/object:Gem::Requirement
104
- requirements:
105
- - - "~>"
106
- - !ruby/object:Gem::Version
107
- version: '3.0'
108
- type: :runtime
109
- prerelease: false
110
- version_requirements: !ruby/object:Gem::Requirement
111
- requirements:
112
- - - "~>"
113
- - !ruby/object:Gem::Version
114
- version: '3.0'
115
101
  - !ruby/object:Gem::Dependency
116
102
  name: paint
117
103
  requirement: !ruby/object:Gem::Requirement
@@ -186,14 +172,28 @@ dependencies:
186
172
  requirements:
187
173
  - - "~>"
188
174
  - !ruby/object:Gem::Version
189
- version: '1.1'
175
+ version: '2.1'
190
176
  type: :runtime
191
177
  prerelease: false
192
178
  version_requirements: !ruby/object:Gem::Requirement
193
179
  requirements:
194
180
  - - "~>"
195
181
  - !ruby/object:Gem::Version
196
- version: '1.1'
182
+ version: '2.1'
183
+ - !ruby/object:Gem::Dependency
184
+ name: looksee
185
+ requirement: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '5.0'
190
+ type: :runtime
191
+ prerelease: false
192
+ version_requirements: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - "~>"
195
+ - !ruby/object:Gem::Version
196
+ version: '5.0'
197
197
  - !ruby/object:Gem::Dependency
198
198
  name: object_shadow
199
199
  requirement: !ruby/object:Gem::Requirement
@@ -214,7 +214,7 @@ dependencies:
214
214
  requirements:
215
215
  - - ">="
216
216
  - !ruby/object:Gem::Version
217
- version: 0.9.2
217
+ version: 0.9.4
218
218
  - - "<"
219
219
  - !ruby/object:Gem::Version
220
220
  version: '2.0'
@@ -224,24 +224,24 @@ dependencies:
224
224
  requirements:
225
225
  - - ">="
226
226
  - !ruby/object:Gem::Version
227
- version: 0.9.2
227
+ version: 0.9.4
228
228
  - - "<"
229
229
  - !ruby/object:Gem::Version
230
230
  version: '2.0'
231
231
  - !ruby/object:Gem::Dependency
232
- name: ori
232
+ name: core_docs
233
233
  requirement: !ruby/object:Gem::Requirement
234
234
  requirements:
235
235
  - - "~>"
236
236
  - !ruby/object:Gem::Version
237
- version: 0.1.0
237
+ version: 0.9.9
238
238
  type: :runtime
239
239
  prerelease: false
240
240
  version_requirements: !ruby/object:Gem::Requirement
241
241
  requirements:
242
242
  - - "~>"
243
243
  - !ruby/object:Gem::Version
244
- version: 0.1.0
244
+ version: 0.9.9
245
245
  - !ruby/object:Gem::Dependency
246
246
  name: methodfinder
247
247
  requirement: !ruby/object:Gem::Requirement
@@ -249,6 +249,9 @@ dependencies:
249
249
  - - "~>"
250
250
  - !ruby/object:Gem::Version
251
251
  version: '2.2'
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: 2.2.5
252
255
  type: :runtime
253
256
  prerelease: false
254
257
  version_requirements: !ruby/object:Gem::Requirement
@@ -256,6 +259,9 @@ dependencies:
256
259
  - - "~>"
257
260
  - !ruby/object:Gem::Version
258
261
  version: '2.2'
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: 2.2.5
259
265
  - !ruby/object:Gem::Dependency
260
266
  name: ruby_version
261
267
  requirement: !ruby/object:Gem::Requirement
@@ -285,33 +291,25 @@ dependencies:
285
291
  - !ruby/object:Gem::Version
286
292
  version: '1.0'
287
293
  - !ruby/object:Gem::Dependency
288
- name: ruby_info
294
+ name: os
289
295
  requirement: !ruby/object:Gem::Requirement
290
296
  requirements:
291
297
  - - "~>"
292
298
  - !ruby/object:Gem::Version
293
- version: '1.0'
294
- type: :runtime
295
- prerelease: false
296
- version_requirements: !ruby/object:Gem::Requirement
297
- requirements:
298
- - - "~>"
299
- - !ruby/object:Gem::Version
300
- version: '1.0'
301
- - !ruby/object:Gem::Dependency
302
- name: os
303
- requirement: !ruby/object:Gem::Requirement
304
- requirements:
299
+ version: '1.1'
305
300
  - - ">="
306
301
  - !ruby/object:Gem::Version
307
- version: '0'
302
+ version: 1.1.4
308
303
  type: :runtime
309
304
  prerelease: false
310
305
  version_requirements: !ruby/object:Gem::Requirement
311
306
  requirements:
307
+ - - "~>"
308
+ - !ruby/object:Gem::Version
309
+ version: '1.1'
312
310
  - - ">="
313
311
  - !ruby/object:Gem::Version
314
- version: '0'
312
+ version: 1.1.4
315
313
  description: The Irbtools make working with Ruby's IRB console more fun & productive.
316
314
  email:
317
315
  - hi@ruby.consulting
@@ -331,6 +329,12 @@ files:
331
329
  - irbtools.gemspec
332
330
  - lib/irbtools.rb
333
331
  - lib/irbtools/binding.rb
332
+ - lib/irbtools/commands.rb
333
+ - lib/irbtools/commands/code.rb
334
+ - lib/irbtools/commands/howtocall.rb
335
+ - lib/irbtools/commands/look.rb
336
+ - lib/irbtools/commands/shadow.rb
337
+ - lib/irbtools/commands/sys.rb
334
338
  - lib/irbtools/configure.rb
335
339
  - lib/irbtools/hirb.rb
336
340
  - lib/irbtools/implementation.rb
@@ -338,10 +342,11 @@ files:
338
342
  - lib/irbtools/minimal.rb
339
343
  - lib/irbtools/non_fancy.rb
340
344
  - lib/irbtools/version.rb
341
- homepage: https://irb.tools
345
+ homepage: https://github.com/janlelis/irbtools
342
346
  licenses:
343
347
  - MIT
344
- metadata: {}
348
+ metadata:
349
+ rubygems_mfa_required: 'true'
345
350
  post_install_message:
346
351
  rdoc_options: []
347
352
  require_paths:
@@ -350,7 +355,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
350
355
  requirements:
351
356
  - - ">="
352
357
  - !ruby/object:Gem::Version
353
- version: '2.0'
358
+ version: '3.0'
354
359
  - - "<"
355
360
  - !ruby/object:Gem::Version
356
361
  version: '4.0'
@@ -360,7 +365,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
360
365
  - !ruby/object:Gem::Version
361
366
  version: '0'
362
367
  requirements: []
363
- rubygems_version: 3.1.2
368
+ rubygems_version: 3.4.1
364
369
  signing_key:
365
370
  specification_version: 4
366
371
  summary: Irbtools happy IRB.