helium-console 0.1.1 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54fc81366dbb279e9171184f31ff7135a786bc4d580c87d09c2d2c7b6b2356aa
4
- data.tar.gz: dc4b4b8558dd42e2bffa3e9a7d08c0219d69ab5acb8b508742552924dfe70c7e
3
+ metadata.gz: e6e87b40fb5846db36163081102d3a414bdecdbdc782f6f4c0da3f0001536fd7
4
+ data.tar.gz: 1ba3c78a6f962b1a64e883d350c35618e6bbcad4de3a2ac789058a90f0efceff
5
5
  SHA512:
6
- metadata.gz: a76d12e67666b760c17c7b3688cba45e47313a29d03f6c08a7bb9e278c55b2abbb7de882eb3f258a4ae61614afb53c41dc288966945bf66ff65601f88819bac4
7
- data.tar.gz: 4fec3cb33980a14cf3e9f7cbbf09a93f4707438076b1009bccfdc02f61184a002b6fb37c19a12cc993f5d4f1a1f1fe276e481bda1e1a09166251cd0532090e6b
6
+ metadata.gz: 9dd45ae18f91693ef71bff49a32a7fa09d0a0fa1d2eae81ed92b0d1b34f110085eea6004fcfe2241f372f3407d0aedb42d4bb521eaf40de71be43bb8e7cd265e
7
+ data.tar.gz: 0e7a3083dc49d4e3798ac54e0c6636a589f783b4faa41c544d9970bcc694d7ea22b82297f757c788965e9908675b6df340149521cb9dd97ab7e9200cd2bc0200
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- helium-console (0.1.1)
4
+ helium-console (0.1.6)
5
+ colorize
5
6
  pry
6
7
 
7
8
  GEM
@@ -9,6 +10,7 @@ GEM
9
10
  specs:
10
11
  byebug (11.1.3)
11
12
  coderay (1.1.3)
13
+ colorize (0.8.1)
12
14
  diff-lcs (1.4.4)
13
15
  ffaker (2.18.0)
14
16
  method_source (1.0.0)
data/bin/console CHANGED
@@ -6,4 +6,10 @@ require "helium/console"
6
6
  require 'byebug'
7
7
  require 'ffaker'
8
8
 
9
+ class A
10
+ def initialize(a)
11
+ @a = a
12
+ end
13
+ end
14
+
9
15
  Pry.start
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
24
  spec.require_paths = ["lib"]
25
25
  spec.add_dependency "pry"
26
+ spec.add_dependency "colorize"
26
27
  end
@@ -39,6 +39,8 @@ module Helium
39
39
 
40
40
  def format(object, **options)
41
41
  options = default_options.merge(options)
42
+ return "(...)" if options[:ignore_objects].include?(object.object_id)
43
+
42
44
  handler = registry.handler_for(object, **options)
43
45
 
44
46
  if handler
@@ -57,16 +59,17 @@ module Helium
57
59
  end
58
60
 
59
61
  def simple?(object)
60
- SIMPLE_OBJECTS.any? {|simple_obj_class| object.is_a? simple_obj_class }
62
+ SIMPLE_OBJECTS.any? {|simple_obj_class| object.is_a? simple_obj_class } ||
63
+ registry.handler_for(object).is_simple
61
64
  end
62
65
 
63
66
  def default_options
64
67
  {
65
68
  overflow: :wrap,
66
69
  indent: 0,
67
- max_lines: nil,
68
70
  max_width: `tput cols`.chomp.to_i,
69
- level: 1
71
+ level: 1,
72
+ ignore_objects: [],
70
73
  }
71
74
  end
72
75
 
@@ -1,3 +1,5 @@
1
+ require 'colorized_string'
2
+
1
3
  module Helium
2
4
  class Console
3
5
  class Registry
@@ -9,8 +11,12 @@ module Helium
9
11
 
10
12
  attr_reader :object, :options
11
13
 
12
- def format(object, **options)
13
- Helium::Console.format(object, **nested_opts(options))
14
+ def format_nested(other_object, **options)
15
+ Helium::Console.format(other_object, **nested_opts(options))
16
+ end
17
+
18
+ def format(other_object, **options)
19
+ Helium::Console.format(other_object, **nested_opts(options, increase_level: false))
14
20
  end
