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.
@@ -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
  [![Gem Version](https://badge.fury.io/rb/cape-cod.png)]
5
- (http://badge.fury.io/rb/cape-cod)
5
+ (http://badge.fury.io/rb/cape-cod)
6
6
  [![Build Status](https://travis-ci.org/fuadsaud/cape-cod.png?branch=master)]
7
- (https://travis-ci.org/fuadsaud/cape-cod)
7
+ (https://travis-ci.org/fuadsaud/cape-cod)
8
+ [![Code Climate](https://codeclimate.com/github/fuadsaud/cape-cod.png)]
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; I know, I know, I'm a genius - to your
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
- class String; include CapeCod end
51
+ require 'cape-cod/string'
51
52
 
52
- puts "Praise R'hlor, for the night is dark and full of terrors".red
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
+ [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/fuadsaud/cape-cod/trend.png)](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
- if `which pry`.empty?
9
- system('irb -rubygems --require ./lib/cape-cod.rb')
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
- desc 'run all specs'
16
- task default: :spec
21
+ system "#{repl} --require ./lib/cape-cod.rb"
22
+ end
@@ -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
- Color::CODES.each do |color, _|
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
- EFFECTS.each do |effect, _|
27
+ Color::CODES.keys.each do |color|
28
+ define_method color do |target = ''|
29
+ CapeCod.foreground(color, target)
30
+ end
59
31
 
60
- #
61
- # Instance methods for effects.
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
- # Singleton methods for effects.
69
- #
70
- define_singleton_method effect do |obj = ''|
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
- protected
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
@@ -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
- unless [:foreground, :background].include? ground
40
- raise ArgumentError, 'color must be either foreground or background.'
41
- end
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
- if color.empty? || color.size > 3 || color.size == 2
44
- raise ArgumentError,
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
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module CapeCod
4
- VERSION = '0.1.3'
4
+ VERSION = '0.1.4'
5
5
  end
@@ -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
- class StringWithCapeCodIncluded < String; include CapeCod end
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(:all) { class String; include CapeCod end }
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.3
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-05-27 00:00:00.000000000 Z
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: '0'
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: '0'
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: guard-rspec
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: ! 'CapeCod offers you simple stupid way of colorizing and applying effects
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: 1.8.23
107
+ rubygems_version: 2.0.3
120
108
  signing_key:
121
- specification_version: 3
122
- summary: Make your strings look fancy with ANSI escape codes.
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