helium-console 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54fc81366dbb279e9171184f31ff7135a786bc4d580c87d09c2d2c7b6b2356aa
4
- data.tar.gz: dc4b4b8558dd42e2bffa3e9a7d08c0219d69ab5acb8b508742552924dfe70c7e
3
+ metadata.gz: 6a2672ea42122aee52ae7909753311b9de9bd2c2eb8692447866ed5fdb922692
4
+ data.tar.gz: aa861ce67edc5c52cafc935bc9f1d4055083b68be88157daef22374786e29980
5
5
  SHA512:
6
- metadata.gz: a76d12e67666b760c17c7b3688cba45e47313a29d03f6c08a7bb9e278c55b2abbb7de882eb3f258a4ae61614afb53c41dc288966945bf66ff65601f88819bac4
7
- data.tar.gz: 4fec3cb33980a14cf3e9f7cbbf09a93f4707438076b1009bccfdc02f61184a002b6fb37c19a12cc993f5d4f1a1f1fe276e481bda1e1a09166251cd0532090e6b
6
+ metadata.gz: e60e2768854ffb479b8f10f1cc4e0c54fc9ab9655df4a11c1cef59fe3d9c28d792c836b2e98f02af9f557c2b31e562407942e288adbc32c3d91f2eb3ca8ee186
7
+ data.tar.gz: bde8f3aef8d9bd208ec740d0f35b60400ab39872b4a5a8fca3a05acb97701fe6603352aac1333556ed791b2e8e10a5397a95ad1a5019d4800116505d8ca03f3c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- helium-console (0.1.1)
4
+ helium-console (0.1.2)
5
5
  pry
6
6
 
7
7
  GEM
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
@@ -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,7 +59,8 @@ 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
@@ -66,7 +69,8 @@ module Helium
66
69
  indent: 0,
67
70
  max_lines: nil,
68
71
  max_width: `tput cols`.chomp.to_i,
69
- level: 1
72
+ level: 1,
73
+ ignore_objects: [],
70
74
  }
71
75
  end
72
76
 
@@ -9,8 +9,12 @@ module Helium
9
9
 
10
10
  attr_reader :object, :options
11
11
 
12
- def format(object, **options)
13
- Helium::Console.format(object, **nested_opts(options))
12
+ def format_nested(other_object, **options)
13
+ Helium::Console.format(other_object, **nested_opts(options))
14
+ end
15
+
16
+ def format(other_object, **options)
17
+ Helium::Console.format(other_object, **nested_opts(options, increase_level: false))
14
18
  end
15
19
 
16
20
  def format_string(string, **options)
@@ -21,13 +25,20 @@ module Helium
21
25
  Helium::Console.simple?(object)
22
26
  end
23
27
 
28
+ def is_simple
29
+ false
30
+ end
31
+
24
32
  def method_missing(name, *args)
25
33
  return @options[name] if @options.key?(name)
26
34
  super
27
35
  end
28
36
 
29
- def nested_opts(options)
30
- { level: @options[:level] + 1 }.merge(options)
37
+ def nested_opts(new_options, increase_level: true)
38
+ new_options = options.merge(new_options)
39
+ new_options[:level] += 1 if increase_level
40
+ new_options[:ignore_objects] << object.object_id
41
+ new_options
31
42
  end
32
43
  end
33
44
 
@@ -2,10 +2,16 @@ 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
@@ -16,7 +22,7 @@ module Helium
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
+ 'true'
6
+ end
7
+ end
8
+
9
+ define_formatter_for FalseClass do
10
+ def call
11
+ 'false'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ module Helium
2
+ class Console
3
+ define_formatter_for NilClass do
4
+ def call
5
+ '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
+ object.to_s
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,14 +1,55 @@
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: '| ', after_key: ": ", format_keys: false)
13
+
14
+ object.instance_variables.each do |inst|
15
+ table.row(inst.to_s, object.instance_variable_get(inst))
16
+ end
17
+
18
+ [
19
+ "# #{object.class.name} instance",
20
+ format(table, **options),
21
+ ].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
+ one_complex = false
31
+
32
+ object.each do |key, value|
33
+ return unless simple?(value)
34
+
35
+ formatted_key = format(key, max_lines: 1, nesting: 1, max_with: 15)
36
+ formatted_value = format(value, max_lines: 1, nesting: 1, max_width: 15)
37
+ formatted = "#{formatted_key} => #{formatted_value}"
38
+
39
+ joined = [joined, formatted].compact.join(", ")
40
+
41
+ return if joined.length > max_width - 4
42
+ end
43
+ joined = " #{joined} " if joined
44
+ ["{", joined, "}"].compact.join
45
+ end
46
+
47
+ def force_inline?
48
+ (max_lines && max_lines < 5) || level > 2
49
+ end
50
+
51
+ def all_symbol?
52
+ object.keys.all? { |key| key.is_a? Symbol }
12
53
  end
13
54
  end
14
55
  end
@@ -0,0 +1,9 @@
1
+ module Helium
2
+ class Console
3
+ define_formatter_for Symbol do
4
+ def call
5
+ ':' + object.to_s
6
+ end
7
+ end
8
+ end
9
+ end
@@ -7,7 +7,7 @@ module Helium
7
7
 
8
8
  def formatted_values
9
9
  object.rows.flat_map do |key, value|
10
- formatted_value = format(value, max_width: max_value_width)
10
+ formatted_value = format_nested(value, max_width: max_value_width)
11
11
 
12
12
  formatted_value.lines.map.with_index do |line, index|
13
13
  [
@@ -1,5 +1,5 @@
1
1
  module Helium
2
2
  class Console
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
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.2
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-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -51,9 +51,13 @@ files:
51
51
  - lib/helium/console/printer.rb
52
52
  - lib/helium/console/registry.rb
53
53
  - lib/helium/console/registry/array.rb
54
+ - lib/helium/console/registry/booleans.rb
54
55
  - lib/helium/console/registry/hash.rb
56
+ - lib/helium/console/registry/nil.rb
57
+ - lib/helium/console/registry/numeric.rb
55
58
  - lib/helium/console/registry/object.rb
56
59
  - lib/helium/console/registry/string.rb
60
+ - lib/helium/console/registry/symbol.rb
57
61
  - lib/helium/console/registry/table.rb
58
62
  - lib/helium/console/table.rb
59
63
  - lib/helium/console/version.rb