eskimo 2.2.0 → 3.0.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/eskimo.rb +2 -29
- data/lib/eskimo/version.rb +1 -1
- metadata +16 -106
- data/lib/eskimo/component.rb +0 -37
- data/lib/eskimo/components/did_you_mean.rb +0 -34
- data/lib/eskimo/components/either.rb +0 -30
- data/lib/eskimo/components/gutter.rb +0 -33
- data/lib/eskimo/components/highlight.rb +0 -31
- data/lib/eskimo/components/highlight_column.rb +0 -61
- data/lib/eskimo/components/indent.rb +0 -25
- data/lib/eskimo/components/line_break.rb +0 -18
- data/lib/eskimo/components/soft_break.rb +0 -16
- data/lib/eskimo/components/spacer.rb +0 -33
- data/lib/eskimo/components/squeeze.rb +0 -43
- data/lib/eskimo/components/strip.rb +0 -15
- data/lib/eskimo/components/strip_left.rb +0 -15
- data/lib/eskimo/components/strip_right.rb +0 -15
- data/lib/eskimo/components/style.rb +0 -25
- data/lib/eskimo/components/truncate.rb +0 -31
- data/lib/eskimo/components/truncate_rear.rb +0 -25
- data/lib/eskimo/components/wrap.rb +0 -26
- data/lib/eskimo/constants.rb +0 -7
- data/lib/eskimo/renderer.rb +0 -46
- data/spec/component_spec.rb +0 -13
- data/spec/components/did_you_mean_spec.rb +0 -21
- data/spec/components/either_spec.rb +0 -21
- data/spec/components/gutter_spec.rb +0 -25
- data/spec/components/highlight_column_spec.rb +0 -63
- data/spec/components/highlight_spec.rb +0 -25
- data/spec/components/indent_spec.rb +0 -15
- data/spec/components/line_break_spec.rb +0 -17
- data/spec/components/soft_break_spec.rb +0 -17
- data/spec/components/spacer_spec.rb +0 -42
- data/spec/components/squeeze_spec.rb +0 -61
- data/spec/components/strip_left_spec.rb +0 -15
- data/spec/components/strip_right_spec.rb +0 -15
- data/spec/components/strip_spec.rb +0 -15
- data/spec/components/style_spec.rb +0 -25
- data/spec/components/truncate_rear_spec.rb +0 -35
- data/spec/components/truncate_spec.rb +0 -35
- data/spec/components/wrap_spec.rb +0 -15
- data/spec/renderer_spec.rb +0 -62
- data/spec/spec_helper.rb +0 -42
- data/spec/support/component_suite.rb +0 -15
@@ -1,63 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::HighlightColumn do
|
6
|
-
it 'highlights the character' do
|
7
|
-
style = [ :bold, :red ]
|
8
|
-
|
9
|
-
expect(
|
10
|
-
renderer.apply {
|
11
|
-
described_class.new(column: 1, line: 1, style: style) { "number:\nfour" }
|
12
|
-
}
|
13
|
-
).to include("f#{pastel.decorate('o', *style)}ur")
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'highlights the first character' do
|
17
|
-
style = [ :bold, :red ]
|
18
|
-
|
19
|
-
expect(
|
20
|
-
renderer.apply {
|
21
|
-
described_class.new(column: 0, line: 0, style: style) { "four" }
|
22
|
-
}
|
23
|
-
).to include("#{pastel.decorate('f', *style)}our")
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'highlights the last character' do
|
27
|
-
style = [ :bold, :red ]
|
28
|
-
|
29
|
-
expect(
|
30
|
-
renderer.apply {
|
31
|
-
described_class.new(column: 3, line: 0, style: style) { "four" }
|
32
|
-
}
|
33
|
-
).to include("fou#{pastel.decorate('r', *style)}")
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'highlights nothing' do
|
37
|
-
expect(
|
38
|
-
renderer.apply {
|
39
|
-
described_class.new(column: 1234, line: 0) { "four" }
|
40
|
-
}
|
41
|
-
).to eq("four")
|
42
|
-
|
43
|
-
expect(
|
44
|
-
renderer.apply {
|
45
|
-
described_class.new(column: 0, line: 1234) { "four" }
|
46
|
-
}
|
47
|
-
).to eq("four")
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'inserts the arrow' do
|
51
|
-
expect(
|
52
|
-
strip_styles(
|
53
|
-
renderer.apply {
|
54
|
-
described_class.new(column: 1, line: 0) { "four" }
|
55
|
-
}
|
56
|
-
)
|
57
|
-
).to eq(
|
58
|
-
"four" + "\n" +
|
59
|
-
" ^" + "\n" +
|
60
|
-
" here" + "\n"
|
61
|
-
)
|
62
|
-
end
|
63
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::Highlight do
|
6
|
-
it 'styles a substring' do
|
7
|
-
style = [ :bold, :red ]
|
8
|
-
|
9
|
-
expect(
|
10
|
-
renderer.apply {
|
11
|
-
described_class.new(pattern: /ou/, style: style) { 'four' }
|
12
|
-
}
|
13
|
-
).to eq("f#{Pastel.new.decorate('ou', *style)}r")
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'is a no-op if no match' do
|
17
|
-
input = 'four'
|
18
|
-
|
19
|
-
expect(
|
20
|
-
renderer.apply {
|
21
|
-
described_class.new(pattern: /asdf/) { input }
|
22
|
-
}
|
23
|
-
).to eq(input)
|
24
|
-
end
|
25
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::Indent do
|
6
|
-
it 'indents each line' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::Indent.new(width: 2) do
|
10
|
-
"hello\nworld"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
).to eq(" hello\n world")
|
14
|
-
end
|
15
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::LineBreak do
|
6
|
-
it 'inserts a hard linebreak' do
|
7
|
-
expect(
|
8
|
-
renderer.apply {
|
9
|
-
[
|
10
|
-
'hello',
|
11
|
-
ESK::LineBreak.new,
|
12
|
-
'world'
|
13
|
-
]
|
14
|
-
}
|
15
|
-
).to eq("hello\n \nworld")
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::SoftBreak do
|
6
|
-
it 'inserts a soft linebreak' do
|
7
|
-
expect(
|
8
|
-
renderer.apply {
|
9
|
-
[
|
10
|
-
'hello',
|
11
|
-
ESK::SoftBreak.new,
|
12
|
-
'world'
|
13
|
-
]
|
14
|
-
}
|
15
|
-
).to eq("hello\nworld")
|
16
|
-
end
|
17
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::Spacer do
|
6
|
-
it 'inserts newlines between components' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::Spacer.new([
|
10
|
-
"Hello",
|
11
|
-
"World!"
|
12
|
-
])
|
13
|
-
end
|
14
|
-
).to eq("Hello\nWorld!")
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'ignores falsey components' do
|
18
|
-
expect(
|
19
|
-
renderer.apply do
|
20
|
-
ESK::Spacer.new([
|
21
|
-
"Hello",
|
22
|
-
false && 'hi',
|
23
|
-
false && 'ho',
|
24
|
-
"World!",
|
25
|
-
false && 'yup'
|
26
|
-
])
|
27
|
-
end
|
28
|
-
).to eq("Hello\nWorld!")
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'bails if not given an array of children' do
|
32
|
-
expect { ESK::Spacer.new('') }.to raise_error(ArgumentError,
|
33
|
-
"Spacer works only with an Array of components"
|
34
|
-
)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'bails if given a block' do
|
38
|
-
expect { ESK::Spacer.new([]) {} }.to raise_error(ArgumentError,
|
39
|
-
"Spacer works only with an Array of components"
|
40
|
-
)
|
41
|
-
end
|
42
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::Squeeze do
|
6
|
-
it 'swallows consecutive newlines' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::Squeeze.new([
|
10
|
-
ESK::SoftBreak.new,
|
11
|
-
false && '1',
|
12
|
-
|
13
|
-
ESK::SoftBreak.new,
|
14
|
-
false && '2',
|
15
|
-
|
16
|
-
ESK::SoftBreak.new,
|
17
|
-
'3',
|
18
|
-
|
19
|
-
ESK::SoftBreak.new,
|
20
|
-
'4',
|
21
|
-
])
|
22
|
-
end
|
23
|
-
).to eq("\n3\n4")
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'does not swallow consecutive newlines in inner children' do
|
27
|
-
expect(
|
28
|
-
renderer.apply do
|
29
|
-
ESK::Squeeze.new([
|
30
|
-
ESK::Indent.new(width: 0) do
|
31
|
-
[
|
32
|
-
ESK::SoftBreak.new,
|
33
|
-
false && '1',
|
34
|
-
|
35
|
-
ESK::SoftBreak.new,
|
36
|
-
false && '2',
|
37
|
-
|
38
|
-
ESK::SoftBreak.new,
|
39
|
-
'3',
|
40
|
-
|
41
|
-
ESK::SoftBreak.new,
|
42
|
-
'4',
|
43
|
-
]
|
44
|
-
end
|
45
|
-
])
|
46
|
-
end
|
47
|
-
).to eq("\n\n\n3\n4")
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'bails if not given an array of children' do
|
51
|
-
expect { ESK::Squeeze.new('') }.to raise_error(ArgumentError,
|
52
|
-
"Squeeze works only with an Array of components"
|
53
|
-
)
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'bails if given a block' do
|
57
|
-
expect { ESK::Squeeze.new([]) {} }.to raise_error(ArgumentError,
|
58
|
-
"Squeeze works only with an Array of components"
|
59
|
-
)
|
60
|
-
end
|
61
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::StripLeft do
|
6
|
-
it 'strips whitespace from the head' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::StripLeft.new do
|
10
|
-
" hello world "
|
11
|
-
end
|
12
|
-
end
|
13
|
-
).to eq("hello world ")
|
14
|
-
end
|
15
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::StripRight do
|
6
|
-
it 'strips whitespace from the rear' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::StripRight.new do
|
10
|
-
" hello world "
|
11
|
-
end
|
12
|
-
end
|
13
|
-
).to eq(" hello world")
|
14
|
-
end
|
15
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::Strip do
|
6
|
-
it 'strips surrounding whitespace' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::Strip.new do
|
10
|
-
" hello world "
|
11
|
-
end
|
12
|
-
end
|
13
|
-
).to eq("hello world")
|
14
|
-
end
|
15
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::Style do
|
6
|
-
it 'applies ANSI styling to text' do
|
7
|
-
expect(
|
8
|
-
renderer.apply {
|
9
|
-
[
|
10
|
-
ESK::Style.new([:bold, :green]) { 'hai' },
|
11
|
-
]
|
12
|
-
}
|
13
|
-
).to eq("\e[1;32mhai\e[0m")
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'accepts a splat' do
|
17
|
-
expect(
|
18
|
-
renderer.apply {
|
19
|
-
[
|
20
|
-
ESK::Style.new(:bold, :green) { 'hai' },
|
21
|
-
]
|
22
|
-
}
|
23
|
-
).to eq("\e[1;32mhai\e[0m")
|
24
|
-
end
|
25
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::TruncateRear do
|
6
|
-
it 'truncates a string from the rear if it exceeds the length' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::TruncateRear.new(width: 5) do
|
10
|
-
"hello world"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
).to eq("hello...")
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'reserves chars from the width' do
|
17
|
-
expect(
|
18
|
-
renderer.apply do
|
19
|
-
ESK::TruncateRear.new(width: 10, reserve: 5) do
|
20
|
-
("hello world")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
).to eq("hello...")
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'is a no-op if text fits' do
|
27
|
-
expect(
|
28
|
-
renderer.apply do
|
29
|
-
ESK::TruncateRear.new(width: 62, reserve: 5) do
|
30
|
-
("hello world")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
).to eq("hello world")
|
34
|
-
end
|
35
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::Truncate do
|
6
|
-
it 'truncates a string from the beginning if it exceeds the length' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::Truncate.new(width: 5) do
|
10
|
-
("hello world")
|
11
|
-
end
|
12
|
-
end
|
13
|
-
).to eq("... world")
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'reserves chars from the width' do
|
17
|
-
expect(
|
18
|
-
renderer.apply do
|
19
|
-
ESK::Truncate.new(width: 10, reserve: 5) do
|
20
|
-
("hello world")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
).to eq("... world")
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'is a no-op if text fits' do
|
27
|
-
expect(
|
28
|
-
renderer.apply do
|
29
|
-
ESK::Truncate.new(width: 62, reserve: 5) do
|
30
|
-
("hello world")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
).to eq("hello world")
|
34
|
-
end
|
35
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Components::Wrap do
|
6
|
-
it 'wraps text' do
|
7
|
-
expect(
|
8
|
-
renderer.apply do
|
9
|
-
ESK::Wrap.new(width: 5) do
|
10
|
-
'hello world'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
).to eq("\nhello \nworld")
|
14
|
-
end
|
15
|
-
end
|
data/spec/renderer_spec.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe Eskimo::Renderer do
|
6
|
-
it 'renders nothing' do
|
7
|
-
expect(subject.apply).to eq('')
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'renders a string' do
|
11
|
-
expect(subject.apply { 'hello' }).to eq('hello')
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'renders a proc' do
|
15
|
-
expect(subject.apply { lambda do |**| 'hello' end }).to eq('hello')
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'renders an array of renderables' do
|
19
|
-
expect(subject.apply { ['h','ello'] }).to eq('hello')
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'renders a #render renderable' do
|
23
|
-
class Renderable
|
24
|
-
def render(**)
|
25
|
-
'hello'
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
expect(subject.apply { Renderable.new }).to eq('hello')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'ignores falseys' do
|
33
|
-
expect(subject.apply { nil }).to eq('')
|
34
|
-
expect(subject.apply { false }).to eq('')
|
35
|
-
expect(subject.apply { [nil,false] }).to eq('')
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'passes props to renderers' do
|
39
|
-
props = nil
|
40
|
-
|
41
|
-
described_class.new(foo: 'bar').apply {
|
42
|
-
lambda { |injected_props| ''.tap { props = injected_props } }
|
43
|
-
}
|
44
|
-
|
45
|
-
expect(props).to be_a(Hash)
|
46
|
-
expect(props).to include(foo: 'bar')
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'injects a "render" routine for procs' do
|
50
|
-
expect(
|
51
|
-
subject.apply { lambda { |render:, **| render['hello'] } }
|
52
|
-
).to eq('hello')
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'bails on unrenderable inputs' do
|
56
|
-
expect {
|
57
|
-
subject.apply { :foo }
|
58
|
-
}.to raise_error(ArgumentError,
|
59
|
-
"Eskimo: don't know how to render #{:foo.class} => foo"
|
60
|
-
)
|
61
|
-
end
|
62
|
-
end
|