helium-console 0.1.7 → 0.1.11

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: 2ab396ea29a8624295988320add6f5e930e63189df18d760f5a5d7b940757564
4
- data.tar.gz: 67585b90c765f5c21085d142f09177062e09b7aaea8adab81405cfd78909f04f
3
+ metadata.gz: 8d935efaa6d5d2a98d58c2d0cea17911486522ce45bfd00432b089735994ce20
4
+ data.tar.gz: c86a17fc7b04379249cf491da55086537f7f8983c47758d9b20438495f12039e
5
5
  SHA512:
6
- metadata.gz: 5f8c86fb6604d3be3a7c0de4485875da9be8b2b2ab0f62a39678cee552d55c4d6cb296d10803ca0b1962ada3e9b490525f5e05cff9c1905311afa27df6db4472
7
- data.tar.gz: a960dc8a18594015a44d5fd83469869e96f8d33cae658c7a825a9fc45c73d53ce06e6386a187a3387ae6d9c9a0cf50cfc0495250ee122dbb109ae9d14ea8110b
6
+ metadata.gz: 2ab8ca592e31437b6e70cd269cd961b8fc38c3e544b24aa2eecfbddce474ed22ebda4c704849271b847656e22d15b25feb169aedad5593f6267378e211b068bf
7
+ data.tar.gz: 2915fa426caea028e549e9d55e5a4cb7799ef593cdd706529c9eac5bc582a841bdaaa67fb1480917df0543286a0d7743f5eb13b813b92ad4193eab207d49a378
data/.rubocop.yml ADDED
@@ -0,0 +1,70 @@
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-rake
4
+
5
+ AllCops:
6
+ NewCops: enable
7
+
8
+ Style/LambdaCall:
9
+ EnforcedStyle: braces
10
+
11
+ Layout/CaseIndentation:
12
+ EnforcedStyle: end
13
+ IndentOneStep: true
14
+
15
+ Style/NestedParenthesizedCalls:
16
+ AllowedMethods:
17
+ - be
18
+ - be_a
19
+ - be_an
20
+ - be_between
21
+ - be_falsey
22
+ - be_kind_of
23
+ - be_instance_of
24
+ - be_truthy
25
+ - be_within
26
+ - eq
27
+ - eql
28
+ - end_with
29
+ - expect
30
+ - include
31
+ - match
32
+ - raise_error
33
+ - respond_to
34
+ - start_with
35
+
36
+ Layout/EndAlignment:
37
+ EnforcedStyleAlignWith: start_of_line
38
+
39
+ Layout/MultilineMethodCallIndentation:
40
+ EnforcedStyle: indented
41
+
42
+ Style/Documentation:
43
+ Enabled: false
44
+
45
+ Bundler/OrderedGems:
46
+ Enabled: false
47
+
48
+ Style/EmptyMethod:
49
+ EnforcedStyle: expanded
50
+
51
+ Metrics/BlockLength:
52
+ IgnoredMethods:
53
+ - define_formatter_for
54
+ Exclude:
55
+ - "*.gemspec"
56
+ - "spec/**/*_spec.rb"
57
+
58
+ Metrics/MethodLength:
59
+ Max: 15
60
+
61
+ RSpec/MultipleExpectations:
62
+ Enabled: false
63
+
64
+ Style/NumericPredicate:
65
+ Enabled: false
66
+
67
+ Style/EachWithObject:
68
+ Enabled: false
69
+
70
+
data/Gemfile CHANGED
@@ -1,9 +1,14 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in helium-console.gemspec
4
6
  gemspec
5
7
 
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.0"
8
- gem "ffaker"
9
- gem "byebug"
8
+ gem 'rake', '~> 12.0'
9
+ gem 'rspec', '~> 3.0'
10
+ gem 'ffaker'
11
+ gem 'byebug'
12
+ gem 'rubocop', require: false
13
+ gem 'rubocop-rspec', require: false
14
+ gem 'rubocop-rake', require: false
data/Gemfile.lock CHANGED
@@ -1,23 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- helium-console (0.1.7)
4
+ helium-console (0.1.11)
5
5
  colorize
6
6
  pry
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
+ ast (2.4.2)
11
12
  byebug (11.1.3)
12
13
  coderay (1.1.3)
13
14
  colorize (0.8.1)
14
15
  diff-lcs (1.4.4)
15
16
  ffaker (2.18.0)
16
17
  method_source (1.0.0)
18
+ parallel (1.20.1)
19
+ parser (3.0.2.0)
20
+ ast (~> 2.4.1)
17
21
  pry (0.14.1)
18
22
  coderay (~> 1.1)
19
23
  method_source (~> 1.0)
24
+ rainbow (3.0.0)
20
25
  rake (12.3.3)
26
+ regexp_parser (2.1.1)
27
+ rexml (3.2.5)
21
28
  rspec (3.10.0)
22
29
  rspec-core (~> 3.10.0)
23
30
  rspec-expectations (~> 3.10.0)
@@ -31,6 +38,24 @@ GEM
31
38
  diff-lcs (>= 1.2.0, < 2.0)
