pastel 0.7.3 → 0.7.4

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: 5dce3343814347c2f9ed82e20bbbdba20f1b6c3ca98da42fb7998bcfbf2f4ca8
4
- data.tar.gz: cb80f3d5e14c53d7602606af9be4ac5a7f73f4c5dc0ba3f2686b3677514fe8bb
3
+ metadata.gz: f27ae640e6ef241eef25aa65ca531e0bf2b77242c3575c217a50c6679146ca7a
4
+ data.tar.gz: 87d9af402543b3094c16c233aecaaeea8bf9e418bf1b5b3f04d09998e576c69c
5
5
  SHA512:
6
- metadata.gz: 1e24b3b0924de73d63deae71be57949f0cab97bf1c3918b8d119956cea21620294bb7ab0592fea42d6e2a9d45fa6f692dcec7091a5d2d1d34f10e9555eea20b4
7
- data.tar.gz: fa59fa36a0a6209810c709d000f8fcf44ff2187274273026b9965beeafb8335b93e80bda120878260b79a5edbaaf812ca40af9adb77f98bf03dd3b44ab346826
6
+ metadata.gz: a1b38a5b8437adf408d6308b96389a846a81e1a13e34446db4b75ce06b37f54f08d05706e8a2505916a29d8e6ee025ca58528676ad978eaee30bd3af0a0eee04
7
+ data.tar.gz: b43aad885a8d33ff9e9f2ec5abcfbee59dfef0fce1f62c54628190e8196881ca7bbcad76a2af99fdb5d16a02cb161f1045da5763db6825c1f53a8c152bc8e663
@@ -1,5 +1,10 @@
1
1
  # Change log
2
2
 
3
+ ## [v0.7.4] - 2020-05-08
4
+
5
+ ### Fixed
6
+ * Fix ColorParser#undecorate to require direct dependency by Nick Pezza(@npezza93)
7
+
3
8
  ## [v0.7.3] - 2019-06-16
4
9
 
5
10
  ### Changed
@@ -117,18 +122,19 @@
117
122
  * Change gemspec to include equatable as dependency
118
123
  * Change Delegator to stop creating instances and improve performance
119
124
 
120
- [v0.7.3]: https://github.com/peter-murach/pastel/compare/v0.7.2...v0.7.3
121
- [v0.7.2]: https://github.com/peter-murach/pastel/compare/v0.7.1...v0.7.2
122
- [v0.7.1]: https://github.com/peter-murach/pastel/compare/v0.7.0...v0.7.1
123
- [v0.7.0]: https://github.com/peter-murach/pastel/compare/v0.6.1...v0.7.0
124
- [v0.6.1]: https://github.com/peter-murach/pastel/compare/v0.6.0...v0.6.1
125
- [v0.6.0]: https://github.com/peter-murach/pastel/compare/v0.5.3...v0.6.0
126
- [v0.5.3]: https://github.com/peter-murach/pastel/compare/v0.5.2...v0.5.3
127
- [v0.5.2]: https://github.com/peter-murach/pastel/compare/v0.5.1...v0.5.2
128
- [v0.5.1]: https://github.com/peter-murach/pastel/compare/v0.5.0...v0.5.1
129
- [v0.5.0]: https://github.com/peter-murach/pastel/compare/v0.4.0...v0.5.0
130
- [v0.4.0]: https://github.com/peter-murach/pastel/compare/v0.3.0...v0.4.0
131
- [v0.3.0]: https://github.com/peter-murach/pastel/compare/v0.2.1...v0.3.0
132
- [v0.2.1]: https://github.com/peter-murach/pastel/compare/v0.2.0...v0.2.1
133
- [v0.2.0]: https://github.com/peter-murach/pastel/compare/v0.1.0...v0.2.0
134
- [v0.1.0]: https://github.com/peter-murach/pastel/compare/v0.1.0
125
+ [v0.7.4]: https://github.com/piotrmurach/pastel/compare/v0.7.3...v0.7.4
126
+ [v0.7.3]: https://github.com/piotrmurach/pastel/compare/v0.7.2...v0.7.3
127
+ [v0.7.2]: https://github.com/piotrmurach/pastel/compare/v0.7.1...v0.7.2
128
+ [v0.7.1]: https://github.com/piotrmurach/pastel/compare/v0.7.0...v0.7.1
129
+ [v0.7.0]: https://github.com/piotrmurach/pastel/compare/v0.6.1...v0.7.0
130
+ [v0.6.1]: https://github.com/piotrmurach/pastel/compare/v0.6.0...v0.6.1
131
+ [v0.6.0]: https://github.com/piotrmurach/pastel/compare/v0.5.3...v0.6.0
132
+ [v0.5.3]: https://github.com/piotrmurach/pastel/compare/v0.5.2...v0.5.3
133
+ [v0.5.2]: https://github.com/piotrmurach/pastel/compare/v0.5.1...v0.5.2
134
+ [v0.5.1]: https://github.com/piotrmurach/pastel/compare/v0.5.0...v0.5.1
135
+ [v0.5.0]: https://github.com/piotrmurach/pastel/compare/v0.4.0...v0.5.0
136
+ [v0.4.0]: https://github.com/piotrmurach/pastel/compare/v0.3.0...v0.4.0
137
+ [v0.3.0]: https://github.com/piotrmurach/pastel/compare/v0.2.1...v0.3.0
138
+ [v0.2.1]: https://github.com/piotrmurach/pastel/compare/v0.2.0...v0.2.1
139
+ [v0.2.0]: https://github.com/piotrmurach/pastel/compare/v0.1.0...v0.2.0
140
+ [v0.1.0]: https://github.com/piotrmurach/pastel/compare/v0.1.0
data/README.md CHANGED
@@ -372,4 +372,4 @@ $ pastel green 'Unicorns & rainbows!'
372
372
 
