cape-cod 0.1.3 → 0.1.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 +7 -0
- data/README.md +12 -6
- data/Rakefile +14 -8
- data/lib/cape-cod.rb +25 -77
- data/lib/cape-cod/color.rb +42 -25
- data/lib/cape-cod/string.rb +35 -0
- data/lib/cape-cod/version.rb +1 -1
- data/spec/cape-cod_spec.rb +35 -2
- metadata +24 -37
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 332b4b917a8ae3cc95e2afa4fd151232bbde77d8
|
4
|
+
data.tar.gz: aaab015b8cebd08e94d2ecdcbf246adc3d272a7c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d6811860f3219450e80b89e6eb84ea38c3ab01c61b8361bc71d8c6ac27c1914a1bdb695eeb4d7582af3a41608d00d582a70ef25ffa5d8f41f8ddcfd10cfcbf66
|
7
|
+
data.tar.gz: 4943d08838018b2a1255d099efb92d1fe453c25545b08307f9bf2dc10dfdd89ccc51a18911d984db9381f13bd0a5e112bf8e78610cbbb1d54495798176c0a95f
|
data/README.md
CHANGED
@@ -2,13 +2,14 @@ cape-cod
|
|
2
2
|
========
|
3
3
|
|
4
4
|
[]
|
5
|
-
(http://badge.fury.io/rb/cape-cod)
|
5
|
+
(http://badge.fury.io/rb/cape-cod)
|
6
6
|
[]
|
7
|
-
(https://travis-ci.org/fuadsaud/cape-cod)
|
7
|
+
(https://travis-ci.org/fuadsaud/cape-cod)
|
8
|
+
[]
|
9
|
+
(https://codeclimate.com/github/fuadsaud/cape-cod)
|
8
10
|
|
9
11
|
cape-cod makes it easy for you to append ANSI es<strong>cape-cod</strong>es -
|
10
|
-
HAR! bet you didn't see that coming
|
11
|
-
strings.
|
12
|
+
HAR! bet you didn't see that coming - to your strings.
|
12
13
|
|
13
14
|
### *Hey, but don't we have a plenty of gems that do exactly the same thing?*
|
14
15
|
|
@@ -47,9 +48,13 @@ or simply:
|
|
47
48
|
|
48
49
|
You can include cape-cod in you String class:
|
49
50
|
|
50
|
-
|
51
|
+
require 'cape-cod/string'
|
51
52
|
|
52
|
-
|
53
|
+
class String
|
54
|
+
include CapeCod::String
|
55
|
+
end
|
56
|
+
|
57
|
+
puts "OHAI".red
|
53
58
|
|
54
59
|
puts 'This is BOLD'.bold
|
55
60
|
|
@@ -79,3 +84,4 @@ Please refer to [LICENSE.md](LICENSE.md).
|
|
79
84
|
|
80
85
|
Check the guidelines at [CONTRIBUTING.md](CONTRIBUTING.md).
|
81
86
|
|
87
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
data/Rakefile
CHANGED
@@ -1,16 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'rake'
|
2
4
|
require 'rspec/core/rake_task'
|
5
|
+
require 'bundler/gem_tasks'
|
6
|
+
|
7
|
+
task default: [:spec, :rubocop]
|
3
8
|
|
4
9
|
RSpec::Core::RakeTask.new
|
5
10
|
|
11
|
+
desc 'Run RuboCop static analyzer'
|
12
|
+
task :rubocop do
|
13
|
+
system 'rubocop lib/ spec/ Gemfile Rakefile *.gemspec'
|
14
|
+
end
|
15
|
+
|
6
16
|
desc 'Start an irb session with cape-cod loaded'
|
7
17
|
task :console do
|
8
|
-
|
9
|
-
|
10
|
-
else
|
11
|
-
system('pry --require ./lib/cape-cod.rb')
|
12
|
-
end
|
13
|
-
end
|
18
|
+
# Do we have pry available?
|
19
|
+
repl = system('pry -v &> /dev/null') ? 'pry' : 'irb'
|
14
20
|
|
15
|
-
|
16
|
-
|
21
|
+
system "#{repl} --require ./lib/cape-cod.rb"
|
22
|
+
end
|
data/lib/cape-cod.rb
CHANGED
@@ -1,15 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
$LOAD_PATH.unshift File.expand_path(
|
4
|
-
File.join(File.dirname(__FILE__), '../lib'))
|
5
|
-
|
6
3
|
module CapeCod
|
7
|
-
|
8
|
-
require 'cape-cod/version'
|
9
|
-
require 'cape-cod/color'
|
10
|
-
|
11
|
-
@enabled = STDOUT.tty?
|
12
|
-
|
13
4
|
EFFECTS = {
|
14
5
|
reset: 0,
|
15
6
|
bold: 1,
|
@@ -23,77 +14,31 @@ module CapeCod
|
|
23
14
|
strikethrough: 9
|
24
15
|
}.freeze
|
25
16
|
|
17
|
+
require_relative 'cape-cod/version'
|
18
|
+
require_relative 'cape-cod/color'
|
19
|
+
|
26
20
|
#
|
27
21
|
# Define helper methods for applying the escape codes.
|
28
22
|
#
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
# Instance methods for background and foreground colors.
|
33
|
-
#
|
34
|
-
define_method color do
|
35
|
-
CapeCod.foreground(color, self)
|
36
|
-
end
|
37
|
-
|
38
|
-
define_method "on_#{color}".to_s do
|
39
|
-
CapeCod.background(color, self)
|
40
|
-
end
|
41
|
-
|
42
|
-
#
|
43
|
-
# Singleton methods for background and foreground colors.
|
44
|
-
#
|
45
|
-
define_singleton_method color do |obj = ''|
|
46
|
-
string = obj.to_s
|
47
|
-
|
48
|
-
foreground(color, string)
|
49
|
-
end
|
50
|
-
|
51
|
-
define_singleton_method "on_#{color}" do |obj = ''|
|
52
|
-
string = obj.to_s
|
53
|
-
|
54
|
-
background(color, string)
|
55
|
-
end
|
56
|
-
end
|
23
|
+
class << self
|
24
|
+
attr_accessor :enabled
|
25
|
+
alias_method :enabled?, :enabled
|
57
26
|
|
58
|
-
|
27
|
+
Color::CODES.keys.each do |color|
|
28
|
+
define_method color do |target = ''|
|
29
|
+
CapeCod.foreground(color, target)
|
30
|
+
end
|
59
31
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
define_method effect do
|
64
|
-
CapeCod.effect(effect, self)
|
32
|
+
define_method "on_#{color}".to_s do |target = ''|
|
33
|
+
CapeCod.background(color, target)
|
34
|
+
end
|
65
35
|
end
|
66
36
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
string = obj.to_s
|
72
|
-
|
73
|
-
effect(effect, string)
|
37
|
+
EFFECTS.keys.each do |effect|
|
38
|
+
define_method effect do |target = ''|
|
39
|
+
CapeCod.effect(effect, target)
|
40
|
+
end
|
74
41
|
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def foreground(*color) # :nodoc:
|
78
|
-
CapeCod.foreground(*color, self)
|
79
|
-
end
|
80
|
-
|
81
|
-
def background(*color) # :nodoc:
|
82
|
-
CapeCod.background(*color, self)
|
83
|
-
end
|
84
|
-
|
85
|
-
def effect(effect) # :nodoc:
|
86
|
-
CapeCod.effect(effect, self)
|
87
|
-
end
|
88
|
-
|
89
|
-
alias_method :fg, :foreground
|
90
|
-
alias_method :bg, :background
|
91
|
-
alias_method :fx, :effect
|
92
|
-
|
93
|
-
class << self
|
94
|
-
|
95
|
-
attr_accessor :enabled
|
96
|
-
alias_method :enabled?, :enabled
|
97
42
|
|
98
43
|
def foreground(*color, target) # :nodoc:
|
99
44
|
apply_escape_sequence(color_code_for(*color, :foreground), target)
|
@@ -111,7 +56,7 @@ module CapeCod
|
|
111
56
|
alias_method :bg, :background
|
112
57
|
alias_method :fx, :effect
|
113
58
|
|
114
|
-
|
59
|
+
private
|
115
60
|
|
116
61
|
#
|
117
62
|
# Returns the ANSI escape sequence for the given +color+.
|
@@ -127,8 +72,6 @@ module CapeCod
|
|
127
72
|
EFFECTS.fetch(effect)
|
128
73
|
end
|
129
74
|
|
130
|
-
private
|
131
|
-
|
132
75
|
#
|
133
76
|
# Returns the ANSI escape sequence for a given escape +code+.
|
134
77
|
#
|
@@ -153,14 +96,19 @@ module CapeCod
|
|
153
96
|
end
|
154
97
|
end
|
155
98
|
|
156
|
-
def ensure_windows_dependencies
|
99
|
+
def ensure_windows_dependencies
|
157
100
|
if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
|
158
101
|
require 'Win32/Console/ANSI'
|
159
102
|
end
|
160
103
|
rescue LoadError
|
161
104
|
self.enabled = false
|
162
105
|
end
|
106
|
+
|
107
|
+
def ensure_environment_conditions
|
108
|
+
self.enabled = ENV['TERM'] != 'dumb' && (STDOUT.tty? && STDERR.tty?)
|
109
|
+
end
|
163
110
|
end
|
164
111
|
|
165
|
-
ensure_windows_dependencies
|
112
|
+
ensure_windows_dependencies
|
113
|
+
ensure_environment_conditions
|
166
114
|
end
|
data/lib/cape-cod/color.rb
CHANGED
@@ -17,16 +17,6 @@ module CapeCod
|
|
17
17
|
white: 7,
|
18
18
|
}.freeze
|
19
19
|
|
20
|
-
#
|
21
|
-
# Returns the ANSI domain code for the given RGB color packed
|
22
|
-
# into an Integer.
|
23
|
-
#
|
24
|
-
def self.hex_to_ansi(hex)
|
25
|
-
(6 * ((hex >> 16 & 0xff) / 256.0)).to_i * 36 +
|
26
|
-
(6 * ((hex >> 8 & 0xff) / 256.0)).to_i * 6 +
|
27
|
-
(6 * ((hex & 0xff) / 256.0)).to_i
|
28
|
-
end
|
29
|
-
|
30
20
|
#
|
31
21
|
# Initializes a the color.
|
32
22
|
#
|
@@ -36,23 +26,14 @@ module CapeCod
|
|
36
26
|
# +ground+ is either :background or :foreground.
|
37
27
|
#
|
38
28
|
def initialize(*color, ground)
|
39
|
-
|
40
|
-
|
41
|
-
|
29
|
+
with_valid_color_and_ground *color, ground do |*c, g|
|
30
|
+
if c.size == 3
|
31
|
+
c = [(c[0] << 16) | (c[1] << 8) | c[2]]
|
32
|
+
end
|
42
33
|
|
43
|
-
|
44
|
-
|
45
|
-
"wrong number of arguments (#{color.size + 1} for 2|4)."
|
46
|
-
elsif color.size == 3
|
47
|
-
color = [(color[0] << 16) | (color[1] << 8) | color[2]]
|
48
|
-
elsif color.first.is_a?(Integer) && color.first < 0
|
49
|
-
raise ArgumentError, 'hex code must be positive.'
|
50
|
-
elsif color.first.is_a?(Symbol) && !CODES.has_key?(color.first)
|
51
|
-
raise ArgumentError, %(invalid color name "#{color.first}".)
|
34
|
+
@ground = ground
|
35
|
+
@color = c.first
|
52
36
|
end
|
53
|
-
|
54
|
-
@ground = ground
|
55
|
-
@color = color.first
|
56
37
|
end
|
57
38
|
|
58
39
|
#
|
@@ -77,5 +58,41 @@ module CapeCod
|
|
77
58
|
|
78
59
|
"#{ground_code};5;#{color_code}"
|
79
60
|
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# Returns the ANSI domain code for the given RGB color packed
|
64
|
+
# into an Integer.
|
65
|
+
#
|
66
|
+
def self.hex_to_ansi(hex)
|
67
|
+
(6 * ((hex >> 16 & 0xff).quo(256))).to_i * 36 +
|
68
|
+
(6 * ((hex >> 8 & 0xff).quo(256))).to_i * 6 +
|
69
|
+
(6 * ((hex & 0xff).quo(256))).to_i
|
70
|
+
end
|
71
|
+
|
72
|
+
def with_valid_color_and_ground(*color, ground)
|
73
|
+
validate_color!(*color) and
|
74
|
+
validate_ground!(ground) and yield *color, ground
|
75
|
+
end
|
76
|
+
|
77
|
+
def validate_color!(*color)
|
78
|
+
if color.empty? || color.size > 3 || color.size == 2
|
79
|
+
fail ArgumentError,
|
80
|
+
"wrong number of arguments (#{color.size + 1} for 2|4)."
|
81
|
+
elsif color.first.is_a?(Integer) && color.first < 0
|
82
|
+
fail ArgumentError, 'hex code must be positive.'
|
83
|
+
elsif color.first.is_a?(Symbol) && !CODES.has_key?(color.first)
|
84
|
+
fail ArgumentError, %(invalid color name "#{color.first}".)
|
85
|
+
else
|
86
|
+
color
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def validate_ground!(ground)
|
91
|
+
if [:foreground, :background].include? ground
|
92
|
+
ground
|
93
|
+
else
|
94
|
+
fail ArgumentError, 'ground must be either foreground or background.'
|
95
|
+
end
|
96
|
+
end
|
80
97
|
end
|
81
98
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module CapeCod
|
2
|
+
module String
|
3
|
+
Color::CODES.keys.each do |color|
|
4
|
+
define_method color do
|
5
|
+
CapeCod.foreground(color, self)
|
6
|
+
end
|
7
|
+
|
8
|
+
define_method "on_#{color}".to_s do
|
9
|
+
CapeCod.background(color, self)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
EFFECTS.keys.each do |effect|
|
14
|
+
define_method effect do
|
15
|
+
CapeCod.effect(effect, self)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def foreground(*color)
|
20
|
+
CapeCod.foreground(*color, self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def background(*color)
|
24
|
+
CapeCod.background(*color, self)
|
25
|
+
end
|
26
|
+
|
27
|
+
def effect(effect)
|
28
|
+
CapeCod.effect(effect, self)
|
29
|
+
end
|
30
|
+
|
31
|
+
alias_method :fg, :foreground
|
32
|
+
alias_method :bg, :background
|
33
|
+
alias_method :fx, :effect
|
34
|
+
end
|
35
|
+
end
|
data/lib/cape-cod/version.rb
CHANGED
data/spec/cape-cod_spec.rb
CHANGED
@@ -5,6 +5,31 @@ require 'spec_helper'
|
|
5
5
|
describe CapeCod do
|
6
6
|
it('has a version') { expect(CapeCod::VERSION).to be_a String }
|
7
7
|
|
8
|
+
describe 'environment defaults' do
|
9
|
+
context 'standard streams are tty' do
|
10
|
+
it 'is disabled' do
|
11
|
+
expect(STDOUT).to receive(:tty?).and_return(true)
|
12
|
+
expect(STDERR).to receive(:tty?).and_return(true)
|
13
|
+
|
14
|
+
CapeCod.send(:ensure_environment_conditions)
|
15
|
+
|
16
|
+
expect(CapeCod).to be_enabled
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'standard streams are tty' do
|
21
|
+
it 'is enabled' do
|
22
|
+
expect(STDOUT).to receive(:tty?).and_return(true)
|
23
|
+
expect(STDERR).to receive(:tty?).and_return(false)
|
24
|
+
|
25
|
+
CapeCod.send(:ensure_environment_conditions)
|
26
|
+
|
27
|
+
expect(CapeCod).to_not be_enabled
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
8
33
|
context 'disabled' do
|
9
34
|
before(:all) { CapeCod.enabled = false }
|
10
35
|
|
@@ -14,7 +39,11 @@ describe CapeCod do
|
|
14
39
|
|
15
40
|
context 'using instance methods' do
|
16
41
|
before do
|
17
|
-
|
42
|
+
require 'cape-cod/string'
|
43
|
+
|
44
|
+
StringWithCapeCodIncluded = Class.new(String).tap { |klass|
|
45
|
+
klass.send(:include, CapeCod::String)
|
46
|
+
}
|
18
47
|
end
|
19
48
|
|
20
49
|
let(:target) { StringWithCapeCodIncluded.new('some text') }
|
@@ -139,7 +168,11 @@ describe CapeCod do
|
|
139
168
|
end
|
140
169
|
|
141
170
|
context 'using instance methods' do
|
142
|
-
before
|
171
|
+
before :all do
|
172
|
+
class String
|
173
|
+
include CapeCod::String
|
174
|
+
end
|
175
|
+
end
|
143
176
|
|
144
177
|
it('provides the "fx" alias') { String.public_method_defined? :fx }
|
145
178
|
it('provides the "fg" alias') { String.public_method_defined? :fg }
|
metadata
CHANGED
@@ -1,87 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cape-cod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Fuad Saud
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-27 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
33
|
+
version: 3.0.0.beta1
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
version: 3.0.0.beta1
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
|
-
name: guard
|
42
|
+
name: guard-rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
56
|
+
name: rubocop
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
|
-
description:
|
79
|
-
to your
|
80
|
-
|
69
|
+
description: |
|
70
|
+
CapeCod offers you simple stupid way of colorizing and applying effects to your
|
81
71
|
terminal output, by appending ANSI escape sequences to your strings.
|
82
|
-
|
83
|
-
'
|
84
|
-
email: fuadksd@gmail.com
|
72
|
+
email: fuadfsaud@gmail.com
|
85
73
|
executables: []
|
86
74
|
extensions: []
|
87
75
|
extra_rdoc_files: []
|
@@ -90,6 +78,7 @@ files:
|
|
90
78
|
- Rakefile
|
91
79
|
- LICENSE.md
|
92
80
|
- lib/cape-cod/color.rb
|
81
|
+
- lib/cape-cod/string.rb
|
93
82
|
- lib/cape-cod/version.rb
|
94
83
|
- lib/cape-cod.rb
|
95
84
|
- spec/cape-cod/color_spec.rb
|
@@ -98,30 +87,28 @@ files:
|
|
98
87
|
homepage: http://github.com/fuadsaud/cape-cod
|
99
88
|
licenses:
|
100
89
|
- MIT
|
90
|
+
metadata: {}
|
101
91
|
post_install_message:
|
102
92
|
rdoc_options: []
|
103
93
|
require_paths:
|
104
94
|
- lib
|
105
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
96
|
requirements:
|
108
|
-
- -
|
97
|
+
- - '>='
|
109
98
|
- !ruby/object:Gem::Version
|
110
99
|
version: 1.9.3
|
111
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
-
none: false
|
113
101
|
requirements:
|
114
|
-
- -
|
102
|
+
- - '>='
|
115
103
|
- !ruby/object:Gem::Version
|
116
104
|
version: '0'
|
117
105
|
requirements: []
|
118
106
|
rubyforge_project:
|
119
|
-
rubygems_version:
|
107
|
+
rubygems_version: 2.0.3
|
120
108
|
signing_key:
|
121
|
-
specification_version:
|
122
|
-
summary:
|
109
|
+
specification_version: 4
|
110
|
+
summary: Fancy terminal output with ANSI escape codes.
|
123
111
|
test_files:
|
124
112
|
- spec/cape-cod/color_spec.rb
|
125
113
|
- spec/cape-cod_spec.rb
|
126
114
|
- spec/spec_helper.rb
|
127
|
-
has_rdoc: false
|