utils 0.82.0 → 0.83.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: 3e7a6c6bc8c38c84587412e072fa0ddee7e9e854a61eb50b4caded051d1388b7
4
- data.tar.gz: b6e695b2b379c591a0a402cf638e062d8ae84f516684bb72e8a7a6e4e71e3c66
3
+ metadata.gz: feae6a2fca0157be211250ec430f5f21a1c155653ace2c13b40ac20b281eca09
4
+ data.tar.gz: 9a5e7c3a34a1ead5023dde6b152d6d94a2f596a75405615fe109a931807a8b29
5
5
  SHA512:
6
- metadata.gz: e3ac01c79b99a587b32f633dc5ec7d7df26688bdbf5ce24886a8c62f2dd8d13b2db518eeaed4912340b432fcbeee02ffac547ade62d3b7e44e846d3e3c79e089
7
- data.tar.gz: 8e39fda010cb4a33cfbc00e390ddf750ffa57d4e39396eed007b489b04a67c1d8be8d3f0ef73930e9f9e9ba4bf714ed27fcea1c9cf3caecb6cc749afb856352c
6
+ metadata.gz: 2038fbdb9eb1822f8b095fba1620f90ddfdd71220496fd8c25a8b4a51d50c535a77fde0f6b4433bd0eca2101753cd54c4dc266644f7235736333b8f1e6f43201
7
+ data.tar.gz: 9cdff942de8097052d296f06bdc8e5f7a75572a8ccd2c63831a37248a6b9d1f0f99f0d92c400b1888e3007eb40816c2b1ee2e0a37ea0852b6e10de3bd1d16b28
data/bin/irb_client ADDED
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'utils/irb'
4
+ include Utils::IRB
5
+
6
+ def usage
7
+ <<~EOT
8
+ Usage: #{File.basename($0)} ACTION
9
+
10
+ Actions:
11
+ store_snippet Store code snippet from STDIN as current snippet
12
+ retrieve_current_snippet Show the currently stored snippet
13
+ eval_current_snippet Evaluate the currently stored snippet
14
+ execute_current_snippet Execute the currently stored snippet (no output)
15
+ execute_snippet Execute code snippet from STDIN (no output)
16
+ eval_snippet Evaluate code snippet from STDIN and print result
17
+ eval_lines Evaluate code lines from STDIND and print comment results
18
+ stop_server Stop the IRB server
19
+
20
+ Examples:
21
+ # Evaluate code and get result
22
+ echo '2 + 2' | #{File.basename($0)} eval_snippet
23
+ # => 4
24
+
25
+ # Execute code (no output)
26
+ echo 'puts "hello"' | #{File.basename($0)} execute_snippet
27
+
28
+ # Store code snippet
29
+ echo 'def hello; "world"; end' | #{File.basename($0)} store_snippet
30
+
31
+ # Work with stored snippets
32
+ echo 'def hello; "world"; end' | #{File.basename($0)} store_snippet
33
+ #{File.basename($0)} retrieve_current_snippet
34
+ # => def hello; "world"; end
35
+ #{File.basename($0)} eval_current_snippet
36
+ # => "world"
37
+
38
+ # Stop server
39
+ #{File.basename($0)} stop_server
40
+ EOT
41
+ end
42
+
43
+ case action = ARGV.shift || 'usage'
44
+ when 'store_snippet'
45
+ irb_client.send(action, STDIN.read)
46
+ when 'retrieve_current_snippet'
47
+ puts irb_client.send('eval_snippet', '@snippet')
48
+ when 'eval_current_snippet'
49
+ puts irb_client.send('eval_snippet', 'eval(@snippet)')
50
+ when 'execute_current_snippet'
51
+ puts irb_client.send('execute_snippet', 'eval(@snippet)')
52
+ when 'execute_snippet'
53
+ irb_client.send(action, STDIN.read)
54
+ when 'eval_snippet'
55
+ puts irb_client.send(action, STDIN.read)
56
+ when 'eval_lines'
57
+ prefix = ARGV.shift || ' # => '
58
+ lines = STDIN.readlines
59
+ if lines.empty?
60
+ abort "No input provided"
61
+ else
62
+ puts irb_client.send('eval_lines', lines, prefix)
63
+ end
64
+ when 'stop_server'
65
+ irb_client.send(action)
66
+ else
67
+ abort usage
68
+ end
@@ -288,6 +288,17 @@ class Utils::ConfigFile
288
288
  @probe ||= Probe.new