373
373
  ## Copyright
374
374
 
375
- Copyright (c) 2014-2018 Piotr Murach. See LICENSE for further details.
375
+ Copyright (c) 2014 Piotr Murach. See LICENSE for further details.
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require "strscan"
4
+
3
5
  require_relative 'ansi'
4
6
 
5
7
  module Pastel
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
2
 
3
3
  module Pastel
4
- VERSION = '0.7.3'
4
+ VERSION = '0.7.4'
5
5
  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.7.3
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Murach
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-16 00:00:00.000000000 Z
11
+ date: 2020-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: equatable
@@ -39,59 +39,46 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.5'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.5.0
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.5.0
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.1'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.1'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="
74
60
  - !ruby/object:Gem::Version
75
- version: '0'
61
+ version: '3.0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - ">="
81
67
  - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: '3.0'
83
69
  description: Terminal strings styling with intuitive and clean API.
84
70
  email:
85
- - me@piotrmurach.com
71
+ - piotr@piotrmurach.com
86
72
  executables: []
87
73
  extensions: []
88
- extra_rdoc_files: []
74
+ extra_rdoc_files:
75
+ - README.md
76
+ - CHANGELOG.md
77
+ - LICENSE.txt
89
78
  files:
90
79
  - CHANGELOG.md
91
80
  - LICENSE.txt
92
81
  - README.md
93
- - Rakefile
94
- - examples/palette.rb
95
82
  - lib/pastel.rb
96
83
  - lib/pastel/alias_importer.rb
97
84
  - lib/pastel/ansi.rb
@@ -102,32 +89,7 @@ files:
102
89
  - lib/pastel/delegator.rb
103
90
  - lib/pastel/detached.rb
104
91
  - lib/pastel/version.rb
105
- - pastel.gemspec
106
- - spec/spec_helper.rb
107
- - spec/unit/alias_color_spec.rb
108
- - spec/unit/alias_importer_spec.rb
109
- - spec/unit/color/alias_color_spec.rb
110
- - spec/unit/color/code_spec.rb
111
- - spec/unit/color/colored_spec.rb
112
- - spec/unit/color/decorate_spec.rb
113
- - spec/unit/color/equal_spec.rb
114
- - spec/unit/color/lookup_spec.rb
115
- - spec/unit/color/new_spec.rb
116
- - spec/unit/color/strip_spec.rb
117
- - spec/unit/color/styles_spec.rb
118
- - spec/unit/color/valid_spec.rb
119
- - spec/unit/color_parser_spec.rb
120
- - spec/unit/decorate_dsl_spec.rb
121
- - spec/unit/decorator_chain_spec.rb
122
- - spec/unit/delegator_spec.rb
123
- - spec/unit/detach_spec.rb
124
- - spec/unit/new_spec.rb
125
- - spec/unit/respond_to_spec.rb
126
- - spec/unit/undecorate_spec.rb
127
- - tasks/console.rake
128
- - tasks/coverage.rake
129
- - tasks/spec.rake
130
- homepage: https://piotrmurach.github.io/tty/
92
+ homepage: https://ttytoolkit.org
131
93
  licenses:
132
94
  - MIT
133
95
  metadata:
@@ -135,7 +97,7 @@ metadata:
135
97
  bug_tracker_uri: https://github.com/piotrmurach/pastel/issues
136
98
  changelog_uri: https://github.com/piotrmurach/pastel/blob/master/CHANGELOG.md
137
99
  documentation_uri: https://www.rubydoc.info/gems/pastel
138
- homepage_uri: https://piotrmurach.github.io/tty/
100
+ homepage_uri: https://ttytoolkit.org
139
101
  source_code_uri: https://github.com/piotrmurach/pastel
140
102
  post_install_message:
141
103
  rdoc_options: []
@@ -152,29 +114,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
114
  - !ruby/object:Gem::Version
153
115
  version: '0'
154
116
  requirements: []
155
- rubygems_version: 3.0.3
117
+ rubygems_version: 3.1.2
156
118
  signing_key:
157
119
  specification_version: 4
158
120
  summary: Terminal strings styling with intuitive and clean API.
