geek_painter 0.1.1 → 0.2.0
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.
- data/README.rdoc +85 -19
- data/VERSION +1 -1
- data/geek_painter.gemspec +5 -6
- data/geek_painter_client.rb +9 -13
- data/lib/geek_painter.rb +3 -5
- data/lib/geek_painter/canvas.rb +54 -29
- data/lib/geek_painter/core-ext.rb +72 -0
- data/lib/geek_painter/escaping_tools.rb +36 -8
- data/test/test_geek_painter.rb +5 -2
- metadata +13 -7
- data/lib/geek_painter/palette.rb +0 -34
- data/lib/geek_painter/string.rb +0 -22
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
== Geek Painter
|
2
2
|
|
3
|
-
A very simple DSL to generate
|
3
|
+
A very simple DSL to generate colored strings to use in *nix-like OS's terminals
|
4
4
|
|
5
5
|
== Installation
|
6
6
|
|
@@ -8,28 +8,90 @@ A very simple DSL to generate a colored shell prompt to use in *nix OS
|
|
8
8
|
|
9
9
|
== Usage
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
11
|
+
=== Generate a valid string to be used as a prompt string (PS1)
|
12
|
+
|
13
|
+
Check this link to see the available variables: http://www.ibm.com/developerworks/linux/library/l-tip-prompt/
|
14
|
+
|
15
|
+
Put the following lines in a file (ie. ~/.my_scripts/my_prompt.rb or whatever you want)
|
16
|
+
|
17
|
+
master_piece = GeekPainter.paint do
|
18
|
+
label "[".in(:brown).on :blue
|
19
|
+
label "\\u".in :red
|
20
|
+
label ":".in :yellow
|
21
|
+
label "\\h".in :red
|
22
|
+
label "] ".in(:magenta).on :red
|
23
|
+
label "\\W ".in :default
|
24
|
+
label "\$(__git_ps1)".in :yellow <= This might not work if you don't have git installed
|
21
25
|
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
27
|
+
puts master_piece.prompt
|
28
|
+
|
29
|
+
Now open your ~/.bash_profile, ~/.bashrc or ~/.profile and put this on it
|
30
|
+
|
31
|
+
PS1=`ruby ~/.my_scripts/my_prompt.rb`
|
32
|
+
|
33
|
+
Open a console and you'll see your new shiny and colorful prompt.
|
34
|
+
|
35
|
+
If you just want to copy and paste the string run the same script like this in a Ruby terminal (irb):
|
36
|
+
|
37
|
+
puts master_pieces.raw_prompt
|
38
|
+
|
39
|
+
Copy the resulting string and paste it in your PS1.
|
40
|
+
|
41
|
+
=== Generate a valid string to be used as colored text in the terminal
|
42
|
+
|
43
|
+
my_text = GeekPainter.paint do
|
44
|
+
label "Hello, ".in(:red).on(:blue)
|
45
|
+
label "World.".in(:yellow).on(:cyan)
|
46
|
+
end
|
26
47
|
|
27
|
-
|
28
|
-
#
|
29
|
-
# in ~/.bashrc
|
30
|
-
# PS1='$(ruby geek_painter_client.rb)'
|
31
|
-
painting.show
|
48
|
+
puts my_text.raw_text
|
32
49
|
|
50
|
+
In this case "raw_text" will return the following string:
|
51
|
+
|
52
|
+
\e[1;31;44mHello, \e[1;33;46mWorld.\e[0m
|
53
|
+
|
54
|
+
Copy it and...
|
55
|
+
|
56
|
+
$ printf "\e[1;31;44mHello, \e[1;33;46mWorld.\e[0m"
|
57
|
+
|
58
|
+
To print the colored text in the Interactive Ruby console (IRb) do the following
|
59
|
+
|
60
|
+
puts my_text.text # it will print the colored text itself not the escaped string
|
61
|
+
|
62
|
+
== Available colors
|
63
|
+
|
64
|
+
=== Foreground (These colors can be used as a parameter in the "in" method)
|
65
|
+
|
66
|
+
:black
|
67
|
+
:dark_gray
|
68
|
+
:light_gray
|
69
|
+
:light_red
|
70
|
+
:red
|
71
|
+
:light_green
|
72
|
+
:green
|
73
|
+
:yellow
|
74
|
+
:brown
|
75
|
+
:light_blue
|
76
|
+
:blue
|
77
|
+
:light_magenta
|
78
|
+
:magenta
|
79
|
+
:light_cyan
|
80
|
+
:cyan
|
81
|
+
:white
|
82
|
+
:default
|
83
|
+
|
84
|
+
=== Background (These colors can be used as a parameter in the "on" method)
|
85
|
+
|
86
|
+
:black
|
87
|
+
:red
|
88
|
+
:green
|
89
|
+
:brown
|
90
|
+
:blue
|
91
|
+
:magenta
|
92
|
+
:cyan
|
93
|
+
:white
|
94
|
+
:default
|
33
95
|
|
34
96
|
== Note on Patches/Pull Requests
|
35
97
|
|
@@ -41,6 +103,10 @@ A very simple DSL to generate a colored shell prompt to use in *nix OS
|
|
41
103
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
42
104
|
* Send me a pull request. Bonus points for topic branches.
|
43
105
|
|
106
|
+
== TODO
|
107
|
+
|
108
|
+
* generate string to be used like this => echo -e "the_string", right now the generated string shows extra characters if used this way.
|
109
|
+
|
44
110
|
== Copyright
|
45
111
|
|
46
112
|
Copyright (c) 2010 Rafael Magaña. See LICENSE for details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/geek_painter.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{geek_painter}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rafael Magana"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-22}
|
13
13
|
s.description = %q{A very simple DSL to generate a colored shell prompt string to use in *nix OS terminals. it might be used to generate a valid string to be used as a prompt or to generated strings that represent colored text on a terminal.}
|
14
14
|
s.email = %q{raf.magana@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,16 +27,15 @@ Gem::Specification.new do |s|
|
|
27
27
|
"geek_painter_client.rb",
|
28
28
|
"lib/geek_painter.rb",
|
29
29
|
"lib/geek_painter/canvas.rb",
|
30
|
+
"lib/geek_painter/core-ext.rb",
|
30
31
|
"lib/geek_painter/escaping_tools.rb",
|
31
|
-
"lib/geek_painter/palette.rb",
|
32
|
-
"lib/geek_painter/string.rb",
|
33
32
|
"test/helper.rb",
|
34
33
|
"test/test_geek_painter.rb"
|
35
34
|
]
|
36
35
|
s.homepage = %q{http://github.com/rafmagana/geek_painter}
|
37
36
|
s.rdoc_options = ["--charset=UTF-8"]
|
38
37
|
s.require_paths = ["lib"]
|
39
|
-
s.rubygems_version = %q{1.3.
|
38
|
+
s.rubygems_version = %q{1.3.7}
|
40
39
|
s.summary = %q{A very simple DSL to generate a colored shell prompt string to use in *nix OS terminals}
|
41
40
|
s.test_files = [
|
42
41
|
"test/helper.rb",
|
@@ -47,7 +46,7 @@ Gem::Specification.new do |s|
|
|
47
46
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
48
47
|
s.specification_version = 3
|
49
48
|
|
50
|
-
if Gem::Version.new(Gem::
|
49
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
51
50
|
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
52
51
|
else
|
53
52
|
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
data/geek_painter_client.rb
CHANGED
@@ -1,19 +1,15 @@
|
|
1
1
|
require "rubygems"
|
2
2
|
require "geek_painter"
|
3
3
|
|
4
|
+
|
4
5
|
painting = GeekPainter.paint do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
trace " $ ".in :default
|
6
|
+
label "[".in :brown
|
7
|
+
label "\\u".in :red
|
8
|
+
label ":".in :yellow
|
9
|
+
label "\\h".in :red
|
10
|
+
label "] ".in :magenta
|
11
|
+
label "\\w ".in :default
|
12
|
+
label "\$(__git_ps1)".in :blue
|
13
13
|
end
|
14
14
|
|
15
|
-
painting.
|
16
|
-
# >>
|
17
|
-
# >> \[\033[0;33m\][\[\033[0;31m\]\u\[\033[1;33m\]:\[\033[0;31m\]\h\[\033[0;35m\]] \[\033[0m\]\w \[\033[1;33m\]$(__git_ps1)\[\033[0m\] $ \[\033[0m\]
|
18
|
-
# >>
|
19
|
-
# >> copy the string above and put it in your ~/.bashrc or ~/.bash_profile like this => PS1='the_string'
|
15
|
+
puts painting.prompt
|
data/lib/geek_painter.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
require 'geek_painter/escaping_tools'
|
2
|
-
require 'geek_painter/string'
|
3
|
-
require 'geek_painter/palette'
|
4
2
|
require 'geek_painter/canvas'
|
5
3
|
|
6
4
|
module GeekPainter
|
7
5
|
def self.paint(&block)
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
canvas = Canvas.new
|
7
|
+
canvas.instance_eval(&block)
|
8
|
+
canvas
|
11
9
|
end
|
12
10
|
end
|
data/lib/geek_painter/canvas.rb
CHANGED
@@ -1,43 +1,68 @@
|
|
1
|
+
require 'geek_painter/core-ext'
|
2
|
+
|
1
3
|
module GeekPainter
|
2
4
|
#
|
3
|
-
# The main DSL, every single call to the "
|
5
|
+
# The main DSL, every single call to the "label" method pushes the parameters to an array
|
4
6
|
# and "raw" method then joins the array to generate the actual string to be used in PS1 or wherever.
|
5
7
|
#
|
6
8
|
# ie. canvas = Canvas.new
|
7
|
-
# canvas.
|
8
|
-
# canvas.
|
9
|
+
# canvas.label "\\[\\033[33m\\]user:" => yellow text
|
10
|
+
# canvas.label "\\[\\033[34m\\]host" => blue text
|
9
11
|
# canvas.show => \\[\\033[33m\\]user:\\[\\033[34m\\]host => user:host
|
10
12
|
|
11
13
|
class Canvas
|
12
14
|
include EscapingTools
|
13
|
-
|
15
|
+
|
16
|
+
attr_reader :labels
|
17
|
+
|
14
18
|
def initialize
|
15
|
-
@
|
19
|
+
@labels = []
|
20
|
+
end
|
21
|
+
|
22
|
+
def label(string_color_pair)
|
23
|
+
@labels << string_color_pair
|
24
|
+
end
|
25
|
+
#for backwards compatibility with <= 0.1.1
|
26
|
+
alias :trace :label
|
27
|
+
|
28
|
+
def prompt
|
29
|
+
render :for_prompt
|
30
|
+
end
|
31
|
+
|
32
|
+
def text
|
33
|
+
render :for_text
|
16
34
|
end
|
17
35
|
|
18
|
-
def
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
def for_prompt
|
37
|
+
prompt.to_raw
|
38
|
+
end
|
39
|
+
|
40
|
+
def for_text
|
41
|
+
text.to_raw
|
42
|
+
end
|
43
|
+
|
44
|
+
def reset_color
|
45
|
+
@labels << ["", :default]
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
def render(format=:for_text)
|
50
|
+
colored_labels = []
|
51
|
+
reset_color unless @labels.last[1] == :default if @labels.last
|
52
|
+
@labels.each do |t|
|
53
|
+
unless t[2]
|
54
|
+
background_color = :default
|
55
|
+
else
|
56
|
+
background_color = t[2]
|
57
|
+
end
|
58
|
+
|
59
|
+
if t.is_a? Array
|
60
|
+
colored_labels << escape(t[0].to_s, t[1].to_fg_code, background_color.to_bg_code, format)
|
61
|
+
else
|
62
|
+
colored_labels << t
|
63
|
+
end
|
64
|
+
end
|
65
|
+
colored_labels.join ""
|
66
|
+
end
|
42
67
|
end
|
43
68
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module GeekPainter
|
2
|
+
#
|
3
|
+
# Extends String to help the DSL to be more readable
|
4
|
+
# adds an "in" method to specify the color of the text
|
5
|
+
# ie. "my_text".in :red
|
6
|
+
#
|
7
|
+
module RubyCoreExtensions
|
8
|
+
|
9
|
+
module String
|
10
|
+
def in(color_name)
|
11
|
+
[self, color_name]
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_raw
|
15
|
+
self.gsub("\e", "\\e")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Symbol
|
20
|
+
def to_fg_code
|
21
|
+
case self
|
22
|
+
when :black then '0;30'
|
23
|
+
when :dark_gray then '1;30'
|
24
|
+
when :light_gray then '1;37'
|
25
|
+
when :light_red then '0;31'
|
26
|
+
when :red then '1;31'
|
27
|
+
when :light_green then '0;32'
|
28
|
+
when :green then '1;32'
|
29
|
+
when :yellow then '1;33'
|
30
|
+
when :brown then '0;33'
|
31
|
+
when :light_blue then '0;34'
|
32
|
+
when :blue then '1;34'
|
33
|
+
when :light_magenta then '0;35'
|
34
|
+
when :magenta then '1;35'
|
35
|
+
when :light_cyan then '0;36'
|
36
|
+
when :cyan then '1;36'
|
37
|
+
when :white then '1;37'
|
38
|
+
when :default then '0'
|
39
|
+
else '0'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_bg_code
|
44
|
+
case self
|
45
|
+
when :black then '40'
|
46
|
+
when :red then '41'
|
47
|
+
when :green then '42'
|
48
|
+
when :brown then '43'
|
49
|
+
when :blue then '44'
|
50
|
+
when :magenta then '45'
|
51
|
+
when :cyan then '46'
|
52
|
+
when :white then '47'
|
53
|
+
when :default then '0'
|
54
|
+
else '0'
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
String.class_eval do
|
63
|
+
include GeekPainter::RubyCoreExtensions::String
|
64
|
+
end
|
65
|
+
|
66
|
+
Symbol.class_eval do
|
67
|
+
include GeekPainter::RubyCoreExtensions::Symbol
|
68
|
+
end
|
69
|
+
|
70
|
+
Array.class_eval do
|
71
|
+
alias :on <<
|
72
|
+
end
|
@@ -1,15 +1,43 @@
|
|
1
1
|
module GeekPainter
|
2
|
+
|
3
|
+
#TODO: Refactor!!!!!
|
2
4
|
module EscapingTools
|
3
|
-
|
4
|
-
|
5
|
+
|
6
|
+
def open_escape
|
7
|
+
'\['
|
5
8
|
end
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
+
|
10
|
+
#con dos funciona para prompt, pero no para text
|
11
|
+
#con una funciona para text, pero no para prompt
|
12
|
+
def start_color
|
13
|
+
"\033["
|
9
14
|
end
|
10
|
-
|
11
|
-
def
|
12
|
-
|
15
|
+
|
16
|
+
def end_color
|
17
|
+
'm'
|
13
18
|
end
|
19
|
+
|
20
|
+
def end_escape
|
21
|
+
'\]'
|
22
|
+
end
|
23
|
+
|
24
|
+
def escape(string, foreground_color_code, background_color_code, format)
|
25
|
+
color_delimiter = ";"
|
26
|
+
escaped_string = ''
|
27
|
+
|
28
|
+
if background_color_code == '0'
|
29
|
+
color_delimiter = ""
|
30
|
+
background_color_code = ""
|
31
|
+
end
|
32
|
+
|
33
|
+
if format == :for_prompt
|
34
|
+
escaped_string = open_escape + start_color + foreground_color_code + color_delimiter + background_color_code + end_color + end_escape + string
|
35
|
+
elsif format == :for_text
|
36
|
+
escaped_string = start_color + foreground_color_code + color_delimiter + background_color_code + end_color + string
|
37
|
+
end
|
38
|
+
|
39
|
+
escaped_string
|
40
|
+
end
|
41
|
+
|
14
42
|
end
|
15
43
|
end
|
data/test/test_geek_painter.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestGeekPainter < Test::Unit::TestCase
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
context "Raf" do
|
6
|
+
should "write tests for his geek_painter gem" do
|
7
|
+
flunk "\n\n\nComing soon! ^_^\n\n\n"
|
8
|
+
end
|
6
9
|
end
|
7
10
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geek_painter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Rafael Magana
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-07-22 00:00:00 -05:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: thoughtbot-shoulda
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
@@ -49,9 +52,8 @@ files:
|
|
49
52
|
- geek_painter_client.rb
|
50
53
|
- lib/geek_painter.rb
|
51
54
|
- lib/geek_painter/canvas.rb
|
55
|
+
- lib/geek_painter/core-ext.rb
|
52
56
|
- lib/geek_painter/escaping_tools.rb
|
53
|
-
- lib/geek_painter/palette.rb
|
54
|
-
- lib/geek_painter/string.rb
|
55
57
|
- test/helper.rb
|
56
58
|
- test/test_geek_painter.rb
|
57
59
|
has_rdoc: true
|
@@ -64,23 +66,27 @@ rdoc_options:
|
|
64
66
|
require_paths:
|
65
67
|
- lib
|
66
68
|
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
67
70
|
requirements:
|
68
71
|
- - ">="
|
69
72
|
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
70
74
|
segments:
|
71
75
|
- 0
|
72
76
|
version: "0"
|
73
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
74
79
|
requirements:
|
75
80
|
- - ">="
|
76
81
|
- !ruby/object:Gem::Version
|
82
|
+
hash: 3
|
77
83
|
segments:
|
78
84
|
- 0
|
79
85
|
version: "0"
|
80
86
|
requirements: []
|
81
87
|
|
82
88
|
rubyforge_project:
|
83
|
-
rubygems_version: 1.3.
|
89
|
+
rubygems_version: 1.3.7
|
84
90
|
signing_key:
|
85
91
|
specification_version: 3
|
86
92
|
summary: A very simple DSL to generate a colored shell prompt string to use in *nix OS terminals
|
data/lib/geek_painter/palette.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
module GeekPainter
|
2
|
-
#
|
3
|
-
# The palette of colors
|
4
|
-
#
|
5
|
-
class Palette
|
6
|
-
extend EscapingTools
|
7
|
-
def self.grab_escaped(color_name)
|
8
|
-
case color_name
|
9
|
-
when :black then escape "0;30"
|
10
|
-
when :dark_gray then escape "1;30"
|
11
|
-
when :light_gray then escape "1;37"
|
12
|
-
when :red then escape "0;31"
|
13
|
-
when :light_red then escape "1;31"
|
14
|
-
when :green then escape "0;32"
|
15
|
-
when :light_green then escape "1;32"
|
16
|
-
when :yellow then escape "1;33"
|
17
|
-
when :brown then escape "0;33"
|
18
|
-
when :blue then escape "0;34"
|
19
|
-
when :light_blue then escape "1;34"
|
20
|
-
when :magenta then escape "0;35"
|
21
|
-
when :light_magenta then escape "1;35"
|
22
|
-
when :cyan then escape "0;36"
|
23
|
-
when :light_cyan then escape "1;36;5"
|
24
|
-
when :white then escape "1;37"
|
25
|
-
when :default then escape "0"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
def self.escape(color_code)
|
31
|
-
self.escape_char(color_code.to_s)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
data/lib/geek_painter/string.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Extend String to help the DSL to be more readable
|
3
|
-
# adds a "in" method to specify the color of the text
|
4
|
-
# ie. "my_text".in :red
|
5
|
-
#
|
6
|
-
module GeekPainter
|
7
|
-
module RubyCoreExtensions
|
8
|
-
module String
|
9
|
-
def in(color_name)
|
10
|
-
Palette.grab_escaped(color_name) + self.to_s
|
11
|
-
end
|
12
|
-
|
13
|
-
def reset
|
14
|
-
self + escape_char("0")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
String.class_eval do
|
21
|
-
include GeekPainter::RubyCoreExtensions::String
|
22
|
-
end
|