ruby_cowsay 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest +53 -0
- data/README.mdown +79 -0
- data/Rakefile +13 -0
- data/lib/ruby_cowsay.rb +1 -0
- data/lib/ruby_cowsay/cow.rb +122 -0
- data/lib/ruby_cowsay/cows/beavis.zen.rb +27 -0
- data/lib/ruby_cowsay/cows/bong.rb +20 -0
- data/lib/ruby_cowsay/cows/bud-frogs.rb +16 -0
- data/lib/ruby_cowsay/cows/bunny.rb +14 -0
- data/lib/ruby_cowsay/cows/cheese.rb +27 -0
- data/lib/ruby_cowsay/cows/cower.rb +18 -0
- data/lib/ruby_cowsay/cows/daemon.rb +28 -0
- data/lib/ruby_cowsay/cows/default.rb +13 -0
- data/lib/ruby_cowsay/cows/dragon-and-cow.rb +25 -0
- data/lib/ruby_cowsay/cows/dragon.rb +25 -0
- data/lib/ruby_cowsay/cows/elephant-in-snake.rb +18 -0
- data/lib/ruby_cowsay/cows/elephant.rb +19 -0
- data/lib/ruby_cowsay/cows/eyes.rb +20 -0
- data/lib/ruby_cowsay/cows/flaming-sheep.rb +19 -0
- data/lib/ruby_cowsay/cows/ghostbusters.rb +30 -0
- data/lib/ruby_cowsay/cows/head-in.rb +16 -0
- data/lib/ruby_cowsay/cows/hellokitty.rb +15 -0
- data/lib/ruby_cowsay/cows/kiss.rb +30 -0
- data/lib/ruby_cowsay/cows/kitty.rb +16 -0
- data/lib/ruby_cowsay/cows/koala.rb +16 -0
- data/lib/ruby_cowsay/cows/kosh.rb +23 -0
- data/lib/ruby_cowsay/cows/luke-koala.rb +19 -0
- data/lib/ruby_cowsay/cows/mech-and-cow.rb +9 -0
- data/lib/ruby_cowsay/cows/meow.rb +19 -0
- data/lib/ruby_cowsay/cows/milk.rb +25 -0
- data/lib/ruby_cowsay/cows/moofasa.rb +18 -0
- data/lib/ruby_cowsay/cows/moose.rb +16 -0
- data/lib/ruby_cowsay/cows/mutilated.rb +14 -0
- data/lib/ruby_cowsay/cows/ren.rb +26 -0
- data/lib/ruby_cowsay/cows/satanic.rb +16 -0
- data/lib/ruby_cowsay/cows/sheep.rb +17 -0
- data/lib/ruby_cowsay/cows/skeleton.rb +18 -0
- data/lib/ruby_cowsay/cows/small.rb +13 -0
- data/lib/ruby_cowsay/cows/sodomized.rb +16 -0
- data/lib/ruby_cowsay/cows/stegosaurus.rb +23 -0
- data/lib/ruby_cowsay/cows/stimpy.rb +23 -0
- data/lib/ruby_cowsay/cows/supermilker.rb +14 -0
- data/lib/ruby_cowsay/cows/surgery.rb +28 -0
- data/lib/ruby_cowsay/cows/telebears.rb +16 -0
- data/lib/ruby_cowsay/cows/three-eyes.rb +14 -0
- data/lib/ruby_cowsay/cows/turkey.rb +30 -0
- data/lib/ruby_cowsay/cows/turtle.rb +24 -0
- data/lib/ruby_cowsay/cows/tux.rb +19 -0
- data/lib/ruby_cowsay/cows/udder.rb +18 -0
- data/lib/ruby_cowsay/cows/vader-koala.rb +20 -0
- data/lib/ruby_cowsay/cows/vader.rb +17 -0
- data/lib/ruby_cowsay/cows/www.rb +14 -0
- data/ruby_cowsay.gemspec +30 -0
- metadata +161 -0
data/Manifest
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
Manifest
|
2
|
+
README.mdown
|
3
|
+
Rakefile
|
4
|
+
lib/ruby_cowsay.rb
|
5
|
+
lib/ruby_cowsay/cow.rb
|
6
|
+
lib/ruby_cowsay/cows/beavis.zen.rb
|
7
|
+
lib/ruby_cowsay/cows/bong.rb
|
8
|
+
lib/ruby_cowsay/cows/bud-frogs.rb
|
9
|
+
lib/ruby_cowsay/cows/bunny.rb
|
10
|
+
lib/ruby_cowsay/cows/cheese.rb
|
11
|
+
lib/ruby_cowsay/cows/cower.rb
|
12
|
+
lib/ruby_cowsay/cows/daemon.rb
|
13
|
+
lib/ruby_cowsay/cows/default.rb
|
14
|
+
lib/ruby_cowsay/cows/dragon-and-cow.rb
|
15
|
+
lib/ruby_cowsay/cows/dragon.rb
|
16
|
+
lib/ruby_cowsay/cows/elephant-in-snake.rb
|
17
|
+
lib/ruby_cowsay/cows/elephant.rb
|
18
|
+
lib/ruby_cowsay/cows/eyes.rb
|
19
|
+
lib/ruby_cowsay/cows/flaming-sheep.rb
|
20
|
+
lib/ruby_cowsay/cows/ghostbusters.rb
|
21
|
+
lib/ruby_cowsay/cows/head-in.rb
|
22
|
+
lib/ruby_cowsay/cows/hellokitty.rb
|
23
|
+
lib/ruby_cowsay/cows/kiss.rb
|
24
|
+
lib/ruby_cowsay/cows/kitty.rb
|
25
|
+
lib/ruby_cowsay/cows/koala.rb
|
26
|
+
lib/ruby_cowsay/cows/kosh.rb
|
27
|
+
lib/ruby_cowsay/cows/luke-koala.rb
|
28
|
+
lib/ruby_cowsay/cows/mech-and-cow.rb
|
29
|
+
lib/ruby_cowsay/cows/meow.rb
|
30
|
+
lib/ruby_cowsay/cows/milk.rb
|
31
|
+
lib/ruby_cowsay/cows/moofasa.rb
|
32
|
+
lib/ruby_cowsay/cows/moose.rb
|
33
|
+
lib/ruby_cowsay/cows/mutilated.rb
|
34
|
+
lib/ruby_cowsay/cows/ren.rb
|
35
|
+
lib/ruby_cowsay/cows/satanic.rb
|
36
|
+
lib/ruby_cowsay/cows/sheep.rb
|
37
|
+
lib/ruby_cowsay/cows/skeleton.rb
|
38
|
+
lib/ruby_cowsay/cows/small.rb
|
39
|
+
lib/ruby_cowsay/cows/sodomized.rb
|
40
|
+
lib/ruby_cowsay/cows/stegosaurus.rb
|
41
|
+
lib/ruby_cowsay/cows/stimpy.rb
|
42
|
+
lib/ruby_cowsay/cows/supermilker.rb
|
43
|
+
lib/ruby_cowsay/cows/surgery.rb
|
44
|
+
lib/ruby_cowsay/cows/telebears.rb
|
45
|
+
lib/ruby_cowsay/cows/three-eyes.rb
|
46
|
+
lib/ruby_cowsay/cows/turkey.rb
|
47
|
+
lib/ruby_cowsay/cows/turtle.rb
|
48
|
+
lib/ruby_cowsay/cows/tux.rb
|
49
|
+
lib/ruby_cowsay/cows/udder.rb
|
50
|
+
lib/ruby_cowsay/cows/vader-koala.rb
|
51
|
+
lib/ruby_cowsay/cows/vader.rb
|
52
|
+
lib/ruby_cowsay/cows/www.rb
|
53
|
+
ruby_cowsay.gemspec
|
data/README.mdown
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Cowsay (In Ruby)
|
2
|
+
|
3
|
+
___________
|
4
|
+
< OMGHI2U!! >
|
5
|
+
-----------
|
6
|
+
\ ^__^
|
7
|
+
\ (oo)\_______
|
8
|
+
(__)\ )\/\
|
9
|
+
||----w |
|
10
|
+
|| ||
|
11
|
+
|
12
|
+
## What is this?
|
13
|
+
|
14
|
+
Cowsay on the command line is awesome. You can pipe stuff to it and it displays your message in a spectacular bovine fashion. What about when you want to use it in your log file or within a ruby application? Not so easy.
|
15
|
+
|
16
|
+
## Until Now...
|
17
|
+
|
18
|
+
Using ruby_cowsay is easy. Here's some examples:
|
19
|
+
|
20
|
+
Simplest:
|
21
|
+
|
22
|
+
puts Cow.new.say('Mooooooooo!!!')
|
23
|
+
_______________
|
24
|
+
< Mooooooooo!!! >
|
25
|
+
---------------
|
26
|
+
\ ^__^
|
27
|
+
\ (oo)\_______
|
28
|
+
(__)\ )\/\
|
29
|
+
||----w |
|
30
|
+
|| ||
|
31
|
+
|
32
|
+
Default Cow, Special Face
|
33
|
+
|
34
|
+
cow = Cow.new({ :face_type => 'paranoid'})
|
35
|
+
puts cow.say("Eveyone is staring at me!!!")
|
36
|
+
_____________________________
|
37
|
+
< Eveyone is staring at me!!! >
|
38
|
+
-----------------------------
|
39
|
+
\ ^__^
|
40
|
+
\ (@@)\_______
|
41
|
+
(__)\ )\/\
|
42
|
+
||----w |
|
43
|
+
|| ||
|
44
|
+
|
45
|
+
Using a Special Cow and a thinking bubble
|
46
|
+
|
47
|
+
steg = Cow.new({ :cow => 'stegosaurus' })
|
48
|
+
puts steg.say("My hat is so rad.", 'think')
|
49
|
+
___________________
|
50
|
+
( My hat is so rad. )
|
51
|
+
-------------------
|
52
|
+
o . .
|
53
|
+
o / `. .' "
|
54
|
+
o .---. < > < > .---.
|
55
|
+
o | \ \ - ~ ~ - / / |
|
56
|
+
_____ ..-~ ~-..-~
|
57
|
+
| | \~~~\.' `./~~~/
|
58
|
+
--------- \__/ \__/
|
59
|
+
.' O \ / / \ "
|
60
|
+
(_____, `._.' | } \/~~~/
|
61
|
+
`----. / } | / \__/
|
62
|
+
`-. | / | / `. ,~~|
|
63
|
+
~-.__| /_ - ~ ^| /- _ `..-'
|
64
|
+
| / | / ~-. `-. _ _ _
|
65
|
+
|_____| |_____| ~ - . _ _ _ _ _>
|
66
|
+
|
67
|
+
## Why Would I Use This?
|
68
|
+
|
69
|
+
Use it for whatever you want. I think it's nice for visually finding stuff you've injected into log files, dumping out console messages to users, or generally having fun.
|
70
|
+
|
71
|
+
## Bugs
|
72
|
+
|
73
|
+
I'm sure there's bugs. I had to do things significantly different than the original implementation in order to achieve my goals here. If there's something you think I did poorly, by all means, fork, fix, and submit a pull request.
|
74
|
+
|
75
|
+
## Special Thanks
|
76
|
+
|
77
|
+
I'd like to thank Tony Monroe for the original perl CLI implementation. You can find out more about that here:
|
78
|
+
|
79
|
+
http://www.nog.net/~tony/warez/cowsay.shtml
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('ruby_cowsay', '0.1.0') do |p|
|
6
|
+
p.description = 'Cowsay, written in ruby, as a gem.'
|
7
|
+
p.url = 'http://github.com/patricktulskie/cowsay'
|
8
|
+
p.author = 'Patrick Tulskie'
|
9
|
+
p.email = 'PatrickTulskie@gmail.com'
|
10
|
+
p.ignore_pattern = ['tmp/*', 'script/*', 'lib/main.rb', 'util/*', 'util/perl_cows/*']
|
11
|
+
end
|
12
|
+
|
13
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/lib/ruby_cowsay.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'ruby_cowsay/cow'
|
@@ -0,0 +1,122 @@
|
|
1
|
+
class Cow
|
2
|
+
|
3
|
+
FACE_TYPES = {
|
4
|
+
'default' => ["oo", " "],
|
5
|
+
'borg' => ["==", " "],
|
6
|
+
'dead' => ["==", "U "],
|
7
|
+
'greedy' => ["$$", " "],
|
8
|
+
'paranoid' => ["@@", " "],
|
9
|
+
'stoned' => ["**", "U "],
|
10
|
+
'tired' => ["--", " "],
|
11
|
+
'wired' => ["OO", " "],
|
12
|
+
'young' => ["..", " "]
|
13
|
+
}
|
14
|
+
MAX_LINE_LENGTH = 36
|
15
|
+
|
16
|
+
# ====================
|
17
|
+
# = Instance Methods =
|
18
|
+
# ====================
|
19
|
+
|
20
|
+
def initialize(options={})
|
21
|
+
cow_template = Cow.cows.include?(options[:cow]) ? options[:cow] : 'default'
|
22
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/cows/#{cow_template}"
|
23
|
+
Cow.class_eval 'include CowTemplate'
|
24
|
+
face_type = Cow.faces.include?(options[:face_type]) ? options[:face_type] : 'default'
|
25
|
+
@eyes, @tongue = construct_face(options[:face_type])
|
26
|
+
end
|
27
|
+
|
28
|
+
def say(message, balloon_type = 'say')
|
29
|
+
construct_balloon(message, balloon_type) + "\n" + render_cow
|
30
|
+
end
|
31
|
+
|
32
|
+
# =================
|
33
|
+
# = Class Methods =
|
34
|
+
# =================
|
35
|
+
def self.faces
|
36
|
+
FACE_TYPES.keys.sort
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.cows
|
40
|
+
Dir.new("#{File.expand_path(File.dirname(__FILE__))}/cows/").entries.inject([]) { |files, cow_file| files << cow_file.gsub('.rb', '') if cow_file =~ /\.rb/; files }
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def construct_balloon(message, balloon_type)
|
46
|
+
balloon_lines = ""
|
47
|
+
@border = [] # up-left, up-right, down-left, down-right, left, right
|
48
|
+
if balloon_type == 'think'
|
49
|
+
@thoughts = 'o'
|
50
|
+
@border = %w{ ( ) ( ) ( ) }
|
51
|
+
elsif message.length < 36
|
52
|
+
@thoughts = '\\'
|
53
|
+
@border = %w{ < > }
|
54
|
+
else
|
55
|
+
@thoughts = '\\'
|
56
|
+
@border = %w{ / \\ \\ / | | }
|
57
|
+
end
|
58
|
+
|
59
|
+
formatted_message = format_message(message)
|
60
|
+
if formatted_message.length == 1
|
61
|
+
longest_line = formatted_message.first.length
|
62
|
+
@balloon_lines = " #{'_' * (longest_line + 2)} \n"
|
63
|
+
@balloon_lines << "#{@border.first} #{formatted_message.first} #{@border.last}\n"
|
64
|
+
@balloon_lines << " #{'-' * (longest_line + 2)} "
|
65
|
+
else
|
66
|
+
longest_line = formatted_message.map { |line| line.length }.sort.last
|
67
|
+
@balloon_lines = " #{'_' * (longest_line + 2)} \n"
|
68
|
+
formatted_message.each_with_index do |line, index|
|
69
|
+
case index
|
70
|
+
when 0; left, right = @border[0], @border[1]
|
71
|
+
when (formatted_message.length - 1); left, right = @border[2], @border[3]
|
72
|
+
else; left, right = @border[4], @border[5]
|
73
|
+
end
|
74
|
+
@balloon_lines << "#{left} #{line}#{' ' * (longest_line - line.length)} #{right}\n"
|
75
|
+
end
|
76
|
+
@balloon_lines << " #{'-' * (longest_line + 2)} "
|
77
|
+
end
|
78
|
+
|
79
|
+
return @balloon_lines
|
80
|
+
end
|
81
|
+
|
82
|
+
def construct_face(type = 'default')
|
83
|
+
FACE_TYPES[type || 'default']
|
84
|
+
end
|
85
|
+
|
86
|
+
def format_message(message)
|
87
|
+
message_lines = []
|
88
|
+
if message.length > MAX_LINE_LENGTH
|
89
|
+
words, line = message.split, ""
|
90
|
+
for word in words
|
91
|
+
if line.length > 0 && (line.length + word.length) > MAX_LINE_LENGTH
|
92
|
+
message_lines << line
|
93
|
+
line = ""
|
94
|
+
end
|
95
|
+
if word.length > MAX_LINE_LENGTH
|
96
|
+
broken_word = split_word(word)
|
97
|
+
line = broken_word.pop
|
98
|
+
message_lines = message_lines.concat(broken_word)
|
99
|
+
elsif line.length == 0
|
100
|
+
line = word
|
101
|
+
else
|
102
|
+
line = "#{line} #{word}"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
message_lines << line
|
106
|
+
else
|
107
|
+
message_lines << message
|
108
|
+
end
|
109
|
+
|
110
|
+
return message_lines
|
111
|
+
end
|
112
|
+
|
113
|
+
def split_word(word)
|
114
|
+
return [word] unless word.length > MAX_LINE_LENGTH
|
115
|
+
lines = []
|
116
|
+
while word.length > 0 do
|
117
|
+
lines << word.slice!(0..(MAX_LINE_LENGTH - 1))
|
118
|
+
end
|
119
|
+
return lines.compact
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module CowTemplate
|
2
|
+
|
3
|
+
def render_cow
|
4
|
+
_ = <<COW
|
5
|
+
#{@thoughts} __------~~-,
|
6
|
+
#{@thoughts} ,' ,
|
7
|
+
/ \\
|
8
|
+
/ :
|
9
|
+
| '
|
10
|
+
| |
|
11
|
+
| |
|
12
|
+
| _-- |
|
13
|
+
_| =-. .-. ||
|
14
|
+
o|/o/ _. |
|
15
|
+
/ ~ \\ |
|
16
|
+
(____\@) ___~ |
|
17
|
+
|_===~~~.` |
|
18
|
+
_______.--~ |
|
19
|
+
\\________ |
|
20
|
+
\\ |
|
21
|
+
__/-___-- -__
|
22
|
+
/ _ \\
|
23
|
+
|
24
|
+
COW
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module CowTemplate
|
2
|
+
|
3
|
+
def render_cow
|
4
|
+
_ = <<COW
|
5
|
+
#{@thoughts}
|
6
|
+
#{@thoughts}
|
7
|
+
_____ _________
|
8
|
+
/ \\_/ |
|
9
|
+
| ||
|
10
|
+
| ||
|
11
|
+
| ###\\ /### | |
|
12
|
+
| 0 \\/ 0 | |
|
13
|
+
/| | |
|
14
|
+
/ | < |\\ \\
|
15
|
+
| /| | | |
|
16
|
+
| | \\_______/ | | |
|
17
|
+
| | | / /
|
18
|
+
/|| /|||
|
19
|
+
----------------|
|
20
|
+
| | | |
|
21
|
+
*** ***
|
22
|
+
/___\\ /___\\
|
23
|
+
|
24
|
+
COW
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module CowTemplate
|
2
|
+
|
3
|
+
def render_cow
|
4
|
+
_ = <<COW
|
5
|
+
#{@thoughts} , ,
|
6
|
+
#{@thoughts} /( )`
|
7
|
+
#{@thoughts} \\ \\___ / |
|
8
|
+
/- _ `-/ '
|
9
|
+
(/\\/ \\ \\ /\\
|
10
|
+
/ / | ` \\
|
11
|
+
O O ) / |
|
12
|
+
`-^--'`< '
|
13
|
+
(_.) _ ) /
|
14
|
+
`.___/` /
|
15
|
+
`-----' /
|
16
|
+
<----. __ / __ \\
|
17
|
+
<----|====O)))==) \\) /====
|
18
|
+
<----' `--' `.__,' \\
|
19
|
+
| |
|
20
|
+
\\ /
|
21
|
+
______( (_ / \\______
|
22
|
+
,' ,-----' | \\
|
23
|
+
`--{__________) \\/
|
24
|
+
|
25
|
+
COW
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|