eskimo 2.0.0 → 2.1.0

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: 7882c146ce7e288df43b38765be92f216137d746c1efb13cf76b1ac7e1ec13ad
4
- data.tar.gz: 1e2bff1433d29f448a74bf39b54b083b6bc79869af86b00c293fefaa09493624
3
+ metadata.gz: cda13727446ff4b079dfa76a1203d4545739b8a73a635cd515a00072914f889c
4
+ data.tar.gz: 913d763b28a632677d530e2c8d7d31e2c3c7c363f57b9e63be420a3fd5ebc5cb
5
5
  SHA512:
6
- metadata.gz: 77d8528c5d5f839c7bbf8daf9bb049fe752c5077b34107e007bdba14b1192723760763750ea4061d2a4e60bf8573c11133ff3d174363d3eadb8f2fe1252eaa11
7
- data.tar.gz: 8dfa377b6eb2e05e09eb8e5d70b2a747fc5b9073e5859055145bf66c413e3051239ea55ca9d386936ee5905e1382dd2938140c512aaf4360af9010fb16986a49
6
+ metadata.gz: eb6ba86cfc76d02e4e82bfc3ea9ea191a6752de8fd569d9f9eda6c155154c402ae05c22f7c8870a192f4b5c918ec6d011bb277f8992983c536d0b74fd2743104
7
+ data.tar.gz: 1a0739266cd09f9d002272a27968219c89556a24d4412050c73239be6f15ba4aa7ede74e19ca5bdf1ad71c5cfc98a8549bd941d0405149fe95dd46fd4b7d478f
data/lib/eskimo.rb CHANGED
@@ -11,11 +11,13 @@ require 'eskimo/renderer'
11
11
 
12
12
  require 'eskimo/components/did_you_mean'
13
13
  require 'eskimo/components/either'
14
+ require 'eskimo/components/gutter'
14
15
  require 'eskimo/components/highlight'
15
16
  require 'eskimo/components/highlight_column'
16
17
  require 'eskimo/components/indent'
17
18
  require 'eskimo/components/line_break'
18
19
  require 'eskimo/components/soft_break'
20
+ require 'eskimo/components/spacer'
19
21
  require 'eskimo/components/squeeze'
20
22
  require 'eskimo/components/strip'
21
23
  require 'eskimo/components/strip_left'
@@ -27,5 +27,11 @@ module Eskimo
27
27
  def render(render:, **)
28
28
  render[@children]
29
29
  end
30
+
31
+ protected
32
+
33
+ def pastel
34
+ @pastel ||= Pastel.new
35
+ end
30
36
  end
31
37
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Eskimo
4
+ module Components
5
+ # Prepend each line with a character or symbol.
6
+ #
7
+ # Gutter.new(char: '| ') do
8
+ # [ "Hello", "\n", "World!" ]
9
+ # end
10
+ # # => "| Hello"
11
+ # # "| World!"
12
+ class Gutter < Component
13
+ attr_reader :char, :spacing
14
+
15
+ def initialize(char:, spacing: 0, &children)
16
+ @char = char
17
+ @spacing = spacing
18
+
19
+ super
20
+ end
21
+
22
+ def render(**)
23
+ spacer = Array.new(spacing, char)
24
+
25
+ [
26
+ *spacer,
27
+ super.lines.map { |s| s.prepend(char) }.join,
28
+ *spacer
29
+ ].join("\n")
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Eskimo
4
+ module Components
5
+ # Space consecutive components with soft breaks.
6
+ #
7
+ # Spacer.new([
8
+ # "Hello",
9
+ # "World!"
10
+ # ])
11
+ # # => "Hello"
12
+ # # "World!"
13
+ #
14
+ # The soft breaks for each conditional component will be preserved only
15
+ # if they do render some content.
16
+ class Spacer
17
+ def initialize(children)
18
+ if !children.is_a?(Array) || block_given?
19
+ raise ArgumentError.new("Spacer works only with an Array of components")
20
+ end
21
+
22
+ @children = children
23
+ end
24
+
25
+ def render(**props)
26
+ rendered = @children.map(&props[:render])
27
+
28
+ without_blanks = rendered.reject(&:empty?)
29
+ without_blanks.join("\n")
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Eskimo
4
- VERSION = '2.0.0'
4
+ VERSION = '2.1.0'
5
5
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Eskimo::Components::Gutter do
6
+ it 'prepends each line with the character' do
7
+ expect(
8
+ renderer.apply do
9
+ ESK::Gutter.new(char: '| ') do
10
+ "hello\nworld"
11
+ end
12
+ end
13
+ ).to eq("| hello\n| world")
14
+ end
15
+
16
+ it 'inserts surrounding whitespace' do
17
+ expect(
18
+ renderer.apply do
19
+ ESK::Gutter.new(char: '| ', spacing: 2) do
20
+ "hello\nworld"
21
+ end
22
+ end
23
+ ).to eq("| \n| \n| hello\n| world\n| \n| ")
24
+ end
25
+ end
@@ -0,0 +1,42 @@
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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eskimo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmad Amireh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-27 00:00:00.000000000 Z
11
+ date: 2019-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pastel
@@ -90,11 +90,13 @@ files:
90
90
  - lib/eskimo/component.rb
