rexe 1.5.1 → 1.7.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 +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +7 -7
- data/exe/rexe +62 -37
- data/rexe.gemspec +10 -2
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d4ad1a24022659314b09d706db797d17702d6b879b4b52d0d4068b7fef4ef9c
|
4
|
+
data.tar.gz: 04b6759f33142d6e738bd12ce0bad997385f77c02c7e0537ea5f3c609df8ef7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a51a900c81e65878e13a795708c35e57d41f7226300932bea17105707aa03f9b5246e386ecdb7e3d437361614ccbdbaab63b7fb1b4c6bc59ee28bbd33dcd18a
|
7
|
+
data.tar.gz: cc4acaa0817872e3e9ec7960246c721152c7311708abd8bed7bf9e206332c8c6bf579d876c0240d2a98a1780eaade154fd7412b3c3e5fa28d5f8383308ea0323
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
## rexe -- Ruby Command Line Executor/Filter
|
2
2
|
|
3
|
+
### 1.7.0
|
4
|
+
|
5
|
+
* Replace amazing_print dependency with awesome_print.
|
6
|
+
* Effectively disable `try` method, i.e. print stack trace on errors.
|
7
|
+
* In `try` method, rescue StandardError instead of Exception.
|
8
|
+
|
9
|
+
|
10
|
+
### 1.6.0
|
11
|
+
|
12
|
+
* Replace calls to `exists?`, which has been removed, with `exist?`.
|
13
|
+
* Add warning messages to stderr for unspecified options (input/output format, input mode),
|
14
|
+
but only when logging is disabled.
|
15
|
+
|
3
16
|
### 1.5.1
|
4
17
|
|
5
18
|
* Change string concatenations using << to creation of new strings with += to accommodate default-frozen strings.
|
data/README.md
CHANGED
@@ -73,7 +73,7 @@ Rexe is at https://github.com/keithrbennett/rexe and can be installed with `gem
|
|
73
73
|
Here is rexe's help text as of the time of this writing:
|
74
74
|
|
75
75
|
```
|
76
|
-
rexe -- Ruby Command Line Executor/Filter -- v1.
|
76
|
+
rexe -- Ruby Command Line Executor/Filter -- v1.7.0 -- https://github.com/keithrbennett/rexe
|
77
77
|
|
78
78
|
Executes Ruby code on the command line,
|
79
79
|
optionally automating management of standard input and standard output,
|
@@ -135,7 +135,7 @@ before processing the input.
|
|
135
135
|
|
136
136
|
If there is a REXE_OPTIONS environment variable, its content will be prepended
|
137
137
|
to the command line so that you can specify options implicitly
|
138
|
-
(e.g. `export REXE_OPTIONS="-r
|
138
|
+
(e.g. `export REXE_OPTIONS="-r awesome_print,yaml"`)
|
139
139
|
```
|
140
140
|
|
141
141
|
### Simplifying the Rexe Invocation
|
@@ -239,11 +239,11 @@ $ echo $EUR_RATES_JSON | rexe -gy -ij -mb -oa -n self
|
|
239
239
|
:input_format: :json
|
240
240
|
:input_mode: :one_big_string
|
241
241
|
:loads: []
|
242
|
-
:output_format: :
|
243
|
-
:output_format_tty: :
|
244
|
-
:output_format_block: :
|
242
|
+
:output_format: :awesome_print
|
243
|
+
:output_format_tty: :awesome_print
|
244
|
+
:output_format_block: :awesome_print
|
245
245
|
:requires:
|
246
|
-
-
|
246
|
+
- awesome_print
|
247
247
|
- json
|
248
248
|
- yaml
|
249
249
|
:log_format: :yaml
|
@@ -741,7 +741,7 @@ For consistency with the `ruby` interpreter, rexe supports requires with the `-r
|
|
741
741
|
|
742
742
|
```bash
|
743
743
|
vvvvvvvvvvvvvvvvvv
|
744
|
-
$ echo $EUR_RATES_JSON | rexe -r json,
|
744
|
+
$ echo $EUR_RATES_JSON | rexe -r json,awesome_print 'ap JSON.parse(STDIN.read)'
|
745
745
|
^^^^^^^^^^^^^^^^^^
|
746
746
|
```
|
747
747
|
|
data/exe/rexe
CHANGED
@@ -15,24 +15,26 @@ require 'shellwords'
|
|
15
15
|
|
16
16
|
class Rexe
|
17
17
|
|
18
|
-
VERSION = '1.
|
18
|
+
VERSION = '1.7.0'
|
19
19
|
|
20
20
|
PROJECT_URL = 'https://github.com/keithrbennett/rexe'
|
21
21
|
|
22
22
|
|
23
23
|
module Helpers
|
24
24
|
|
25
|
-
#
|
25
|
+
# Originally the entire run was wrapped in this rescue to make error output more concise.
|
26
|
+
# However, I am concerned that hiding the stack trace will make it harder to debug,
|
27
|
+
# and be worse than the ugliness of showing it when it is not needed. So, I am commenting
|
28
|
+
# out the rescue for now, and will see how it goes. If you have any opinions on this,
|
29
|
+
# please let me know at https://github.com/keithrbennett/rexe/issues/5 .
|
30
|
+
#
|
31
|
+
# (disabled) Try executing code. If error raised, print message (but not stack trace) & exit -1.
|
26
32
|
def try
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
$stderr.puts("Use the -h option to get help.")
|
33
|
-
exit(-1)
|
34
|
-
end
|
35
|
-
end
|
33
|
+
yield
|
34
|
+
# rescue StandardError => e
|
35
|
+
# $stderr.puts("rexe ERROR: #{e}")
|
36
|
+
# $stderr.puts('Use the -h option to get help.')
|
37
|
+
# exit(-1)
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
@@ -57,7 +59,7 @@ class Rexe
|
|
57
59
|
|
58
60
|
|
59
61
|
def clear
|
60
|
-
self.input_filespec
|
62
|
+
self.input_filespec = nil
|
61
63
|
self.input_format = :none
|
62
64
|
self.input_mode = :none
|
63
65
|
self.output_format = :none
|
@@ -71,9 +73,6 @@ class Rexe
|
|
71
73
|
end
|
72
74
|
|
73
75
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
76
|
class Lookups
|
78
77
|
def input_modes
|
79
78
|
@input_modes ||= {
|
@@ -107,7 +106,7 @@ class Rexe
|
|
107
106
|
|
108
107
|
def output_formats
|
109
108
|
@output_formats ||= {
|
110
|
-
'a' => :
|
109
|
+
'a' => :awesome_print,
|
111
110
|
'i' => :inspect,
|
112
111
|
'j' => :json,
|
113
112
|
'J' => :pretty_json,
|
@@ -123,7 +122,7 @@ class Rexe
|
|
123
122
|
|
124
123
|
def formatters
|
125
124
|
@formatters ||= {
|
126
|
-
|
125
|
+
awesome_print: ->(obj) { obj.ai + "\n" },
|
127
126
|
inspect: ->(obj) { obj.inspect + "\n" },
|
128
127
|
json: ->(obj) { obj.to_json },
|
129
128
|
marshal: ->(obj) { Marshal.dump(obj) },
|
@@ -141,7 +140,7 @@ class Rexe
|
|
141
140
|
@format_requires ||= {
|
142
141
|
json: 'json',
|
143
142
|
pretty_json: 'json',
|
144
|
-
|
143
|
+
awesome_print: 'awesome_print',
|
145
144
|
pretty_print: 'pp',
|
146
145
|
yaml: 'yaml'
|
147
146
|
}
|
@@ -149,7 +148,6 @@ class Rexe
|
|
149
148
|
end
|
150
149
|
|
151
150
|
|
152
|
-
|
153
151
|
class CommandLineParser
|
154
152
|
|
155
153
|
include Helpers
|
@@ -245,9 +243,9 @@ class Rexe
|
|
245
243
|
|
246
244
|
If there is a REXE_OPTIONS environment variable, its content will be prepended
|
247
245
|
to the command line so that you can specify options implicitly
|
248
|
-
(e.g. `export REXE_OPTIONS="-r
|
246
|
+
(e.g. `export REXE_OPTIONS="-r awesome_print,yaml"`)
|
249
247
|
|
250
|
-
|
248
|
+
HEREDOC
|
251
249
|
|
252
250
|
@help_text.freeze
|
253
251
|
end
|
@@ -261,7 +259,7 @@ class Rexe
|
|
261
259
|
extension = File.extname(filespec).downcase
|
262
260
|
if extension == '.json'
|
263
261
|
:json
|
264
|
-
elsif
|
262
|
+
elsif %w{.yml .yaml}.include?(extension)
|
265
263
|
:yaml
|
266
264
|
else
|
267
265
|
:none
|
@@ -289,9 +287,32 @@ class Rexe
|
|
289
287
|
|
290
288
|
prepend_environment_options
|
291
289
|
|
290
|
+
input_mode_specified = false
|
291
|
+
input_format_specified = false
|
292
|
+
output_format_specified = false
|
293
|
+
|
294
|
+
report_unspecified_options = -> do
|
295
|
+
messages = []
|
296
|
+
|
297
|
+
unless input_mode_specified
|
298
|
+
messages << 'Input mode not specified. Defaulting to -mn (none).'
|
299
|
+
end
|
300
|
+
unless input_format_specified
|
301
|
+
messages << 'Input format not specified. Defaulting to -in (none).'
|
302
|
+
end
|
303
|
+
unless output_format_specified
|
304
|
+
messages << 'Output mode not specified. Defaulting to -on (none).'
|
305
|
+
end
|
306
|
+
|
307
|
+
if messages.any?
|
308
|
+
$stderr.puts(messages.join("\n"))
|
309
|
+
$stderr.puts("See help (run with -h) for more information.\n\n")
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
292
313
|
OptionParser.new do |parser|
|
293
314
|
|
294
|
-
parser.on('-c', '--clear_options',
|
315
|
+
parser.on('-c', '--clear_options', 'Clear all previous command line options') do |v|
|
295
316
|
options.clear
|
296
317
|
end
|
297
318
|
|
@@ -302,8 +323,10 @@ class Rexe
|
|
302
323
|
end
|
303
324
|
options.input_filespec = v
|
304
325
|
options.input_format = autodetect_file_format(v)
|
326
|
+
input_format_specified = true
|
305
327
|
if [:json, :yaml].include?(options.input_format)
|
306
328
|
options.input_mode = :one_big_string
|
329
|
+
input_mode_specified = true
|
307
330
|
end
|
308
331
|
end
|
309
332
|
|
@@ -314,7 +337,7 @@ class Rexe
|
|
314
337
|
end
|
315
338
|
end
|
316
339
|
|
317
|
-
parser.on("-h", "--help",
|
340
|
+
parser.on("-h", "--help", 'Show help') do |_help_requested|
|
318
341
|
puts help_text
|
319
342
|
exit
|
320
343
|
end
|
@@ -326,6 +349,7 @@ class Rexe
|
|
326
349
|
if options.input_format.nil?
|
327
350
|
raise("Input mode was '#{v}' but must be one of #{lookups.input_formats.keys}.")
|
328
351
|
end
|
352
|
+
input_format_specified = true
|
329
353
|
end
|
330
354
|
|
331
355
|
parser.on('-l', '--load RUBY_FILE(S)', 'Ruby file(s) to load, comma separated, or ! to clear') do |v|
|
@@ -335,7 +359,7 @@ class Rexe
|
|
335
359
|
loadfiles = v.split(',').map(&:strip).map { |s| File.expand_path(s) }
|
336
360
|
removes, adds = loadfiles.partition { |filespec| filespec[0] == '-' }
|
337
361
|
|
338
|
-
existent, nonexistent = adds.partition { |filespec| File.
|
362
|
+
existent, nonexistent = adds.partition { |filespec| File.exist?(filespec) }
|
339
363
|
if nonexistent.any?
|
340
364
|
raise("\nDid not find the following files to load: #{nonexistent}\n\n")
|
341
365
|
else
|
@@ -353,6 +377,7 @@ class Rexe
|
|
353
377
|
if options.input_mode.nil?
|
354
378
|
raise("Input mode was '#{v}' but must be one of #{lookups.input_modes.keys}.")
|
355
379
|
end
|
380
|
+
input_mode_specified = true
|
356
381
|
end
|
357
382
|
|
358
383
|
# See https://stackoverflow.com/questions/54576873/ruby-optionparser-short-code-for-boolean-option
|
@@ -371,6 +396,7 @@ class Rexe
|
|
371
396
|
if [options.output_format_tty, options.output_format_block].include?(nil)
|
372
397
|
raise("Bad output mode '#{v}'; each must be one of #{lookups.output_formats.keys}.")
|
373
398
|
end
|
399
|
+
output_format_specified = true
|
374
400
|
end
|
375
401
|
|
376
402
|
parser.on('-r', '--require REQUIRE(S)',
|
@@ -413,6 +439,7 @@ class Rexe
|
|
413
439
|
options.requires = options.requires.sort.uniq
|
414
440
|
options.loads.uniq!
|
415
441
|
|
442
|
+
report_unspecified_options.() if options.log_format == :none
|
416
443
|
options
|
417
444
|
|
418
445
|
end
|
@@ -436,7 +463,7 @@ class Rexe
|
|
436
463
|
|
437
464
|
private def load_global_config_if_exists
|
438
465
|
filespec = File.join(Dir.home, '.rexerc')
|
439
|
-
load(filespec) if File.
|
466
|
+
load(filespec) if File.exist?(filespec)
|
440
467
|
end
|
441
468
|
|
442
469
|
|
@@ -508,17 +535,15 @@ class Rexe
|
|
508
535
|
# Bypasses Bundler's restriction on loading gems
|
509
536
|
# (see https://stackoverflow.com/questions/55144094/bundler-doesnt-permit-using-gems-in-project-home-directory)
|
510
537
|
private def require!(the_require)
|
511
|
-
|
538
|
+
require the_require
|
539
|
+
rescue LoadError => error
|
540
|
+
gem_path = `gem which #{the_require}`
|
541
|
+
if gem_path.chomp.strip.empty?
|
542
|
+
raise error # re-raise the error, can't fix it
|
543
|
+
else
|
544
|
+
load_dir = File.dirname(gem_path)
|
545
|
+
$LOAD_PATH += load_dir
|
512
546
|
require the_require
|
513
|
-
rescue LoadError => error
|
514
|
-
gem_path = `gem which #{the_require}`
|
515
|
-
if gem_path.chomp.strip.empty?
|
516
|
-
raise error # re-raise the error, can't fix it
|
517
|
-
else
|
518
|
-
load_dir = File.dirname(gem_path)
|
519
|
-
$LOAD_PATH += load_dir
|
520
|
-
require the_require
|
521
|
-
end
|
522
547
|
end
|
523
548
|
end
|
524
549
|
|
@@ -566,4 +591,4 @@ def bundler_run(&block)
|
|
566
591
|
end
|
567
592
|
|
568
593
|
|
569
|
-
bundler_run { Rexe::Main.new.call }
|
594
|
+
bundler_run { Rexe::Main.new.call }
|
data/rexe.gemspec
CHANGED
@@ -3,6 +3,9 @@ Gem::Specification.new do |spec|
|
|
3
3
|
spec.name = "rexe"
|
4
4
|
|
5
5
|
spec.version = -> do
|
6
|
+
# This is a bit of a kludge. If there is a commented out VERSION line preceding the active line,
|
7
|
+
# this will read the commented line.
|
8
|
+
# TODO: Ignore comment lines.
|
6
9
|
rexe_file = File.join(File.dirname(__FILE__), 'exe', 'rexe')
|
7
10
|
version_line = File.readlines(rexe_file).grep(/\s*VERSION\s*=\s*'/).first.chomp
|
8
11
|
version_line.match(/'(.+)'/)[0].gsub("'", '')
|
@@ -38,11 +41,16 @@ Gem::Specification.new do |spec|
|
|
38
41
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
39
42
|
spec.require_paths = ["lib"]
|
40
43
|
|
41
|
-
spec.add_dependency "
|
44
|
+
spec.add_dependency "awesome_print"
|
42
45
|
|
43
46
|
spec.add_development_dependency "bundler", "~> 2.0"
|
44
47
|
spec.add_development_dependency "os"
|
45
48
|
spec.add_development_dependency "rake", "~> 12.3"
|
46
|
-
spec.add_development_dependency "rspec", "~> 3.
|
49
|
+
spec.add_development_dependency "rspec", "~> 3.12"
|
47
50
|
|
51
|
+
# Remove this message (added November 2023) later (maybe July 2024).
|
52
|
+
spec.post_install_message = <<~MESSAGE
|
53
|
+
Starting with v1.7.0, awesome_print is now used instead of amazing_print
|
54
|
+
for fancy human readable output.
|
55
|
+
MESSAGE
|
48
56
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rexe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keith Bennett
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: awesome_print
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3.
|
75
|
+
version: '3.12'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '3.
|
82
|
+
version: '3.12'
|
83
83
|
description: Ruby Command Line Executor
|
84
84
|
email:
|
85
85
|
- keithrbennett@gmail.com
|
@@ -110,7 +110,8 @@ metadata:
|
|
110
110
|
homepage_uri: https://github.com/keithrbennett/rexe
|
111
111
|
source_code_uri: https://github.com/keithrbennett/rexe
|
112
112
|
changelog_uri: https://github.com/keithrbennett/rexe/blob/master/README.md
|
113
|
-
post_install_message:
|
113
|
+
post_install_message: "Starting with v1.7.0, awesome_print is now used instead of
|
114
|
+
amazing_print \nfor fancy human readable output.\n"
|
114
115
|
rdoc_options: []
|
115
116
|
require_paths:
|
116
117
|
- lib
|
@@ -125,8 +126,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
126
|
- !ruby/object:Gem::Version
|
126
127
|
version: '0'
|
127
128
|
requirements: []
|
128
|
-
rubygems_version: 3.
|
129
|
-
signing_key:
|
129
|
+
rubygems_version: 3.4.22
|
130
|
+
signing_key:
|
130
131
|
specification_version: 4
|
131
132
|
summary: Ruby Command Line Executor
|
132
133
|
test_files: []
|