15
21
 
16
22
  def format_string(string, **options)
@@ -21,13 +27,23 @@ module Helium
21
27
  Helium::Console.simple?(object)
22
28
  end
23
29
 
30
+ def is_simple
31
+ false
32
+ end
33
+
24
34
  def method_missing(name, *args)
25
35
  return @options[name] if @options.key?(name)
36
+ if ColorizedString.colors.include?(name)
37
+ return ColorizedString.new(*args).colorize(name)
38
+ end
26
39
  super
27
40
  end
28
41
 
29
- def nested_opts(options)
30
- { level: @options[:level] + 1 }.merge(options)
42
+ def nested_opts(new_options, increase_level: true)
43
+ new_options = options.merge(new_options)
44
+ new_options[:level] += 1 if increase_level
45
+ new_options[:ignore_objects] << object.object_id
46
+ new_options
31
47
  end
32
48
  end
33
49
 
@@ -2,21 +2,27 @@ module Helium
2
2
  class Console
3
3
  define_formatter_for Array do
4
4
  def call
5
+ return "[]" if object.none?
5
6
  return format_inline_with_truncation if force_inline?
7
+
6
8
  format_inline_with_no_truncation || format_as_table
7
9
  end
8
10
 
11
+ def is_simple
12
+ object.none?
13
+ end
14
+
9
15
  private
10
16
 
11
17
  def format_as_table
12
18
  table = Table.new(runner: ' ', format_keys: false)
13
19
  object.each.with_index do |element, index|
14
- table.row("[#{index}]:", element)
20
+ table.row(light_black("[#{index}]:"), element)
15
21
  end
16
22
 
17
23
  [
18
24
  "[",
19
- format(table, **options),
25
+ format(table),
20
26
  "]"
21
27
  ].join($/)
22
28
  end
@@ -27,7 +33,7 @@ module Helium
27
33
  total = object.length
28
34
 
29
35
  object.each.with_index do |element, index|
30
- formatted = format(element, max_lines: 1, nesting: 1, max_width: 15)
36
+ formatted = format_nested(element, max_lines: 1, nesting: 1, max_width: 15)
31
37
 
32
38
  new_joined = [joined, formatted].compact.join(" | ")
33
39
  new_trunc = (" | (#{total - index - 1} #{index.zero? ? 'elements' : 'more'})" unless index == total - 1)
@@ -52,7 +58,7 @@ module Helium
52
58
  object.each do |element|
53
59
  return unless simple?(element)
54
60
 
55
- formatted = format(element)
61
+ formatted = format_nested(element)
56
62
  joined = [joined, formatted].compact.join(" | ")
57
63
 
58
64
  return if joined.length > max_width - 4
@@ -0,0 +1,15 @@
1
+ module Helium
2
+ class Console
3
+ define_formatter_for TrueClass do
4
+ def call
5
+ green('true')
6
+ end
7
+ end
8
+
9
+ define_formatter_for FalseClass do
10
+ def call
11
+ red('false')
12
+ end
13
+ end
14
+ end
15
+ end
@@ -9,9 +9,9 @@ module Helium
9
9
  private
10
10
 
11
11
  def format_as_table
12
- table = Table.new(runner: ' ', after_key: all_symbol? ? ": " : " => ", format_keys: !all_symbol?)
12
+ table = Table.new(runner: ' ', after_key: after_key, format_keys: !all_symbol?)
13
13
  object.each do |key, value|
14
- key = key.to_s if all_symbol?
14
+ key = light_blue(key.to_s) if all_symbol?
15
15
  table.row(key, value)
16
16
  end
17
17
 
@@ -66,12 +66,16 @@ module Helium
66
66
  end
67
67
 
68
68
  def force_inline?
69
- (max_lines && max_lines < 5) || level > 2
69
+ level > 2
70
70
  end
71
71
 
72
72
  def all_symbol?
73
73
  object.keys.all? { |key| key.is_a? Symbol }
74
74
  end