159
- test_files:
160
- - spec/spec_helper.rb
161
- - spec/unit/alias_color_spec.rb
162
- - spec/unit/alias_importer_spec.rb
163
- - spec/unit/color/alias_color_spec.rb
164
- - spec/unit/color/code_spec.rb
165
- - spec/unit/color/colored_spec.rb
166
- - spec/unit/color/decorate_spec.rb
167
- - spec/unit/color/equal_spec.rb
168
- - spec/unit/color/lookup_spec.rb
169
- - spec/unit/color/new_spec.rb
170
- - spec/unit/color/strip_spec.rb
171
- - spec/unit/color/styles_spec.rb
172
- - spec/unit/color/valid_spec.rb
173
- - spec/unit/color_parser_spec.rb
174
- - spec/unit/decorate_dsl_spec.rb
175
- - spec/unit/decorator_chain_spec.rb
176
- - spec/unit/delegator_spec.rb
177
- - spec/unit/detach_spec.rb
178
- - spec/unit/new_spec.rb
179
- - spec/unit/respond_to_spec.rb
180
- - spec/unit/undecorate_spec.rb
121
+ test_files: []
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require "bundler/gem_tasks"
4
-
5
- FileList['tasks/**/*.rake'].each(&method(:import))
6
-
7
- desc 'Run all specs'
8
- task ci: %w[ spec ]
@@ -1,14 +0,0 @@
1
- require_relative '../lib/pastel'
2
-
3
- pastel = Pastel.new
4
-
5
- puts pastel.bold('bold ') + ' ' + pastel.dim('dim ') + ' ' + pastel.italic('italic ') + ' ' + pastel.underline('underline') + ' ' + pastel.inverse('inverse ') + ' ' + pastel.strikethrough('strikethrough')
6
-
7
- puts pastel.red('red ') + ' ' + pastel.green('green ') + ' ' + pastel.yellow('yellow ') + ' ' + pastel.blue('blue ') + ' ' + pastel.magenta('magenta ') + ' ' + pastel.cyan('cyan ') + ' ' + pastel.white('white')
8
-
9
- puts pastel.bright_red('red ') + ' ' + pastel.bright_green('green ') + ' ' + pastel.bright_yellow('yellow ') + ' ' + pastel.bright_blue('blue ') + ' ' + pastel.bright_magenta('magenta ') + ' ' + pastel.bright_cyan('cyan ') + ' ' + pastel.bright_white('white')
10
-
11
-
12
- puts pastel.on_red('on_red') + ' ' + pastel.on_green('on_green') + ' ' + pastel.on_yellow('on_yellow') + ' ' + pastel.on_blue('on_blue') + ' ' + pastel.on_magenta('on_magenta') + ' ' + pastel.on_cyan('on_cyan') + ' ' + pastel.on_white('on_white')
13
-
14
- puts pastel.on_bright_red('on_red') + ' ' + pastel.on_bright_green('on_green') + ' ' + pastel.on_bright_yellow('on_yellow') + ' ' + pastel.on_bright_blue('on_blue') + ' ' + pastel.on_bright_magenta('on_magenta') + ' ' + pastel.on_bright_cyan('on_cyan') + ' ' + pastel.on_bright_white('on_white')
@@ -1,37 +0,0 @@
1
- lib = File.expand_path('../lib', __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'pastel/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "pastel"
7
- spec.version = Pastel::VERSION
8
- spec.authors = ["Piotr Murach"]
9
- spec.email = ["me@piotrmurach.com"]
10
- spec.summary = %q{Terminal strings styling with intuitive and clean API.}
11
- spec.description = %q{Terminal strings styling with intuitive and clean API.}
12
- spec.homepage = "https://piotrmurach.github.io/tty/"
13
- spec.license = "MIT"
14
- if spec.respond_to?(:metadata=)
15
- spec.metadata = {
16
- "allowed_push_host" => "https://rubygems.org",
17
- "bug_tracker_uri" => "https://github.com/piotrmurach/pastel/issues",
18
- "changelog_uri" => "https://github.com/piotrmurach/pastel/blob/master/CHANGELOG.md",
19
- "documentation_uri" => "https://www.rubydoc.info/gems/pastel",
20
- "homepage_uri" => spec.homepage,
21
- "source_code_uri" => "https://github.com/piotrmurach/pastel"
22
- }
23
- end
24
- spec.files = Dir['{lib,spec,examples}/**/*.rb']
25
- spec.files += Dir['tasks/*', 'pastel.gemspec']
26
- spec.files += Dir['README.md', 'CHANGELOG.md', 'LICENSE.txt', 'Rakefile']
27
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
28
- spec.test_files = spec.files.grep(%r{^spec/})
29
- spec.require_paths = ["lib"]
30
-
31
- spec.add_dependency 'equatable', '~> 0.6'
32
- spec.add_dependency 'tty-color', '~> 0.5'
33
-
34
- spec.add_development_dependency 'bundler', '>= 1.5.0'
35
- spec.add_development_dependency 'rspec', '~> 3.1'
36
- spec.add_development_dependency 'rake'
37
- end
@@ -1,45 +0,0 @@
1
- # encoding: utf-8
2
-
3
- if RUBY_VERSION > '1.9' and (ENV['COVERAGE'] || ENV['TRAVIS'])
4
- require 'simplecov'
5
- require 'coveralls'
6
-
7
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
- SimpleCov::Formatter::HTMLFormatter,
9
- Coveralls::SimpleCov::Formatter
10
- ]
11
-
12
- SimpleCov.start do
13
- command_name 'spec'
14
- add_filter 'spec'
15
- end
16
- end
17
-
18
- require 'pastel'
19
-
20
- RSpec.configure do |config|
21
- config.expect_with :rspec do |expectations|
22
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
23
- end
24
-
25
- config.mock_with :rspec do |mocks|
26
- mocks.verify_partial_doubles = true
27
- end
28
-
29
- # Limits the available syntax to the non-monkey patched syntax that is recommended.
30
- config.disable_monkey_patching!
31
-
32
- # This setting enables warnings. It's recommended, but in some cases may
33
- # be too noisy due to issues in dependencies.
34
- config.warnings = true
35
-
36
- if config.files_to_run.one?
37
- config.default_formatter = 'doc'
38
- end
39
-
40
- config.profile_examples = 2
41
-
42
- config.order = :random
43
-
44
- Kernel.srand config.seed
45
- end
@@ -1,24 +0,0 @@
1
- # coding: utf-8
2
-
3
- RSpec.describe Pastel, '#alias_color' do
4
-
5
- subject(:pastel) { described_class.new(enabled: true) }
6
-
7
- it "aliases color" do
8
- pastel.alias_color(:funky, :red, :bold)
9
- expect(pastel.funky('unicorn')).to eq("\e[31;1municorn\e[0m")
10
- end
11
-
12
- it "aliases color and combines with regular ones" do
13
- pastel.alias_color(:funky, :red, :bold)
14
- expect(pastel.funky.on_green('unicorn')).to eq("\e[31;1;42municorn\e[0m")
15
- end
16
-
17
- it "reads aliases from the environment" do
18
- color_aliases = "funky=red"
19
- allow(ENV).to receive(:[]).with('PASTEL_COLORS_ALIASES').
20
- and_return(color_aliases)
21
- described_class.new(enabled: true)
22
- expect(pastel.valid?(:funky)).to eq(true)
23
- end
24
- end
@@ -1,29 +0,0 @@
1
- # coding: utf-8
2
-
3
- RSpec.describe Pastel::AliasImporter, '#import' do
4
- let(:color) { spy(:color, alias_color: true) }
5
- let(:output) { StringIO.new }
6
-
7
- it "imports aliases from environment" do
8
- color_aliases = "funky=red.bold,base=bright_yellow"
9
- env = {'PASTEL_COLORS_ALIASES' => color_aliases}
10
- importer = described_class.new(color, env)
11
-
12
- importer.import
13
-
14
- expect(color).to have_received(:alias_color).with(:funky, :red, :bold)
15
- expect(color).to have_received(:alias_color).with(:base, :bright_yellow)
16
- end
17
-
18
- it "fails to import incorrectly formatted colors" do
19
- color_aliases = "funky red,base=bright_yellow"
20
- env = {'PASTEL_COLORS_ALIASES' => color_aliases}
21
- importer = described_class.new(color, env, output)
22
- output.rewind
23
-
24
- importer.import
25
-
26
- expect(output.string).to eq("Bad color mapping `funky red`\n")
27
- expect(color).to have_received(:alias_color).with(:base, :bright_yellow)
28
- end
29
- end
@@ -1,40 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '.alias_color' do
4
-
5
- subject(:color) { described_class.new(enabled: true) }
6
-
7
- it 'aliases non existent color' do
8
- expect {
9
- color.alias_color(:funky, :unknown)
10
- }.to raise_error(Pastel::InvalidAttributeNameError)
11
- end
12
-
13
- it 'aliases color with invalid name' do
14
- expect {
15
- color.alias_color('some name', :red)
16
- }.to raise_error(Pastel::InvalidAliasNameError, /Invalid alias name/)
17
- end
18
-
19
- it 'aliases standard color' do
20
- expect {
21
- color.alias_color(:red, :red)
22
- }.to raise_error(Pastel::InvalidAliasNameError, /alias standard color/)
23
- end
24
-
25
- it 'aliases color :red to :funky' do
26
- color.alias_color(:funky, :red, :bold)
27
- expect(color.valid?(:funky)).to eq(true)
28
- expect(color.code(:funky)).to eq([[31, 1]])
29
- expect(color.lookup(:funky)).to eq("\e[31;1m")
30
- end
31
-
32
- it "has global aliases" do
33
- color_foo = described_class.new(enabled: true)
34
- color_bar = described_class.new(enabled: true)
35
- color_foo.alias_color(:foo, :red)
36
- color_bar.alias_color(:bar, :red)
37
- expect(color_foo.valid?(:foo)).to eq(true)
38
- expect(color_foo.valid?(:bar)).to eq(true)
39
- end
40
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '#code' do
4
- let(:string) { "This is a \e[1m\e[34mbold blue text\e[0m" }
5
-
6
- subject(:color) { described_class.new(enabled: true) }
7
-
8
- it 'finds single code' do
9
- expect(color.code(:black)).to eq([30])
10
- end
11
-
12
- it 'finds more than one code' do
13
- expect(color.code(:black, :green)).to eq([30, 32])
14
- end
15
-
16
- it "doesn't find code" do
17
- expect { color.code(:unkown) }.to raise_error(ArgumentError)
18
- end
19
-
20
- it "finds alias code" do
21
- color.alias_color(:funky, :red, :bold)
22
- expect(color.code(:funky)).to eq([color.code(:red) + color.code(:bold)])
23
- end
24
- end
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '#colored?' do
4
- subject(:color) { described_class.new(enabled: true) }
5
-
6
- it "checks if string has color codes" do
7
- string = "foo\e[31mbar\e[0m"
8
- expect(color.colored?(string)).to eq(true)
9
- end
10
-
11
- it "checks that string doesn't contain color codes" do
12
- string = "foo\nbar"
13
- expect(color.colored?(string)).to eq(false)
14
- end
15
- end
@@ -1,79 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '.decorate' do
4
- let(:string) { 'string' }
5
-
6
- subject(:color) { described_class.new(enabled: true) }
7
-
8
- it "doesn't output styling when disabled" do
9
- color = described_class.new(enabled: false)
10
- expect(color.decorate('foo', :red)).to eq('foo')
11
- end
12
-
13
- it "doesn't apply styling to empty string" do
14
- expect(color.decorate('')).to eq('')
15
- end
16
-
17
- it "doesn't decorate without color" do
18
- expect(color.decorate(string)).to eq(string)
19
- end
20
-
21
- it 'applies green text to string' do
22
- expect(color.decorate(string, :green)).to eq("\e[32m#{string}\e[0m")
23
- end
24
-
25
- it 'applies red text background to string' do
26
- expect(color.decorate(string, :on_red)).to eq("\e[41m#{string}\e[0m")
27
- end
28
-
29
- it 'applies style and color to string' do
30
- expect(color.decorate(string, :bold, :green)).to eq("\e[1;32m#{string}\e[0m")
31
- end
32
-
33
- it 'applies style, color and background to string' do
34
- text = color.decorate(string, :bold, :green, :on_blue)
35
- expect(text).to eq("\e[1;32;44m#{string}\e[0m")
36
- end
37
-
38
- it "applies styles to nested text" do
39
- decorated = color.decorate(string + color.decorate(string, :red) + string, :green)
40
- expect(decorated).to eq("\e[32m#{string}\e[31m#{string}\e[0m\e[32m#{string}\e[0m")
41
- end
42
-
43
- it "decorates multiline string as regular by default" do
44
- string = "foo\nbar\nbaz"
45
- expect(color.decorate(string, :red)).to eq("\e[31mfoo\nbar\nbaz\e[0m")
46
- end
47
-
48
- it "allows to decorate each line separately" do
49
- string = "foo\nbar\nbaz"
50
- color = described_class.new(enabled: true, eachline: "\n")
51
- expect(color.decorate(string, :red)).to eq([
52
- "\e[31mfoo\e[0m",
53
- "\e[31mbar\e[0m",
54
- "\e[31mbaz\e[0m"
55
- ].join("\n"))
56
- end
57
-
58
- it 'errors for unknown color' do
59
- expect {
60
- color.decorate(string, :crimson)
61
- }.to raise_error(Pastel::InvalidAttributeNameError)
62
- end
63
-
64
- it "doesn't decorate non-string instance" do
65
- expect(color.decorate({}, :red)).to eq({})
66
- end
67
-
68
- it "doesn't decorate nil" do
69
- expect(color.decorate(nil, :red)).to eq(nil)
70
- end
71
-
72
- it "doesn't decorate zero length string" do
73
- expect(color.decorate('', :red)).to eq('')
74
- end
75
-
76
- it "doesn't decorate non-zero length string" do
77
- expect(color.decorate(' ', :red)).to eq("\e[31m \e[0m")
78
- end
79
- end
@@ -1,22 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '#==' do
4
- it "is true with the same enabled and eachline attributes" do
5
- expect(Pastel::Color.new(enabled: false, eachline: "\n")).
6
- to eq(Pastel::Color.new(enabled: false, eachline: "\n"))
7
- end
8
-
9
- it "is false with different enabled attribute" do
10
- expect(Pastel::Color.new(enabled: true, eachline: "\n")).
11
- not_to eq(Pastel::Color.new(enabled: false, eachline: "\n"))
12
- end
13
-
14
- it "is false with different eachline attribute" do
15
- expect(Pastel::Color.new(enabled: false, eachline: "\n")).
16
- not_to eq(Pastel::Color.new(enabled: false, eachline: "\r\n"))
17
- end
18
-
19
- it "is false with non-color" do
20
- expect(Pastel::Color.new(enabled: true)).not_to eq(:other)
21
- end
22
- end
@@ -1,17 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '#lookup' do
4
- it "looksup colors" do
5
- color = described_class.new(enabled: true)
6
- expect(color.lookup(:red, :on_green, :bold)).to eq("\e[31;42;1m")
7
- end
8
-
9
- it "caches color lookups" do
10
- color = described_class.new(enabled: true)
11
- allow(color).to receive(:code).and_return([31])
12
- color.lookup(:red, :on_green)
13
- color.lookup(:red, :on_green)
14
- color.lookup(:red, :on_green)
15
- expect(color).to have_received(:code).once
16
- end
17
- end
@@ -1,10 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '::new' do
4
- it "allows to disable coloring" do
5
- color = described_class.new(enabled: false)
6
-
7
- expect(color.enabled?).to eq(false)
8
- expect(color.decorate("Unicorn", :red)).to eq("Unicorn")
9
- end
10
- end
@@ -1,56 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '.strip' do
4
-
5
- subject(:color) { described_class.new(enabled: true) }
6
-
7
- it 'strips ansi color from string' do
8
- string = "This is a \e[1m\e[34mbold blue text\e[0m"
9
- expect(color.strip(string)).to eq('This is a bold blue text')
10
- end
11
-
12
- it "strips partial ansi color" do
13
- string = "foo\e[1mbar"
14
- expect(color.strip(string)).to eq('foobar')
15
- end
16
-
17
- it 'preserves movement characters' do
18
- # [176A - move cursor up n lines
19
- expect(color.strip("foo\e[176Abar")).to eq("foo\e[176Abar")
20
- end
21
-
22
- it 'strips reset/setfg/setbg/italics/strike/underline sequence' do
23
- string = "\x1b[0;33;49;3;9;4mfoo\x1b[0m"
24
- expect(color.strip(string)).to eq("foo")
25
- end
26
-
27
- it 'strips octal in encapsulating brackets' do
28
- string = "\[\033[01;32m\]u@h \[\033[01;34m\]W $ \[\033[00m\]"
29
- expect(color.strip(string)).to eq('[]u@h []W $ []')
30
- end
31
-
32
- it 'strips octal codes without brackets' do
33
- string = "\033[01;32mu@h \033[01;34mW $ \033[00m"
34
- expect(color.strip(string)).to eq('u@h W $ ')
35
- end
36
-
37
- it 'strips octal with multiple colors' do
38
- string = "\e[3;0;0;mfoo\e[8;50;0m"
39
- expect(color.strip(string)).to eq('foo')
40
- end
41
-
42
- it "strips multiple colors delimited by :" do
43
- string = "\e[31:44:4mfoo\e[0m"
44
- expect(color.strip(string)).to eq('foo')
45
- end
46
-
47
- it 'strips control codes' do
48
- string = "WARN. \x1b[1m&\x1b[0m ERR. \x1b[7m&\x1b[0m"
49
- expect(color.strip(string)).to eq('WARN. & ERR. &')
50
- end
51
-
52
- it 'strips escape bytes' do
53
- string = "This is a \e[1m\e[34mbold blue text\e[0m"
54
- expect(color.strip(string)).to eq("This is a bold blue text")
55
- end
56
- end
@@ -1,10 +0,0 @@
1
- # coding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '#styles' do
4
-
5
- subject(:color) { described_class.new(enabled: true) }
6
-
7
- it "exposes all available style ANSI codes" do
8
- expect(color.styles[:red]).to eq(31)
9
- end
10
- end
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::Color, '.valid?' do
4
- it "detects valid colors" do
5
- color = described_class.new
6
- expect(color.valid?(:red, :on_green, :bold)).to eq(true)
7
- end
8
-
9
- it "detects valid color aliases" do
10
- color = described_class.new
11
- color.alias_color(:funky, :red)
12
- expect(color.valid?(:funky)).to eq(true)
13
- end
14
-
15
- it "detects invalid color" do
16
- color = described_class.new
17
- expect(color.valid?(:red, :unknown)).to eq(false)
18
- end
19
- end
@@ -1,67 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel::ColorParser, '::parse' do
4
- subject(:parser) { described_class }
5
-
6
- it "parses string with no color" do
7
- expect(parser.parse("foo")).to eq([{text: 'foo'}])
8
- end
9
-
10
- it "parses simple color" do
11
- expect(parser.parse("\e[32mfoo\e[0m")).to eq([
12
- {foreground: :green, text: 'foo'}
13
- ])
14
- end
15
-
16
- it "parses simple color and style" do
17
- expect(parser.parse("\e[32;1mfoo\e[0m")).to eq([
18
- {foreground: :green, style: :bold, text: 'foo'}
19
- ])
20
- end
21
-
22
- it "parses chained colors in shorthand syntax" do
23
- expect(parser.parse("\e[32;44mfoo\e[0m")).to eq([
24
- {foreground: :green, background: :on_blue, text: 'foo'}
25
- ])
26
- end
27
-
28
- it "parses chained colors in regular syntax" do
29
- expect(parser.parse("\e[32m\e[44mfoo\e[0m")).to eq([
30
- {foreground: :green, background: :on_blue, text: 'foo'}
31
- ])
32
- end
33
-
34
- it "parses many colors" do
35
- expect(parser.parse("\e[32mfoo\e[0m \e[31mbar\e[0m")).to eq([
36
- {foreground: :green, text: 'foo'},
37
- {text: ' '},
38
- {foreground: :red, text: 'bar'}
39
- ])
40
- end
41
-
42
- it "parses nested colors with one reset" do
43
- expect(parser.parse("\e[32mfoo\e[31mbar\e[0m")).to eq([
44
- {foreground: :green, text: 'foo'},
45
- {foreground: :red, text: 'bar'}
46
- ])
47
- end
48
-
49
- it "parses nested colors with two resets" do
50
- expect(parser.parse("\e[32mfoo\e[31mbar\e[0m\e[0m")).to eq([
51
- {foreground: :green, text: 'foo'},
52
- {foreground: :red, text: 'bar'}
53
- ])
54
- end
55
-
56
- it "parses unrest color" do
57
- expect(parser.parse("\e[32mfoo")).to eq([
58
- {foreground: :green, text: 'foo'}
59
- ])
60
- end
61
-
62
- it "parses malformed control sequence" do
63
- expect(parser.parse("\eA foo bar ESC\e")).to eq([
64
- {text: "\eA foo bar ESC\e"}
65
- ])
66
- end
67
- end
@@ -1,98 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel, 'coloring dsl' do
4
-
5
- subject(:pastel) { described_class.new(enabled: true) }
6
-
7
- it "colors string" do
8
- expect(pastel.red("unicorn")).to eq("\e[31municorn\e[0m")
9
- end
10
-
11
- it "allows to specify variable number of arguments" do
12
- expect(pastel.red("unicorn", "running")).to eq("\e[31municornrunning\e[0m")
13
- end
14
-
15
- it "combines colored strings with regular ones" do
16
- expect(pastel.red("Unicorns") + ' will rule ' + pastel.green('the World!')).
17
- to eq("\e[31mUnicorns\e[0m will rule \e[32mthe World!\e[0m")
18
- end
19
-
20
- it "composes two color strings " do
21
- expect(pastel.red.on_green("unicorn")).to eq("\e[31;42municorn\e[0m")
22
- end
23
-
24
- it "composes three color strings" do
25
- expect(pastel.red.on_green.underline("unicorn")).
26
- to eq("\e[31;42;4municorn\e[0m")
27
- end
28
-
29
- it "combines colored composed strings with regular ones" do
30
- expect(pastel.red.on_green("Unicorns") + ' will rule ' +
31
- pastel.green.on_red('the World!')).
32
- to eq("\e[31;42mUnicorns\e[0m will rule \e[32;41mthe World!\e[0m")
33
- end
34
-
35
- it "allows one level nesting" do
36
- expect(pastel.red("Unicorn" + pastel.blue("rule!"))).
37
- to eq("\e[31mUnicorn\e[34mrule!\e[0m\e[0m")
38
- end
39
-
40
- it "allows to nest mixed styles" do
41
- expect(pastel.red("Unicorn" + pastel.green.on_yellow.underline('running') + '!')).
42
- to eq("\e[31mUnicorn\e[32;43;4mrunning\e[0m\e[31m!\e[0m")
43
- end
44
-
45
- it "allows for deep nesting" do
46
- expect(pastel.red('r' + pastel.green('g' + pastel.yellow('y') + 'g') + 'r')).
47
- to eq("\e[31mr\e[32mg\e[33my\e[0m\e[32mg\e[0m\e[31mr\e[0m")
48
- end
49
-
50
- it "allows for variable nested arguments" do
51
- expect(pastel.red('r', pastel.green('g'), 'r')).
52
- to eq("\e[31mr\e[32mg\e[0m\e[31mr\e[0m")
53
- end
54
-
55
- it "nests color foreground & background" do
56
- expect(pastel.on_red('foo', pastel.green('bar'), 'foo')).
57
- to eq("\e[41mfoo\e[32mbar\e[0m\e[41mfoo\e[0m")
58
- end
59
-
60
- it "allows to nest styles within block" do
61
- string = pastel.red.on_green('Unicorns' +
62
- pastel.green.on_red('will ', 'dominate' + pastel.yellow('the world!')))
63
-
64
- expect(pastel.red.on_green('Unicorns') do
65
- green.on_red('will ', 'dominate') do
66
- yellow('the world!')
67
- end
68
- end).to eq(string)
69
- end
70
-
71
- it "doesn't decorate nil" do
72
- expect(pastel.red(nil)).to eq('')
73
- end
74
-
75
- it "doesn't apply styles to empty string" do
76
- expect(pastel.red('')).to eq('')
77
- end
78
-
79
- it "applies styles to empty with width more than 1" do
80
- expect(pastel.red(' ')).to eq("\e[31m \e[0m")
81
- end
82
-
83
- it "applies color only once" do
84
- expect(pastel.red.red.red("unicorn")).to eq(pastel.red("unicorn"))
85
- end
86
-
87
- it "raises error when chained with unrecognized color" do
88
- expect {
89
- pastel.unknown.on_red('unicorn')
90
- }.to raise_error(Pastel::InvalidAttributeNameError)
91
- end
92
-
93
- it "raises error when doesn't recognize color" do
94
- expect {
95
- pastel.unknown('unicorn')
96
- }.to raise_error(Pastel::InvalidAttributeNameError)
97
- end
98
- end
@@ -1,47 +0,0 @@
1
- # coding: utf-8
2
-
3
- RSpec.describe Pastel::DecoratorChain do
4
- it "is enumerable" do
5
- expect(described_class.new).to be_a(Enumerable)
6
- end
7
-
8
- it "is equatable" do
9
- expect(described_class.new).to be_a(Equatable)
10
- end
11
-
12
- describe ".each" do
13
- it "yields each decorator" do
14
- first = double('first')
15
- second = double('second')
16
- chain = described_class.new.add(first).add(second)
17
- yielded = []
18
-
19
- expect {
20
- chain.each { |decorator| yielded << decorator }
21
- }.to change { yielded }.from([]).to([first, second])
22
- end
23
- end
24
-
25
- describe ".==" do
26
- it "is equivalent with the same decorator" do
27
- expect(described_class.new.add(:foo).add(:bar)).
28
- to eq(described_class.new.add(:foo).add(:bar))
29
- end
30
-
31
- it "is not equivalent with different decorator" do
32
- expect(described_class.new.add(:foo).add(:bar)).
33
- not_to eq(described_class.new.add(:foo).add(:baz))
34
- end
35
-
36
- it "is not equivalent to another type" do
37
- expect(described_class.new.add(:foo).add(:bar)).
38
- not_to eq(:other)
39
- end
40
- end
41
-
42
- describe ".inspect" do
43
- it "displays object information" do
44
- expect(described_class.new.inspect).to match(/decorators=\[\]/)
45
- end
46
- end
47
- end
@@ -1,38 +0,0 @@
1
- # coding: utf-8
2
-
3
- RSpec.describe Pastel::Delegator do
4
-
5
- it "returns delegator for color without argument" do
6
- pastel = Pastel.new(enabled: true)
7
- expect(pastel.red).to be_a(Pastel::Delegator)
8
- end
9
-
10
- describe ".inspect" do
11
- it "inspects delegator styles chain" do
12
- chain = ['red', 'on_green']
13
- delegator = described_class.new(:resolver, chain)
14
- allow(delegator).to receive(:styles).and_return({red: 31, on_green: 42})
15
- expect(delegator.inspect).to eq("#<Pastel @styles=[\"red\", \"on_green\"]>")
16
- end
17
- end
18
-
19
- describe ".respond_to_missing?" do
20
- context 'for a method defined on' do
21
- it "returns true" do
22
- resolver = double(:resolver)
23
- chain = double(:chain)
24
- decorator = described_class.new(resolver, chain)
25
- expect(decorator.method(:styles)).not_to be_nil
26
- end
27
- end
28
-
29
- context "for an undefined method " do
30
- it "returns false" do
31
- resolver = double(:resolver, color: true)
32
- chain = double(:chain)
33
- decorator = described_class.new(resolver, chain)
34
- expect { decorator.method(:unknown) }.to raise_error(NameError)
35
- end
36
- end
37
- end
38
- end
@@ -1,48 +0,0 @@
1
- # coding: utf-8
2
-
3
- RSpec.describe Pastel, '.detach' do
4
-
5
- subject(:pastel) { described_class.new(enabled: true) }
6
-
7
- it "creates detached instance" do
8
- error = pastel.red.bold.detach
9
- expect(error).to be_a(Pastel::Detached)
10
- end
11
-
12
- it "ensures instance is immutable" do
13
- error = pastel.red.detach
14
- expect(error.frozen?).to be(true)
15
- end
16
-
17
- it "detaches colors combination" do
18
- error = pastel.red.bold.detach
19
- expect(error.call('unicorn')).to eq("\e[31;1municorn\e[0m")
20
- expect(error.call('error')).to eq("\e[31;1merror\e[0m")
21
- end
22
-
23
- it "allows array like access" do
24
- error = pastel.red.bold.detach
25
- expect(error['unicorn']).to eq("\e[31;1municorn\e[0m")
26
- end
27
-
28
- it "allows alternative call invocation" do
29
- error = pastel.red.bold.detach
30
- expect(error.('unicorn')).to eq("\e[31;1municorn\e[0m")
31
- end
32
-
33
- it "calls detached colors with no arguments" do
34
- warning = pastel.yellow.detach
35
- expect(warning.call('')).to eq('')
36
- end
37
-
38
- it "inspects detached colors" do
39
- warning = pastel.yellow.bold.detach
40
- expect(warning.inspect).to eq('#<Pastel::Detached styles=[:yellow, :bold]>')
41
- end
42
-
43
- it "accepts multiple strings" do
44
- error = pastel.red.bold.detach
45
- expect(error.call('Unicorns', ' run ', 'wild')).
46
- to eq("\e[31;1mUnicorns run wild\e[0m")
47
- end
48
- end
@@ -1,63 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Pastel, '#new' do
4
-
5
- subject(:pastel) { described_class.new(enabled: true) }
6
-
7
- it { is_expected.to respond_to(:lookup) }
8
-
9
- it { is_expected.to respond_to(:decorate) }
10
-
11
- it { is_expected.to respond_to(:undecorate) }
12
-
13
- it { is_expected.to respond_to(:strip) }
14
-
15
- describe '#valid?' do
16
- it "when valid returns true" do
17
- expect(pastel.valid?(:red)).to eq(true)
18
- end
19
-
20
- it "returns false when invalid" do
21
- expect(pastel.valid?(:unknown)).to eq(false)
22
- end
23
- end
24
-
25
- describe '#colored?' do
26
- it "checks if string is colored" do
27
- expect(pastel.colored?("\e[31mfoo\e[0m")).to eq(true)
28
- end
29
- end
30
-
31
- describe 'options passed in' do
32
- it 'defaults enabled to color detection' do
33
- allow(TTY::Color).to receive(:color?).and_return(true)
34
- allow(TTY::Color).to receive(:windows?).and_return(false)
35
-
36
- pastel = described_class.new
37
-
38
- expect(pastel.enabled?).to eq(true)
39
- expect(TTY::Color).to have_received(:color?)
40
- end
41
-
42
- it "defaults to enabled on Windows" do
43
- allow(TTY::Color).to receive(:color?).and_return(false)
44
- allow(TTY::Color).to receive(:windows?).and_return(true)
45
-
46
- pastel = described_class.new
47
-
48
- expect(pastel.enabled?).to eq(true)
49
- expect(TTY::Color).to_not have_received(:color?)
50
- end
51
-
52
- it "sets enabled option" do
53
- pastel = described_class.new(enabled: false)
54
- expect(pastel.enabled?).to eq(false)
55
- expect(pastel.red('Unicorn', pastel.green('!'))).to eq('Unicorn!')
56
- end
57
-
58
- it "sets eachline option" do
59
- pastel = described_class.new(enabled: true, eachline: "\n")
60
- expect(pastel.red("foo\nbar")).to eq("\e[31mfoo\e[0m\n\e[31mbar\e[0m")
61
- end
62
- end
63
- end
@@ -1,17 +0,0 @@
1
- # coding: utf-8
2
-
3
- RSpec.describe Pastel, '.respond_to?' do
4
- subject(:pastel) { described_class.new(enabled: true) }
5
-
6
- it "responds correctly to color method" do
7
- expect(pastel.respond_to?(:decorate)).to eq(true)
8
- end
9
-
10
- it "responds correctly to color property" do
11
- expect(pastel.respond_to?(:red)).to eq(true)
12
- end
13
-
14
- it "responds correctly to unkown method" do
15
- expect(pastel.respond_to?(:unknown)).to eq(false)
16
- end
17
- end
@@ -1,12 +0,0 @@
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
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- desc 'Load gem inside irb console'
4
- task :console do
5
- require 'irb'
6
- require 'irb/completion'
7
- require File.join(__FILE__, '../../lib/pastel')
8
- ARGV.clear
9
- IRB.start
10
- end
11
- task c: :console
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- desc 'Measure code coverage'
4
- task :coverage do
5
- begin
6
- original, ENV['COVERAGE'] = ENV['COVERAGE'], 'true'
7
- Rake::Task['spec'].invoke
8
- ensure
9
- ENV['COVERAGE'] = original
10
- end
11
- end
@@ -1,29 +0,0 @@
1
- # encoding: utf-8
2
-
3
- begin
4
- require 'rspec/core/rake_task'
5
-
6
- desc 'Run all specs'
7
- RSpec::Core::RakeTask.new(:spec) do |task|
8
- task.pattern = 'spec/{unit,integration}{,/*/**}/*_spec.rb'
9
- end
10
-
11
- namespace :spec do
12
- desc 'Run unit specs'
13
- RSpec::Core::RakeTask.new(:unit) do |task|
14
- task.pattern = 'spec/unit{,/*/**}/*_spec.rb'
15
- end
16
-
17
- desc 'Run integration specs'
18
- RSpec::Core::RakeTask.new(:integration) do |task|
19
- task.pattern = 'spec/integration{,/*/**}/*_spec.rb'
20
- end
21
- end
22
-
23
- rescue LoadError
24
- %w[spec spec:unit spec:integration].each do |name|
25
- task name do
26
- $stderr.puts "In order to run #{name}, do `gem install rspec`"
27
- end
28
- end
29
- end