helium-console 0.1.7 → 0.1.11

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: 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?