32
39
  rspec-support (~> 3.10.0)
33
40
  rspec-support (3.10.2)
41
+ rubocop (1.19.0)
42
+ parallel (~> 1.10)
43
+ parser (>= 3.0.0.0)
44
+ rainbow (>= 2.2.2, < 4.0)
45
+ regexp_parser (>= 1.8, < 3.0)
46
+ rexml
47
+ rubocop-ast (>= 1.9.1, < 2.0)
48
+ ruby-progressbar (~> 1.7)
49
+ unicode-display_width (>= 1.4.0, < 3.0)
50
+ rubocop-ast (1.10.0)
51
+ parser (>= 3.0.1.1)
52
+ rubocop-rake (0.6.0)
53
+ rubocop (~> 1.0)
54
+ rubocop-rspec (2.4.0)
55
+ rubocop (~> 1.0)
56
+ rubocop-ast (>= 1.1.0)
57
+ ruby-progressbar (1.11.0)
58
+ unicode-display_width (2.0.0)
34
59
 
35
60
  PLATFORMS
36
61
  ruby
@@ -41,6 +66,9 @@ DEPENDENCIES
41
66
  helium-console!
42
67
  rake (~> 12.0)
43
68
  rspec (~> 3.0)
69
+ rubocop
70
+ rubocop-rake
71
+ rubocop-rspec
44
72
 
45
73
  BUNDLED WITH
46
74
  2.1.4
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
data/bin/console CHANGED
@@ -1,15 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "helium/console"
4
+ require 'bundler/setup'
5
+ require 'helium/console'
5
6
 
6
7
  require 'byebug'
7
8
  require 'ffaker'
8
9
 
9
- class A
10
- def initialize(a)
11
- @a = a
12
- end
13
- end
14
-
15
10
  Pry.start
@@ -1,27 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'lib/helium/console/version'
2
4
 
3
5
  Gem::Specification.new do |spec|
4
- spec.name = "helium-console"
6
+ spec.name = 'helium-console'
5
7
  spec.version = Helium::Console::VERSION
6
- spec.authors = ["Stanislaw Klajn"]
7
- spec.email = ["sklajn@gmail.com"]
8
+ spec.authors = ['Stanislaw Klajn']
9
+ spec.email = ['sklajn@gmail.com']
8
10
 
9
- spec.summary = "Collection of tools for smooth integration with console"
10
- spec.homepage = "https://github.com/helium-rb/console"
11
- spec.license = "MIT"
12
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
11
+ spec.summary = 'Collection of tools for smooth integration with console'
12
+ spec.homepage = 'https://github.com/helium-rb/console'
13
+ spec.license = 'MIT'
14
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
13
15
 
14
- spec.metadata["homepage_uri"] = spec.homepage
15
- spec.metadata["source_code_uri"] = "https://github.com/helium-rb/console"
16
+ spec.metadata['homepage_uri'] = spec.homepage
17
+ spec.metadata['source_code_uri'] = 'https://github.com/helium-rb/console'
16
18
 
17
19
  # Specify which files should be added to the gem when it is released.
18
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
21
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
22
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
23
  end
22
- spec.bindir = "exe"
24
+ spec.bindir = 'exe'
23
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
- spec.require_paths = ["lib"]
25
- spec.add_dependency "pry"
26
- spec.add_dependency "colorize"
26
+ spec.require_paths = ['lib']
27
+ spec.add_dependency 'colorize'
28
+ spec.add_dependency 'pry'
27
29
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Helium
2
4
  class Console
3
5
  module Formatters
@@ -7,7 +9,7 @@ module Helium
7
9
  end
8
10
 
9
11
  def call(string)
10
- string.lines.map {|line| ' ' * @indent + line }.join
12
+ string.lines.map { |line| ' ' * @indent + line }.join
11
13
  end
12
14
  end
13
15
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Helium
2
4
  class Console
3
5
  module Formatters
4
6
  class MaxLines
5
- ELLIPSES = "...\""
7
+ ELLIPSES = '..."'
6
8
 
7
9
  def initialize(max_lines:, max_width:, ellipses:)
8
10
  @max_lines = max_lines
@@ -16,7 +18,7 @@ module Helium
16
18
  lines = string.lines.first(@max_lines)
17
19
  last_line = lines.pop
18
20
  lines << last_line.chars.first(@max_width - @ellipses.length).join + @ellipses
19
- lines.join()
21
+ lines.join
20
22
  end
21
23
  end
22
24
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Helium
2
4
  class Console
3
5
  module Formatters
@@ -11,8 +13,8 @@ module Helium
11
13
  result = string.lines.flat_map do |line|
12
14
  line.chomp.chars.each_slice(@max_width).map(&:join)
13
15
  end
14
- result = result.join($/)
15
- result += $/ if string.end_with?($/)
16
+ result = result.join("\n")
17
+ result += "\n" if string.end_with?("\n")
16
18
  result
17
19
  end
18
20
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Helium
3
4
  class Console
@@ -6,8 +7,8 @@ module Helium
6
7
  def self.get(type)