75
+
76
+ def after_key
77
+ all_symbol? ? light_blue(": ") : light_black(" => ")
78
+ end
75
79
  end
76
80
  end
77
81
  end
@@ -0,0 +1,16 @@
1
+ module Helium
2
+ class Console
3
+ define_formatter_for Module do
4
+ def call
5
+ light_yellow(object.name || anonymus_text)
6
+ end
7
+
8
+ private
9
+
10
+ def anonymus_text
11
+ closest = object.ancestors.find(&:name).name
12
+ "(anonymous #{closest})"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ module Helium
2
+ class Console
3
+ define_formatter_for NilClass do
4
+ def call
5
+ light_black('nil')
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Helium
2
+ class Console
3
+ define_formatter_for Numeric do
4
+ def call
5
+ light_cyan(object.to_s)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,14 +1,69 @@
1
1
  module Helium
2
2
  class Console
3
- register Object do
4
- formatters = [
5
- Formatters::Overflow.get(overflow).new(max_width: max_width - indent),
6
- Formatters::Indent.new(indent),
7
- Formatters::MaxLines.new(max_lines: max_lines, max_width: max_width, ellipses: "...")
8
- ]
9
-
10
- formatters.inject(object.inspect) do |string, formatter|
11
- formatter.call(string)
3
+ define_formatter_for Object do
4
+ def call
5
+ return format_inline_with_truncation if force_inline?
6
+ format_as_table
7
+ end
8
+
9
+ private
10
+
11
+ def format_as_table
12
+ table = Table.new(runner: light_black('| '), after_key: light_black(": "), format_keys: false)
13
+
14
+ object.instance_variables.each do |inst|
15
+ table.row(magenta(inst.to_s), object.instance_variable_get(inst))
16
+ end
17
+
18
+ [
19
+ table_header,
20
+ format(table),
21
+ ].reject(&:empty?).join($/)
22
+ end
23
+
24
+ def format_inline_with_truncation
25
+ "#{object.class.name}##{object.object_id.to_s(16)}"
26
+ end
27
+
28
+ def format_inline_with_no_truncation
29
+ joined = nil
30
+
31
+ object.each do |key, value|
32
+ return unless simple?(value)
33
+
34
+ formatted_key = format(key, level: 3, max_with: 15)
35
+ formatted_value = format(value, level: 3, max_width: 15)
36
+ formatted = "#{formatted_key} => #{formatted_value}"
37
+
38
+ joined = [joined, formatted].compact.join(", ")
39
+
40
+ return if joined.length > max_width - 4
41
+ end
42
+ joined = " #{joined} " if joined
43
+ ["{", joined, "}"].compact.join
44
+ end
45
+
46
+ def table_header
47
+ type = case object
48
+ when Class then :class
49
+ when Module then :module
50
+ else :instance
51
+ end
52
+ klass = type == :instance ? object.class : object
53
+ klass_name = klass.name
54
+ if !klass_name
55
+ named_ancestor = klass.ancestors.find(&:name)
56
+ klass_name = ['anonymous', named_ancestor&.name].compact.join(" ")
57
+ end
58
+ "#{light_black('#')} #{light_yellow(klass_name)} #{type}"
59
+ end
60
+
61
+ def force_inline?
62
+ level > 2
63
+ end
64
+
65
+ def all_symbol?
66
+ object.keys.all? { |key| key.is_a? Symbol }
12
67
  end
13
68
  end
14
69
  end
@@ -2,17 +2,20 @@ module Helium
2
2
  class Console
3
3
  define_formatter_for String do
4
4
  def call
