rubyx 0.0.1 → 0.0.2
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 +7 -0
- data/.gitignore +1 -0
- data/README.md +42 -5
- data/Rakefile +3 -0
- data/bin/rubyx +76 -16
- data/rubyx.gemspec +2 -2
- metadata +14 -21
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8fcac96e9bd388b3bc5c2c860a3af698259c83a1
|
4
|
+
data.tar.gz: f26a3fe4e6b2398860c15727a56109aa259f72d5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5b8824d4db4843f6d31bec860498c5606f2ad0b60cd5471eed193d9dd7b0ad11b5a001a099fd531d7147283805e3272534a0daa4348b37e4de0f91a21306d7f2
|
7
|
+
data.tar.gz: cae64896eee7b31c89ec1324c989e850d627092473a9cc674efc9be1ff550099082bf7d59e8eec01adc7b02dd5aa39aed5692ba337c73a514b32f509188ad64c
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# Rubyx [](http://badge.fury.io/rb/rubyx)
|
2
2
|
|
3
|
-
A tool to run a Ruby script while showing the executed
|
4
|
-
`bash -x`.
|
3
|
+
A tool to run a Ruby script while showing the executed lines of code.
|
5
4
|
|
6
5
|
## Installation
|
7
6
|
|
@@ -11,8 +10,46 @@ $ gem install rubyx
|
|
11
10
|
|
12
11
|
## Usage
|
13
12
|
|
14
|
-
```
|
15
|
-
$ rubyx
|
13
|
+
```
|
14
|
+
$ rubyx -h
|
15
|
+
Usage: rubyx [options] <file> -- [arguments]
|
16
|
+
|
17
|
+
Options:
|
18
|
+
-i PREFIX Set prefix for source code (default: "")
|
19
|
+
-o PREFIX Set prefix for standard output (default: "# => ")
|
20
|
+
-h Show this message
|
21
|
+
```
|
22
|
+
|
23
|
+
## Example
|
24
|
+
|
25
|
+
```
|
26
|
+
$ rubyx input.rb > output.rb
|
27
|
+
```
|
28
|
+
|
29
|
+
In `input.rb`:
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
def say
|
33
|
+
puts 'Hello!'
|
34
|
+
end
|
35
|
+
|
36
|
+
say
|
37
|
+
|
38
|
+
puts 'Bye!'
|
39
|
+
```
|
40
|
+
|
41
|
+
In `output.rb`:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
def say
|
45
|
+
puts 'Hello!'
|
46
|
+
end
|
47
|
+
|
48
|
+
say
|
49
|
+
# => Hello!
|
50
|
+
|
51
|
+
puts 'Bye!'
|
52
|
+
# => Bye!
|
16
53
|
```
|
17
54
|
|
18
55
|
## Contributing
|
data/Rakefile
CHANGED
data/bin/rubyx
CHANGED
@@ -1,31 +1,91 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require 'tempfile'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
iprefix = ''
|
7
|
+
oprefix = '# => '
|
8
|
+
|
9
|
+
parser = OptionParser.new(nil, 20) do |o|
|
10
|
+
o.banner = 'Usage: rubyx [options] <file> -- [arguments]'
|
11
|
+
|
12
|
+
o.separator ''
|
13
|
+
o.separator 'Options:'
|
14
|
+
|
15
|
+
o.on('-i PREFIX', %{Set prefix for source code (default: "#{iprefix}")}) do |value|
|
16
|
+
iprefix = value
|
17
|
+
end
|
18
|
+
|
19
|
+
o.on('-o PREFIX', %{Set prefix for standard output (default: "#{oprefix}")}) do |value|
|
20
|
+
oprefix = value
|
21
|
+
end
|
22
|
+
|
23
|
+
o.on_tail('-h', 'Show this message') do
|
24
|
+
puts o
|
25
|
+
exit
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
begin
|
30
|
+
parser.parse!
|
31
|
+
rescue OptionParser::InvalidOption
|
32
|
+
puts parser
|
5
33
|
exit 1
|
6
34
|
end
|
7
35
|
|
36
|
+
def abort(message)
|
37
|
+
puts message
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
|
41
|
+
def capture(stream)
|
42
|
+
original = stream.dup
|
43
|
+
surrogate = Tempfile.new('rubyx')
|
44
|
+
stream.reopen(surrogate)
|
45
|
+
|
46
|
+
yield
|
47
|
+
|
48
|
+
stream.rewind
|
49
|
+
surrogate.readlines
|
50
|
+
ensure
|
51
|
+
surrogate.close
|
52
|
+
surrogate.unlink
|
53
|
+
stream.reopen(original)
|
54
|
+
end
|
55
|
+
|
56
|
+
def trace(handler)
|
57
|
+
set_trace_func(handler)
|
58
|
+
yield
|
59
|
+
ensure
|
60
|
+
set_trace_func(nil)
|
61
|
+
end
|
62
|
+
|
8
63
|
filename = ARGV.shift || ''
|
9
|
-
abort if filename.empty?
|
64
|
+
abort(parser) if filename.empty?
|
10
65
|
|
11
66
|
filename = File.absolute_path(filename)
|
67
|
+
abort('The file does not exist.') unless File.exist?(filename)
|
12
68
|
|
13
|
-
|
14
|
-
|
15
|
-
|
69
|
+
tag = Random.new_seed
|
70
|
+
last_position = 0
|
71
|
+
|
72
|
+
handler = Proc.new do |event, source, position|
|
73
|
+
if event == 'line' && source == filename && position > last_position
|
74
|
+
(last_position..(position - 1)).each { |i| puts "#{tag}#{i}" }
|
75
|
+
last_position = position
|
76
|
+
end
|
16
77
|
end
|
17
78
|
|
18
|
-
|
19
|
-
|
79
|
+
source = File.readlines(filename)
|
80
|
+
output = capture($stdout) { trace(handler) { load(filename) } }
|
20
81
|
|
21
|
-
|
22
|
-
if
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
82
|
+
output.map! do |line|
|
83
|
+
if line =~ /^#{tag}(?<position>\d+)$/
|
84
|
+
line = source[Regexp.last_match(:position).to_i]
|
85
|
+
"#{iprefix}#{line}"
|
86
|
+
else
|
87
|
+
"#{oprefix}#{line}"
|
27
88
|
end
|
28
89
|
end
|
29
90
|
|
30
|
-
|
31
|
-
require filename
|
91
|
+
puts output.join
|
data/rubyx.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'rubyx'
|
3
|
-
spec.version = '0.0.
|
3
|
+
spec.version = '0.0.2'
|
4
4
|
spec.authors = ['Ivan Ukhov']
|
5
5
|
spec.email = ['ivan.ukhov@gmail.com']
|
6
6
|
spec.summary = 'A tool to run a Ruby script while showing the ' \
|
7
|
-
'executed
|
7
|
+
'executed lines of code.'
|
8
8
|
spec.description = spec.summary
|
9
9
|
spec.homepage = 'https://github.com/IvanUkhov/rubyx'
|
10
10
|
spec.license = 'MIT'
|
metadata
CHANGED
@@ -1,49 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ivan Ukhov
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-02 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.6'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '1.6'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '10.0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '10.0'
|
46
|
-
description: A tool to run a Ruby script while showing the executed
|
41
|
+
description: A tool to run a Ruby script while showing the executed lines of code.
|
47
42
|
email:
|
48
43
|
- ivan.ukhov@gmail.com
|
49
44
|
executables:
|
@@ -51,7 +46,7 @@ executables:
|
|
51
46
|
extensions: []
|
52
47
|
extra_rdoc_files: []
|
53
48
|
files:
|
54
|
-
- .gitignore
|
49
|
+
- ".gitignore"
|
55
50
|
- Gemfile
|
56
51
|
- LICENSE.txt
|
57
52
|
- README.md
|
@@ -61,27 +56,25 @@ files:
|
|
61
56
|
homepage: https://github.com/IvanUkhov/rubyx
|
62
57
|
licenses:
|
63
58
|
- MIT
|
59
|
+
metadata: {}
|
64
60
|
post_install_message:
|
65
61
|
rdoc_options: []
|
66
62
|
require_paths:
|
67
63
|
- lib
|
68
64
|
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
65
|
requirements:
|
71
|
-
- -
|
66
|
+
- - ">="
|
72
67
|
- !ruby/object:Gem::Version
|
73
68
|
version: 1.9.3
|
74
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
70
|
requirements:
|
77
|
-
- -
|
71
|
+
- - ">="
|
78
72
|
- !ruby/object:Gem::Version
|
79
73
|
version: '0'
|
80
74
|
requirements: []
|
81
75
|
rubyforge_project:
|
82
|
-
rubygems_version:
|
76
|
+
rubygems_version: 2.2.2
|
83
77
|
signing_key:
|
84
|
-
specification_version:
|
85
|
-
summary: A tool to run a Ruby script while showing the executed
|
78
|
+
specification_version: 4
|
79
|
+
summary: A tool to run a Ruby script while showing the executed lines of code.
|
86
80
|
test_files: []
|
87
|
-
has_rdoc:
|