cape-cod 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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