5
- Helium::Console.format_string(
5
+ formatted = Helium::Console.format_string(
6
6
  object.dump.gsub('\n', "\n"),
7
7
  max_width: max_width,
8
8
  max_lines: max_lines,
9
9
  overflow: overflow,
10
10
  ellipses: "...\""
11
11
  )
12
+
13
+ formatted.lines
14
+ .map { |line| light_green(line) }
15
+ .join
12
16
  end
13
17
 
14
18
  def max_lines
15
- return options[:max_lines] if options[:max_lines]
16
19
  case level
17
20
  when 1 then nil
18
21
  when 2 then 3
@@ -0,0 +1,9 @@
1
+ module Helium
2
+ class Console
3
+ define_formatter_for Symbol do
4
+ def call
5
+ light_blue(':' + object.to_s)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -2,38 +2,73 @@ module Helium
2
2
  class Console
3
3
  define_formatter_for Table do
4
4
  def call
5
- formatted_values.join($/)
5
+ [
6
+ *formatted_values,
7
+ truncation,
8
+ ].compact.join($/)
6
9
  end
7
10
 
8
11
  def formatted_values
9
- object.rows.flat_map do |key, value|
10
- formatted_value = format(value, max_width: max_value_width)
12
+ rows.flat_map do |key, value|
13
+ formatted_value = format_nested(value, max_width: max_value_width)
11
14
 
12
15
  formatted_value.lines.map.with_index do |line, index|
13
16
  [
14
17
  object.runner,
15
- index.zero? ? format_key(key).rjust(key_width) : " " * key_width,
16
- index.zero? ? object.after_key : " " * object.after_key.length,
18
+ index.zero? ? rjust(format_key(key), key_width) : " " * key_width,
19
+ index.zero? ? object.after_key : " " * length_of(object.after_key),
17
20
  line.chomp,
18
21
  ].join
19
22
  end
20
23
  end
21
24
  end
22
25
 
26
+ def truncation
27
+ return unless object.rows.length > rows.length
28
+
29
+ [
30
+ object.runner,
31
+ light_black("(#{object.rows.length - rows.length} more)")
32
+ ].join
33
+ end
34
+
35
+
23
36
  def key_width
24
- @key_width ||= object.rows
37
+ @key_width ||= rows
25
38
  .map(&:first)
26
39
  .map(&method(:format_key))
27
- .map(&:length).max
40
+ .map(&method(:length_of))
41
+ .max
28
42
  end
29
43
 
30
44
  def max_value_width
31
- max_width - object.runner.length - key_width - object.after_key.length
45
+ max_width - length_of(object.runner) - key_width - length_of(object.after_key)
32
46
  end
33
47
 
34
48
  def format_key(key)
35
- return key unless object.format_keys
36
- format(key, max_width: 15, level: 3)
49
+ object.format_keys ? format(key, max_width: 15, level: 3) : key
50
+ end
51
+
52
+ def rjust(string, width)
53
+ " " * (width - length_of(string)) + string
54
+ end
55
+
56
+ def length_of(string)
57
+ if string.respond_to?(:uncolorize)
58
+ string.uncolorize.length
59
+ else
60
+ string.length
61
+ end
62
+ end
63
+
64
+ def rows
65
+ @rows ||= case level
66
+ when 1 then object.rows
67
+ when 2
68
+ object.rows.count < 10 ? object.rows : object.rows.first(9)
69
+ else
70
+ object.rows.count < 3 ? object.rows : object.rows.first(2)
71
+ end
37
72
  end
38
73
  end
39
74
  end
@@ -1,5 +1,5 @@
1
1
  module Helium
2
2
  class Console
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.6"
4
4
  end
5
5
  end
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.1
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stanislaw Klajn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-05 00:00:00.000000000 Z
11
+ date: 2021-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description:
28
42
  email:
29
43
  - sklajn@gmail.com
@@ -51,9 +65,14 @@ files:
51
65
  - lib/helium/console/printer.rb
52
66
  - lib/helium/console/registry.rb
53
67
  - lib/helium/console/registry/array.rb
68
+ - lib/helium/console/registry/booleans.rb
54
69
  - lib/helium/console/registry/hash.rb
70
+ - lib/helium/console/registry/module.rb
71
+ - lib/helium/console/registry/nil.rb
72
+ - lib/helium/console/registry/numeric.rb
55
73
  - lib/helium/console/registry/object.rb
56
74
  - lib/helium/console/registry/string.rb
75
+ - lib/helium/console/registry/symbol.rb
57
76
  - lib/helium/console/registry/table.rb
58
77
  - lib/helium/console/table.rb
59
78
  - lib/helium/console/version.rb