pastel 0.5.3 → 0.6.0
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 +4 -4
- data/.travis.yml +7 -7
- data/CHANGELOG.md +59 -10
- data/Gemfile +0 -1
- data/README.md +55 -19
- data/benchmarks/nesting_speed.rb +15 -0
- data/benchmarks/speed.rb +26 -2
- data/lib/pastel.rb +6 -2
- data/lib/pastel/alias_importer.rb +5 -4
- data/lib/pastel/ansi.rb +14 -0
- data/lib/pastel/color.rb +45 -73
- data/lib/pastel/color_parser.rb +117 -0
- data/lib/pastel/color_resolver.rb +3 -1
- data/lib/pastel/delegator.rb +4 -1
- data/lib/pastel/version.rb +1 -1
- data/pastel.gemspec +5 -4
- data/spec/unit/alias_color_spec.rb +1 -3
- data/spec/unit/alias_importer_spec.rb +8 -11
- data/spec/unit/color/alias_color_spec.rb +0 -2
- data/spec/unit/color/code_spec.rb +1 -3
- data/spec/unit/color/colored_spec.rb +1 -3
- data/spec/unit/color/decorate_spec.rb +5 -3
- data/spec/unit/color/equal_spec.rb +0 -2
- data/spec/unit/color/lookup_spec.rb +17 -0
- data/spec/unit/color/new_spec.rb +1 -15
- data/spec/unit/color/strip_spec.rb +3 -5
- data/spec/unit/color/styles_spec.rb +1 -3
- data/spec/unit/color/valid_spec.rb +0 -2
- data/spec/unit/color_parser_spec.rb +67 -0
- data/spec/unit/decorate_dsl_spec.rb +85 -0
- data/spec/unit/decorator_chain_spec.rb +0 -2
- data/spec/unit/delegator_spec.rb +0 -2
- data/spec/unit/detach_spec.rb +0 -2
- data/spec/unit/new_spec.rb +18 -80
- data/spec/unit/respond_to_spec.rb +0 -2
- data/spec/unit/undecorate_spec.rb +12 -0
- metadata +38 -10
- data/.ruby-gemset +0 -1
@@ -0,0 +1,85 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
RSpec.describe Pastel, 'coloring dsl' do
|
4
|
+
subject(:pastel) { described_class.new(enabled: true) }
|
5
|
+
|
6
|
+
it "doesn't apply styles to empty string" do
|
7
|
+
expect(pastel.red('')).to eq('')
|
8
|
+
end
|
9
|
+
|
10
|
+
it "colors string" do
|
11
|
+
expect(pastel.red("unicorn")).to eq("\e[31municorn\e[0m")
|
12
|
+
end
|
13
|
+
|
14
|
+
it "allows to specify variable number of arguments" do
|
15
|
+
expect(pastel.red("unicorn", "running")).to eq("\e[31municornrunning\e[0m")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "combines colored strings with regular ones" do
|
19
|
+
expect(pastel.red("Unicorns") + ' will rule ' + pastel.green('the World!')).
|
20
|
+
to eq("\e[31mUnicorns\e[0m will rule \e[32mthe World!\e[0m")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "composes two color strings " do
|
24
|
+
expect(pastel.red.on_green("unicorn")).to eq("\e[31;42municorn\e[0m")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "composes three color strings" do
|
28
|
+
expect(pastel.red.on_green.underline("unicorn")).
|
29
|
+
to eq("\e[31;42;4municorn\e[0m")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "combines colored composed strings with regular ones" do
|
33
|
+
expect(pastel.red.on_green("Unicorns") + ' will rule ' +
|
34
|
+
pastel.green.on_red('the World!')).
|
35
|
+
to eq("\e[31;42mUnicorns\e[0m will rule \e[32;41mthe World!\e[0m")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "allows one level nesting" do
|
39
|
+
expect(pastel.red("Unicorn" + pastel.blue("rule!"))).
|
40
|
+
to eq("\e[31mUnicorn\e[34mrule!\e[0m\e[0m")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "allows to nest mixed styles" do
|
44
|
+
expect(pastel.red("Unicorn" + pastel.green.on_yellow.underline('running') + '!')).
|
45
|
+
to eq("\e[31mUnicorn\e[32;43;4mrunning\e[0m\e[31m!\e[0m")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "allows for deep nesting" do
|
49
|
+
expect(pastel.red('r' + pastel.green('g' + pastel.yellow('y') + 'g') + 'r')).
|
50
|
+
to eq("\e[31mr\e[32mg\e[33my\e[0m\e[32mg\e[0m\e[31mr\e[0m")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "allows for variable nested arguments" do
|
54
|
+
expect(pastel.red('r', pastel.green('g'), 'r')).
|
55
|
+
to eq("\e[31mr\e[32mg\e[0m\e[31mr\e[0m")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "nests color foreground & background" do
|
59
|
+
expect(pastel.on_red('foo', pastel.green('bar'), 'foo')).
|
60
|
+
to eq("\e[41mfoo\e[32mbar\e[0m\e[41mfoo\e[0m")
|
61
|
+
end
|
62
|
+
|
63
|
+
it "allows to nest styles within block" do
|
64
|
+
string = pastel.red.on_green('Unicorns' +
|
65
|
+
pastel.green.on_red('will ', 'dominate' + pastel.yellow('the world!')))
|
66
|
+
|
67
|
+
expect(pastel.red.on_green('Unicorns') do
|
68
|
+
green.on_red('will ', 'dominate') do
|
69
|
+
yellow('the world!')
|
70
|
+
end
|
71
|
+
end).to eq(string)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "raises error when chained with unrecognized color" do
|
75
|
+
expect {
|
76
|
+
pastel.unknown.on_red('unicorn')
|
77
|
+
}.to raise_error(Pastel::InvalidAttributeNameError)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "raises error when doesn't recognize color" do
|
81
|
+
expect {
|
82
|
+
pastel.unknown('unicorn')
|
83
|
+
}.to raise_error(Pastel::InvalidAttributeNameError)
|
84
|
+
end
|
85
|
+
end
|
data/spec/unit/delegator_spec.rb
CHANGED
data/spec/unit/detach_spec.rb
CHANGED
data/spec/unit/new_spec.rb
CHANGED
@@ -1,89 +1,18 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
RSpec.describe Pastel do
|
3
|
+
RSpec.describe Pastel, '#new' do
|
6
4
|
|
7
5
|
subject(:pastel) { described_class.new(enabled: true) }
|
8
6
|
|
9
|
-
|
10
|
-
it "doesn't apply styles to empty string" do
|
11
|
-
expect(pastel.red('')).to eq('')
|
12
|
-
end
|
13
|
-
|
14
|
-
it "colors string" do
|
15
|
-
expect(pastel.red("unicorn")).to eq("\e[31municorn\e[0m")
|
16
|
-
end
|
17
|
-
|
18
|
-
it "allows to specify variable number of arguments" do
|
19
|
-
expect(pastel.red("unicorn", "running")).to eq("\e[31municornrunning\e[0m")
|
20
|
-
end
|
21
|
-
|
22
|
-
it "combines colored strings with regular ones" do
|
23
|
-
expect(pastel.red("Unicorns") + ' will rule ' + pastel.green('the World!')).
|
24
|
-
to eq("\e[31mUnicorns\e[0m will rule \e[32mthe World!\e[0m")
|
25
|
-
end
|
26
|
-
|
27
|
-
it "composes two color strings " do
|
28
|
-
expect(pastel.red.on_green("unicorn")).to eq("\e[31;42municorn\e[0m")
|
29
|
-
end
|
30
|
-
|
31
|
-
it "composes three color strings" do
|
32
|
-
expect(pastel.red.on_green.underline("unicorn")).
|
33
|
-
to eq("\e[31;42;4municorn\e[0m")
|
34
|
-
end
|
7
|
+
it { is_expected.to respond_to(:lookup) }
|
35
8
|
|
36
|
-
|
37
|
-
expect(pastel.red.on_green("Unicorns") + ' will rule ' +
|
38
|
-
pastel.green.on_red('the World!')).
|
39
|
-
to eq("\e[31;42mUnicorns\e[0m will rule \e[32;41mthe World!\e[0m")
|
40
|
-
end
|
9
|
+
it { is_expected.to respond_to(:decorate) }
|
41
10
|
|
42
|
-
|
43
|
-
expect(pastel.red("Unicorn" + pastel.blue("rule!"))).
|
44
|
-
to eq("\e[31mUnicorn\e[34mrule!\e[0m")
|
45
|
-
end
|
11
|
+
it { is_expected.to respond_to(:undecorate) }
|
46
12
|
|
47
|
-
|
48
|
-
expect(pastel.red("Unicorn" + pastel.green.on_yellow.underline('running') + '!')).
|
49
|
-
to eq("\e[31mUnicorn\e[32;43;4mrunning\e[31m!\e[0m")
|
50
|
-
end
|
13
|
+
it { is_expected.to respond_to(:strip) }
|
51
14
|
|
52
|
-
|
53
|
-
expect(pastel.red('r' + pastel.green('g' + pastel.yellow('y') + 'g') + 'r')).
|
54
|
-
to eq("\e[31mr\e[32mg\e[33my\e[32mg\e[31mr\e[0m")
|
55
|
-
end
|
56
|
-
|
57
|
-
it "allows for variable nested arguments" do
|
58
|
-
expect(pastel.red('r', pastel.green('g'), 'r')).
|
59
|
-
to eq("\e[31mr\e[32mg\e[31mr\e[0m")
|
60
|
-
end
|
61
|
-
|
62
|
-
it "allows to nest styles within block" do
|
63
|
-
string = pastel.red.on_green('Unicorns' +
|
64
|
-
pastel.green.on_red('will ', 'dominate' + pastel.yellow('the world!')))
|
65
|
-
|
66
|
-
expect(pastel.red.on_green('Unicorns') do
|
67
|
-
green.on_red('will ', 'dominate') do
|
68
|
-
yellow('the world!')
|
69
|
-
end
|
70
|
-
end).to eq(string)
|
71
|
-
end
|
72
|
-
|
73
|
-
it "raises error when chained with unrecognized color" do
|
74
|
-
expect {
|
75
|
-
pastel.unknown.on_red('unicorn')
|
76
|
-
}.to raise_error(Pastel::InvalidAttributeNameError)
|
77
|
-
end
|
78
|
-
|
79
|
-
it "raises error when doesn't recognize color" do
|
80
|
-
expect {
|
81
|
-
pastel.unknown('unicorn')
|
82
|
-
}.to raise_error(Pastel::InvalidAttributeNameError)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe '.valid?' do
|
15
|
+
describe '#valid?' do
|
87
16
|
it "when valid returns true" do
|
88
17
|
expect(pastel.valid?(:red)).to eq(true)
|
89
18
|
end
|
@@ -93,14 +22,23 @@ RSpec.describe Pastel do
|
|
93
22
|
end
|
94
23
|
end
|
95
24
|
|
96
|
-
describe '
|
25
|
+
describe '#colored?' do
|
97
26
|
it "checks if string is colored" do
|
98
27
|
expect(pastel.colored?("\e[31mfoo\e[0m")).to eq(true)
|
99
28
|
end
|
100
29
|
end
|
101
30
|
|
102
31
|
describe 'options passed in' do
|
103
|
-
it
|
32
|
+
it 'defaults enabled to color detection' do
|
33
|
+
allow(TTY::Color).to receive(:color?).and_return(true)
|
34
|
+
|
35
|
+
pastel = described_class.new
|
36
|
+
|
37
|
+
expect(pastel.enabled?).to eq(true)
|
38
|
+
expect(TTY::Color).to have_received(:color?)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "sets enabled option" do
|
104
42
|
pastel = described_class.new(enabled: false)
|
105
43
|
expect(pastel.enabled?).to eq(false)
|
106
44
|
expect(pastel.red('Unicorn', pastel.green('!'))).to eq('Unicorn!')
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
RSpec.describe Pastel, '#undecorate' do
|
4
|
+
subject(:pastel) { described_class.new(enabled: true) }
|
5
|
+
|
6
|
+
it "undecorates string detecting color escape codes" do
|
7
|
+
string = pastel.red.on_green('foo')
|
8
|
+
expect(pastel.undecorate(string)).to eq([
|
9
|
+
{foreground: :red, background: :on_green, text: 'foo'}
|
10
|
+
])
|
11
|
+
end
|
12
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pastel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Murach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: equatable
|
@@ -25,33 +25,53 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.5.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: tty-
|
28
|
+
name: tty-color
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.3.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.3.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.5.0
|
48
|
+
- - <
|
46
49
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
50
|
+
version: '2.0'
|
48
51
|
type: :development
|
49
52
|
prerelease: false
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
51
54
|
requirements:
|
52
|
-
- -
|
55
|
+
- - '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 1.5.0
|
58
|
+
- - <
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rake
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
53
73
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
74
|
+
version: '0'
|
55
75
|
description: Terminal strings styling with intuitive and clean API.
|
56
76
|
email:
|
57
77
|
- ''
|
@@ -61,7 +81,6 @@ extra_rdoc_files: []
|
|
61
81
|
files:
|
62
82
|
- .gitignore
|
63
83
|
- .rspec
|
64
|
-
- .ruby-gemset
|
65
84
|
- .ruby-version
|
66
85
|
- .travis.yml
|
67
86
|
- CHANGELOG.md
|
@@ -78,6 +97,7 @@ files:
|
|
78
97
|
- lib/pastel/alias_importer.rb
|
79
98
|
- lib/pastel/ansi.rb
|
80
99
|
- lib/pastel/color.rb
|
100
|
+
- lib/pastel/color_parser.rb
|
81
101
|
- lib/pastel/color_resolver.rb
|
82
102
|
- lib/pastel/decorator_chain.rb
|
83
103
|
- lib/pastel/delegator.rb
|
@@ -92,15 +112,19 @@ files:
|
|
92
112
|
- spec/unit/color/colored_spec.rb
|
93
113
|
- spec/unit/color/decorate_spec.rb
|
94
114
|
- spec/unit/color/equal_spec.rb
|
115
|
+
- spec/unit/color/lookup_spec.rb
|
95
116
|
- spec/unit/color/new_spec.rb
|
96
117
|
- spec/unit/color/strip_spec.rb
|
97
118
|
- spec/unit/color/styles_spec.rb
|
98
119
|
- spec/unit/color/valid_spec.rb
|
120
|
+
- spec/unit/color_parser_spec.rb
|
121
|
+
- spec/unit/decorate_dsl_spec.rb
|
99
122
|
- spec/unit/decorator_chain_spec.rb
|
100
123
|
- spec/unit/delegator_spec.rb
|
101
124
|
- spec/unit/detach_spec.rb
|
102
125
|
- spec/unit/new_spec.rb
|
103
126
|
- spec/unit/respond_to_spec.rb
|
127
|
+
- spec/unit/undecorate_spec.rb
|
104
128
|
- tasks/console.rake
|
105
129
|
- tasks/coverage.rake
|
106
130
|
- tasks/spec.rake
|
@@ -137,13 +161,17 @@ test_files:
|
|
137
161
|
- spec/unit/color/colored_spec.rb
|
138
162
|
- spec/unit/color/decorate_spec.rb
|
139
163
|
- spec/unit/color/equal_spec.rb
|
164
|
+
- spec/unit/color/lookup_spec.rb
|
140
165
|
- spec/unit/color/new_spec.rb
|
141
166
|
- spec/unit/color/strip_spec.rb
|
142
167
|
- spec/unit/color/styles_spec.rb
|
143
168
|
- spec/unit/color/valid_spec.rb
|
169
|
+
- spec/unit/color_parser_spec.rb
|
170
|
+
- spec/unit/decorate_dsl_spec.rb
|
144
171
|
- spec/unit/decorator_chain_spec.rb
|
145
172
|
- spec/unit/delegator_spec.rb
|
146
173
|
- spec/unit/detach_spec.rb
|
147
174
|
- spec/unit/new_spec.rb
|
148
175
|
- spec/unit/respond_to_spec.rb
|
176
|
+
- spec/unit/undecorate_spec.rb
|
149
177
|
has_rdoc:
|
data/.ruby-gemset
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
pastel
|