sr 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/bin/sr +4 -31
- data/lib/sr.rb +8 -5
- data/lib/sr/cli.rb +38 -0
- data/lib/sr/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1bc2d0b60073323e10a7be29431f0b40d87a869
|
4
|
+
data.tar.gz: 4cf0d268cb08eebfb551225a1b9227cc6b6b28c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c57141042b502fbbfdf33bee545d90ad48172b8cf549950fa53d59f7500253f82f5e347155d4164077b780ae6e548c7e4f20fd44b4e3895fb5439f9ec6f843d0
|
7
|
+
data.tar.gz: ec40659eb174978cebb80c6e2f4ae9996fde55cdd5bc06f18756294cf19b2d876303c14b52127ae5fa22bb757e9d61b42e8c002e1aadff8f3b261bfdd65d1fa2
|
data/README.md
CHANGED
@@ -81,7 +81,7 @@ and resets the default binding to the given object.
|
|
81
81
|
**$XDG_CONFIG_DIRS** and **$XDG_CONFIG_HOME**. By default, these files would
|
82
82
|
be '/etc/xdg/sr/config.rb' for system-wide configuration and
|
83
83
|
'~/.config/sr/config.rb' for user-specific configuration. These files are
|
84
|
-
simply Ruby files which are loaded into `sr` via `
|
84
|
+
simply Ruby files which are loaded into `sr` via `Kernel#load`.
|
85
85
|
|
86
86
|
You may also tell `sr` to load alternative configuration files (or suppress all
|
87
87
|
configuration) with the '-f' option. Given no arguments, this option suppresses
|
@@ -94,8 +94,8 @@ $ sr -f # start with no configuration
|
|
94
94
|
$ sr -f alt.rb # start with alt.rb as configuration
|
95
95
|
```
|
96
96
|
|
97
|
-
In addition to this, `sr` simply uses `gets` as its default input method;
|
98
|
-
you would prefer to use Readline, simply add the following to your `sr`
|
97
|
+
In addition to this, `sr` simply uses `STDIN.gets` as its default input method;
|
98
|
+
if you would prefer to use Readline, simply add the following to your `sr`
|
99
99
|
configuration file:
|
100
100
|
|
101
101
|
```ruby
|
data/bin/sr
CHANGED
@@ -3,35 +3,8 @@
|
|
3
3
|
|
4
4
|
require 'optparse'
|
5
5
|
|
6
|
-
$0
|
7
|
-
|
8
|
-
module SR
|
9
|
-
options = {}
|
10
|
-
parser = OptionParser.new do |opts|
|
11
|
-
opts.on('-c', '--context=obj', 'set the sr context to obj') do |obj|
|
12
|
-
options[:context] = eval(obj)
|
13
|
-
end
|
14
|
-
opts.on('-f [FILE]', 'suppress configuration (load FILE if given)') do |f|
|
15
|
-
options[:config_files] =
|
16
|
-
f ? (options[:config_files] ||= []).push(File.expand_path(f)) : []
|
17
|
-
end
|
18
|
-
opts.on('-v', '--version', 'display sr version') do
|
19
|
-
puts "sr #{SR::VERSION} [ruby #{RUBY_VERSION} #{RUBY_PLATFORM}]"
|
20
|
-
exit
|
21
|
-
end
|
22
|
-
opts.on('-h', '--help', 'display this message') do
|
23
|
-
puts opts
|
24
|
-
exit
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
begin
|
29
|
-
parser.parse!
|
30
|
-
rescue OptionParser::InvalidOption => ex
|
31
|
-
$stderr.puts ex.message
|
32
|
-
$stderr.puts parser.help
|
33
|
-
exit 1
|
34
|
-
end
|
35
|
-
|
36
|
-
ARGV.empty? ? repl(options) : ($stderr.puts parser.help ; exit 1)
|
6
|
+
($0 =~ /^\// ? %w(sr sr/cli) : %w(../lib/sr ../lib/sr/cli)).each do |file|
|
7
|
+
file =~ /^\./ ? require_relative(file) : require(file)
|
37
8
|
end
|
9
|
+
|
10
|
+
SR::CLI.call
|
data/lib/sr.rb
CHANGED
@@ -33,14 +33,17 @@ module SR
|
|
33
33
|
|
34
34
|
@prompt = {
|
35
35
|
error: proc { |e| "!! #{e.class}: #{e.message}" },
|
36
|
-
input: proc
|
36
|
+
input: proc do
|
37
|
+
c = @context
|
38
|
+
"== #{c.respond_to?(:receiver) ? c.receiver : c.eval('self')}:\n>> "
|
39
|
+
end,
|
37
40
|
more: '.. ',
|
38
41
|
return: proc { |v| "-> #{v.inspect}" },
|
39
42
|
}
|
40
43
|
|
41
44
|
@input_handler ||= ->(more) do
|
42
45
|
print(call_prompt(more ? :more : :input))
|
43
|
-
input = gets
|
46
|
+
input = STDIN.gets
|
44
47
|
input = "#{more}#{input}" if more
|
45
48
|
input
|
46
49
|
end
|
@@ -108,8 +111,8 @@ module SR
|
|
108
111
|
# given input
|
109
112
|
# @return [Object] the return value of the given input
|
110
113
|
private_class_method def self.read_eval_print(more = nil)
|
111
|
-
input = @input_handler.call(more)
|
112
|
-
|
114
|
+
value = @context.eval(input = @input_handler.call(more), '(sr)', 0)
|
115
|
+
@context.local_variable_set(:_, value)
|
113
116
|
puts call_prompt(:return, value) if @prompt[:return]
|
114
117
|
rescue *@exception_handlers.keys => ex
|
115
118
|
@exception_handlers.find { |(c,_)| ex.is_a?(c) }[1].call(ex, input, more)
|
@@ -124,7 +127,7 @@ module SR
|
|
124
127
|
# `:config_files` (`Array<String>`) and `:context` (`#__binding__`)
|
125
128
|
# @return [void]
|
126
129
|
def self.repl(context = nil, **options)
|
127
|
-
options.fetch(:config_files, CONFIGURATION_FILES).each(&method(:
|
130
|
+
options.fetch(:config_files, CONFIGURATION_FILES).each(&method(:load))
|
128
131
|
context = context || options[:context]
|
129
132
|
reset_binding(context) unless context.nil?
|
130
133
|
@enabled = true
|
data/lib/sr/cli.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SR
|
4
|
+
module CLI
|
5
|
+
def self.call
|
6
|
+
options = {}
|
7
|
+
parser = OptionParser.new do |opts|
|
8
|
+
opts.on('-c', '--context=obj', 'set the sr context to obj') do |obj|
|
9
|
+
options[:context] = eval(obj, TOPLEVEL_BINDING)
|
10
|
+
end
|
11
|
+
opts.on('-f [FILE]', 'suppress configuration (or load FILE)') do |f|
|
12
|
+
if f && File.exist?(f)
|
13
|
+
(options[:config_files] ||= []).push(File.expand_path(f))
|
14
|
+
else
|
15
|
+
fail "#{f} is not a valid file" if f
|
16
|
+
options[:config_files] = []
|
17
|
+
end
|
18
|
+
end
|
19
|
+
opts.on('-v', '--version', 'display sr version') do
|
20
|
+
puts "sr #{SR::VERSION} [ruby #{RUBY_VERSION} #{RUBY_PLATFORM}]"
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
opts.on('-h', '--help', 'display this message') do
|
24
|
+
puts opts
|
25
|
+
exit
|
26
|
+
end
|
27
|
+
end
|
28
|
+
parser.parse!(ARGV)
|
29
|
+
SR.repl(options)
|
30
|
+
rescue SystemExit
|
31
|
+
# Do nothing -- this exists so the exception handling below doesn't pick
|
32
|
+
# up system exits from the option parser itself.
|
33
|
+
rescue Exception => ex
|
34
|
+
$stderr.puts ex.message
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/sr/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robin Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sxdg
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- UNLICENSE.md
|
51
51
|
- bin/sr
|
52
52
|
- lib/sr.rb
|
53
|
+
- lib/sr/cli.rb
|
53
54
|
- lib/sr/core_patches.rb
|
54
55
|
- lib/sr/input/readline.rb
|
55
56
|
- lib/sr/version.rb
|
@@ -74,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
75
|
version: '0'
|
75
76
|
requirements: []
|
76
77
|
rubyforge_project:
|
77
|
-
rubygems_version: 2.6.
|
78
|
+
rubygems_version: 2.6.11
|
78
79
|
signing_key:
|
79
80
|
specification_version: 4
|
80
81
|
summary: sr is a simple, tiny, hackable REPL for Ruby.
|