colored2 2.0.2 → 3.1.2

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
  SHA1:
3
- metadata.gz: 621fbf237db4190687d51e14d05878a4a174c69c
4
- data.tar.gz: d198d7985aa414c065726eaa491d8f8c7b2228c9
3
+ metadata.gz: 924031901113f03f0694ea75208745920d7f38ab
4
+ data.tar.gz: 835ee416fa88d5d903546a021da1e0792d6529fc
5
5
  SHA512:
6
- metadata.gz: 00642c7bff03d7efdd3ec2da55ed4d8100e2c26a707c58b6b5af860107a599bfcc48836fd021ee47f51cdd07957d65280b85ca16470f237a26bc94c392deaaee
7
- data.tar.gz: ec17f680b8e2fdf94ec1f70633de7f5a96818a704128b8e9eccdcda74af95639e088bd09663c1af5cfae84fd20d1759c4e27d3ba741a7133fed6df20795a2608
6
+ metadata.gz: '008631053e811a6694c199ddc6c0c5b2636c7c863a5a794835766effb93cb9afea9af5a51802f8b9943a206138b9555002b33e68eeb148b9f05ded8fc6fe2f5f'
7
+ data.tar.gz: a3d40c57634d3753a2dcd9073f6841ef2f40d1b21b1a141a34ade7eff762a934e878f2e8b91051c0f072e8b392cff5abd77456b6415d2d0cb4f28fbcb4c473f8
data/README.md CHANGED
@@ -1,31 +1,93 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/colored2.svg)](https://badge.fury.io/rb/colored2)
2
+ [![Downloads](http://ruby-gem-downloads-badge.herokuapp.com/colored2?type=total)](https://rubygems.org/gems/colored2)
3
+ [![Gitter](https://img.shields.io/gitter/room/gitterHQ/gitter.svg)](https://gitter.im/colored2)
4
+
2
5
  [![Build Status](https://travis-ci.org/kigster/colored2.svg?branch=master)](https://travis-ci.org/kigster/colored2)
3
- [![Code Climate](https://codeclimate.com/repos/56dff58d80b254164b003d80/badges/176e4c39b20bfed90478/gpa.svg)](https://codeclimate.com/repos/56dff58d80b254164b003d80/feed)
4
- [![Test Coverage](https://codeclimate.com/repos/56dff58d80b254164b003d80/badges/176e4c39b20bfed90478/coverage.svg)](https://codeclimate.com/repos/56dff58d80b254164b003d80/coverage)
5
- [![Issue Count](https://codeclimate.com/repos/56dff58d80b254164b003d80/badges/176e4c39b20bfed90478/issue_count.svg)](https://codeclimate.com/repos/56dff58d80b254164b003d80/feed)
6
+ [![Test Coverage](https://codeclimate.com/github/kigster/colored2/badges/coverage.svg)](https://codeclimate.com/github/kigster/colored2/coverage)
7
+ [![Code Climate](https://codeclimate.com/github/kigster/colored2/badges/gpa.svg)](https://codeclimate.com/github/kigster/colored2)
8
+ [![Issue Count](https://codeclimate.com/github/kigster/colored2/badges/issue_count.svg)](https://codeclimate.com/github/kigster/colored2)
6
9
 
7
10
  ## Colored2
8
11
 
9
- This is a fork of Chris (defunkt) Wanstrath's colored gem, which appears to be no longer supported.
12
+ This is an actively maintained fork of Chris (defunkt) Wanstrath's gem [colored](https://github.com/defunkt/colored), which appears to be no longer supported.
10
13
 
11
- This fork comes with a slightly spruced up syntax and rspecs.
14
+ This fork comes with a slightly spruced up syntax, some additional features, and a test suite written in [RSpec](http://rspec.info/).
12
15
 
13
16
  ## Usage
14
17
 
15
- In addition to the simple syntax of the original gem, which affected only the string to the left of the method call,
16
- the "bang" syntax affects a string to the right. If the block or a method argument is provided,
17
- the contents is wrapped in the color, and the color is then reset back. If no block
18
- or argument is provided, the color is left open-ended, and must be explicitly reset – when using the 'bang' notation.
18
+ In addition to the simple syntax of the original gem, which affected only the string to the left of the method call, the new "bang" syntax affects a string to the right. If the block or a method argument is provided, the contents is wrapped in the color, and the color is then reset back.
19
+
20
+ If no block or argument is provided, the color is left open-ended, and must be explicitly reset when using the 'bang' notation.
19
21
 
20
22
  ![](doc/colored2-session1.png)
21
23
 
24
+ ### Complete set of colors:
25
+
26
+ * black
27
+ * red
28
+ * green
29
+ * yellow
30
+ * blue
31
+ * magenta
32
+ * cyan
33
+ * white
34
+
35
+ ### Complete Set of Effects
36
+
37
+ > Note: previous versions used method name `clear` instead of `no_color`, which clashed with many 3rd party frameworks that defined similarly named method in the global namespace.
38
+ > This highlights the dangers of introducing so many words into the `String` namespace.
39
+
40
+ * no_color
41
+ * bold
42
+ * dark
43
+ * italic
44
+ * underlined
45
+ * reversed
46
+ * plain
47
+ * normal
48
+
22
49
  ## Usage in Other Classes
23
50
 
24
- You can decorate and color not just strings.
51
+ With this gem you can add color to not just strings, but to any other class. `String` class is automatically decorated as soon as `require 'colored2'` is parsed by the ruby interpreter. Note that future versions may refrain from auto-requiring `colored2/strings`, and rely on explicitly requiring components they need colorized, eg `require 'colored2/numbers'`.
25
52
 
26
- To color numbers, require the following file, which automatically decorates `Fixnum` and `Float`. You can also add color methods
27
- to the `Object`. Finally, you can add the methods to any custom class by including the `Colored2` Module.
53
+ To color numbers, require the following file, which automatically decorates `Integer` and `Float`. You can also add color methods to the `Object`. Finally, you can add the methods to any custom class by including the `Colored2` Module.
28
54
 
29
- Below is an `IRB` session that shows a slightly more advanced usage.
55
+ Below is an `IRB` session that shows a slightly more advanced usage.
30
56
 
31
57
  ![](doc/colored2-session2.png)
58
+
59
+ ## Additional Helpers
60
+
61
+ There are several additional helpers tucked onto the `String` class.
62
+
63
+ * `#to_bol` (to beginning of the line) will rewind the cursor back to the beginning of the current line.
64
+ * `#to_eol` (to end of line)
65
+
66
+ ## Installation
67
+
68
+ Add this line to your application's Gemfile:
69
+
70
+
71
+ gem 'colored2'
72
+
73
+
74
+ And then execute:
75
+
76
+ $ bundle
77
+
78
+ Or install it yourself as:
79
+
80
+ $ gem install colored2
81
+
82
+
83
+ ## Development
84
+
85
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
86
+
87
+ ## Contributing
88
+
89
+ Bug reports and pull requests are welcome on GitHub at [https://github.com/kigster/colored2](https://github.com/kigster/colored2).
90
+
91
+ ## License
92
+
93
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -1,4 +1,4 @@
1
- require 'colored2/constants'
1
+ require 'colored2/codes'
2
2
  require 'colored2/ascii_decorator'
3
3
 
4
4
  module Colored2
@@ -9,23 +9,27 @@ module Colored2
9
9
  def self.included(from_class)
10
10
  from_class.class_eval do
11
11
 
12
- def surround_with_color(color_or_effect, color_self, string = nil, &block)
13
- color_type = if Colored2.background_next?
12
+ def surround_with_color(color: nil, effect: nil, color_self: nil, string: nil, &block)
13
+ color_type = if Colored2.background_next? && effect.nil?
14
14
  Colored2.foreground_next!
15
15
  :background
16
16
  else
17
17
  :foreground
18
18
  end
19
19
 
20
+ opts = {}
21
+ opts.merge!(color_type => color) if color
22
+ opts.merge!(effect: effect) if effect
23
+
20
24
  if color_self then
21
- opts = { beginning: :on, end: :off, color_type => color_or_effect, effect: color_or_effect }
25
+ opts.merge!( beginning: :on, end: :off)
22
26
  colored = Colored2::AsciiDecorator.new(self).decorate(opts)
23
27
  if string || block
24
28
  arg = "#{string}#{block.call if block}"
25
29
  colored << Colored2::AsciiDecorator.new(arg).decorate(opts) if arg.length > 0
26
30
  end
27
31
  else
28
- opts = { end: :on, color_type => color_or_effect, effect: color_or_effect}
32
+ opts.merge!( end: :on )
29
33
  colored = Colored2::AsciiDecorator.new(self).decorate(opts)
30
34
  if string || block
31
35
  arg = "#{string}#{block.call if block}"
@@ -44,22 +48,22 @@ module Colored2
44
48
  from_class.instance_eval do
45
49
  COLORS.keys.each do |color|
46
50
  define_method(color) do |string = nil, &block|
47
- surround_with_color(color, true, string, &block)
51
+ surround_with_color(color: color, color_self: true, string: string, &block)
48
52
  end
49
53
 
50
54
  define_method("#{color}!".to_sym) do |string = nil, &block|
51
- surround_with_color(color, false, string, &block)
55
+ surround_with_color(color: color, color_self: false, string: string, &block)
52
56
  end
53
57
  end
54
58
 
55
59
  EFFECTS.keys.each do |effect|
56
- next if effect == 'clear'
60
+ next if effect == 'no_color'
57
61
  define_method(effect) do |string = nil, &block|
58
- surround_with_color(effect, true, string, &block)
62
+ surround_with_color(effect: effect, color_self: true, string: string, &block)
59
63
  end
60
64
 
61
65
  define_method("#{effect}!".to_sym) do |string = nil, &block|
62
- surround_with_color(effect, false, string, &block)
66
+ surround_with_color(effect: effect, color_self: false, string: string, &block)
63
67
  end
64
68
  end
65
69
 
@@ -70,6 +74,10 @@ module Colored2
70
74
  end
71
75
  tmp
72
76
  end
77
+
78
+ define_method(:to_bol) do
79
+ "#{self}\033[#{length}D\033[0D"
80
+ end
73
81
  end
74
82
  end
75
83
  end
@@ -1,4 +1,4 @@
1
- require_relative 'constants'
1
+ require 'colored2/codes'
2
2
  require 'forwardable'
3
3
 
4
4
  module Colored2
@@ -41,29 +41,10 @@ module Colored2
41
41
  def background_next?
42
42
  self.__background_next
43
43
  end
44
-
45
- def clear
46
- effect(:clear)
47
- end
48
-
49
- def colors
50
- @colors ||= COLORS.keys.sort
51
- end
52
-
53
- def effect(effect_name)
54
- "\e[#{EFFECTS[effect_name]}m" if effect_name && EFFECTS[effect_name.to_sym]
55
- end
56
-
57
- def color(color_name:, type:)
58
- background_code = (type == :background) ? 10 : 0
59
- if color_name && COLORS[color_name.to_sym]
60
- "\e[#{COLORS[color_name.to_sym] + background_code}m"
61
- end
62
- end
63
44
  end
64
45
 
65
46
  extend Forwardable
66
- def_delegators :@my_class, :enable!, :disable!, :clear, :colors, :effect, :color
47
+ def_delegators :@my_class, :enable!, :disable!
67
48
 
68
49
  attr_accessor :string, :my_class
69
50
 
@@ -73,21 +54,20 @@ module Colored2
73
54
  end
74
55
 
75
56
  # options[:start] = :color
76
- # options[:end] = :color | :clear
57
+ # options[:end] = :color | :no_color
77
58
  def decorate(options = {})
78
-
79
59
  return string if !self.class.enabled? || string.length == 0
80
60
  escape_sequence = [
81
- color(color_name: options[:foreground], type: :foreground),
82
- color(color_name: options[:background], type: :background),
83
- effect(options[:effect])
61
+ Colored2::TextColor.new(options[:foreground]),
62
+ Colored2::BackgroundColor.new(options[:background]),
63
+ Colored2::Effect.new(options[:effect])
84
64
  ].compact.join
85
65
 
86
66
  colored = ''
87
67
  colored << escape_sequence if options[:beginning] == :on
88
68
  colored << string
89
69
  if options[:end]
90
- colored << clear if options[:end] == :off && !colored.end_with?(clear)
70
+ colored << no_color if options[:end] == :off && !colored.end_with?(no_color)
91
71
  colored << escape_sequence if options[:end] == :on
92
72
  end
93
73
  colored
@@ -97,5 +77,10 @@ module Colored2
97
77
  string.gsub(%r{\e\[\d+(;\d+)*m}, '')
98
78
  end
99
79
 
80
+ private
81
+
82
+ def no_color
83
+ @no_color ||= Colored2::Effect.new(:no_color).to_s
84
+ end
100
85
  end
101
86
  end
@@ -0,0 +1,63 @@
1
+ module Colored2
2
+
3
+ COLORS = {
4
+ black: 30,
5
+ red: 31,
6
+ green: 32,
7
+ yellow: 33,
8
+ blue: 34,
9
+ magenta: 35,
10
+ cyan: 36,
11
+ white: 37
12
+ }
13
+
14
+ EFFECTS = {
15
+ no_color: 0,
16
+ bold: 1,
17
+ dark: 2,
18
+ italic: 3,
19
+ underlined: 4,
20
+ reversed: 7,
21
+ plain: 21, # non-bold
22
+ normal: 22
23
+ }
24
+
25
+ class Code
26
+ attr_accessor :name, :escape
27
+ def initialize(name)
28
+ @name = name
29
+ return if name.nil?
30
+ @escape = codes[name.to_sym]
31
+ raise ArgumentError.new("No color or effect named #{name} exists for #{self.class}.") if @escape.nil?
32
+ end
33
+
34
+ def value(shift = nil)
35
+ escape_code = escape
36
+ escape_code += shift if shift && escape_code
37
+ name && escape ? "\e[#{escape_code}m" : ''
38
+ end
39
+
40
+ def to_s
41
+ value
42
+ end
43
+ end
44
+
45
+ class Effect < Code
46
+ def codes
47
+ EFFECTS
48
+ end
49
+ end
50
+
51
+ class TextColor < Code
52
+ def codes
53
+ COLORS
54
+ end
55
+ end
56
+
57
+ class BackgroundColor < TextColor
58
+ def value
59
+ super 10
60
+ end
61
+ end
62
+
63
+ end
@@ -1,3 +1,11 @@
1
- require 'colored2'
2
- Colored2.decorate(Fixnum)
1
+ require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate)
2
+
3
+ module Colored2
4
+ def self.integer_class
5
+ major, minor = RUBY_VERSION.split(/\./).map(&:to_i)
6
+ major >= 2 && minor >= 4 ? Integer : Kernel.const_get(:Fixnum)
7
+ end
8
+ end
9
+
10
+ Colored2.decorate(Colored2.integer_class)
3
11
  Colored2.decorate(Float)
@@ -1,2 +1,2 @@
1
- require 'colored2'
1
+ require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate)
2
2
  Colored2.decorate(Object)
@@ -1,2 +1,2 @@
1
- require 'colored2'
1
+ require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate)
2
2
  Colored2.decorate(String)
@@ -1,3 +1,3 @@
1
1
  module Colored2
2
- VERSION = '2.0.2'
2
+ VERSION = '3.1.2'
3
3
  end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('spec/spec_helper')
2
+ require 'colored2/numbers'
3
+ require 'colored2/strings'
4
+
5
+ RSpec.describe Colored2.integer_class do
6
+ describe 'with foreground and background colors' do
7
+ it 'should work with one color' do
8
+ expect(32.red).to eql('32'.red)
9
+ end
10
+ it 'should insert escape sequences' do
11
+ expect(32.red).to eql("\e[31m32\e[0m")
12
+ end
13
+ end
14
+ end
15
+
16
+ RSpec.describe Float do
17
+ describe 'with foreground and background colors' do
18
+ it 'should add two colors chained' do
19
+ expect((32.5).blue.on.red).to eql('32.5'.blue.on.red)
20
+ end
21
+
22
+ it 'should insert escape sequences' do
23
+ expect((32.5).blue.on.red).to eql("\e[41m\e[34m32.5\e[0m")
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
- require_relative 'spec_helper'
2
- require_relative '../lib/colored2/object'
1
+ require File.expand_path('spec/spec_helper')
2
+ require 'colored2/object'
3
3
 
4
4
  subject1 = red('hello')
5
5
  subject2 = red('blue').on.blue
@@ -1,5 +1,5 @@
1
- require_relative 'spec_helper'
2
- require_relative '../lib/colored2/strings'
1
+ require File.expand_path('spec/spec_helper')
2
+ require 'colored2/strings'
3
3
 
4
4
  RSpec.describe String do
5
5
  before do
@@ -44,20 +44,20 @@ RSpec.describe String do
44
44
  end
45
45
 
46
46
  it 'should defined block syntax nested colors two levels deep' do
47
- expect('regular here'.blue! + 'blue here'.clear!).to eql('regular here' << 'blue here'.blue)
47
+ expect('regular here'.blue! + 'blue here'.no_color!).to eql('regular here' << 'blue here'.blue)
48
48
  end
49
49
 
50
50
  it 'should defined block syntax nested colors two levels deep' do
51
- expect('regular here'.blue! { 'something else'.red!('red riding hood') }).to eql('regular here'.blue! << 'something else'.red! << 'red riding hood'.clear!)
51
+ expect('regular here'.blue! { 'something else'.red!('red riding hood') }).to eql('regular here'.blue! << 'something else'.red! << 'red riding hood'.no_color!)
52
52
  end
53
53
 
54
54
  it 'should defined block syntax nested colors two levels deep' do
55
55
  expectation = 'this is regular, but '.red! do
56
56
  'this is red '.yellow! do
57
- ' and yellow'.clear!
57
+ ' and yellow'.no_color!
58
58
  end
59
59
  end
60
- expect(expectation).to eql('this is regular, but '.red! << 'this is red '.yellow! << ' and yellow'.clear!)
60
+ expect(expectation).to eql('this is regular, but '.red! << 'this is red '.yellow! << ' and yellow'.no_color!)
61
61
  end
62
62
  end
63
63
 
@@ -1,5 +1,5 @@
1
- require 'codeclimate-test-reporter'
2
- CodeClimate::TestReporter.start
1
+ require 'simplecov'
2
+ SimpleCov.start
3
3
 
4
4
  require 'rspec/core'
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: colored2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 3.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Wanstrath
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-03-10 00:00:00.000000000 Z
12
+ date: 2017-02-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -67,10 +67,10 @@ description: |+
67
67
  puts 'this is red with and italic'.red.italic
68
68
  puts 'this is green bold'.green.bold << ' and regular'.green
69
69
  puts 'this is really bold blue on white but reversed'.bold.blue.on.white.reversed
70
- puts 'this is regular, but '.red! << 'this is red '.yellow! << ' and yellow.'.clear!
70
+ puts 'this is regular, but '.red! << 'this is red '.yellow! << ' and yellow.'.no_color!
71
71
  puts ('this is regular, but '.red! do
72
72
  'this is red '.yellow! do
73
- ' and yellow.'.clear!
73
+ ' and yellow.'.no_color!
74
74
  end
75
75
  end)
76
76
 
@@ -84,15 +84,15 @@ files:
84
84
  - Rakefile
85
85
  - lib/colored2.rb
86
86
  - lib/colored2/ascii_decorator.rb
87
- - lib/colored2/constants.rb
87
+ - lib/colored2/codes.rb
88
88
  - lib/colored2/numbers.rb
89
89
  - lib/colored2/object.rb
90
90
  - lib/colored2/strings.rb
91
91
  - lib/colored2/version.rb
92
- - spec/colored2_numbers_spec.rb
93
- - spec/colored2_object_spec.rb
92
+ - spec/colored2/numbers_spec.rb
93
+ - spec/colored2/object_spec.rb
94
+ - spec/colored2/strings_spec.rb
94
95
  - spec/colored2_spec.rb
95
- - spec/colored2_string_spec.rb
96
96
  - spec/spec_helper.rb
97
97
  homepage: http://github.com/kigster/colored2
98
98
  licenses:
@@ -114,13 +114,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  version: 1.3.6
115
115
  requirements: []
116
116
  rubyforge_project:
117
- rubygems_version: 2.5.1
117
+ rubygems_version: 2.6.8
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: Add even more color to your life.
121
121
  test_files:
122
- - spec/colored2_numbers_spec.rb
123
- - spec/colored2_object_spec.rb
122
+ - spec/colored2/numbers_spec.rb
123
+ - spec/colored2/object_spec.rb
124
+ - spec/colored2/strings_spec.rb
124
125
  - spec/colored2_spec.rb
125
- - spec/colored2_string_spec.rb
126
126
  - spec/spec_helper.rb
@@ -1,23 +0,0 @@
1
- module Colored2
2
- COLORS = {
3
- black: 30,
4
- red: 31,
5
- green: 32,
6
- yellow: 33,
7
- blue: 34,
8
- magenta: 35,
9
- cyan: 36,
10
- white: 37
11
- }
12
- EFFECTS = {
13
- clear: 0,
14
- bold: 1,
15
- dark: 2,
16
- italic: 3,
17
- underlined: 4,
18
- reversed: 7,
19
- plain: 21, # non-bold
20
- normal: 22
21
- }
22
- ESCAPES = COLORS.merge(EFFECTS)
23
- end
@@ -1,19 +0,0 @@
1
- require_relative 'spec_helper'
2
- require_relative '../lib/colored2/numbers'
3
- require_relative '../lib/colored2/strings'
4
-
5
- RSpec.describe Fixnum do
6
- describe 'with foreground and background colors' do
7
- it 'should work with one color' do
8
- expect(32.red).to eql('32'.red)
9
- end
10
- end
11
- end
12
-
13
- RSpec.describe Float do
14
- describe 'with foreground and background colors' do
15
- it 'should add two colors chained' do
16
- expect((32.5).blue.on.red).to eql('32.5'.blue.on.red)
17
- end
18
- end
19
- end