289
289
  end
290
290
 
291
+ # The irb_server_url method configures the URL for the IRB server
292
+ # communication.
293
+ #
294
+ # This method sets up a DSL accessor for the IRB server URL, providing a
295
+ # default value that uses a Unix domain socket located in the current working
296
+ # directory.
297
+ #
298
+ # @return [ String ] the configured IRB server URL including the default
299
+ # socket path
300
+ dsl_accessor :irb_server_url, "unix://#{Pathname.pwd + 'irb.socket'}"
301
+
291
302
  # A configuration class for file system operations.
292
303
  #
293
304
  # This class manages the configuration settings for searching and discovering
@@ -0,0 +1,219 @@
1
+ require 'logger'
2
+ require 'fileutils'
3
+
4
+ # A class that provides server functionality for interactive Ruby (IRB)
5
+ # sessions.
6
+ #
7
+ # This class manages an IRB server instance that can receive and process code
8
+ # snippets for evaluation. It handles communication through Unix domain
9
+ # sockets, allowing external clients to send code for execution and receive the
10
+ # results back.
11
+ #
12
+ # @example
13
+ # server = Utils::IRB::IRBServer.new(url: 'unix:///tmp/irb.sock')
14
+ # server.start
15
+ # #
16
+ # client = Utils::IRB::IRBServer.new(url: 'unix:///tmp/irb.sock')
17
+ # client.store_snippet('puts "Hello World"')
18
+ # result = server.eval_snippet('2 + 2')
19
+ class Utils::IRB::IRBServer
20
+ # The initialize method sets up a new IRBServer instance with the specified
21
+ # URL.
22
+ #
23
+ # This method configures the IRB server by initializing a logger for error
24
+ # reporting and storing the provided URL for server communication.
25
+ #
26
+ # @param url [ String ] the URL to be used for the IRB server communication
27
+ def initialize(url:, log_out: nil)
28
+ @url = url
29
+ @log_out = log_out
30
+ end
31
+
32
+ # The url reader method provides access to the URL instance variable.
33
+ #
34
+ # @return [ String ] the URL value stored in the instance variable
35
+ attr_reader :url
36
+
37
+ # The snippet reader method provides access to the snippet instance variable.
38
+ #
39
+ # @return [ Object ] the snippet value stored in the instance variable
40
+ attr_reader :snippet
41
+
42
+ # The start method initializes and begins operation of the IRB server.
43
+ #
44
+ # This method sets up the server by building the underlying socket connection,
45
+ # logging the start event, and configuring a background receiver to handle
46
+ # incoming messages. It processes different message actions such as storing
47
+ # code snippets or evaluating code, and responds appropriately to each
48
+ # message type.
49
+ #
50
+ # @return [ Utils::IRB::IRBServer ] returns self to allow for method chaining
51
+ def start
52
+ @server = build_server
53
+ @logger.info "Starting #{self.class.name} server on #{@url}."
54
+ @server.receive_in_background do |message|
55
+ case message.action
56
+ when 'store'
57
+ @snippet = message.snippet
58
+ @logger.info "Stored #{message.to_json}."
59
+ when 'execute'
60
+ time_eval { eval(message.snippet) }
61
+ @logger.info "Execution of #{message.to_json} took %.2fs" % @eval_duration
62
+ when 'eval'
63
+ result = time_eval { eval(message.snippet) }
64
+ @logger.info "Evaluation of #{message.to_json} took %.2fs" % @eval_duration
65
+ message.respond(result: result.to_s, type: message.action)
66
+ when 'eval_lines'
67
+ b = binding
68
+ result = message.lines.map do |line|
69
+ l = line.chomp
70
+ r = b.eval(l)
71
+ [ l, message.prefix, r ].join
72
+ end.join(?\n)
73
+ message.respond(result: result, type: message.action)
74
+ when 'stop'
75
+ @logger.info "Stopping #{self.class.name} server on #{@url}."
76
+ Thread.current.exit
77
+ else
78
+ @logger.warn("Message for action #{message.action.inspect} not supported.")
79
+ end
80
+ rescue => e
81
+ @logger.error("#{self.class.name} caught #{e.class}: #{e} for #{message.to_json}.")
82
+ end
83
+ self
84
+ end
85
+
86
+ # The store_snippet method transmits a code snippet to the client for storage.
87
+ #
88
+ # This method prepares a transmission request containing the specified code
89
+ # snippet and sends it to the client using the build_client mechanism. It is
90
+ # designed to facilitate the storage of code snippets within the system's
91
+ # communication protocol.
92
+ #
93
+ # @param code [ String ] the code snippet to be stored
94
+ #
95
+ # @return [ Utils::IRB::IRBServer ] returns self to allow for method chaining
96
+ def store_snippet(code)
97
+ build_client.transmit({ action: 'store', snippet: code })
98
+ self
99
+ end
100
+
101
+ # The execute_snippet method sends a code snippet to the IRB server for
102
+ # execution and waits for the response.
103
+ #
104
+ # This method transmits an execute command along with the provided code
105
+ # snippet to the IRB server, allowing the server to evaluate the code and
106
+ # return the result.
107
+ #
108
+ # @param code [ String ] the code snippet to be executed
109
+ #
110
+ # @return [ Utils::IRB::IRBServer ] returns self to allow for method chaining
111
+ def execute_snippet(code)
112
+ build_client.transmit({ action: 'execute', snippet: code })
113
+ self
114
+ end
115
+
116
+ # The eval_snippet method sends a code snippet to the IRB server for
117
+ # evaluation and returns the result.
118
+ #
119
+ # This method transmits the provided code snippet to the IRB server for
120
+ # execution, waits for the server's response, and extracts the evaluation
121
+ # result from the response.
122
+ #
123
+ # @param code [ String ] the code snippet to be evaluated
124
+ #
125
+ # @return [ String ] the result of the code snippet evaluation as a string
126
+ def eval_snippet(code)
127
+ message = build_client.transmit_with_response(
128
+ { action: 'eval', snippet: code }
129
+ )
130
+ message.result
131
+ end
132
+
133
+ # The eval_lines method sends a series of code lines to the IRB server for
134
+ # evaluation and returns the formatted results.
135
+ #
136
+ # This method transmits multiple lines of code to the IRB server for
137
+ # execution, with each line being evaluated in sequence. It includes a prefix
138
+ # for each result line and returns the combined output from the evaluation.
139
+ #
140
+ # @param lines [ Array<String> ] the array of code lines to be evaluated
141
+ # @param prefix [ String ] the prefix to be added to each result line, defaults to ' # => '
142
+ #
143
+ # @return [ String ] the formatted results from evaluating the code lines
144
+ def eval_lines(lines, prefix = ' # => ')
145
+ message = build_client.transmit_with_response(
146
+ { action: 'eval_lines', prefix:, lines: }
147
+ )
148
+ message.result
149
+ end
150
+
151
+ # The stop_server method sends a stop command to the IRB server.
152
+ #
153
+ # This method communicates with the IRB server to request a graceful shutdown
154
+ # of the server process by transmitting a stop action.
155
+ #
156
+ # @return [ nil ] always returns nil after sending the stop command
157
+ def stop_server
158
+ build_client.transmit({ action: 'stop' })
159
+ nil
160
+ end
161
+
162
+ private
163
+
164
+ # The setup_logger method configures the log output destination for the IRB
165
+ # server.
166
+ #
167
+ # This method determines whether a log output path has been provided, and if
168
+ # not, constructs a default log path using the XDG state home directory or a
169
+ # fallback to the user's local state directory. It ensures the log directory
170
+ # exists and creates a new log file for writing.
171
+ #
172
+ # @return [ String ] the path to the log file that will be used for logging
173
+ def setup_logger
174
+ unless @log_out
175
+ xdg_dir = File.expand_path(ENV.fetch('XDG_STATE_HOME', '~/.local/state'))
176
+ log_path = Pathname.new(xdg_dir) + 'utils'
177
+ FileUtils.mkdir_p log_path
178
+ log_path += 'irb-server.log'
179
+ @log_out = File.new(log_path, ?a)
180
+ end
181
+ @log_out.sync = true
182
+ @logger = Logger.new(@log_out)
183
+ end
184
+
185
+ # The build_server method creates and returns a Unix domain socket server
186
+ # instance based on the URL configuration
187
+ #
188
+ # This method initializes a socket server by delegating to the
189
+ # UnixSocks.from_url factory method, which constructs an appropriate server
190
+ # type (TCP or domain socket) based on the URL scheme and configuration
191
+ # parameters
192
+ #
193
+ # @return [ UnixSocks::TCPSocketServer, UnixSocks::DomainSocketServer ] a new
194
+ # socket server instance configured according to the URL specification
195
+ def build_server
196
+ setup_logger
197
+ UnixSocks.from_url(url)
198
+ end
199
+
200
+ alias build_client build_server
201
+
202
+ # The time_eval method measures the execution duration of a block.
203
+ #
204
+ # This method records the start time before yielding to the provided block,
205
+ # then calculates the elapsed time after the block completes, storing the
206
+ # duration in an instance variable for later access.
207
+ #
208
+ # @param block [ Proc ] the block of code to measure execution time for
209
+ #
210
+ # @return [ Object ] the result of the block execution
211
+ #
212
+ # @api private
213
+ def time_eval(&block)
214
+ s = Time.now
215
+ block.()
216
+ ensure
217
+ @eval_duration = Time.now - s
218
+ end
219
+ end
data/lib/utils/irb.rb CHANGED
@@ -704,6 +704,50 @@ module Utils
704
704
  nil