91
91
  - lib/eskimo/components/did_you_mean.rb
92
92
  - lib/eskimo/components/either.rb
93
+ - lib/eskimo/components/gutter.rb
93
94
  - lib/eskimo/components/highlight.rb
94
95
  - lib/eskimo/components/highlight_column.rb
95
96
  - lib/eskimo/components/indent.rb
96
97
  - lib/eskimo/components/line_break.rb
97
98
  - lib/eskimo/components/soft_break.rb
99
+ - lib/eskimo/components/spacer.rb
98
100
  - lib/eskimo/components/squeeze.rb
99
101
  - lib/eskimo/components/strip.rb
100
102
  - lib/eskimo/components/strip_left.rb
@@ -109,11 +111,13 @@ files:
109
111
  - spec/component_spec.rb
110
112
  - spec/components/did_you_mean_spec.rb
111
113
  - spec/components/either_spec.rb
114
+ - spec/components/gutter_spec.rb
112
115
  - spec/components/highlight_column_spec.rb
113
116
  - spec/components/highlight_spec.rb
114
117
  - spec/components/indent_spec.rb
115
118
  - spec/components/line_break_spec.rb
116
119
  - spec/components/soft_break_spec.rb
120
+ - spec/components/spacer_spec.rb
117
121
  - spec/components/squeeze_spec.rb
118
122
  - spec/components/strip_left_spec.rb
119
123
  - spec/components/strip_right_spec.rb
@@ -150,22 +154,24 @@ signing_key:
150
154
  specification_version: 4
151
155
  summary: Declarative text formatting
152
156
  test_files:
153
- - spec/components/strip_spec.rb
154
- - spec/components/highlight_column_spec.rb
155
- - spec/components/truncate_rear_spec.rb
156
- - spec/components/indent_spec.rb
157
+ - spec/spec_helper.rb
158
+ - spec/component_spec.rb
157
159
  - spec/components/did_you_mean_spec.rb
160
+ - spec/components/strip_left_spec.rb
158
161
  - spec/components/line_break_spec.rb
159
- - spec/components/style_spec.rb
160
162
  - spec/components/squeeze_spec.rb
161
- - spec/components/soft_break_spec.rb
163
+ - spec/components/style_spec.rb
164
+ - spec/components/highlight_spec.rb
162
165
  - spec/components/either_spec.rb
163
- - spec/components/strip_left_spec.rb
164
- - spec/components/truncate_spec.rb
166
+ - spec/components/soft_break_spec.rb
167
+ - spec/components/spacer_spec.rb
165
168
  - spec/components/wrap_spec.rb
169
+ - spec/components/gutter_spec.rb
170
+ - spec/components/highlight_column_spec.rb
171
+ - spec/components/truncate_spec.rb
166
172
  - spec/components/strip_right_spec.rb
167
- - spec/components/highlight_spec.rb
173
+ - spec/components/indent_spec.rb
174
+ - spec/components/strip_spec.rb
175
+ - spec/components/truncate_rear_spec.rb
168
176
  - spec/support/component_suite.rb
169
- - spec/spec_helper.rb
170
177
  - spec/renderer_spec.rb
171
- - spec/component_spec.rb