helium-console 0.1.9 → 0.1.13
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/workflows/pull_request.yml +37 -0
- data/.rspec +0 -1
- data/.rubocop.yml +18 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +9 -1
- data/README.md +69 -13
- data/bin/console +1 -1
- data/lib/helium/console/colorized_string.rb +31 -0
- data/lib/helium/console/formatter.rb +127 -0
- data/lib/helium/console/formatters/overflow/wrap.rb +2 -0
- data/lib/helium/console/key_value.rb +130 -0
- data/lib/helium/console/printer.rb +16 -4
- data/lib/helium/console/prompt.rb +44 -0
- data/lib/helium/console/registry/array.rb +22 -11
- data/lib/helium/console/registry/booleans.rb +2 -2
- data/lib/helium/console/registry/date.rb +15 -0
- data/lib/helium/console/registry/hash.rb +29 -14
- data/lib/helium/console/registry/method.rb +64 -0
- data/lib/helium/console/registry/module.rb +18 -6
- data/lib/helium/console/registry/nil.rb +1 -1
- data/lib/helium/console/registry/numeric.rb +7 -1
- data/lib/helium/console/registry/object.rb +21 -40
- data/lib/helium/console/registry/pathname.rb +11 -0
- data/lib/helium/console/registry/set.rb +91 -0
- data/lib/helium/console/registry/string.rb +32 -12
- data/lib/helium/console/registry/symbol.rb +1 -1
- data/lib/helium/console/registry/time.rb +15 -0
- data/lib/helium/console/registry.rb +16 -60
- data/lib/helium/console/version.rb +1 -1
- data/lib/helium/console.rb +45 -29
- metadata +12 -4
- data/lib/helium/console/registry/table.rb +0 -82
- data/lib/helium/console/table.rb +0 -23
data/lib/helium/console.rb
CHANGED
@@ -6,10 +6,12 @@ require 'helium/console/version'
|
|
6
6
|
require 'helium/console/formatters/indent'
|
7
7
|
require 'helium/console/formatters/overflow'
|
8
8
|
require 'helium/console/formatters/max_lines'
|
9
|
-
require 'helium/console/
|
9
|
+
require 'helium/console/colorized_string'
|
10
|
+
require 'helium/console/key_value'
|
10
11
|
require 'helium/console/registry'
|
11
12
|
|
12
13
|
require 'helium/console/printer'
|
14
|
+
require 'helium/console/prompt'
|
13
15
|
|
14
16
|
module Helium
|
15
17
|
class Console
|
@@ -23,15 +25,32 @@ module Helium
|
|
23
25
|
Symbol
|
24
26
|
].freeze
|
25
27
|
|
28
|
+
def self.start(target = nil, options = {})
|
29
|
+
options = {
|
30
|
+
print: ColorPrinter.method(:default),
|
31
|
+
prompt: Prompt.new.pry_prompt
|
32
|
+
}.merge(options)
|
33
|
+
|
34
|
+
Pry.start(target, options)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.define_formatter_for(klass, &handler)
|
38
|
+
Registry.instance_formatters.define(klass, &handler)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.define_class_formatter_for(klass, &handler)
|
42
|
+
Registry.class_formatters.define(klass, &handler)
|
43
|
+
end
|
44
|
+
|
26
45
|
class << self
|
27
46
|
def instance
|
28
|
-
@instance ||= new
|
47
|
+
@instance ||= new
|
29
48
|
end
|
30
49
|
|
31
|
-
def method_missing(name, *args, &block)
|
50
|
+
def method_missing(name, *args, **keywords, &block)
|
32
51
|
super unless instance.respond_to?(name)
|
33
52
|
|
34
|
-
instance.public_send(name, *args, &block)
|
53
|
+
instance.public_send(name, *args, **keywords, &block)
|
35
54
|
end
|
36
55
|
|
37
56
|
def respond_to_missing?(name, private = false)
|
@@ -39,51 +58,38 @@ module Helium
|
|
39
58
|
end
|
40
59
|
end
|
41
60
|
|
42
|
-
def initialize(
|
43
|
-
@
|
61
|
+
def initialize(instance_registry: nil, class_registry: nil)
|
62
|
+
@instance_registry = instance_registry || Registry.instance_formatters
|
63
|
+
@class_registry = class_registry || Registry.class_formatters
|
44
64
|
end
|
45
65
|
|
46
|
-
def format(object, **options)
|
66
|
+
def format(object, style = nil, **options)
|
47
67
|
options = default_options.merge(options)
|
48
68
|
return '(...)' if options[:ignore_objects].include?(object.object_id)
|
49
69
|
|
50
|
-
|
51
|
-
|
52
|
-
if handler
|
53
|
-
handler.()
|
54
|
-
else
|
55
|
-
format(object.inspect, **options)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def register(klass, &handler)
|
60
|
-
registry.add(klass, &handler)
|
70
|
+
handler_for(object, style, **options).()
|
61
71
|
end
|
62
72
|
|
63
|
-
def
|
64
|
-
registry.define(klass, &handler)
|
65
|
-
end
|
66
|
-
|
67
|
-
def simple?(object)
|
73
|
+
def simple?(object, style = nil, **options)
|
68
74
|
SIMPLE_OBJECTS.any? { |simple_obj_class| object.is_a? simple_obj_class } ||
|
69
|
-
|
75
|
+
handler_for(object, style, **options).simple?
|
70
76
|
end
|
71
77
|
|
72
78
|
def default_options
|
73
79
|
{
|
74
80
|
overflow: :wrap,
|
75
81
|
indent: 0,
|
76
|
-
max_width: `tput cols`.chomp.to_i,
|
77
82
|
level: 1,
|
78
|
-
ignore_objects: []
|
83
|
+
ignore_objects: [],
|
84
|
+
short: false
|
79
85
|
}
|
80
86
|
end
|
81
87
|
|
82
88
|
def format_string(string, ellipses: '...', **options)
|
83
89
|
options = default_options.merge(options)
|
84
|
-
|
90
|
+
max_width_without_indent = (options[:max_width] - options[:indent]) if options[:max_width]
|
85
91
|
formatters = [
|
86
|
-
Formatters::Overflow.get(options[:overflow]).new(max_width:
|
92
|
+
Formatters::Overflow.get(options[:overflow]).new(max_width: max_width_without_indent),
|
87
93
|
Formatters::Indent.new(options[:indent]),
|
88
94
|
Formatters::MaxLines.new(
|
89
95
|
max_lines: options[:max_lines],
|
@@ -99,7 +105,17 @@ module Helium
|
|
99
105
|
|
100
106
|
private
|
101
107
|
|
102
|
-
attr_reader :
|
108
|
+
attr_reader :instance_registry, :class_registry
|
109
|
+
|
110
|
+
def handler_for(object, style, **options)
|
111
|
+
formatter_class = if object.is_a? Module
|
112
|
+
class_registry.handler_for(object)
|
113
|
+
else
|
114
|
+
instance_registry.handler_for(object.class)
|
115
|
+
end
|
116
|
+
|
117
|
+
formatter_class&.new(object, style, self, **options)
|
118
|
+
end
|
103
119
|
end
|
104
120
|
end
|
105
121
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: helium-console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stanislaw Klajn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -45,6 +45,7 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
+
- ".github/workflows/pull_request.yml"
|
48
49
|
- ".gitignore"
|
49
50
|
- ".rspec"
|
50
51
|
- ".rubocop.yml"
|
@@ -59,23 +60,30 @@ files:
|
|
59
60
|
- bin/setup
|
60
61
|
- helium-console.gemspec
|
61
62
|
- lib/helium/console.rb
|
63
|
+
- lib/helium/console/colorized_string.rb
|
64
|
+
- lib/helium/console/formatter.rb
|
62
65
|
- lib/helium/console/formatters/indent.rb
|
63
66
|
- lib/helium/console/formatters/max_lines.rb
|
64
67
|
- lib/helium/console/formatters/overflow.rb
|
65
68
|
- lib/helium/console/formatters/overflow/wrap.rb
|
69
|
+
- lib/helium/console/key_value.rb
|
66
70
|
- lib/helium/console/printer.rb
|
71
|
+
- lib/helium/console/prompt.rb
|
67
72
|
- lib/helium/console/registry.rb
|
68
73
|
- lib/helium/console/registry/array.rb
|
69
74
|
- lib/helium/console/registry/booleans.rb
|
75
|
+
- lib/helium/console/registry/date.rb
|
70
76
|
- lib/helium/console/registry/hash.rb
|
77
|
+
- lib/helium/console/registry/method.rb
|
71
78
|
- lib/helium/console/registry/module.rb
|
72
79
|
- lib/helium/console/registry/nil.rb
|
73
80
|
- lib/helium/console/registry/numeric.rb
|
74
81
|
- lib/helium/console/registry/object.rb
|
82
|
+
- lib/helium/console/registry/pathname.rb
|
83
|
+
- lib/helium/console/registry/set.rb
|
75
84
|
- lib/helium/console/registry/string.rb
|
76
85
|
- lib/helium/console/registry/symbol.rb
|
77
|
-
- lib/helium/console/registry/
|
78
|
-
- lib/helium/console/table.rb
|
86
|
+
- lib/helium/console/registry/time.rb
|
79
87
|
- lib/helium/console/version.rb
|
80
88
|
homepage: https://github.com/helium-rb/console
|
81
89
|
licenses:
|
@@ -1,82 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Helium
|
4
|
-
class Console
|
5
|
-
define_formatter_for Table do
|
6
|
-
def call
|
7
|
-
[
|
8
|
-
*formatted_values,
|
9
|
-
truncation
|
10
|
-
].compact.join("\n")
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def formatted_values
|
16
|
-
rows.flat_map do |key, value, options = {}|
|
17
|
-
format_pair(key, value, **options)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def format_pair(key, value, **options)
|
22
|
-
formatted_value = format_nested(value, max_width: max_value_width, **options)
|
23
|
-
|
24
|
-
formatted_value.lines.map.with_index do |line, index|
|
25
|
-
[
|
26
|
-
object.runner,
|
27
|
-
text_or_blank(rjust(format_key(key), key_width), blank: index > 0),
|
28
|
-
text_or_blank(object.after_key, blank: index > 0),
|
29
|
-
line.chomp
|
30
|
-
].join
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def text_or_blank(text, blank:)
|
35
|
-
return text unless blank
|
36
|
-
|
37
|
-
' ' * length_of(text)
|
38
|
-
end
|
39
|
-
|
40
|
-
def key_width
|
41
|
-
@key_width ||= rows
|
42
|
-
.map(&:first)
|
43
|
-
.map(&method(:format_key))
|
44
|
-
.map(&method(:length_of))
|
45
|
-
.max
|
46
|
-
end
|
47
|
-
|
48
|
-
def max_value_width
|
49
|
-
max_width - length_of(object.runner) - key_width - length_of(object.after_key)
|
50
|
-
end
|
51
|
-
|
52
|
-
def format_key(key)
|
53
|
-
object.format_keys ? format(key, max_width: 15, level: 3) : key
|
54
|
-
end
|
55
|
-
|
56
|
-
def rjust(string, width)
|
57
|
-
' ' * (width - length_of(string)) + string
|
58
|
-
end
|
59
|
-
|
60
|
-
def rows
|
61
|
-
@rows ||= case level
|
62
|
-
when 1 then object.rows
|
63
|
-
when 2 then rows_limited_by(10)
|
64
|
-
else rows_limited_by(3)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def rows_limited_by(number)
|
69
|
-
object.rows.count <= number ? object.rows : object.rows.first(number - 1)
|
70
|
-
end
|
71
|
-
|
72
|
-
def truncation
|
73
|
-
return unless object.rows.length > rows.length
|
74
|
-
|
75
|
-
[
|
76
|
-
object.runner,
|
77
|
-
light_black("(#{object.rows.length - rows.length} more)")
|
78
|
-
].join
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
data/lib/helium/console/table.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Helium
|
4
|
-
class Console
|
5
|
-
class Table
|
6
|
-
def initialize(runner: '|', after_key: ' ', format_keys: true)
|
7
|
-
@runner = runner
|
8
|
-
@after_key = after_key
|
9
|
-
@format_keys = format_keys
|
10
|
-
end
|
11
|
-
|
12
|
-
attr_reader :runner, :after_key, :format_keys
|
13
|
-
|
14
|
-
def row(key, value, **options)
|
15
|
-
rows << [key, value, options]
|
16
|
-
end
|
17
|
-
|
18
|
-
def rows
|
19
|
-
@rows ||= []
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|