705
705
  end
706
706
 
707
+ # The irb_server method provides access to an IRB server instance for
708
+ # interactive Ruby sessions.
709
+ #
710
+ # This method ensures that a single IRB server instance is created and
711
+ # started for the current process, loading the configuration from
712
+ # standard paths and using the configured server URL.
713
+ #
714
+ # @return [ Utils::IRB::IRBServer ] the IRB server instance, initialized
715
+ # and started if not already running
716
+ def irb_server
717
+ unless @irb_server
718
+ config = Utils::ConfigFile.new.tap(&:configure_from_paths)
719
+ @irb_server = Utils::IRB::IRBServer.new(url: config.irb_server_url).start
720
+ end
721
+ @irb_server
722
+ end
723
+
724
+ # The irb_server_stop method sends a stop command to the IRB server
725
+ # client.
726
+ #
727
+ # This method accesses the IRB client instance and invokes the
728
+ # stop_server method on it, which gracefully shuts down the IRB server
729
+ # process.
730
+ #
731
+ # @return [ nil ] always returns nil after sending the stop command to
732
+ # the server
733
+ def irb_server_stop
734
+ irb_client.stop_server
735
+ end
736
+
737
+ # The irb_client method provides access to an IRB server client instance.
738
+ #
739
+ # This method creates and returns a new IRB server client by first
740
+ # loading the configuration from standard paths and then using the
741
+ # configured server URL
742
+ # to initialize the client.
743
+ #
744
+ # @return [ Utils::IRB::IRBServer ] a new IRB server client instance configured
745
+ # with the URL from the application's configuration
746
+ def irb_client
747
+ config = Utils::ConfigFile.new.tap(&:configure_from_paths)
748
+ Utils::IRB::IRBServer.new(url: config.irb_server_url)
749
+ end
750
+
707
751
  # The ed method opens files for editing using the system editor.