7
8
  require "helium/console/formatters/overflow/#{type}"
8
9
  const_get(type.to_s.split('_').map(&:capitalize).join)
9
- rescue
10
- raise Error.new("Unknown overflow option: #{type}")
10
+ rescue LoadError
11
+ raise Error, "Unknown overflow option: #{type}"
11
12
  end
12
13
  end
13
14
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Helium
2
4
  class Console
3
5
  class ColorPrinter < Pry::ColorPrinter
@@ -10,11 +12,14 @@ module Helium
10
12
 
11
13
  def pp(object)
12
14
  formatted = Helium::Console.format(object)
13
- formatted = $/ + formatted if formatted.lines.count > 1
14
- output << formatted
15
+ output << "\n" if object.is_a? Registry::Element::LazyStringEvaluator
16
+ formatted.lines.each do |line|
17
+ output << "#{line.chomp}\n"
18
+ end
19
+ output << "\n"
15
20
  end
16
21
 
17
- ::Pry.config.print = self.method(:default)
22
+ ::Pry.config.print = method(:default)
18
23
  end
19
24
  end
20
25
  end
@@ -1,18 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Helium
2
4
  class Console
3
5
  define_formatter_for Array do
4
6
  def call
5
- return "[]" if object.none?
6
- return format_inline_with_truncation if force_inline?
7
+ return '[]' if object.none?
8
+ return inline_with_truncation if force_inline?
7
9
 
8
- format_inline_with_no_truncation || format_as_table
10
+ inline_without_truncation || format_as_table
9
11
  end
10
12
 
11
- def is_simple
13
+ def simple?
12
14
  object.none?
13
15
  end
14
16
 
15
- private
17
+ private
16
18
 
17
19
  def format_as_table
18
20
  table = Table.new(runner: ' ', format_keys: false)
@@ -20,51 +22,54 @@ module Helium
20
22
  table.row(light_black("[#{index}]:"), element)
21
23
  end
22
24
 
23
- [
24
- "[",
25
- format(table),
26
- "]"
27
- ].join($/)
25
+ yield_lines do |y|
26
+ y << '['
27
+ format(table).lines.each { |line| y << line }
28
+ y << ']'
29
+ end
28
30
  end
29
31
 
30
- def format_inline_with_truncation
31
- joined = nil
32
- trunc = nil
33
- total = object.length
32
+ def inline_with_truncation
33
+ formatted = formatted_elements.with_index.inject([]) do |joined, (element, index)|
34
+ new_joined = [*joined[0..-2], element, trunc_message(object_size - index - 1, all_truncated: index.zero?)]
35
+ break joined if too_long?(new_joined, max_width: max_width - 4)
34
36
 
35
- object.each.with_index do |element, index|
36
- formatted = format_nested(element, max_lines: 1, nesting: 1, max_width: 15)
37
+ new_joined
38
+ end
37
39
 
38
- new_joined = [joined, formatted].compact.join(" | ")
39
- new_trunc = (" | (#{total - index - 1} #{index.zero? ? 'elements' : 'more'})" unless index == total - 1)
40
+ "[ #{formatted.compact.join(' | ')} ]"
41
+ end
40
42
 
41
- break if new_joined.length > max_width - (new_trunc&.length || 0) - 4
43
+ def inline_without_truncation
44
+ return unless object.all? { |element| Helium::Console.simple? element }
42
45
 
43
- joined = new_joined
44
- trunc = new_trunc
45
- end
46
+ formatted = formatted_elements.inject([]) do |joined, element|
47
+ joined = [*joined, element]
48
+ break if too_long?(joined, max_width: max_width - 4)
46
49
 
47
- if joined
48
- joined = [" ", joined, trunc, " "].compact.join if joined
49
- ["[", joined, "]"].compact.join
50
- else
51
- "[...(#{object.length})]"
50
+ joined
52
51
  end
52
+
53
+ "[ #{formatted.join(' | ')} ]" unless formatted.nil?
54
+ end
55
+
56
+ def too_long?(object, max_width:)
57
+ string = object.respond_to?(:join) ? object.join(' | ') : object
58
+ length_of(string) > max_width - 4
53
59
  end
54
60
 
55
- def format_inline_with_no_truncation
56
- joined = nil
61
+ def formatted_elements(**options)
62
+ object.each.lazy.map { |element| format_nested(element, **options) }
63
+ end
57
64
 
58
- object.each do |element|
59
- return unless simple?(element)
65
+ def trunc_message(count, all_truncated: false)
66
+ return if count < 1
60
67
 
61
- formatted = format_nested(element)
62
- joined = [joined, formatted].compact.join(" | ")
68
+ "(#{count} #{all_truncated ? 'elements' : 'more'})"
69
+ end
63
70
 
64
- return if joined.length > max_width - 4
65
- end
66
- joined = " #{joined} " if joined
67
- ["[", joined, "]"].compact.join
71
+ def object_size
72
+ @object_size ||= object.size
68
73
  end
69
74
 
70
75
  def force_inline?