inkjet 0.0.1
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/lib/inkjet/colors.rb +97 -0
- data/lib/inkjet/configuration.rb +72 -0
- data/lib/inkjet/indent.rb +38 -0
- data/lib/inkjet/string.rb +86 -0
- data/lib/inkjet/version.rb +3 -0
- data/lib/inkjet.rb +23 -0
- data/spec/spec_helper.rb +1 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e023659caec2f6d13e4ccac3a5d9e4f43ad44dac
|
4
|
+
data.tar.gz: d60ea9025dc3235ab98070c75db4100e3d0c9945
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b30fb2d6a9da6fe1d8a6e0e0792ab7dcca1023db54b7b39de68519183b8451d17a8e20068fa9f6e6f1677902f8b4f6fecb5ac4330d0e5d4af350d9362954d46b
|
7
|
+
data.tar.gz: 19f0086725fafe39236dd71caa6257574fc809c9cac33e5ef0d6cc9cf9447be63be62dc26b6329be2e6145a9e462f1ad41871c3f9b8525f636d8803586227fd1
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Inkjet
|
2
|
+
module Colors
|
3
|
+
Colors = %w(black red green yellow blue magenta cyan gray white)
|
4
|
+
module Foreground
|
5
|
+
Black = 30
|
6
|
+
Red = 31
|
7
|
+
Green = 32
|
8
|
+
Yellow = 33
|
9
|
+
Blue = 34
|
10
|
+
Magenta = 35
|
11
|
+
Cyan = 36
|
12
|
+
Gray = 37
|
13
|
+
Default = 39
|
14
|
+
White = 97
|
15
|
+
end
|
16
|
+
|
17
|
+
module Background
|
18
|
+
Black = 40
|
19
|
+
Red = 41
|
20
|
+
Green = 42
|
21
|
+
Yellow = 43
|
22
|
+
Blue = 44
|
23
|
+
Magenta = 45
|
24
|
+
Cyan = 46
|
25
|
+
Gray = 47
|
26
|
+
Default = 49
|
27
|
+
White = 107
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.foreground(color)
|
31
|
+
"::Inkjet::Colors::Foreground::#{color.capitalize}".constantize rescue raise("Color does not exist: '#{color}'")
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.background(color)
|
35
|
+
"::Inkjet::Colors::Background::#{color.capitalize}".constantize rescue raise("Color does not exist: '#{color}'")
|
36
|
+
end
|
37
|
+
|
38
|
+
module Formatters
|
39
|
+
def self.included(base)
|
40
|
+
base.send :extend, self
|
41
|
+
end
|
42
|
+
|
43
|
+
def colorize(color, str)
|
44
|
+
colorize!(color, str.clone)
|
45
|
+
end
|
46
|
+
|
47
|
+
def colorize!(color, str)
|
48
|
+
str.apply_inkjet_code!(Inkjet::Colors.foreground(color))
|
49
|
+
end
|
50
|
+
|
51
|
+
def colorize_background(color, str)
|
52
|
+
colorize_background!(color, str.clone)
|
53
|
+
end
|
54
|
+
|
55
|
+
def colorize_background!(color, str)
|
56
|
+
str.apply_inkjet_code!(Inkjet::Colors.background(color))
|
57
|
+
end
|
58
|
+
|
59
|
+
def colorize_with_background(fg_color, bg_color, str)
|
60
|
+
colorize_with_background!(fg_color, bg_color, str.clone)
|
61
|
+
end
|
62
|
+
|
63
|
+
def colorize_with_background!(fg_color, bg_color, str)
|
64
|
+
str.apply_inkjet_codes!(Inkjet::Colors.foreground(fg_color), Inkjet::Colors.background(bg_color))
|
65
|
+
end
|
66
|
+
|
67
|
+
def method_missing(meth, *args)
|
68
|
+
if meth.match(/\A(#{Inkjet::Colors::Colors.push("default").join("|")})_text(!?)\Z/)
|
69
|
+
colorize($1, args.map(&:to_s).join(" "))
|
70
|
+
elsif meth.match(/\A(#{Inkjet::Colors::Colors.push("default").join("|")})_(background|bg)(!?)\Z/)
|
71
|
+
colorize_background($1, args.map(&:to_s).join(" "))
|
72
|
+
elsif meth.match(/\A(#{Inkjet::Colors::Colors.push("default").join("|")})_(#{Inkjet::Colors::Colors.push("default").join("|")})(!?)\Z/)
|
73
|
+
colorize_with_background($1, $2, args.map(&:to_s).join(" "))
|
74
|
+
else
|
75
|
+
super
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
module String
|
81
|
+
def method_missing(meth, *args)
|
82
|
+
if meth.match(/\A(#{Inkjet::Colors::Colors.join("|")})(!?)\Z/)
|
83
|
+
Inkjet.send("colorize#{$2}", $1, self)
|
84
|
+
elsif meth.match(/\A(#{Inkjet::Colors::Colors.join("|")})_(background|bg)(!?)\Z/)
|
85
|
+
Inkjet.send("colorize_background#{$3}", $1, self)
|
86
|
+
elsif meth.match(/\A(#{Inkjet::Colors::Colors.join("|")})_(#{Inkjet::Colors::Colors.join("|")})(!?)\Z/)
|
87
|
+
Inkjet.send("colorize_with_background#{$3}", $1, $2, self)
|
88
|
+
else
|
89
|
+
super
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
String.send :include, Inkjet::Colors::String
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Inkjet
|
2
|
+
class Configuration
|
3
|
+
DEFAULT_CONFIGURATION_OPTIONS = {:tabstop => 2}
|
4
|
+
|
5
|
+
attr_reader *DEFAULT_CONFIGURATION_OPTIONS.keys
|
6
|
+
|
7
|
+
DEFAULT_CONFIGURATION_OPTIONS.keys.each do |key|
|
8
|
+
define_method "#{key.to_s}=" do |val|
|
9
|
+
@changed[key] = [send(key), val]
|
10
|
+
instance_variable_set "@#{key.to_s}", val
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns a hash of all the changed keys and values after being reconfigured
|
15
|
+
def changed
|
16
|
+
@changed = {}
|
17
|
+
to_hash.each { |key,val| @changed[key] = [@saved_state[key], val] if @saved_state[key] != val }
|
18
|
+
@changed
|
19
|
+
end
|
20
|
+
|
21
|
+
# Check whether a key was changed after being reconfigured
|
22
|
+
def changed?(key)
|
23
|
+
changed.has_key?(key)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Pass arguments and/or a block to configure the available options
|
27
|
+
def configure(args={}, &block)
|
28
|
+
save_state
|
29
|
+
configure_with_args args
|
30
|
+
configure_with_block &block if block_given?
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
# Accepts arguments which are used to configure available options
|
35
|
+
def configure_with_args(args)
|
36
|
+
args.select { |k,v| DEFAULT_CONFIGURATION_OPTIONS.keys.include?(k) }.each do |key,val|
|
37
|
+
instance_variable_set "@#{key.to_s}", val
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Accepts a block which is used to configure available options
|
42
|
+
def configure_with_block(&block)
|
43
|
+
self.instance_eval(&block) if block_given?
|
44
|
+
end
|
45
|
+
|
46
|
+
# Saves a copy of the current state, to be used later to determine what was changed
|
47
|
+
def save_state
|
48
|
+
@saved_state = clone.to_hash
|
49
|
+
@changed = {}
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_hash
|
53
|
+
h = {}
|
54
|
+
DEFAULT_CONFIGURATION_OPTIONS.keys.each do |key|
|
55
|
+
h[key] = instance_variable_get "@#{key.to_s}"
|
56
|
+
end
|
57
|
+
h
|
58
|
+
end
|
59
|
+
alias_method :to_h, :to_hash
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
def initialize
|
64
|
+
DEFAULT_CONFIGURATION_OPTIONS.each do |key,val|
|
65
|
+
instance_variable_set "@#{key.to_s}", val
|
66
|
+
end
|
67
|
+
save_state
|
68
|
+
super
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Inkjet
|
2
|
+
module Indent
|
3
|
+
TABSTOP = 2 # TODO set based on config
|
4
|
+
|
5
|
+
def self.indent(*args, &block)
|
6
|
+
@spaces ||= 0
|
7
|
+
if block_given?
|
8
|
+
@spaces += args[0] || TABSTOP
|
9
|
+
class_eval &block
|
10
|
+
@spaces -= args[0] || TABSTOP
|
11
|
+
else
|
12
|
+
spaces = args[1] || TABSTOP
|
13
|
+
"#{padding(@spaces + spaces.to_i)}#{args[0].to_s.split("\n").join("\n#{padding(@spaces + spaces.to_i)}")}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.padding(spaces)
|
18
|
+
spaces.times.map {" "}.join
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.puts(output)
|
22
|
+
STDOUT.puts indent(output, 0)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.print(output)
|
26
|
+
STDOUT.print indent(output, 0)
|
27
|
+
end
|
28
|
+
|
29
|
+
module String
|
30
|
+
def indent(*args)
|
31
|
+
Inkjet::Indent.indent(*args.unshift(self))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
String.send :include, Inkjet::Indent::String
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Inkjet
|
2
|
+
module String
|
3
|
+
def bold
|
4
|
+
clone.bold!
|
5
|
+
end
|
6
|
+
|
7
|
+
def bold!
|
8
|
+
apply_inkjet_code!(Inkjet::Bold)
|
9
|
+
end
|
10
|
+
|
11
|
+
def dim
|
12
|
+
clone.dim!
|
13
|
+
end
|
14
|
+
|
15
|
+
def dim!
|
16
|
+
apply_inkjet_code!(Inkjet::Dim)
|
17
|
+
end
|
18
|
+
|
19
|
+
def underline
|
20
|
+
clone.underline!
|
21
|
+
end
|
22
|
+
|
23
|
+
def underline!
|
24
|
+
apply_inkjet_code!(Inkjet::Underline)
|
25
|
+
end
|
26
|
+
|
27
|
+
def blink
|
28
|
+
clone.blink!
|
29
|
+
end
|
30
|
+
|
31
|
+
def blink!
|
32
|
+
apply_inkjet_code!(Inkjet::Blink)
|
33
|
+
end
|
34
|
+
|
35
|
+
def invert
|
36
|
+
clone.invert!
|
37
|
+
end
|
38
|
+
|
39
|
+
def invert!
|
40
|
+
apply_inkjet_code!(Inkjet::Invert)
|
41
|
+
end
|
42
|
+
|
43
|
+
def hidden
|
44
|
+
clone.hidden!
|
45
|
+
end
|
46
|
+
|
47
|
+
def hidden!
|
48
|
+
apply_inkjet_code!(Inkjet::Hidden)
|
49
|
+
end
|
50
|
+
|
51
|
+
def inkjet_codes
|
52
|
+
match(/\e\[([\d;]+)m/)[1].split(";")
|
53
|
+
rescue
|
54
|
+
Array.new
|
55
|
+
end
|
56
|
+
|
57
|
+
def apply_inkjet_code(code)
|
58
|
+
clone.apply_inkjet_code!(c)
|
59
|
+
end
|
60
|
+
|
61
|
+
def apply_inkjet_code!(code)
|
62
|
+
inkjet_codes.length > 0 ? sub!(/\e\[([\d;]+)m/, "\e[#{inkjet_codes.push(code).join(";")}m") : replace("\e[#{code}m#{self}\e[0m")
|
63
|
+
end
|
64
|
+
|
65
|
+
def apply_inkjet_codes(*codes)
|
66
|
+
sclone = clone
|
67
|
+
codes.each { |code| sclone.apply_inkjet_code!(code) }
|
68
|
+
sclone
|
69
|
+
end
|
70
|
+
|
71
|
+
def apply_inkjet_codes!(*codes)
|
72
|
+
codes.each { |code| apply_inkjet_code!(code) }
|
73
|
+
self
|
74
|
+
end
|
75
|
+
|
76
|
+
def clean
|
77
|
+
clone.clean!
|
78
|
+
end
|
79
|
+
|
80
|
+
def clean!
|
81
|
+
gsub!(/\e\[[\d;]+m/, '')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
String.send :include, Inkjet::String
|
data/lib/inkjet.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
require 'inkjet/string'
|
3
|
+
require 'inkjet/colors'
|
4
|
+
require 'inkjet/indent'
|
5
|
+
|
6
|
+
module Inkjet
|
7
|
+
Close = 0
|
8
|
+
Bold = 1
|
9
|
+
Dim = 2
|
10
|
+
Underline = 4
|
11
|
+
Blink = 5
|
12
|
+
Invert = 7
|
13
|
+
Hidden = 8
|
14
|
+
include Colors::Formatters
|
15
|
+
|
16
|
+
def self.escape(code)
|
17
|
+
"\e[#{code.to_s.chomp('m')}m"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.indent(*args, &block)
|
21
|
+
Indent.indent(*args, &block)
|
22
|
+
end
|
23
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# TODO specs
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: inkjet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mark Rebec
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-06-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Formatting, indentation, bash colors, etc. for ruby cli script output
|
42
|
+
email:
|
43
|
+
- mark@markrebec.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/inkjet/string.rb
|
49
|
+
- lib/inkjet/indent.rb
|
50
|
+
- lib/inkjet/configuration.rb
|
51
|
+
- lib/inkjet/colors.rb
|
52
|
+
- lib/inkjet/version.rb
|
53
|
+
- lib/inkjet.rb
|
54
|
+
- spec/spec_helper.rb
|
55
|
+
homepage: http://github.com/markrebec/inkjet
|
56
|
+
licenses: []
|
57
|
+
metadata: {}
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 2.0.0.rc.2
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: Pretty output for ruby cli scripts
|
78
|
+
test_files:
|
79
|
+
- spec/spec_helper.rb
|
80
|
+
has_rdoc:
|