ruby_jard 0.2.2 → 0.2.3
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/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.github/workflows/ruby.yml +85 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +70 -1
- data/CHANGELOG.md +31 -0
- data/Gemfile +6 -3
- data/README.md +122 -8
- data/bin/console +1 -2
- data/docs/color_schemes/256-light.png +0 -0
- data/docs/color_schemes/gruvbox.png +0 -0
- data/docs/color_schemes/one-half-dark.png +0 -0
- data/docs/color_schemes/one-half-light.png +0 -0
- data/lib/ruby_jard.rb +5 -5
- data/lib/ruby_jard/box_drawer.rb +4 -1
- data/lib/ruby_jard/color_schemes.rb +31 -15
- data/lib/ruby_jard/color_schemes/256_color_scheme.rb +37 -37
- data/lib/ruby_jard/color_schemes/256_light_color_scheme.rb +62 -0
- data/lib/ruby_jard/color_schemes/deep_space_color_scheme.rb +36 -36
- data/lib/ruby_jard/color_schemes/gruvbox_color_scheme.rb +62 -0
- data/lib/ruby_jard/color_schemes/one_half_dark_color_scheme.rb +61 -0
- data/lib/ruby_jard/color_schemes/one_half_light_color_scheme.rb +62 -0
- data/lib/ruby_jard/column.rb +3 -1
- data/lib/ruby_jard/commands/continue_command.rb +2 -3
- data/lib/ruby_jard/commands/down_command.rb +9 -5
- data/lib/ruby_jard/commands/exit_command.rb +27 -0
- data/lib/ruby_jard/commands/frame_command.rb +11 -10
- data/lib/ruby_jard/commands/jard/color_scheme_command.rb +52 -0
- data/lib/ruby_jard/commands/jard/hide_command.rb +40 -0
- data/lib/ruby_jard/commands/jard/output_command.rb +28 -0
- data/lib/ruby_jard/commands/jard/show_command.rb +41 -0
- data/lib/ruby_jard/commands/jard_command.rb +50 -0
- data/lib/ruby_jard/commands/list_command.rb +5 -4
- data/lib/ruby_jard/commands/next_command.rb +10 -5
- data/lib/ruby_jard/commands/step_command.rb +10 -5
- data/lib/ruby_jard/commands/step_out_command.rb +10 -5
- data/lib/ruby_jard/commands/up_command.rb +10 -5
- data/lib/ruby_jard/commands/validation_helpers.rb +50 -0
- data/lib/ruby_jard/config.rb +7 -3
- data/lib/ruby_jard/console.rb +10 -22
- data/lib/ruby_jard/control_flow.rb +3 -3
- data/lib/ruby_jard/decorators/color_decorator.rb +11 -5
- data/lib/ruby_jard/decorators/loc_decorator.rb +1 -1
- data/lib/ruby_jard/decorators/path_decorator.rb +20 -7
- data/lib/ruby_jard/decorators/source_decorator.rb +2 -0
- data/lib/ruby_jard/frame.rb +55 -0
- data/lib/ruby_jard/keys.rb +0 -3
- data/lib/ruby_jard/layout.rb +9 -2
- data/lib/ruby_jard/layout_calculator.rb +29 -12
- data/lib/ruby_jard/layout_picker.rb +34 -0
- data/lib/ruby_jard/layouts.rb +52 -0
- data/lib/ruby_jard/layouts/narrow_horizontal_layout.rb +28 -0
- data/lib/ruby_jard/layouts/narrow_vertical_layout.rb +32 -0
- data/lib/ruby_jard/layouts/tiny_layout.rb +25 -0
- data/lib/ruby_jard/layouts/wide_layout.rb +13 -15
- data/lib/ruby_jard/pager.rb +96 -0
- data/lib/ruby_jard/repl_processor.rb +61 -31
- data/lib/ruby_jard/repl_proxy.rb +193 -89
- data/lib/ruby_jard/row.rb +16 -1
- data/lib/ruby_jard/row_renderer.rb +51 -42
- data/lib/ruby_jard/screen.rb +2 -12
- data/lib/ruby_jard/screen_adjuster.rb +104 -0
- data/lib/ruby_jard/screen_drawer.rb +3 -0
- data/lib/ruby_jard/screen_manager.rb +32 -54
- data/lib/ruby_jard/screen_renderer.rb +30 -16
- data/lib/ruby_jard/screens.rb +31 -12
- data/lib/ruby_jard/screens/backtrace_screen.rb +23 -26
- data/lib/ruby_jard/screens/menu_screen.rb +53 -22
- data/lib/ruby_jard/screens/source_screen.rb +65 -37
- data/lib/ruby_jard/screens/threads_screen.rb +14 -14
- data/lib/ruby_jard/screens/variables_screen.rb +59 -34
- data/lib/ruby_jard/session.rb +19 -10
- data/lib/ruby_jard/span.rb +3 -0
- data/lib/ruby_jard/templates/layout_template.rb +1 -1
- data/lib/ruby_jard/templates/screen_template.rb +3 -4
- data/lib/ruby_jard/version.rb +1 -1
- data/ruby_jard.gemspec +1 -1
- metadata +38 -9
- data/lib/ruby_jard/commands/color_scheme_command.rb +0 -42
- data/lib/ruby_jard/layouts/narrow_layout.rb +0 -41
- data/lib/ruby_jard/screens/empty_screen.rb +0 -13
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
class ColorSchemes
|
5
|
+
class OneHalfLightColorScheme < ColorScheme
|
6
|
+
# Shameless copy from https://github.com/sonph/onehalf/blob/master/vim/colors/onehalflight.vim
|
7
|
+
GRAY1 = '#eaeaea'
|
8
|
+
GRAY2 = '#d4d4d4'
|
9
|
+
GRAY3 = '#a0a1a7'
|
10
|
+
GRAY4 = '#a0a1a7'
|
11
|
+
GRAY5 = '#383a42'
|
12
|
+
|
13
|
+
WHITE = '#fafafa'
|
14
|
+
RED = '#e45649'
|
15
|
+
GREEN = '#50a14f'
|
16
|
+
YELLOW = '#c18401'
|
17
|
+
BLUE = '#0184bc'
|
18
|
+
PURPLE = '#a626a4'
|
19
|
+
CYAN = '#0997b3'
|
20
|
+
|
21
|
+
BACKGROUND = WHITE
|
22
|
+
STYLES = {
|
23
|
+
background: [GRAY5, BACKGROUND],
|
24
|
+
border: [GRAY3, BACKGROUND],
|
25
|
+
title: [WHITE, GREEN],
|
26
|
+
title_highlighted: [WHITE, YELLOW],
|
27
|
+
title_secondary: [GRAY5, GRAY2],
|
28
|
+
title_background: [GRAY3, BACKGROUND],
|
29
|
+
menu_mode: [YELLOW, BACKGROUND],
|
30
|
+
menu_tips: [GRAY4, BACKGROUND],
|
31
|
+
thread_id: [GREEN, BACKGROUND],
|
32
|
+
thread_name: [GRAY5, BACKGROUND],
|
33
|
+
thread_status_run: [GREEN, BACKGROUND],
|
34
|
+
thread_status_sleep: [GRAY4, BACKGROUND],
|
35
|
+
thread_status_other: [GRAY4, BACKGROUND],
|
36
|
+
thread_location: [GRAY5, BACKGROUND],
|
37
|
+
frame_id: [GRAY4, BACKGROUND],
|
38
|
+
frame_id_highlighted: [YELLOW, BACKGROUND],
|
39
|
+
frame_location: [GRAY5, BACKGROUND],
|
40
|
+
variable_mark: [GRAY4, BACKGROUND],
|
41
|
+
variable_mark_inline: [YELLOW, BACKGROUND],
|
42
|
+
variable_size: [GRAY5, BACKGROUND],
|
43
|
+
variable_inspection: [GRAY5, BACKGROUND],
|
44
|
+
variable_assignment: [GRAY5, BACKGROUND],
|
45
|
+
source_line_mark: [YELLOW, BACKGROUND],
|
46
|
+
source_lineno: [GRAY4, BACKGROUND],
|
47
|
+
keyword: [PURPLE, BACKGROUND],
|
48
|
+
method: [BLUE, BACKGROUND],
|
49
|
+
comment: [GRAY4, BACKGROUND],
|
50
|
+
literal: [YELLOW, BACKGROUND],
|
51
|
+
string: [GREEN, BACKGROUND],
|
52
|
+
local_variable: [RED, BACKGROUND],
|
53
|
+
instance_variable: [RED, BACKGROUND],
|
54
|
+
constant: [YELLOW, BACKGROUND],
|
55
|
+
normal_token: [GRAY5, BACKGROUND],
|
56
|
+
object: [YELLOW, BACKGROUND]
|
57
|
+
}.freeze
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
RubyJard::ColorSchemes.add_color_scheme('one-half-light', RubyJard::ColorSchemes::OneHalfLightColorScheme)
|
data/lib/ruby_jard/column.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RubyJard
|
4
|
+
##
|
5
|
+
# This class is an object to contain information of a column in a data drow display on a screen
|
4
6
|
class Column
|
5
7
|
# Only break at breakable word
|
6
8
|
# | this_is_a <endline> |
|
@@ -12,7 +14,7 @@ module RubyJard
|
|
12
14
|
WORD_WRAP_BREAK_WORD = :break_word
|
13
15
|
extend Forwardable
|
14
16
|
|
15
|
-
attr_accessor :spans, :content_length, :width, :word_wrap
|
17
|
+
attr_accessor :spans, :content_length, :width, :content_width, :word_wrap
|
16
18
|
|
17
19
|
def initialize(spans: [], word_wrap: WORD_WRAP_NORMAL)
|
18
20
|
@spans = spans
|
@@ -11,11 +11,10 @@ module RubyJard
|
|
11
11
|
|
12
12
|
banner <<-BANNER
|
13
13
|
Usage: continue
|
14
|
-
|
15
|
-
Continue program execution. The program will stop at the next breakpoint, or run until it finishes.
|
16
|
-
|
17
14
|
Examples:
|
18
15
|
continue
|
16
|
+
|
17
|
+
Continue program execution. The program will stop at the next breakpoint, or run until it finishes.
|
19
18
|
BANNER
|
20
19
|
|
21
20
|
def process
|
@@ -4,22 +4,26 @@ module RubyJard
|
|
4
4
|
module Commands
|
5
5
|
# Command used to explore stacktrace.
|
6
6
|
class DownCommand < Pry::ClassCommand
|
7
|
+
include RubyJard::Commands::ValidationHelpers
|
8
|
+
|
7
9
|
group 'RubyJard'
|
8
10
|
description 'Explore the frames bellow the current stopped line in the backtrace'
|
9
11
|
|
10
12
|
match 'down'
|
11
13
|
|
12
14
|
banner <<-BANNER
|
13
|
-
Usage: down
|
14
|
-
|
15
|
-
Explore the frames bellow the current stopped line in the backtrace.
|
16
|
-
|
15
|
+
Usage: down [-h] [times]
|
17
16
|
Examples:
|
18
17
|
down
|
18
|
+
down 1
|
19
|
+
down 7
|
20
|
+
|
21
|
+
Explore the frames bellow the current stopped line in the backtrace. All the C frames will be skipped.
|
19
22
|
BANNER
|
20
23
|
|
21
24
|
def process
|
22
|
-
|
25
|
+
times = validate_positive_integer!(args.first || 1)
|
26
|
+
RubyJard::ControlFlow.dispatch(:down, times: times.to_i)
|
23
27
|
end
|
24
28
|
end
|
25
29
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
module Commands
|
5
|
+
# Command used to exit program execution.
|
6
|
+
class ExitCommand < Pry::ClassCommand
|
7
|
+
group 'RubyJard'
|
8
|
+
description 'Exit program execution.'
|
9
|
+
|
10
|
+
match 'exit'
|
11
|
+
|
12
|
+
banner <<-BANNER
|
13
|
+
Usage: exit
|
14
|
+
Examples:
|
15
|
+
exit
|
16
|
+
|
17
|
+
Exit program execution. The program will stop at the next breakpoint, or run until it finishes.
|
18
|
+
BANNER
|
19
|
+
|
20
|
+
def process
|
21
|
+
RubyJard::ControlFlow.dispatch(:exit)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Pry::Commands.add_command(RubyJard::Commands::ExitCommand)
|
@@ -4,6 +4,8 @@ module RubyJard
|
|
4
4
|
module Commands
|
5
5
|
# Command used to explore stacktrace.
|
6
6
|
class FrameCommand < Pry::ClassCommand
|
7
|
+
include RubyJard::Commands::ValidationHelpers
|
8
|
+
|
7
9
|
group 'RubyJard'
|
8
10
|
description 'Explore to any frame of current stacktrace.'
|
9
11
|
|
@@ -18,17 +20,16 @@ module RubyJard
|
|
18
20
|
frame 4 # Jump to frame 4 in the backtrace
|
19
21
|
BANNER
|
20
22
|
|
23
|
+
def initialize(context = {})
|
24
|
+
super(context)
|
25
|
+
@session = context[:session] || RubyJard.current_session
|
26
|
+
end
|
27
|
+
|
21
28
|
def process
|
22
|
-
frame = args.first
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
frame = frame.to_i
|
27
|
-
if frame >= RubyJard.current_session.backtrace.length || frame < 0
|
28
|
-
raise Pry::CommandError, "Frame #{frame} does not exist!"
|
29
|
-
else
|
30
|
-
RubyJard::ControlFlow.dispatch(:frame, frame: args.first)
|
31
|
-
end
|
29
|
+
frame = validate_present!(args.first)
|
30
|
+
frame = validate_non_negative_integer!(frame)
|
31
|
+
frame = validate_range!(frame, 0, @session.current_backtrace.length - 1)
|
32
|
+
RubyJard::ControlFlow.dispatch(:frame, frame: frame)
|
32
33
|
end
|
33
34
|
end
|
34
35
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
module Commands
|
5
|
+
# Command used to explore stacktrace.
|
6
|
+
class ColorSchemeCommand < Pry::ClassCommand
|
7
|
+
group 'RubyJard'
|
8
|
+
description 'Control the color scheme used in Jard'
|
9
|
+
|
10
|
+
match 'color-scheme'
|
11
|
+
|
12
|
+
banner <<-BANNER
|
13
|
+
Usage: color-scheme -l
|
14
|
+
color-scheme [scheme-name]
|
15
|
+
BANNER
|
16
|
+
|
17
|
+
def initialize(context = {})
|
18
|
+
super(context)
|
19
|
+
@color_schemes = context[:color_schemes] || RubyJard::ColorSchemes
|
20
|
+
@config = context[:config] || RubyJard.config
|
21
|
+
end
|
22
|
+
|
23
|
+
def options(opt)
|
24
|
+
opt.on :l, :list, 'List all available color schemes'
|
25
|
+
end
|
26
|
+
|
27
|
+
def process
|
28
|
+
if opts[:l]
|
29
|
+
if @color_schemes.names.empty?
|
30
|
+
pry_instance.output.puts 'No loaded color schemes'
|
31
|
+
else
|
32
|
+
pry_instance.output.puts @color_schemes.names.join("\n")
|
33
|
+
end
|
34
|
+
else
|
35
|
+
color_scheme = args.first.to_s.strip
|
36
|
+
if color_scheme.empty?
|
37
|
+
raise Pry::CommandError,
|
38
|
+
'You must provide a color scheme name. Please use `color-scheme -l` to list all color schemes.'
|
39
|
+
end
|
40
|
+
|
41
|
+
if @color_schemes[color_scheme].nil?
|
42
|
+
raise Pry::CommandError,
|
43
|
+
"Color scheme `#{color_scheme}` not found. Please use `color-scheme -l` to list all color schemes."
|
44
|
+
end
|
45
|
+
|
46
|
+
@config.color_scheme = color_scheme
|
47
|
+
RubyJard::ControlFlow.dispatch(:list)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
module Commands
|
5
|
+
##
|
6
|
+
# Show a screen
|
7
|
+
class HideCommand < Pry::ClassCommand
|
8
|
+
description 'Hide a screen'
|
9
|
+
banner <<-BANNER
|
10
|
+
Usage: jard hide [-h] [screen]
|
11
|
+
BANNER
|
12
|
+
match 'hide'
|
13
|
+
|
14
|
+
def initialize(context = {})
|
15
|
+
super(context)
|
16
|
+
|
17
|
+
@screens = context[:screens] || RubyJard::Screens
|
18
|
+
@config = context[:config] || RubyJard.config
|
19
|
+
end
|
20
|
+
|
21
|
+
def process
|
22
|
+
screen = args.first.to_s.strip
|
23
|
+
|
24
|
+
if screen.empty?
|
25
|
+
raise Pry::CommandError,
|
26
|
+
"Please input one of the following: #{@screens.names.join(', ')}"
|
27
|
+
end
|
28
|
+
|
29
|
+
unless @screens.names.include?(screen)
|
30
|
+
raise Pry::CommandError,
|
31
|
+
"Screen `#{screen}` not found. Please input one of the following: #{@screens.names.join(', ')}"
|
32
|
+
end
|
33
|
+
|
34
|
+
@config.enabled_screens.delete(screen)
|
35
|
+
|
36
|
+
RubyJard::ControlFlow.dispatch(:list)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
module Commands
|
5
|
+
# Command used to explore stacktrace.
|
6
|
+
class OutputCommand < Pry::ClassCommand
|
7
|
+
group 'RubyJard'
|
8
|
+
description 'Show all current program output'
|
9
|
+
|
10
|
+
match 'output'
|
11
|
+
|
12
|
+
banner <<-BANNER
|
13
|
+
Usage: output
|
14
|
+
BANNER
|
15
|
+
|
16
|
+
def self.output_storage
|
17
|
+
RubyJard::ScreenManager.instance.output_storage
|
18
|
+
end
|
19
|
+
|
20
|
+
def process
|
21
|
+
pry_instance.pager.open(force_open: true, pager_start_at_the_end: true) do |pager|
|
22
|
+
self.class.output_storage.rewind
|
23
|
+
pager.write self.class.output_storage.read_nonblock(2048) until self.class.output_storage.eof?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
module Commands
|
5
|
+
##
|
6
|
+
# Show a screen
|
7
|
+
class ShowCommand < Pry::ClassCommand
|
8
|
+
description 'Show a screen'
|
9
|
+
banner <<-BANNER
|
10
|
+
Usage: jard show [-h] [screen]
|
11
|
+
BANNER
|
12
|
+
match 'show'
|
13
|
+
|
14
|
+
def initialize(context = {})
|
15
|
+
super(context)
|
16
|
+
|
17
|
+
@screens = context[:screens] || RubyJard::Screens
|
18
|
+
@config = context[:config] || RubyJard.config
|
19
|
+
end
|
20
|
+
|
21
|
+
def process
|
22
|
+
screen = args.first.to_s.strip
|
23
|
+
|
24
|
+
if screen.empty?
|
25
|
+
raise Pry::CommandError,
|
26
|
+
"Please input one of the following: #{@screens.names.join(', ')}"
|
27
|
+
end
|
28
|
+
|
29
|
+
unless @screens.names.include?(screen)
|
30
|
+
raise Pry::CommandError,
|
31
|
+
"Screen `#{screen}` not found. Please input one of the following: #{@screens.names.join(', ')}"
|
32
|
+
end
|
33
|
+
|
34
|
+
@config.enabled_screens << screen
|
35
|
+
@config.enabled_screens.uniq!
|
36
|
+
|
37
|
+
RubyJard::ControlFlow.dispatch(:list)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ruby_jard/commands/jard/show_command'
|
4
|
+
require 'ruby_jard/commands/jard/hide_command'
|
5
|
+
require 'ruby_jard/commands/jard/color_scheme_command'
|
6
|
+
require 'ruby_jard/commands/jard/output_command'
|
7
|
+
|
8
|
+
module RubyJard
|
9
|
+
module Commands
|
10
|
+
# Command used to explore stacktrace.
|
11
|
+
class JardCommand < Pry::ClassCommand
|
12
|
+
group 'RubyJard'
|
13
|
+
description 'Show all current program output'
|
14
|
+
|
15
|
+
match 'jard'
|
16
|
+
|
17
|
+
banner <<-BANNER
|
18
|
+
Usage: jard [-h] [sub commands]
|
19
|
+
BANNER
|
20
|
+
|
21
|
+
SUB_COMMANDS = {
|
22
|
+
'show' => RubyJard::Commands::ShowCommand,
|
23
|
+
'hide' => RubyJard::Commands::HideCommand,
|
24
|
+
'color-scheme' => RubyJard::Commands::ColorSchemeCommand,
|
25
|
+
'output' => RubyJard::Commands::OutputCommand
|
26
|
+
}.freeze
|
27
|
+
|
28
|
+
def subcommands(cmd)
|
29
|
+
SUB_COMMANDS.each do |command_name, sub_command|
|
30
|
+
cmd.command command_name do |opt|
|
31
|
+
opt.description sub_command.description
|
32
|
+
opt.run do |_, arguments|
|
33
|
+
@ran_sub_command = true
|
34
|
+
sub_command.new(context).send(:call_safely, *arguments)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def process
|
41
|
+
return if @ran_sub_command
|
42
|
+
return if ['-h', '--help'].include?(args.first) || SUB_COMMANDS.keys.include?(args.first)
|
43
|
+
|
44
|
+
pry_instance.output.puts help
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
Pry::Commands.add_command(RubyJard::Commands::JardCommand)
|
@@ -4,22 +4,27 @@ module RubyJard
|
|
4
4
|
module Commands
|
5
5
|
# Command used to continue program execution to the next line.
|
6
6
|
class NextCommand < Pry::ClassCommand
|
7
|
+
include RubyJard::Commands::ValidationHelpers
|
8
|
+
|
7
9
|
group 'RubyJard'
|
8
10
|
description 'Next into the execution of the current line'
|
9
11
|
|
10
12
|
match 'next'
|
11
13
|
|
12
14
|
banner <<-BANNER
|
13
|
-
Usage: next
|
14
|
-
|
15
|
-
Continue program execution to the next line. If the current frame reaches the end, it continue the next line of upper frame.
|
16
|
-
|
15
|
+
Usage: next [times]
|
17
16
|
Examples:
|
18
17
|
next
|
18
|
+
next 1
|
19
|
+
next 7
|
20
|
+
|
21
|
+
Continue program execution to the next line. If the current frame reaches the end, it continue the next line of upper frame.
|
19
22
|
BANNER
|
20
23
|
|
21
24
|
def process
|
22
|
-
|
25
|
+
times = validate_positive_integer!(args.first || 1)
|
26
|
+
|
27
|
+
RubyJard::ControlFlow.dispatch(:next, times: times.to_i)
|
23
28
|
end
|
24
29
|
end
|
25
30
|
end
|