flatulent 0.0.3 → 0.0.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.
- data/flatulent-0.0.4.gem +0 -0
- data/install.rb +210 -0
- data/lib/flatulent.rb +76 -61
- data/rails/app/controllers/flatulent_controller.rb +6 -4
- data/rails/log/development.log +7242 -0
- data/rails/tmp/sessions/ruby_sess.82080df62364f531 +0 -0
- data/rails/tmp/sessions/ruby_sess.8900d08ad306f253 +0 -0
- data/rails/tmp/sessions/ruby_sess.f8fa47c3571d2497 +0 -0
- metadata +7 -49
- data/flatulent-0.0.2.gem +0 -0
- data/rails/lib/flatulent.rb +0 -450
- data/rails/lib/flatulent/attributes.rb +0 -79
- data/rails/lib/flatulent/crypt/blowfish-tables.rb +0 -190
- data/rails/lib/flatulent/crypt/blowfish.rb +0 -109
- data/rails/lib/flatulent/crypt/cbc.rb +0 -123
- data/rails/lib/flatulent/crypt/gost.rb +0 -140
- data/rails/lib/flatulent/crypt/idea.rb +0 -193
- data/rails/lib/flatulent/crypt/noise.rb +0 -94
- data/rails/lib/flatulent/crypt/purerubystringio.rb +0 -378
- data/rails/lib/flatulent/crypt/rijndael-tables.rb +0 -117
- data/rails/lib/flatulent/crypt/rijndael.rb +0 -269
- data/rails/lib/flatulent/fontfiles/banner.flf +0 -2494
- data/rails/lib/flatulent/fontfiles/big.flf +0 -2204
- data/rails/lib/flatulent/fontfiles/block.flf +0 -1691
- data/rails/lib/flatulent/fontfiles/bubble.flf +0 -1630
- data/rails/lib/flatulent/fontfiles/digital.flf +0 -1286
- data/rails/lib/flatulent/fontfiles/ivrit.flf +0 -900
- data/rails/lib/flatulent/fontfiles/lean.flf +0 -1691
- data/rails/lib/flatulent/fontfiles/mini.flf +0 -899
- data/rails/lib/flatulent/fontfiles/mnemonic.flf +0 -3702
- data/rails/lib/flatulent/fontfiles/script.flf +0 -1493
- data/rails/lib/flatulent/fontfiles/shadow.flf +0 -1097
- data/rails/lib/flatulent/fontfiles/slant.flf +0 -1295
- data/rails/lib/flatulent/fontfiles/small.flf +0 -1097
- data/rails/lib/flatulent/fontfiles/smscript.flf +0 -1097
- data/rails/lib/flatulent/fontfiles/smshadow.flf +0 -899
- data/rails/lib/flatulent/fontfiles/smslant.flf +0 -1097
- data/rails/lib/flatulent/fontfiles/standard.flf +0 -2227
- data/rails/lib/flatulent/fontfiles/term.flf +0 -600
- data/rails/lib/flatulent/pervasives.rb +0 -32
- data/rails/lib/flatulent/stringxor.rb +0 -27
- data/rails/lib/flatulent/text.rb +0 -6
- data/rails/lib/flatulent/text/double_metaphone.rb +0 -356
- data/rails/lib/flatulent/text/figlet.rb +0 -17
- data/rails/lib/flatulent/text/figlet/font.rb +0 -117
- data/rails/lib/flatulent/text/figlet/smusher.rb +0 -64
- data/rails/lib/flatulent/text/figlet/typesetter.rb +0 -68
- data/rails/lib/flatulent/text/levenshtein.rb +0 -65
- data/rails/lib/flatulent/text/metaphone.rb +0 -97
- data/rails/lib/flatulent/text/porter_stemming.rb +0 -171
- data/rails/lib/flatulent/text/soundex.rb +0 -61
data/flatulent-0.0.4.gem
ADDED
File without changes
|
data/install.rb
ADDED
@@ -0,0 +1,210 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rbconfig'
|
3
|
+
require 'find'
|
4
|
+
require 'ftools'
|
5
|
+
require 'tempfile'
|
6
|
+
include Config
|
7
|
+
|
8
|
+
LIBDIR = "lib"
|
9
|
+
LIBDIR_MODE = 0644
|
10
|
+
|
11
|
+
BINDIR = "bin"
|
12
|
+
BINDIR_MODE = 0755
|
13
|
+
|
14
|
+
|
15
|
+
$srcdir = CONFIG["srcdir"]
|
16
|
+
$version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
|
17
|
+
$libdir = File.join(CONFIG["libdir"], "ruby", $version)
|
18
|
+
$archdir = File.join($libdir, CONFIG["arch"])
|
19
|
+
$site_libdir = $:.find {|x| x =~ /site_ruby$/}
|
20
|
+
$bindir = CONFIG["bindir"] || CONFIG['BINDIR']
|
21
|
+
$ruby_install_name = CONFIG['ruby_install_name'] || CONFIG['RUBY_INSTALL_NAME'] || 'ruby'
|
22
|
+
$ruby_ext = CONFIG['EXEEXT'] || ''
|
23
|
+
$ruby = File.join($bindir, ($ruby_install_name + $ruby_ext))
|
24
|
+
|
25
|
+
if !$site_libdir
|
26
|
+
$site_libdir = File.join($libdir, "site_ruby")
|
27
|
+
elsif $site_libdir !~ %r/#{Regexp.quote($version)}/
|
28
|
+
$site_libdir = File.join($site_libdir, $version)
|
29
|
+
end
|
30
|
+
|
31
|
+
def install_rb(srcdir=nil, destdir=nil, mode=nil, bin=nil)
|
32
|
+
#{{{
|
33
|
+
path = []
|
34
|
+
dir = []
|
35
|
+
Find.find(srcdir) do |f|
|
36
|
+
next unless FileTest.file?(f)
|
37
|
+
next if (f = f[srcdir.length+1..-1]) == nil
|
38
|
+
next if (/CVS$/ =~ File.dirname(f))
|
39
|
+
next if f =~ %r/\.lnk/
|
40
|
+
path.push f
|
41
|
+
dir |= [File.dirname(f)]
|
42
|
+
end
|
43
|
+
for f in dir
|
44
|
+
next if f == "."
|
45
|
+
next if f == "CVS"
|
46
|
+
File::makedirs(File.join(destdir, f))
|
47
|
+
end
|
48
|
+
for f in path
|
49
|
+
next if (/\~$/ =~ f)
|
50
|
+
next if (/^\./ =~ File.basename(f))
|
51
|
+
unless bin
|
52
|
+
File::install(File.join(srcdir, f), File.join(destdir, f), mode, true)
|
53
|
+
else
|
54
|
+
from = File.join(srcdir, f)
|
55
|
+
to = File.join(destdir, f)
|
56
|
+
shebangify(from) do |sf|
|
57
|
+
$deferr.print from, " -> ", File::catname(from, to), "\n"
|
58
|
+
$deferr.printf "chmod %04o %s\n", mode, to
|
59
|
+
File::install(sf, to, mode, false)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
#}}}
|
64
|
+
end
|
65
|
+
def shebangify f
|
66
|
+
#{{{
|
67
|
+
open(f) do |fd|
|
68
|
+
buf = fd.read 42
|
69
|
+
if buf =~ %r/^\s*#\s*!.*ruby/o
|
70
|
+
ftmp = Tempfile::new("#{ $$ }_#{ File::basename(f) }")
|
71
|
+
begin
|
72
|
+
fd.rewind
|
73
|
+
ftmp.puts "#!#{ $ruby }"
|
74
|
+
while((buf = fd.read(8192)))
|
75
|
+
ftmp.write buf
|
76
|
+
end
|
77
|
+
ftmp.close
|
78
|
+
yield ftmp.path
|
79
|
+
ensure
|
80
|
+
ftmp.close!
|
81
|
+
end
|
82
|
+
else
|
83
|
+
yield f
|
84
|
+
end
|
85
|
+
end
|
86
|
+
#}}}
|
87
|
+
end
|
88
|
+
def ARGV.switch
|
89
|
+
#{{{
|
90
|
+
return nil if self.empty?
|
91
|
+
arg = self.shift
|
92
|
+
return nil if arg == '--'
|
93
|
+
if arg =~ /^-(.)(.*)/
|
94
|
+
return arg if $1 == '-'
|
95
|
+
raise 'unknown switch "-"' if $2.index('-')
|
96
|
+
self.unshift "-#{$2}" if $2.size > 0
|
97
|
+
"-#{$1}"
|
98
|
+
else
|
99
|
+
self.unshift arg
|
100
|
+
nil
|
101
|
+
end
|
102
|
+
#}}}
|
103
|
+
end
|
104
|
+
def ARGV.req_arg
|
105
|
+
#{{{
|
106
|
+
self.shift || raise('missing argument')
|
107
|
+
#}}}
|
108
|
+
end
|
109
|
+
def linkify d, linked = []
|
110
|
+
#--{{{
|
111
|
+
if test ?d, d
|
112
|
+
versioned = Dir[ File::join(d, "*-[0-9].[0-9].[0-9].rb") ]
|
113
|
+
versioned.each do |v|
|
114
|
+
src, dst = v, v.gsub(%r/\-[\d\.]+\.rb$/, '.rb')
|
115
|
+
lnk = nil
|
116
|
+
begin
|
117
|
+
if test ?l, dst
|
118
|
+
lnk = "#{ dst }.lnk"
|
119
|
+
puts "#{ dst } -> #{ lnk }"
|
120
|
+
File::rename dst, lnk
|
121
|
+
end
|
122
|
+
unless test ?e, dst
|
123
|
+
puts "#{ src } -> #{ dst }"
|
124
|
+
File::copy src, dst
|
125
|
+
linked << dst
|
126
|
+
end
|
127
|
+
ensure
|
128
|
+
if lnk
|
129
|
+
at_exit do
|
130
|
+
puts "#{ lnk } -> #{ dst }"
|
131
|
+
File::rename lnk, dst
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
linked
|
138
|
+
#--}}}
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
#
|
143
|
+
# main program
|
144
|
+
#
|
145
|
+
|
146
|
+
libdir = $site_libdir
|
147
|
+
bindir = $bindir
|
148
|
+
no_linkify = false
|
149
|
+
linked = nil
|
150
|
+
help = false
|
151
|
+
|
152
|
+
usage = <<-usage
|
153
|
+
#{ File::basename $0 }
|
154
|
+
-d, --destdir <destdir>
|
155
|
+
-l, --libdir <libdir>
|
156
|
+
-b, --bindir <bindir>
|
157
|
+
-r, --ruby <ruby>
|
158
|
+
-n, --no_linkify
|
159
|
+
-s, --sudo
|
160
|
+
-h, --help
|
161
|
+
usage
|
162
|
+
|
163
|
+
begin
|
164
|
+
while switch = ARGV.switch
|
165
|
+
case switch
|
166
|
+
when '-d', '--destdir'
|
167
|
+
libdir = ARGV.req_arg
|
168
|
+
when '-l', '--libdir'
|
169
|
+
libdir = ARGV.req_arg
|
170
|
+
when '-b', '--bindir'
|
171
|
+
bindir = ARGV.req_arg
|
172
|
+
when '-r', '--ruby'
|
173
|
+
$ruby = ARGV.req_arg
|
174
|
+
when '-n', '--no_linkify'
|
175
|
+
no_linkify = true
|
176
|
+
when '-s', '--sudo'
|
177
|
+
sudo = 'sudo'
|
178
|
+
when '-h', '--help'
|
179
|
+
help = true
|
180
|
+
else
|
181
|
+
raise "unknown switch #{switch.dump}"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
rescue
|
185
|
+
STDERR.puts $!.to_s
|
186
|
+
STDERR.puts usage
|
187
|
+
exit 1
|
188
|
+
end
|
189
|
+
|
190
|
+
if help
|
191
|
+
STDOUT.puts usage
|
192
|
+
exit
|
193
|
+
end
|
194
|
+
|
195
|
+
system "#{ sudo } #{ $ruby } pre-install.rb" if test(?s, 'pre-install.rb')
|
196
|
+
|
197
|
+
unless no_linkify
|
198
|
+
linked = linkify('lib') + linkify('bin')
|
199
|
+
end
|
200
|
+
|
201
|
+
system "#{ $ruby } extconf.rb && make && #{ sudo } make install" if test(?s, 'extconf.rb')
|
202
|
+
|
203
|
+
install_rb(LIBDIR, libdir, LIBDIR_MODE)
|
204
|
+
install_rb(BINDIR, bindir, BINDIR_MODE, bin=true)
|
205
|
+
|
206
|
+
if linked
|
207
|
+
linked.each{|path| File::rm_f path}
|
208
|
+
end
|
209
|
+
|
210
|
+
system "#{ sudo } #{ $ruby } post-install.rb" if test(?s, 'post-install.rb')
|
data/lib/flatulent.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
class Flatulent
|
2
|
-
|
3
|
-
def self.flatulent() Flatulent::VERSION end
|
2
|
+
def self.version() '0.0.4' end
|
4
3
|
def self.libdir() File.expand_path(__FILE__).gsub(%r/\.rb$/, '') end
|
5
4
|
|
6
5
|
require 'cgi'
|
@@ -42,12 +41,13 @@ class Flatulent
|
|
42
41
|
'font-weight' => 'bold',
|
43
42
|
'font-size' => 'medium',
|
44
43
|
#'background' => '#ffc',
|
45
|
-
'background' => '#
|
44
|
+
'background' => '#ffff99',
|
46
45
|
#'color' => '#000',
|
47
|
-
'color' => '#
|
46
|
+
'color' => '#000000',
|
48
47
|
'margin' => '2px',
|
49
48
|
'padding' => '2px',
|
50
49
|
'display' => 'table',
|
50
|
+
'width' => '33%',
|
51
51
|
] }
|
52
52
|
|
53
53
|
attribute('key'){ default_key }
|
@@ -265,7 +265,8 @@ class Flatulent
|
|
265
265
|
end
|
266
266
|
|
267
267
|
@font = String opt[ 'font', 'big' ]
|
268
|
-
@noise = Float opt[ 'noise', 0.
|
268
|
+
@noise = Float opt[ 'noise', 0.05 ]
|
269
|
+
@transform = Float opt[ 'transform', 0.03 ]
|
269
270
|
@id = String opt[ 'id', 'flatulent' ]
|
270
271
|
@action = String opt[ 'action' ]
|
271
272
|
@ttl = Integer opt[ 'ttl', 300 ]
|
@@ -421,53 +422,69 @@ class Flatulent
|
|
421
422
|
end #--}}}
|
422
423
|
|
423
424
|
def captcha! #--{{{
|
424
|
-
|
425
|
+
figlet = @figlet.dup
|
426
|
+
chars = figlet.split %r""
|
427
|
+
hammer chars
|
428
|
+
figlet = chars.join
|
425
429
|
space = " "[0]
|
426
430
|
newline = "\n"[0]
|
427
|
-
noisy = %w`| / - _ ( ) \\ ! [ ]`
|
428
431
|
|
429
|
-
@figlet.size
|
430
|
-
|
432
|
+
@captcha = " " * figlet.size
|
433
|
+
# merge vapour with figlet
|
434
|
+
figlet.size.times do |i|
|
435
|
+
fbyte = figlet[i]
|
431
436
|
vbyte = @vapour[i]
|
432
437
|
|
433
438
|
if fbyte == newline
|
434
439
|
@captcha[i] = newline
|
435
440
|
elsif fbyte == space
|
436
|
-
|
437
|
-
#@captcha[i] = noisy[ rand(noisy.size) ]
|
438
|
-
#else
|
439
|
-
@captcha[i] = vbyte
|
440
|
-
#end
|
441
|
+
@captcha[i] = vbyte
|
441
442
|
else
|
442
443
|
@captcha[i] = fbyte
|
443
444
|
end
|
444
445
|
end
|
446
|
+
@captcha
|
447
|
+
end #--}}}
|
445
448
|
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
+
def hammer chars #--{{{
|
450
|
+
# transform character chars
|
451
|
+
newline = "\n"[0]
|
452
|
+
space = " "[0]
|
453
|
+
alphas = ('A'..'Z').to_a + ('a'..'z').to_a
|
449
454
|
transform = {
|
450
|
-
'|'
|
451
|
-
'/'
|
452
|
-
'\\' => rchar(%w'/ ] [ { } ( ) @' +
|
455
|
+
'|' => rchar(%w'. * + , ; : ' + alphas),
|
456
|
+
'/' => rchar(%w'] [ { } ( ) @' + alphas),
|
457
|
+
'\\' => rchar(%w'/ ] [ { } ( ) @' + alphas),
|
453
458
|
'-' => rchar(%w'_ * ^ # @ ~'),
|
454
459
|
'_' => rchar(%w'- * ^ # @ ~'),
|
455
|
-
'('
|
456
|
-
')'
|
460
|
+
'(' => rchar(%w'/ ] [ { } ) @' + alphas),
|
461
|
+
')' => rchar(%w'/ ] [ { } ( @' + alphas),
|
457
462
|
}
|
463
|
+
to_transform =
|
464
|
+
(0 ... chars.size).to_a.select{|i| chars[i] !~ %r"\s"}.sort_by{ rand }
|
465
|
+
to_transform = to_transform.first((to_transform.size * @transform).ceil)
|
466
|
+
to_transform.each do |i|
|
467
|
+
char = chars[i]
|
468
|
+
chars[i] = (transform[char] || lambda{char}).call
|
469
|
+
end
|
458
470
|
|
459
|
-
|
460
|
-
|
461
|
-
|
471
|
+
# background noise
|
472
|
+
to_noise =
|
473
|
+
(0 ... chars.size).to_a.select{|i| chars[i] =~ %r" "}.sort_by{ rand }
|
474
|
+
to_noise = to_noise.first((to_noise.size * @noise).ceil)
|
475
|
+
noisy = %w`| / ( ) \\ ! [ ] < > ^ v V`
|
476
|
+
noise = lambda{|*a| noisy[ rand(noisy.size) ]}
|
477
|
+
to_noise.each do |i|
|
478
|
+
char = chars[i]
|
479
|
+
chars[i] = noise[char]
|
462
480
|
end
|
463
|
-
=end
|
464
|
-
@captcha
|
465
481
|
end #--}}}
|
466
482
|
|
467
483
|
def element! #--{{{
|
468
484
|
rows = []
|
469
485
|
rows << (row = [])
|
470
486
|
chars = @captcha.split %r//
|
487
|
+
#chars = @figlet.split %r//
|
471
488
|
size = chars.size
|
472
489
|
last = size - 1
|
473
490
|
|
@@ -475,53 +492,45 @@ class Flatulent
|
|
475
492
|
content =
|
476
493
|
case char
|
477
494
|
when %r/\n/o
|
478
|
-
"<br>"
|
495
|
+
#"<br>"
|
496
|
+
"\n"
|
479
497
|
when %r/\s/o
|
480
|
-
" "
|
498
|
+
#" "
|
499
|
+
" "
|
481
500
|
when %r/([^\s])/o
|
482
501
|
CGI.escapeHTML $1
|
483
502
|
end
|
484
|
-
Array.new(rand(10)){ content = "<span>#{ content }</span>"}
|
503
|
+
#Array.new(rand(10)){ content = "<span>#{ content }</span>"}
|
485
504
|
row << content
|
486
505
|
rows << (row = []) unless idx == last
|
487
506
|
end
|
488
507
|
|
508
|
+
content = rows.join
|
509
|
+
#<table width='50%' border=1 bgcolor='#{ style["background"] }'><tr><td>
|
510
|
+
#</td></tr></table>
|
511
|
+
@element = <<-html
|
512
|
+
<div id='#{ @id }_element' style='#{ css }'>#{ content }</div>
|
513
|
+
html
|
514
|
+
end #--}}}
|
489
515
|
|
490
|
-
=begin
|
491
|
-
noisy = %w`| / - _ ( ) \\`
|
492
|
-
alpha = ('A'..'Z').to_a + ('a'..'z').to_a
|
493
|
-
transform = {
|
494
|
-
'|' => rchar(%w'. * \` + , ; : '),
|
495
|
-
'/' => rchar(%w'\\ ] [ { } ( ) @' + alpha),
|
496
|
-
'\\' => rchar(%w'/ ] [ { } ( ) @' + alpha),
|
497
|
-
'-' => rchar(%w'_ * ^ # @ ~'),
|
498
|
-
'_' => rchar(%w'- * ^ # @ ~'),
|
499
|
-
'(' => rchar(%w'\\ / ] [ { } ) @' + alpha),
|
500
|
-
')' => rchar(%w'\\ / ] [ { } ( @' + alpha),
|
501
|
-
}
|
502
516
|
|
503
|
-
(@noise * chars.size).ceil.times do
|
504
|
-
y = rand(rows.size - 1)
|
505
|
-
x = rand(rows.first.size - 1)
|
506
|
-
cell = rows[y][x]
|
507
|
-
next if cell =~ %r"br"
|
508
|
-
char =
|
509
|
-
if cell =~ %r"nbsp;"
|
510
|
-
noisy[ rand(noisy.size) ]
|
511
|
-
else
|
512
|
-
#(transform[cell] || lambda{'.'}).call
|
513
|
-
nil
|
514
|
-
end
|
515
|
-
rows[y][x] = char if char
|
516
|
-
end
|
517
|
-
=end
|
518
517
|
|
519
|
-
|
520
|
-
|
521
|
-
|
518
|
+
def image options = {}
|
519
|
+
require 'RMagick'
|
520
|
+
|
521
|
+
grid = captcha.split(%r"\n").map{|row| row.split %r""}
|
522
|
+
|
523
|
+
width = grid.first.size
|
524
|
+
height = grid.size
|
525
|
+
|
526
|
+
img = Magick::Image.new width, height
|
527
|
+
|
528
|
+
img
|
529
|
+
end
|
530
|
+
|
522
531
|
|
523
532
|
def rchar *list #--{{{
|
524
|
-
list = list.flatten
|
533
|
+
list = list.flatten.sort_by{ rand }
|
525
534
|
n = list.size - 1
|
526
535
|
lambda{list[ rand(n) ]}
|
527
536
|
end #--}}}
|
@@ -595,10 +604,16 @@ if $0 == __FILE__
|
|
595
604
|
#p e
|
596
605
|
#p Flatulent.decrypt(e)
|
597
606
|
|
607
|
+
=begin
|
598
608
|
f = Flatulent.new #('foobar')
|
599
609
|
puts f.figlet
|
600
610
|
puts('-' * 79)
|
601
611
|
puts f.vapour
|
602
612
|
puts('-' * 79)
|
603
613
|
puts f.captcha
|
614
|
+
=end
|
615
|
+
|
616
|
+
f = Flatulent.new
|
617
|
+
puts f.captcha
|
618
|
+
|
604
619
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
class FlatulentController < ApplicationController
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
if ENV['RAILS_ENV'] == 'production'
|
3
|
+
require 'flatulent.rb'
|
4
|
+
else
|
5
|
+
$:.unshift '../lib'
|
6
|
+
load '../lib/flatulent.rb'
|
7
|
+
end
|
5
8
|
|
6
9
|
def figlet
|
7
10
|
render :text => Flatulent.figlet(params), :content_type => 'text/plain'
|
@@ -62,7 +65,6 @@ class FlatulentController < ApplicationController
|
|
62
65
|
|
63
66
|
<form action='./' method='post'>
|
64
67
|
<%= Flatulent.ajax %>
|
65
|
-
|
66
68
|
<hr>
|
67
69
|
<input type='submit' name='submit' value='submit' />
|
68
70
|
</form>
|