epitools 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/lib/epitools.rb +11 -0
- data/lib/epitools/basetypes.rb +429 -0
- data/lib/epitools/hexdump.rb +66 -0
- data/lib/epitools/http.rb +82 -0
- data/lib/epitools/lcs.rb +39 -0
- data/lib/epitools/metaclass.rb +28 -0
- data/lib/epitools/niceprint.rb +73 -0
- data/lib/epitools/permutations.rb +53 -0
- data/lib/epitools/pretty_backtrace.rb +289 -0
- data/lib/epitools/rails.rb +11 -0
- data/lib/epitools/rash.rb +92 -0
- data/spec/basetypes_spec.rb +163 -0
- data/spec/lcs_spec.rb +23 -0
- data/spec/metaclass_spec.rb +12 -0
- data/spec/permutations_spec.rb +14 -0
- data/spec/rash_spec.rb +34 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +9 -0
- metadata +103 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
%w[rubygems colorize].each{|r| require r}
|
2
|
+
|
3
|
+
ASCII_PRINTABLE = (33..126)
|
4
|
+
|
5
|
+
=begin
|
6
|
+
000352c0 ed 33 8c 85 6e cc f6 f7 72 79 1c e3 3a b4 c2 c6 |.3..n...ry..:...|
|
7
|
+
000352d0 c8 8d d6 ee 3e 68 a1 a5 ae b2 b7 97 a4 1d 5f a7 |....>h........_.|
|
8
|
+
000352e0 d8 7d 28 db f6 8a e7 8a 7b 8d 0b bd 35 7d 25 3c |.}(.....{...5}%<|
|
9
|
+
000352f0 8b 3c c8 9d ec 04 85 54 92 a0 f7 a8 ed cf 05 7d |.<.....T.......}|
|
10
|
+
00035300 b5 e3 9e 35 f0 79 9f 51 74 e3 60 ee 0f 03 8e 3f |...5.y.Qt.`....?|
|
11
|
+
00035310 05 5b 91 87 e6 48 48 ee a3 77 ae ad 5e 2a 56 a2 |.[...HH..w..^*V.|
|
12
|
+
00035320 b6 96 86 f3 3c 92 b3 c8 62 4a 6f 96 10 5c 9c bb |....<...bJo..\..|
|
13
|
+
=end
|
14
|
+
|
15
|
+
# whoops!
|
16
|
+
# 48: d2 b1 6d 31 3e 67 e1 88 99 8b 4b 34 1d 61 05 15 |..m1g....K4.a..|
|
17
|
+
#
|
18
|
+
|
19
|
+
def hexdump(data, options={})
|
20
|
+
base_offset = options[:base_offset] || 0
|
21
|
+
color = options[:color].nil? ? true : options[:color]
|
22
|
+
highlight = options[:highlight]
|
23
|
+
|
24
|
+
p options
|
25
|
+
p color
|
26
|
+
|
27
|
+
lines = data.scan(/.{1,16}/m)
|
28
|
+
max_offset = (base_offset + data.size) / 16 * 16
|
29
|
+
max_offset_width = max_offset.to_s.size
|
30
|
+
max_hex_width = 3 * 16 + 1
|
31
|
+
|
32
|
+
p [max_offset, max_offset_width]
|
33
|
+
lines.each_with_index do |line,n|
|
34
|
+
offset = base_offset + n*16
|
35
|
+
bytes = line.unpack("C*")
|
36
|
+
hex = bytes.map { |c| "%0.2x" % c }.insert(8, '').join(' ')
|
37
|
+
|
38
|
+
plain = bytes.map do |c|
|
39
|
+
if ASCII_PRINTABLE.include?(c)
|
40
|
+
c = c.chr
|
41
|
+
else
|
42
|
+
color ? '<9>.</9>' : '.'
|
43
|
+
end
|
44
|
+
end.join('')
|
45
|
+
|
46
|
+
if color
|
47
|
+
outstring = "<light_cyan>%s<cyan>: <light_yellow>%s <default>|<light_white>%s<default>|" % [offset.to_s.ljust(max_offset_width), hex.ljust(max_hex_width), plain]
|
48
|
+
outstring = outstring.colorize
|
49
|
+
else
|
50
|
+
outstring = "%s: %s |%s|" % [offset.to_s.ljust(max_offset_width), hex.ljust(max_hex_width), plain]
|
51
|
+
end
|
52
|
+
puts outstring
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
if $0 == __FILE__
|
58
|
+
data = (0..64).map{ rand(255).chr }.join('')
|
59
|
+
hexdump(data)
|
60
|
+
puts
|
61
|
+
hexdump(data, :color=>false)
|
62
|
+
puts
|
63
|
+
|
64
|
+
data = "1234567890"*10
|
65
|
+
hexdump(data)
|
66
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
# TODO: what?? this needs to be a class.
|
5
|
+
|
6
|
+
class PartialPage < Exception
|
7
|
+
attr_accessor :data
|
8
|
+
end
|
9
|
+
|
10
|
+
def read_data_from_response(response, amount)
|
11
|
+
|
12
|
+
amount_read = 0
|
13
|
+
chunks = []
|
14
|
+
|
15
|
+
begin
|
16
|
+
response.read_body do |chunk| # read body now
|
17
|
+
|
18
|
+
amount_read += chunk.length
|
19
|
+
|
20
|
+
if amount_read > amount
|
21
|
+
amount_of_overflow = amount_read - amount
|
22
|
+
chunk = chunk[0...-amount_of_overflow]
|
23
|
+
end
|
24
|
+
|
25
|
+
chunks << chunk
|
26
|
+
|
27
|
+
if amount_read >= amount
|
28
|
+
raise PartialPage.new chunks.join('')
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def http_get_streaming(url = URI.parse("http://epi.is-a-geek.net/files/Mr.%20Show%20-%20Civil%20War%20Re-enactment.avi"))
|
38
|
+
|
39
|
+
#headers = {'User-Agent' => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1"}
|
40
|
+
headers = nil
|
41
|
+
|
42
|
+
Net::HTTP.start(url.host, url.port) do |http|
|
43
|
+
# using block
|
44
|
+
response = http.request_get(url.path, headers) {|response|
|
45
|
+
puts "Response: #{response.inspect}"
|
46
|
+
puts "to hash: #{response.to_hash.inspect}"
|
47
|
+
|
48
|
+
begin
|
49
|
+
read_data_from_response(response, 500)
|
50
|
+
rescue PartialPage => p
|
51
|
+
puts "GOT THE PARTIAL PAGE!"
|
52
|
+
data = p.data
|
53
|
+
end
|
54
|
+
|
55
|
+
puts
|
56
|
+
puts "===========first 500 bytes================="
|
57
|
+
puts data
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
# TODO: Remove RIO dependancy.
|
65
|
+
|
66
|
+
def http_get_cached(url)
|
67
|
+
require 'digest/md5'
|
68
|
+
require 'rio'
|
69
|
+
|
70
|
+
tempdir = ENV['TEMP']
|
71
|
+
cachefile = rio(tempdir, "cached_url_#{Digest::SHA1.hexdigest(url)}")
|
72
|
+
|
73
|
+
if cachefile.exist?
|
74
|
+
data = rio(cachefile).read
|
75
|
+
else
|
76
|
+
data = rio(url).read
|
77
|
+
rio(cachefile).binmode < data
|
78
|
+
end
|
79
|
+
|
80
|
+
data
|
81
|
+
end
|
82
|
+
|
data/lib/epitools/lcs.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Return the longest common prefix between two strings.
|
2
|
+
def longest_common_prefix(strings)
|
3
|
+
p = nil
|
4
|
+
strings.map{|s|s.size}.min.times do |c|
|
5
|
+
if strings.map{|s|s[c]}.uniq.size == 1
|
6
|
+
p = c
|
7
|
+
else
|
8
|
+
break
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
strings.first[0..p] unless p.nil?
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
def longest_common_subsequence(s1, s2)
|
17
|
+
|
18
|
+
num = Array.new(s1.size) { Array.new(s2.size) }
|
19
|
+
len, ans = 0
|
20
|
+
|
21
|
+
s1.chars.each_with_index do |l1, i|
|
22
|
+
s2.chars.each_with_index do |l2, j|
|
23
|
+
unless l1==l2
|
24
|
+
num[i][j]=0
|
25
|
+
else
|
26
|
+
if (i==0 || j==0)
|
27
|
+
num[i][j] = 1
|
28
|
+
else
|
29
|
+
num[i][j] = 1 + num[i-1][j-1]
|
30
|
+
end
|
31
|
+
len = ans = num[i][j] if num[i][j] > len
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
ans
|
37
|
+
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Object
|
2
|
+
# The hidden singleton lurks behind everyone
|
3
|
+
def metaclass
|
4
|
+
class << self
|
5
|
+
self
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def meta_eval &blk
|
10
|
+
metaclass.instance_eval &blk
|
11
|
+
end
|
12
|
+
|
13
|
+
# Adds methods to a metaclass
|
14
|
+
def meta_def name, &blk
|
15
|
+
meta_eval { define_method name, &blk }
|
16
|
+
end
|
17
|
+
|
18
|
+
# Defines an instance method within a class
|
19
|
+
def class_def name, &blk
|
20
|
+
class_eval { define_method name, &blk }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
if $0 == __FILE__
|
25
|
+
o = Object.new
|
26
|
+
p o
|
27
|
+
p o.metaclass
|
28
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
def niceprint(o, level=0, indent_first_line=true)
|
2
|
+
maxstring = 50
|
3
|
+
maxarray = 20
|
4
|
+
|
5
|
+
result = ""
|
6
|
+
|
7
|
+
dent = " "
|
8
|
+
indent = dent * level
|
9
|
+
|
10
|
+
result << indent if indent_first_line
|
11
|
+
|
12
|
+
case o
|
13
|
+
|
14
|
+
when Hash
|
15
|
+
#puts "Hash!"
|
16
|
+
result << "{\n"
|
17
|
+
|
18
|
+
o.each_with_index do |(k,v),i|
|
19
|
+
result << "#{indent+dent}#{k.inspect} => #{niceprint(v,level+1,false)}"
|
20
|
+
result << "," unless i == o.size
|
21
|
+
result << "\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
result << "#{indent}}"
|
25
|
+
|
26
|
+
when Array
|
27
|
+
#puts "Array!"
|
28
|
+
indent_first = o.any? { |e| e.instance_of? Hash }
|
29
|
+
|
30
|
+
if indent_first
|
31
|
+
result << "[\n"
|
32
|
+
else
|
33
|
+
result << "["
|
34
|
+
end
|
35
|
+
|
36
|
+
o = o[0..maxarray] if o.size > maxarray
|
37
|
+
o.each do |e|
|
38
|
+
result << niceprint(e,level+1,indent_first)
|
39
|
+
result << ", "
|
40
|
+
end
|
41
|
+
|
42
|
+
result << "]"
|
43
|
+
|
44
|
+
when String
|
45
|
+
#puts "String!"
|
46
|
+
o = o[0..maxstring] + "..." if o.size > maxstring
|
47
|
+
result << o.inspect
|
48
|
+
|
49
|
+
else
|
50
|
+
result << o.inspect
|
51
|
+
end
|
52
|
+
|
53
|
+
if level == 0
|
54
|
+
print result
|
55
|
+
else
|
56
|
+
result
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
if $0 == __FILE__
|
62
|
+
t = {
|
63
|
+
:a => 5,
|
64
|
+
:b => 10,
|
65
|
+
:c => {
|
66
|
+
:x => 10,
|
67
|
+
:y => [1,2,3,4,5,6,7],
|
68
|
+
},
|
69
|
+
:d => "asdf"*1000,
|
70
|
+
}
|
71
|
+
|
72
|
+
puts niceprint(t)
|
73
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'epitools/basetypes'
|
2
|
+
|
3
|
+
class Array
|
4
|
+
|
5
|
+
alias_method :"original_*_for_cartesian_*", :*
|
6
|
+
def *(other)
|
7
|
+
case other
|
8
|
+
when Integer
|
9
|
+
send(:"original_*_for_cartesian_*", other)
|
10
|
+
when Array
|
11
|
+
# cross-product
|
12
|
+
result = []
|
13
|
+
(0...self.size).each do |a|
|
14
|
+
(0...other.size).each do |b|
|
15
|
+
result << [self[a], other[b]]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
result
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def **(exponent)
|
23
|
+
([self] * exponent).foldl(:*)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def perms(total, n=0, stack=[], &block)
|
29
|
+
ps = yield(n)
|
30
|
+
results = []
|
31
|
+
if n >= total
|
32
|
+
results << stack
|
33
|
+
else
|
34
|
+
ps.each do |p|
|
35
|
+
results += perms(total, n+1, stack + [p], &block)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
results
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
if $0 == __FILE__
|
43
|
+
puts "-------------- foldl ---"
|
44
|
+
p [:sum, [1,1,1].foldl(:+)]
|
45
|
+
p ["[[1,2],[3]].foldl(:+)", [[1,2],[3]].foldl(:+)]
|
46
|
+
p [[0,1],[0,1]].foldl(:*)
|
47
|
+
|
48
|
+
puts "-------------- cartesian product ---"
|
49
|
+
p ["[0,1]*[2,3]",[0,1]*[2,3]]
|
50
|
+
|
51
|
+
puts "-------------- cartesian exponent ---"
|
52
|
+
p [0,1]**3
|
53
|
+
end
|
@@ -0,0 +1,289 @@
|
|
1
|
+
require 'pp'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'colorize'
|
4
|
+
|
5
|
+
# TODO: Pick a backtrace format. (Also, add a method to replace default backtracer.)
|
6
|
+
# TODO: This chould be in a class.
|
7
|
+
|
8
|
+
class Array
|
9
|
+
|
10
|
+
def split_when(&block)
|
11
|
+
|
12
|
+
chunks = []
|
13
|
+
start = 0
|
14
|
+
|
15
|
+
for i in 0...self.size-1
|
16
|
+
|
17
|
+
split_here = yield(self[i], self[i+1])
|
18
|
+
if split_here
|
19
|
+
chunks << self[start..i]
|
20
|
+
start = i+1
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
chunks << self[start..-1]
|
26
|
+
chunks
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
class Line
|
34
|
+
|
35
|
+
attr_accessor :path, :num, :meth, :dir, :filename
|
36
|
+
|
37
|
+
def initialize(path, num, meth)
|
38
|
+
|
39
|
+
@path = path
|
40
|
+
@num = num
|
41
|
+
@meth = meth
|
42
|
+
@gem = false
|
43
|
+
|
44
|
+
@dir, @filename = File.split(path)
|
45
|
+
|
46
|
+
if @dir =~ %r{^/usr/lib/ruby/gems/1.8/gems/(.+)}
|
47
|
+
@dir = "[gem] #{$1}"
|
48
|
+
@gem = true
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
def gem?
|
54
|
+
@gem
|
55
|
+
end
|
56
|
+
|
57
|
+
def codeline
|
58
|
+
l = @num.to_i - 1
|
59
|
+
open(path).readlines[l]
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def parse_lines(backtrace)
|
66
|
+
backtrace.map do |line|
|
67
|
+
case line
|
68
|
+
when /^\s+(.+):(\d+):in \`(.+)'/
|
69
|
+
Line.new($1, $2, $3)
|
70
|
+
when /^\s+(.+):(\d+)/
|
71
|
+
Line.new($1, $2, '')
|
72
|
+
when /^\s+$/
|
73
|
+
next
|
74
|
+
else
|
75
|
+
raise "huh?!"
|
76
|
+
end
|
77
|
+
end.compact
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
def color_backtrace_1(lines)
|
82
|
+
groups = lines.split_when { |line,nextline| line.path != nextline.path }
|
83
|
+
for group in groups
|
84
|
+
dir, filename = File.split(group.first.path)
|
85
|
+
puts "#{filename.green} (#{dir.light_white})"
|
86
|
+
# /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb
|
87
|
+
# 234: require | 553: new_constants_in |
|
88
|
+
group.each do |line|
|
89
|
+
puts " |_ #{line.num.magenta}: #{line.meth.light_yellow.underline}"
|
90
|
+
end
|
91
|
+
#puts " |_ " + group.map{|line| "#{line.num.magenta}: #{line.meth.light_yellow}"}.join(' | '.red)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
def color_backtrace_2(lines, options={})
|
98
|
+
|
99
|
+
groups = lines.reverse.split_when { |line,nextline| line.path != nextline.path }
|
100
|
+
|
101
|
+
if options[:no_gems]
|
102
|
+
groups = groups.split_when { |a, nexta| a.first.gem? != nexta.first.gem? }
|
103
|
+
groups.map! { |group| group.first.gem? ? [] : group }
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
for group in groups
|
108
|
+
if group.empty?
|
109
|
+
puts " ... ignored ... "
|
110
|
+
puts
|
111
|
+
next
|
112
|
+
end
|
113
|
+
|
114
|
+
firstline = group.first
|
115
|
+
|
116
|
+
# custom_require.rb (/usr/local/lib/site_ruby/1.8/rubygems)
|
117
|
+
# 234: require => super
|
118
|
+
# 553: new_constants_in =>
|
119
|
+
|
120
|
+
#puts "#{firstline.filename.green} (#{firstline.dir.light_white})"
|
121
|
+
puts "#{firstline.filename.underline} (#{firstline.dir.light_white})"
|
122
|
+
|
123
|
+
max_methsize = group.map { |line| line.meth.size}.max
|
124
|
+
group.each do |line|
|
125
|
+
pad = " " * (max_methsize - line.meth.size)
|
126
|
+
puts " #{line.num.magenta}: #{line.meth.light_yellow}#{pad}"
|
127
|
+
puts " #{"|_".blue} #{line.codeline.strip}"
|
128
|
+
end
|
129
|
+
puts
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
def python_backtrace(lines)
|
136
|
+
#groups = lines.reverse.split_when { |line,nextline| line.path != nextline.path }
|
137
|
+
lines = lines.reverse
|
138
|
+
|
139
|
+
puts "Traceback (most recent call last):"
|
140
|
+
|
141
|
+
for line in lines
|
142
|
+
puts %{ File "#{line.path}", line #{line.num}, in #{line.meth}}
|
143
|
+
puts %{ #{line.codeline.strip}}
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def debug_backtrace(lines)
|
148
|
+
lines.each do |line|
|
149
|
+
p line.path
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
if $0 == __FILE__
|
155
|
+
backtrace = %{
|
156
|
+
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/attribute_methods.rb:256:in `method_missing'
|
157
|
+
vendor/plugins/attribute_fu/lib/attribute_fu/associations.rb:28:in `method_missing'
|
158
|
+
app/helpers/admin/products_helper.rb:17:in `description_column'
|
159
|
+
vendor/plugins/active_scaffold/lib/helpers/list_column_helpers.rb:11:in `send'
|
160
|
+
vendor/plugins/active_scaffold/lib/helpers/list_column_helpers.rb:11:in `get_column_value'
|
161
|
+
vendor/plugins/active_scaffold/frontends/default/views/_list_record.rhtml:10:in `_run_erb_47vendor47plugins47active_scaffold47frontends47default47views47_list_record46rhtml'
|
162
|
+
vendor/plugins/active_scaffold/lib/data_structures/action_columns.rb:68:in `each'
|
163
|
+
vendor/plugins/active_scaffold/lib/data_structures/action_columns.rb:55:in `each'
|
164
|
+
vendor/plugins/active_scaffold/frontends/default/views/_list_record.rhtml:9:in `_run_erb_47vendor47plugins47active_scaffold47frontends47default47views47_list_record46rhtml'
|
165
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:338:in `send'
|
166
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:338:in `execute'
|
167
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_handlers/compilable.rb:29:in `send'
|
168
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_handlers/compilable.rb:29:in `render'
|
169
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partial_template.rb:20:in `render'
|
170
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:26:in `benchmark'
|
171
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/benchmark.rb:8:in `realtime'
|
172
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:26:in `benchmark'
|
173
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partial_template.rb:19:in `render'
|
174
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template.rb:22:in `render_template'
|
175
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partial_template.rb:28:in `render_member'
|
176
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partials.rb:142:in `render_partial_collection_with_known_partial_path'
|
177
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partials.rb:141:in `map'
|
178
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partials.rb:141:in `render_partial_collection_with_known_partial_path'
|
179
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partials.rb:135:in `render_partial_collection'
|
180
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:271:in `render_without_active_scaffold'
|
181
|
+
vendor/plugins/active_scaffold/lib/extensions/action_view_rendering.rb:55:in `render_without_haml'
|
182
|
+
/usr/lib/ruby/gems/1.8/gems/haml-2.0.2/lib/haml/helpers/action_view_mods.rb:6:in `render'
|
183
|
+
vendor/plugins/active_scaffold/frontends/default/views/_list.rhtml:21:in `_run_erb_47vendor47plugins47active_scaffold47frontends47default47views47_list46rhtml'
|
184
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:338:in `send'
|
185
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:338:in `execute'
|
186
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_handlers/compilable.rb:29:in `send'
|
187
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_handlers/compilable.rb:29:in `render'
|
188
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partial_template.rb:20:in `render'
|
189
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:26:in `benchmark'
|
190
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/benchmark.rb:8:in `realtime'
|
191
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:26:in `benchmark'
|
192
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partial_template.rb:19:in `render'
|
193
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template.rb:22:in `render_template'
|
194
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/partials.rb:110:in `render_partial'
|
195
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:273:in `render_without_active_scaffold'
|
196
|
+
vendor/plugins/active_scaffold/lib/extensions/action_view_rendering.rb:55:in `render_without_haml'
|
197
|
+
/usr/lib/ruby/gems/1.8/gems/haml-2.0.2/lib/haml/helpers/action_view_mods.rb:6:in `render'
|
198
|
+
vendor/plugins/active_scaffold/frontends/default/views/list.rhtml:9:in `_run_erb_47vendor47plugins47active_scaffold47frontends47default47views47list46rhtml'
|
199
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:338:in `send'
|
200
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:338:in `execute'
|
201
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_handlers/compilable.rb:29:in `send'
|
202
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_handlers/compilable.rb:29:in `render'
|
203
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template.rb:35:in `render'
|
204
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template.rb:22:in `render_template'
|
205
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:245:in `render_file'
|
206
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1108:in `render_for_file'
|
207
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:865:in `render_with_no_layout'
|
208
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:880:in `render_with_no_layout'
|
209
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/layout.rb:251:in `render_without_benchmark'
|
210
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:51:in `render_without_active_scaffold'
|
211
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/benchmark.rb:8:in `realtime'
|
212
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:51:in `render_without_active_scaffold'
|
213
|
+
vendor/plugins/active_scaffold/lib/extensions/action_controller_rendering.rb:13:in `render'
|
214
|
+
vendor/plugins/active_scaffold/lib/actions/list.rb:37:in `list'
|
215
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_responds.rb:131:in `call'
|
216
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_responds.rb:131:in `custom'
|
217
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_responds.rb:160:in `call'
|
218
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_responds.rb:160:in `respond'
|
219
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_responds.rb:154:in `each'
|
220
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_responds.rb:154:in `respond'
|
221
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_responds.rb:107:in `respond_to'
|
222
|
+
vendor/plugins/active_scaffold/lib/actions/list.rb:35:in `list'
|
223
|
+
vendor/plugins/active_scaffold/lib/actions/list.rb:8:in `index'
|
224
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in `send'
|
225
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in `perform_action_without_filters'
|
226
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:580:in `call_filters'
|
227
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:573:in `perform_action_without_benchmark'
|
228
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
|
229
|
+
/usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
|
230
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
|
231
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/rescue.rb:201:in `perform_action_without_caching'
|
232
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:13:in `perform_action'
|
233
|
+
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache'
|
234
|
+
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/query_cache.rb:8:in `cache'
|
235
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:12:in `perform_action'
|
236
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:529:in `send'
|
237
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:529:in `process_without_filters'
|
238
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:569:in `process_without_session_management_support'
|
239
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/session_management.rb:130:in `sass_old_process'
|
240
|
+
/usr/lib/ruby/gems/1.8/gems/haml-2.0.2/lib/sass/plugin/rails.rb:19:in `process'
|
241
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:389:in `process'
|
242
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:149:in `handle_request'
|
243
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:107:in `dispatch'
|
244
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:104:in `synchronize'
|
245
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:104:in `dispatch'
|
246
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:120:in `dispatch_cgi'
|
247
|
+
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:35:in `dispatch'
|
248
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:76:in `process'
|
249
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:74:in `synchronize'
|
250
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:74:in `process'
|
251
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:in `process_client'
|
252
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in `each'
|
253
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in `process_client'
|
254
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run'
|
255
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `initialize'
|
256
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `new'
|
257
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run'
|
258
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `initialize'
|
259
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `new'
|
260
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `run'
|
261
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:282:in `run'
|
262
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:281:in `each'
|
263
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:281:in `run'
|
264
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:128:in `run'
|
265
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/command.rb:212:in `run'
|
266
|
+
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281
|
267
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in `load'
|
268
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in `load'
|
269
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:354:in `new_constants_in'
|
270
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in `load'
|
271
|
+
/usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/commands/servers/mongrel.rb:64
|
272
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
|
273
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
|
274
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:509:in `require'
|
275
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:354:in `new_constants_in'
|
276
|
+
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:509:in `require'
|
277
|
+
/usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/commands/server.rb:39
|
278
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
|
279
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
|
280
|
+
script/server:3
|
281
|
+
}.split("\n").select{|line| line.any?}
|
282
|
+
|
283
|
+
lines = parse_lines(backtrace)
|
284
|
+
#debug_backtrace(lines)
|
285
|
+
#color_backtrace_1(lines)
|
286
|
+
#python_backtrace(lines)
|
287
|
+
color_backtrace_2(lines)#, :no_gems=>true)
|
288
|
+
end
|
289
|
+
|