708
752
  #
709
753
  # This method provides a convenient way to edit files by invoking the
@@ -837,6 +881,8 @@ module Utils
837
881
  end
838
882
  end
839
883
 
884
+ require 'utils/irb/irb_server'
885
+
840
886
  Utils::IRB.configure
841
887
 
842
888
  class String
data/lib/utils/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Utils
2
2
  # Utils version
3
- VERSION = '0.82.0'
3
+ VERSION = '0.83.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/utils.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: utils 0.82.0 ruby lib
2
+ # stub: utils 0.83.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "utils".freeze
6
- s.version = "0.82.0".freeze
6
+ s.version = "0.83.0".freeze
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
@@ -11,9 +11,9 @@ Gem::Specification.new do |s|
11
11
  s.date = "1980-01-02"
12
12
  s.description = "This ruby gem provides some useful command line utilities".freeze
13
13
  s.email = "flori@ping.de".freeze
14
- s.executables = ["ascii7".freeze, "blameline".freeze, "changes".freeze, "classify".freeze, "code_comment".freeze, "code_indexer".freeze, "commit_message".freeze, "discover".freeze, "edit".freeze, "edit_wait".freeze, "enum".freeze, "git-empty".freeze, "git-versions".freeze, "json_check".freeze, "long_lines".freeze, "myex".freeze, "on_change".freeze, "path".freeze, "print_method".freeze, "probe".freeze, "rainbow".freeze, "rd2md".freeze, "search".freeze, "sedit".freeze, "serve".freeze, "ssh-tunnel".freeze, "strip_spaces".freeze, "sync_dir".freeze, "untest".freeze, "utils-utilsrc".freeze, "vcf2alias".freeze, "yaml_check".freeze]
15
- s.extra_rdoc_files = ["README.md".freeze, "lib/utils.rb".freeze, "lib/utils/config_dir.rb".freeze, "lib/utils/config_file.rb".freeze, "lib/utils/editor.rb".freeze, "lib/utils/finder.rb".freeze, "lib/utils/grepper.rb".freeze, "lib/utils/irb.rb".freeze, "lib/utils/line_blamer.rb".freeze, "lib/utils/line_formatter.rb".freeze, "lib/utils/md5.rb".freeze, "lib/utils/patterns.rb".freeze, "lib/utils/probe.rb".freeze, "lib/utils/probe/probe_client.rb".freeze, "lib/utils/probe/probe_server.rb".freeze, "lib/utils/probe/process_job.rb".freeze, "lib/utils/probe/server_handling.rb".freeze, "lib/utils/ssh_tunnel_specification.rb".freeze, "lib/utils/version.rb".freeze, "lib/utils/xt/source_location_extension.rb".freeze]
16
- s.files = ["Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "bin/ascii7".freeze, "bin/blameline".freeze, "bin/changes".freeze, "bin/classify".freeze, "bin/code_comment".freeze, "bin/code_indexer".freeze, "bin/commit_message".freeze, "bin/discover".freeze, "bin/edit".freeze, "bin/edit_wait".freeze, "bin/enum".freeze, "bin/git-empty".freeze, "bin/git-versions".freeze, "bin/json_check".freeze, "bin/long_lines".freeze, "bin/myex".freeze, "bin/on_change".freeze, "bin/path".freeze, "bin/print_method".freeze, "bin/probe".freeze, "bin/rainbow".freeze, "bin/rd2md".freeze, "bin/search".freeze, "bin/sedit".freeze, "bin/serve".freeze, "bin/ssh-tunnel".freeze, "bin/strip_spaces".freeze, "bin/sync_dir".freeze, "bin/untest".freeze, "bin/utils-utilsrc".freeze, "bin/vcf2alias".freeze, "bin/yaml_check".freeze, "lib/utils.rb".freeze, "lib/utils/config_dir.rb".freeze, "lib/utils/config_file.rb".freeze, "lib/utils/editor.rb".freeze, "lib/utils/finder.rb".freeze, "lib/utils/grepper.rb".freeze, "lib/utils/irb.rb".freeze, "lib/utils/line_blamer.rb".freeze, "lib/utils/line_formatter.rb".freeze, "lib/utils/md5.rb".freeze, "lib/utils/patterns.rb".freeze, "lib/utils/probe.rb".freeze, "lib/utils/probe/probe_client.rb".freeze, "lib/utils/probe/probe_server.rb".freeze, "lib/utils/probe/process_job.rb".freeze, "lib/utils/probe/server_handling.rb".freeze, "lib/utils/ssh_tunnel_specification.rb".freeze, "lib/utils/version.rb".freeze, "lib/utils/xt/source_location_extension.rb".freeze, "tests/test_helper.rb".freeze, "tests/utils_test.rb".freeze, "utils.gemspec".freeze]
14
+ s.executables = ["ascii7".freeze, "blameline".freeze, "changes".freeze, "classify".freeze, "code_comment".freeze, "code_indexer".freeze, "commit_message".freeze, "discover".freeze, "edit".freeze, "edit_wait".freeze, "enum".freeze, "git-empty".freeze, "git-versions".freeze, "irb_client".freeze, "json_check".freeze, "long_lines".freeze, "myex".freeze, "on_change".freeze, "path".freeze, "print_method".freeze, "probe".freeze, "rainbow".freeze, "rd2md".freeze, "search".freeze, "sedit".freeze, "serve".freeze, "ssh-tunnel".freeze, "strip_spaces".freeze, "sync_dir".freeze, "untest".freeze, "utils-utilsrc".freeze, "vcf2alias".freeze, "yaml_check".freeze]
15
+ s.extra_rdoc_files = ["README.md".freeze, "lib/utils.rb".freeze, "lib/utils/config_dir.rb".freeze, "lib/utils/config_file.rb".freeze, "lib/utils/editor.rb".freeze, "lib/utils/finder.rb".freeze, "lib/utils/grepper.rb".freeze, "lib/utils/irb.rb".freeze, "lib/utils/irb/irb_server.rb".freeze, "lib/utils/line_blamer.rb".freeze, "lib/utils/line_formatter.rb".freeze, "lib/utils/md5.rb".freeze, "lib/utils/patterns.rb".freeze, "lib/utils/probe.rb".freeze, "lib/utils/probe/probe_client.rb".freeze, "lib/utils/probe/probe_server.rb".freeze, "lib/utils/probe/process_job.rb".freeze, "lib/utils/probe/server_handling.rb".freeze, "lib/utils/ssh_tunnel_specification.rb".freeze, "lib/utils/version.rb".freeze, "lib/utils/xt/source_location_extension.rb".freeze]
16
+ s.files = ["Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "bin/ascii7".freeze, "bin/blameline".freeze, "bin/changes".freeze, "bin/classify".freeze, "bin/code_comment".freeze, "bin/code_indexer".freeze, "bin/commit_message".freeze, "bin/discover".freeze, "bin/edit".freeze, "bin/edit_wait".freeze, "bin/enum".freeze, "bin/git-empty".freeze, "bin/git-versions".freeze, "bin/irb_client".freeze, "bin/json_check".freeze, "bin/long_lines".freeze, "bin/myex".freeze, "bin/on_change".freeze, "bin/path".freeze, "bin/print_method".freeze, "bin/probe".freeze, "bin/rainbow".freeze, "bin/rd2md".freeze, "bin/search".freeze, "bin/sedit".freeze, "bin/serve".freeze, "bin/ssh-tunnel".freeze, "bin/strip_spaces".freeze, "bin/sync_dir".freeze, "bin/untest".freeze, "bin/utils-utilsrc".freeze, "bin/vcf2alias".freeze, "bin/yaml_check".freeze, "lib/utils.rb".freeze, "lib/utils/config_dir.rb".freeze, "lib/utils/config_file.rb".freeze, "lib/utils/editor.rb".freeze, "lib/utils/finder.rb".freeze, "lib/utils/grepper.rb".freeze, "lib/utils/irb.rb".freeze, "lib/utils/irb/irb_server.rb".freeze, "lib/utils/line_blamer.rb".freeze, "lib/utils/line_formatter.rb".freeze, "lib/utils/md5.rb".freeze, "lib/utils/patterns.rb".freeze, "lib/utils/probe.rb".freeze, "lib/utils/probe/probe_client.rb".freeze, "lib/utils/probe/probe_server.rb".freeze, "lib/utils/probe/process_job.rb".freeze, "lib/utils/probe/server_handling.rb".freeze, "lib/utils/ssh_tunnel_specification.rb".freeze, "lib/utils/version.rb".freeze, "lib/utils/xt/source_location_extension.rb".freeze, "tests/test_helper.rb".freeze, "tests/utils_test.rb".freeze, "utils.gemspec".freeze]
17
17
  s.homepage = "http://github.com/flori/utils".freeze
18
18
  s.licenses = ["GPL-2.0".freeze]
19
19
  s.rdoc_options = ["--title".freeze, "Utils - Some useful command line utilities".freeze, "--main".freeze, "README.md".freeze]
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.specification_version = 4
25
25
 
26
- s.add_development_dependency(%q<gem_hadar>.freeze, [">= 2.16.2".freeze])
26
+ s.add_development_dependency(%q<gem_hadar>.freeze, [">= 2.16.3".freeze])
27
27
  s.add_development_dependency(%q<test-unit>.freeze, [">= 0".freeze])
28
28
  s.add_runtime_dependency(%q<unix_socks>.freeze, ["~> 0.3".freeze])
29
29
  s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.51".freeze])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.82.0
4
+ version: 0.83.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 2.16.2
18
+ version: 2.16.3
19
19
  type: :development
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 2.16.2
25
+ version: 2.16.3
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: test-unit
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -277,6 +277,7 @@ executables:
277
277
  - enum
278
278
  - git-empty
279
279
  - git-versions
280
+ - irb_client
280
281
  - json_check
281
282
  - long_lines
282
283
  - myex
@@ -306,6 +307,7 @@ extra_rdoc_files:
306
307
  - lib/utils/finder.rb
307
308
  - lib/utils/grepper.rb
308
309
  - lib/utils/irb.rb
310
+ - lib/utils/irb/irb_server.rb
309
311
  - lib/utils/line_blamer.rb
310
312
  - lib/utils/line_formatter.rb
311
313
  - lib/utils/md5.rb
@@ -336,6 +338,7 @@ files:
336
338
  - bin/enum
337
339
  - bin/git-empty
338
340
  - bin/git-versions
341
+ - bin/irb_client
339
342
  - bin/json_check
340
343
  - bin/long_lines
341
344
  - bin/myex
@@ -362,6 +365,7 @@ files:
362
365
  - lib/utils/finder.rb
363
366
  - lib/utils/grepper.rb
364
367
  - lib/utils/irb.rb
368
+ - lib/utils/irb/irb_server.rb
365
369
  - lib/utils/line_blamer.rb
366
370
  - lib/utils/line_formatter.rb
367
371
  - lib/utils/md5.rb