ruby_jard 0.1.0 → 0.3.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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +3 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. data/.github/workflows/documentation.yml +65 -0
  6. data/.github/workflows/rspec.yml +96 -0
  7. data/.gitignore +1 -0
  8. data/.rubocop.yml +90 -2
  9. data/CHANGELOG.md +112 -0
  10. data/Gemfile +14 -4
  11. data/README.md +95 -3
  12. data/benchmark/path_filter_bench.rb +58 -0
  13. data/bin/console +1 -2
  14. data/lib/ruby_jard.rb +68 -32
  15. data/lib/ruby_jard/box_drawer.rb +175 -0
  16. data/lib/ruby_jard/color_scheme.rb +28 -0
  17. data/lib/ruby_jard/color_schemes.rb +54 -0
  18. data/lib/ruby_jard/color_schemes/256_color_scheme.rb +50 -0
  19. data/lib/ruby_jard/color_schemes/256_light_color_scheme.rb +50 -0
  20. data/lib/ruby_jard/color_schemes/deep_space_color_scheme.rb +49 -0
  21. data/lib/ruby_jard/color_schemes/gruvbox_color_scheme.rb +48 -0
  22. data/lib/ruby_jard/color_schemes/one_half_dark_color_scheme.rb +47 -0
  23. data/lib/ruby_jard/color_schemes/one_half_light_color_scheme.rb +49 -0
  24. data/lib/ruby_jard/column.rb +26 -0
  25. data/lib/ruby_jard/commands/color_helpers.rb +32 -0
  26. data/lib/ruby_jard/commands/continue_command.rb +4 -9
  27. data/lib/ruby_jard/commands/down_command.rb +9 -8
  28. data/lib/ruby_jard/commands/exit_command.rb +27 -0
  29. data/lib/ruby_jard/commands/frame_command.rb +13 -11
  30. data/lib/ruby_jard/commands/jard/color_scheme_command.rb +74 -0
  31. data/lib/ruby_jard/commands/jard/filter_command.rb +136 -0
  32. data/lib/ruby_jard/commands/jard/hide_command.rb +40 -0
  33. data/lib/ruby_jard/commands/jard/output_command.rb +36 -0
  34. data/lib/ruby_jard/commands/jard/show_command.rb +41 -0
  35. data/lib/ruby_jard/commands/jard_command.rb +52 -0
  36. data/lib/ruby_jard/commands/list_command.rb +31 -0
  37. data/lib/ruby_jard/commands/next_command.rb +11 -8
  38. data/lib/ruby_jard/commands/step_command.rb +11 -8
  39. data/lib/ruby_jard/commands/step_out_command.rb +34 -0
  40. data/lib/ruby_jard/commands/up_command.rb +10 -8
  41. data/lib/ruby_jard/commands/validation_helpers.rb +50 -0
  42. data/lib/ruby_jard/config.rb +61 -0
  43. data/lib/ruby_jard/console.rb +158 -0
  44. data/lib/ruby_jard/control_flow.rb +73 -0
  45. data/lib/ruby_jard/decorators/array_decorator.rb +79 -0
  46. data/lib/ruby_jard/decorators/attributes_decorator.rb +172 -0
  47. data/lib/ruby_jard/decorators/color_decorator.rb +80 -0
  48. data/lib/ruby_jard/decorators/hash_decorator.rb +74 -0
  49. data/lib/ruby_jard/decorators/inspection_decorator.rb +109 -0
  50. data/lib/ruby_jard/decorators/loc_decorator.rb +108 -119
  51. data/lib/ruby_jard/decorators/object_decorator.rb +122 -0
  52. data/lib/ruby_jard/decorators/path_decorator.rb +56 -60
  53. data/lib/ruby_jard/decorators/rails_decorator.rb +194 -0
  54. data/lib/ruby_jard/decorators/source_decorator.rb +3 -1
  55. data/lib/ruby_jard/decorators/string_decorator.rb +41 -0
  56. data/lib/ruby_jard/decorators/struct_decorator.rb +79 -0
  57. data/lib/ruby_jard/frame.rb +68 -0
  58. data/lib/ruby_jard/key_binding.rb +14 -0
  59. data/lib/ruby_jard/key_bindings.rb +96 -0
  60. data/lib/ruby_jard/keys.rb +48 -0
  61. data/lib/ruby_jard/layout.rb +17 -88
  62. data/lib/ruby_jard/layout_calculator.rb +168 -0
  63. data/lib/ruby_jard/layout_picker.rb +34 -0
  64. data/lib/ruby_jard/layouts.rb +52 -0
  65. data/lib/ruby_jard/layouts/narrow_horizontal_layout.rb +32 -0
  66. data/lib/ruby_jard/layouts/narrow_vertical_layout.rb +32 -0
  67. data/lib/ruby_jard/layouts/tiny_layout.rb +29 -0
  68. data/lib/ruby_jard/layouts/wide_layout.rb +50 -0
  69. data/lib/ruby_jard/pager.rb +112 -0
  70. data/lib/ruby_jard/path_classifier.rb +133 -0
  71. data/lib/ruby_jard/path_filter.rb +125 -0
  72. data/lib/ruby_jard/reflection.rb +97 -0
  73. data/lib/ruby_jard/repl_processor.rb +151 -89
  74. data/lib/ruby_jard/repl_proxy.rb +337 -0
  75. data/lib/ruby_jard/row.rb +31 -0
  76. data/lib/ruby_jard/row_renderer.rb +119 -0
  77. data/lib/ruby_jard/screen.rb +14 -41
  78. data/lib/ruby_jard/screen_adjuster.rb +104 -0
  79. data/lib/ruby_jard/screen_drawer.rb +25 -0
  80. data/lib/ruby_jard/screen_manager.rb +167 -82
  81. data/lib/ruby_jard/screen_renderer.rb +152 -0
  82. data/lib/ruby_jard/screens.rb +31 -12
  83. data/lib/ruby_jard/screens/backtrace_screen.rb +118 -116
  84. data/lib/ruby_jard/screens/menu_screen.rb +73 -45
  85. data/lib/ruby_jard/screens/source_screen.rb +86 -106
  86. data/lib/ruby_jard/screens/threads_screen.rb +103 -78
  87. data/lib/ruby_jard/screens/variables_screen.rb +224 -142
  88. data/lib/ruby_jard/session.rb +151 -16
  89. data/lib/ruby_jard/span.rb +23 -0
  90. data/lib/ruby_jard/templates/layout_template.rb +35 -0
  91. data/lib/ruby_jard/templates/screen_template.rb +34 -0
  92. data/lib/ruby_jard/thread_info.rb +69 -0
  93. data/lib/ruby_jard/version.rb +1 -1
  94. data/ruby_jard.gemspec +7 -8
  95. metadata +84 -50
  96. data/.travis.yml +0 -6
  97. data/lib/ruby_jard/commands/finish_command.rb +0 -31
  98. data/lib/ruby_jard/decorators/text_decorator.rb +0 -61
  99. data/lib/ruby_jard/layout_template.rb +0 -101
  100. data/lib/ruby_jard/screens/breakpoints_screen.rb +0 -23
  101. data/lib/ruby_jard/screens/empty_screen.rb +0 -13
  102. data/lib/ruby_jard/screens/expressions_sreen.rb +0 -22
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJard
4
+ ##
5
+ # Abstract class of all color scheme.
6
+ class ColorScheme
7
+ def initialize(styles: self.class.const_get(:STYLES))
8
+ @styles = {}
9
+ styles.each do |element, element_styles|
10
+ update(element, element_styles)
11
+ end
12
+ end
13
+
14
+ ##
15
+ # Fetch the styles for a particular element defined in the scheme.
16
+ # This method returns an array of two or more elements:
17
+ # - First element is foreground color
18
+ # - Second element is background color
19
+ # - The rest is decorating items, such as underline, italic
20
+ def styles_for(element)
21
+ @styles[element].dup
22
+ end
23
+
24
+ def update(element, styles)
25
+ @styles[element] = styles
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_jard/color_scheme'
4
+
5
+ module RubyJard
6
+ ##
7
+ # Color scheme registry.
8
+ class ColorSchemes
9
+ class << self
10
+ extend Forwardable
11
+ def_delegators :instance, :add_color_scheme, :[], :get, :names, :each, :length
12
+
13
+ def instance
14
+ @instance ||= new
15
+ end
16
+ end
17
+
18
+ def initialize
19
+ @color_scheme_registry = {}
20
+ end
21
+
22
+ def add_color_scheme(name, color_scheme_class)
23
+ unless color_scheme_class < RubyJard::ColorScheme
24
+ raise RubyJard::Error, "#{color_scheme_class} must implement, and inherit from #{RubyJard::ColorScheme}"
25
+ end
26
+
27
+ @color_scheme_registry[name] = color_scheme_class
28
+ end
29
+
30
+ def [](name)
31
+ @color_scheme_registry[name.to_s.strip]
32
+ end
33
+ alias_method :get, :[]
34
+
35
+ def names
36
+ @color_scheme_registry.keys.sort.dup
37
+ end
38
+
39
+ def length
40
+ @color_scheme_registry.length
41
+ end
42
+
43
+ def each(&block)
44
+ @color_scheme_registry.each(&block)
45
+ end
46
+ end
47
+ end
48
+
49
+ require 'ruby_jard/color_schemes/deep_space_color_scheme'
50
+ require 'ruby_jard/color_schemes/256_color_scheme'
51
+ require 'ruby_jard/color_schemes/256_light_color_scheme'
52
+ require 'ruby_jard/color_schemes/gruvbox_color_scheme'
53
+ require 'ruby_jard/color_schemes/one_half_dark_color_scheme'
54
+ require 'ruby_jard/color_schemes/one_half_light_color_scheme'
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJard
4
+ class ColorSchemes
5
+ class X256ColorScheme < ColorScheme
6
+ # Basic 256 colors that nearly all terminal supports. Just for backward-compatibility
7
+ # https://en.wikipedia.org/wiki/ANSI_escape_code
8
+ GRAY1 = '234'
9
+ GRAY2 = '237'
10
+ GRAY3 = '239'
11
+ GRAY4 = '245'
12
+ GRAY5 = '249'
13
+ WHITE = '15'
14
+ RED = '167'
15
+ GREEN = '42'
16
+ YELLOW = '184'
17
+ BLUE = '75'
18
+ PURPLE = '177'
19
+ CYAN = '50'
20
+ ORANGE = '208'
21
+ PINK = '206'
22
+
23
+ BACKGROUND = nil
24
+ STYLES = {
25
+ background: [WHITE, BACKGROUND],
26
+ border: [GRAY2, BACKGROUND],
27
+ title: [GRAY1, BLUE],
28
+ title_secondary: [WHITE, GRAY3],
29
+ title_background: [GRAY2, GRAY2],
30
+ text_primary: [GRAY5, BACKGROUND],
31
+ text_dim: [GRAY4, BACKGROUND],
32
+ text_highlighted: [BLUE, BACKGROUND],
33
+ text_special: [ORANGE, BACKGROUND],
34
+ text_selected: [GREEN, BACKGROUND],
35
+ keyword: [BLUE, BACKGROUND],
36
+ method: [YELLOW, BACKGROUND],
37
+ comment: [GRAY4, BACKGROUND],
38
+ literal: [RED, BACKGROUND],
39
+ string: [GREEN, BACKGROUND],
40
+ local_variable: [PURPLE, BACKGROUND],
41
+ instance_variable: [PURPLE, BACKGROUND],
42
+ constant: [BLUE, BACKGROUND],
43
+ normal_token: [GRAY5, BACKGROUND],
44
+ object: [CYAN, BACKGROUND]
45
+ }.freeze
46
+ end
47
+ end
48
+ end
49
+
50
+ RubyJard::ColorSchemes.add_color_scheme('256', RubyJard::ColorSchemes::X256ColorScheme)
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJard
4
+ class ColorSchemes
5
+ class X256LightColorScheme < ColorScheme
6
+ # Shameless copy from https://github.com/sonph/onehalf/blob/master/vim/colors/onehalflight.vim
7
+ GRAY1 = '237'
8
+ GRAY2 = '252'
9
+ GRAY3 = '247'
10
+ GRAY4 = '247'
11
+ GRAY5 = '237'
12
+
13
+ WHITE = '231'
14
+ RED = '167'
15
+ GREEN = '22'
16
+ YELLOW = '136'
17
+ BLUE = '31'
18
+ PURPLE = '127'
19
+ CYAN = '31'
20
+
21
+ BACKGROUND = WHITE
22
+ STYLES = {
23
+ background: [GRAY5, BACKGROUND],
24
+ border: [GRAY3, BACKGROUND],
25
+ title: [WHITE, GREEN],
26
+ title_secondary: [GRAY5, GRAY2],
27
+ title_background: [GRAY3, BACKGROUND],
28
+ source_line_mark: [YELLOW, BACKGROUND],
29
+ source_lineno: [GRAY4, BACKGROUND],
30
+ text_primary: [GRAY5, BACKGROUND],
31
+ text_dim: [GRAY5, BACKGROUND],
32
+ text_highlighted: [BLUE, BACKGROUND],
33
+ text_special: [RED, BACKGROUND],
34
+ text_selected: [GREEN, BACKGROUND],
35
+ keyword: [PURPLE, BACKGROUND],
36
+ method: [BLUE, BACKGROUND],
37
+ comment: [GRAY4, BACKGROUND],
38
+ literal: [YELLOW, BACKGROUND],
39
+ string: [GREEN, BACKGROUND],
40
+ local_variable: [RED, BACKGROUND],
41
+ instance_variable: [RED, BACKGROUND],
42
+ constant: [YELLOW, BACKGROUND],
43
+ normal_token: [GRAY5, BACKGROUND],
44
+ object: [YELLOW, BACKGROUND]
45
+ }.freeze
46
+ end
47
+ end
48
+ end
49
+
50
+ RubyJard::ColorSchemes.add_color_scheme('256-light', RubyJard::ColorSchemes::X256LightColorScheme)
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJard
4
+ class ColorSchemes
5
+ class DeepSpaceColorScheme < ColorScheme
6
+ # Shameless copy from https://github.com/tyrannicaltoucan/vim-deep-space/blob/master/colors/deep-space.vim
7
+ GRAY1 = '#1b202a'
8
+ GRAY2 = '#232936'
9
+ GRAY3 = '#323c4d'
10
+ GRAY4 = '#51617d'
11
+ GRAY5 = '#9aa7bd'
12
+ WHITE = '#fff'
13
+ RED = '#b15e7c'
14
+ GREEN = '#80b57b'
15
+ YELLOW = '#e8cb6b'
16
+ BLUE = '#78b5ff'
17
+ PURPLE = '#b08aed'
18
+ CYAN = '#56adb7'
19
+ ORANGE = '#f28d5e'
20
+ PINK = '#c47ebd'
21
+
22
+ BACKGROUND = GRAY1
23
+ STYLES = {
24
+ background: [WHITE, BACKGROUND],
25
+ border: [GRAY3, BACKGROUND],
26
+ title: [GRAY2, BLUE],
27
+ title_secondary: [WHITE, GRAY3],
28
+ title_background: [GRAY2, GRAY2],
29
+ text_primary: [GRAY5, BACKGROUND],
30
+ text_dim: [GRAY4, BACKGROUND],
31
+ text_highlighted: [BLUE, BACKGROUND],
32
+ text_special: [ORANGE, BACKGROUND],
33
+ text_selected: [GREEN, BACKGROUND],
34
+ keyword: [BLUE, BACKGROUND],
35
+ method: [YELLOW, BACKGROUND],
36
+ comment: [GRAY4, BACKGROUND],
37
+ literal: [RED, BACKGROUND],
38
+ string: [GREEN, BACKGROUND],
39
+ local_variable: [PURPLE, BACKGROUND],
40
+ instance_variable: [PURPLE, BACKGROUND],
41
+ constant: [BLUE, BACKGROUND],
42
+ normal_token: [GRAY5, BACKGROUND],
43
+ object: [CYAN, BACKGROUND]
44
+ }.freeze
45
+ end
46
+ end
47
+ end
48
+
49
+ RubyJard::ColorSchemes.add_color_scheme('deep-space', RubyJard::ColorSchemes::DeepSpaceColorScheme)
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJard
4
+ class ColorSchemes
5
+ class GruvboxColorScheme < ColorScheme
6
+ # Shameless copy from https://github.com/morhetz/gruvbox
7
+ GRAY1 = '#282828'
8
+ GRAY2 = '#3c3836'
9
+ GRAY3 = '#504945'
10
+ GRAY4 = '#d5c4a1'
11
+ GRAY5 = '#ebdbb2'
12
+ WHITE = '#f9f5d7'
13
+ RED = '#fb4934'
14
+ GREEN = '#b8bb26'
15
+ YELLOW = '#fabd2f'
16
+ BLUE = '#83a598'
17
+ PURPLE = '#d3869b'
18
+ CYAN = '#8ec07c'
19
+ ORANGE = '#fe8019'
20
+
21
+ BACKGROUND = GRAY1
22
+ STYLES = {
23
+ background: [WHITE, BACKGROUND],
24
+ border: [GRAY3, BACKGROUND],
25
+ title: [GRAY2, BLUE],
26
+ title_secondary: [WHITE, GRAY3],
27
+ title_background: [GRAY2, GRAY2],
28
+ text_primary: [GRAY5, BACKGROUND],
29
+ text_dim: [GRAY4, BACKGROUND],
30
+ text_highlighted: [BLUE, BACKGROUND],
31
+ text_special: [ORANGE, BACKGROUND],
32
+ text_selected: [GREEN, BACKGROUND],
33
+ keyword: [BLUE, BACKGROUND],
34
+ method: [YELLOW, BACKGROUND],
35
+ comment: [GRAY4, BACKGROUND],
36
+ literal: [RED, BACKGROUND],
37
+ string: [GREEN, BACKGROUND],
38
+ local_variable: [PURPLE, BACKGROUND],
39
+ instance_variable: [PURPLE, BACKGROUND],
40
+ constant: [BLUE, BACKGROUND],
41
+ normal_token: [GRAY5, BACKGROUND],
42
+ object: [CYAN, BACKGROUND]
43
+ }.freeze
44
+ end
45
+ end
46
+ end
47
+
48
+ RubyJard::ColorSchemes.add_color_scheme('gruvbox', RubyJard::ColorSchemes::GruvboxColorScheme)
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJard
4
+ class ColorSchemes
5
+ class OneHalfDarkColorScheme < ColorScheme
6
+ # Shameless copy from https://github.com/sonph/onehalf/blob/master/vim/colors/onehalfdark.vim
7
+ GRAY1 = '#282c34'
8
+ GRAY2 = '#313640'
9
+ GRAY3 = '#5c6370'
10
+ GRAY4 = '#dcdfe4'
11
+ GRAY5 = '#dcdfe4'
12
+ WHITE = '#dcdfe4'
13
+ RED = '#e06c75'
14
+ GREEN = '#98c379'
15
+ YELLOW = '#e5c07b'
16
+ BLUE = '#61afef'
17
+ PURPLE = '#c678dd'
18
+ CYAN = '#56b6c2'
19
+
20
+ BACKGROUND = GRAY1
21
+ STYLES = {
22
+ background: [WHITE, BACKGROUND],
23
+ border: [GRAY3, BACKGROUND],
24
+ title: [GRAY2, GREEN],
25
+ title_secondary: [WHITE, GRAY3],
26
+ title_background: [GRAY2, GRAY2],
27
+ text_primary: [GRAY5, BACKGROUND],
28
+ text_dim: [GRAY4, BACKGROUND],
29
+ text_highlighted: [GREEN, BACKGROUND],
30
+ text_special: [GREEN, BACKGROUND],
31
+ text_selected: [YELLOW, BACKGROUND],
32
+ keyword: [PURPLE, BACKGROUND],
33
+ method: [BLUE, BACKGROUND],
34
+ comment: [GRAY4, BACKGROUND],
35
+ literal: [YELLOW, BACKGROUND],
36
+ string: [GREEN, BACKGROUND],
37
+ local_variable: [RED, BACKGROUND],
38
+ instance_variable: [RED, BACKGROUND],
39
+ constant: [YELLOW, BACKGROUND],
40
+ normal_token: [GRAY5, BACKGROUND],
41
+ object: [YELLOW, BACKGROUND]
42
+ }.freeze
43
+ end
44
+ end
45
+ end
46
+
47
+ RubyJard::ColorSchemes.add_color_scheme('one-half-dark', RubyJard::ColorSchemes::OneHalfDarkColorScheme)
@@ -0,0 +1,49 @@
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
+ text_primary: [GRAY5, BACKGROUND],
30
+ text_dim: [GRAY4, BACKGROUND],
31
+ text_highlighted: [BLUE, BACKGROUND],
32
+ text_special: [RED, BACKGROUND],
33
+ text_selected: [GREEN, BACKGROUND],
34
+ keyword: [PURPLE, BACKGROUND],
35
+ method: [BLUE, BACKGROUND],
36
+ comment: [GRAY4, BACKGROUND],
37
+ literal: [YELLOW, BACKGROUND],
38
+ string: [GREEN, BACKGROUND],
39
+ local_variable: [RED, BACKGROUND],
40
+ instance_variable: [RED, BACKGROUND],
41
+ constant: [YELLOW, BACKGROUND],
42
+ normal_token: [GRAY5, BACKGROUND],
43
+ object: [YELLOW, BACKGROUND]
44
+ }.freeze
45
+ end
46
+ end
47
+ end
48
+
49
+ RubyJard::ColorSchemes.add_color_scheme('one-half-light', RubyJard::ColorSchemes::OneHalfLightColorScheme)
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJard
4
+ ##
5
+ # This class is an object to contain information of a column in a data drow display on a screen
6
+ class Column
7
+ # Only break at breakable word
8
+ # | this_is_a <endline> |
9
+ # | really_long_content |
10
+ WORD_WRAP_NORMAL = :normal
11
+ # Break the word, and move the rest to the next line
12
+ # | this_is_a really_lon|
13
+ # | g_content |
14
+ WORD_WRAP_BREAK_WORD = :break_word
15
+ extend Forwardable
16
+
17
+ attr_accessor :spans, :content_length, :width, :content_width, :word_wrap
18
+
19
+ def initialize(spans: [], word_wrap: WORD_WRAP_NORMAL)
20
+ @spans = spans
21
+ @width = 0
22
+ @content_length = 0
23
+ @word_wrap = word_wrap
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJard
4
+ module Commands
5
+ ##
6
+ # Helper to dedocrate command output
7
+ module ColorHelpers
8
+ def special(content)
9
+ color_decorator.decorate(:text_special, content)
10
+ end
11
+
12
+ def secondary(content)
13
+ color_decorator.decorate(:text_primary, content)
14
+ end
15
+
16
+ def highlight(content)
17
+ color_decorator.decorate(:text_highlighted, content)
18
+ end
19
+
20
+ def pick_color_scheme
21
+ (
22
+ RubyJard::ColorSchemes[RubyJard.config.color_scheme] ||
23
+ RubyJard::ColorSchemes[RubyJard::Config::DEFAULT_COLOR_SCHEME]
24
+ ).new
25
+ end
26
+
27
+ def color_decorator
28
+ @color_decorator ||= RubyJard::Decorators::ColorDecorator.new(pick_color_scheme)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -3,9 +3,6 @@
3
3
  module RubyJard
4
4
  module Commands
5
5
  # Command used to continue program execution.
6
- # Data attached in the throw:
7
- # * command: constant symbol (:continue)
8
- # * pry: current context pry instance
9
6
  class ContinueCommand < Pry::ClassCommand
10
7
  group 'RubyJard'
11
8
  description 'Continue program execution.'
@@ -14,20 +11,18 @@ module RubyJard
14
11
 
15
12
  banner <<-BANNER
16
13
  Usage: continue
17
-
18
- Continue program execution. The program will stop at the next breakpoint, or run until it finishes.
19
-
20
14
  Examples:
21
15
  continue
16
+
17
+ Continue program execution. The program will stop at the next breakpoint, or run until it finishes.
22
18
  BANNER
23
19
 
24
20
  def process
25
- throw :control_flow, command: :continue, pry: pry_instance
26
- ensure
27
- Byebug.stop if Byebug.stoppable?
21
+ RubyJard::ControlFlow.dispatch(:continue)
28
22
  end
29
23
  end
30
24
  end
31
25
  end
32
26
 
33
27
  Pry::Commands.add_command(RubyJard::Commands::ContinueCommand)
28
+ Pry::Commands.alias_command 'c', 'continue'