rmtools 1.2.8.1 → 1.2.10b
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +5 -0
- data/Rakefile +1 -1
- data/lib/rmtools/console/coloring.rb +1 -1
- data/lib/rmtools/core/class.rb +1 -1
- data/lib/rmtools/dev/logging.rb +2 -1
- data/lib/rmtools/dev/trace_format.rb +15 -9
- data/lib/rmtools/dev/traceback.rb +2 -2
- data/lib/rmtools/lang/ansi.rb +5 -5
- data/lib/rmtools/lang/cyrillic.rb +21 -16
- data/lib/rmtools/text/regexp.rb +1 -1
- data/lib/rmtools/text/string_parse.rb +10 -5
- metadata +12 -10
data/README.txt
CHANGED
@@ -8,6 +8,11 @@ Methods for basic classes addon collection.
|
|
8
8
|
|
9
9
|
== CHANGES
|
10
10
|
|
11
|
+
== Version 1.2.10
|
12
|
+
|
13
|
+
* Update String#parse:caller to parse ruby 1.9 "block level". Now block level processes in RMLogger and RMTools.format_trace
|
14
|
+
* lib/dev/traceback.rb now applies to ruby > 1.9 as well
|
15
|
+
|
11
16
|
== Version 1.2.8
|
12
17
|
|
13
18
|
* StringScanner#each changed to compare `cbs' keys with @matched by number in ruby 1.8 and by first character in ruby 1.9, since ?x in 1.9 returns string instead of a charcode
|
data/Rakefile
CHANGED
data/lib/rmtools/core/class.rb
CHANGED
data/lib/rmtools/dev/logging.rb
CHANGED
@@ -107,7 +107,8 @@ module RMTools
|
|
107
107
|
out = now.strftime cfg.out if cfg.path_format
|
108
108
|
end
|
109
109
|
if caler
|
110
|
-
|
110
|
+
caler.sub!(/block (?:\((\d+) levels\) )?in/) {"{#{$1||1}}"}
|
111
|
+
str.gsub! "%caller", caler.sub(String::SIMPLE_CALLER_RE, cfg.cf)
|
111
112
|
end
|
112
113
|
str.gsub! "%text", text
|
113
114
|
str << "\n" if opts&INLINE==0
|
@@ -23,20 +23,26 @@ module RMTools
|
|
23
23
|
IgnoreFiles = %r{#{Regexp.escape $:.grep(%r{/ruby/1\.(8|9\.\d)$})[0]}/irb(/|\.rb$)|/active_support/dependencies.rb$}
|
24
24
|
|
25
25
|
def format_trace(a)
|
26
|
-
bt,
|
26
|
+
bt, steps, i = [], [], 0
|
27
27
|
m = a[0].parse:caller
|
28
|
-
m.line -= 1 if m.file =~ /\.haml$/
|
28
|
+
m.line -= 1 if m and m.file =~ /\.haml$/
|
29
29
|
while i < a.size
|
30
30
|
m2 = a[i+1] && a[i+1].parse(:caller)
|
31
31
|
m2.line -= 1 if m2 and m2.file =~ /\.haml$/
|
32
32
|
if !m or m.path =~ IgnoreFiles
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
nil
|
34
|
+
else
|
35
|
+
step = a[i]
|
36
|
+
if m.block_level # > 1.9
|
37
|
+
step = step.sub(/block (\(\d+ levels\) )?in/, '{'+m.block_level+'}')
|
38
|
+
end
|
39
|
+
if m and m.func and m2 and [m.path, m.line] == [m2.path, m2.line]
|
40
|
+
steps << " -> `#{'{'+m.block_level+'} ' if m.block_level}#{m.func}'"
|
41
|
+
elsif m and m.line != 0 and line = RMTools.highlighted_line(m.path, m.line)
|
42
|
+
bt << "#{step}#{steps.join}\n#{line}"
|
43
|
+
steps = []
|
44
|
+
else bt << step
|
45
|
+
end
|
40
46
|
end
|
41
47
|
i += 1
|
42
48
|
m = m2
|
@@ -3,7 +3,7 @@ RMTools::require 'dev/trace_format'
|
|
3
3
|
require 'active_support/core_ext/class/attribute'
|
4
4
|
|
5
5
|
# as for rmtools-1.1.0, 1.9 may hung up processing IO while generating traceback
|
6
|
-
if RUBY_VERSION < '1.9'
|
6
|
+
#if RUBY_VERSION < '1.9'
|
7
7
|
class Exception
|
8
8
|
alias :set_bt :set_backtrace
|
9
9
|
class_attribute :__trace_format
|
@@ -35,4 +35,4 @@ if RUBY_VERSION < '1.9'
|
|
35
35
|
class SystemStackError
|
36
36
|
trace_format false
|
37
37
|
end
|
38
|
-
end
|
38
|
+
#end
|
data/lib/rmtools/lang/ansi.rb
CHANGED
@@ -3,8 +3,6 @@ require 'iconv'
|
|
3
3
|
# Although ruby >= 1.9.3 would complain about not using String#encode, iconv is 2-4 times faster and still handles the ruby string encoding
|
4
4
|
|
5
5
|
module RMTools
|
6
|
-
ANSI2UTF = Iconv.new("UTF-8", "WINDOWS-1251").method :iconv
|
7
|
-
UTF2ANSI = Iconv.new("WINDOWS-1251", "UTF-8").method :iconv
|
8
6
|
|
9
7
|
module Cyrillic
|
10
8
|
RU_LETTERS = "абвгдеёжзийклмнопрстуфхцчшщьыъэюя", "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ"
|
@@ -17,17 +15,19 @@ module RMTools
|
|
17
15
|
end
|
18
16
|
end
|
19
17
|
|
18
|
+
ANSI2UTF = Cyrillic::ANSI2UTF = Iconv.new("UTF-8", "WINDOWS-1251").method(:iconv)
|
19
|
+
UTF2ANSI = Cyrillic::UTF2ANSI = Iconv.new("WINDOWS-1251", "UTF-8").method(:iconv)
|
20
|
+
ICONVS = {}
|
20
21
|
end
|
21
22
|
|
22
23
|
class String
|
23
24
|
|
24
|
-
# Actually, for short strings and 1251<->65001 it's much faster to use predefined ANSI2UTF and UTF2ANSI procs
|
25
25
|
def utf(from_encoding='WINDOWS-1251')
|
26
|
-
Iconv.new('UTF-8', from_encoding).iconv(self)
|
26
|
+
(ICONVS['UTF-8<'+from_encoding] ||= Iconv.new('UTF-8', from_encoding)).iconv(self)
|
27
27
|
end
|
28
28
|
|
29
29
|
def ansi(from_encoding='UTF-8')
|
30
|
-
Iconv.new('WINDOWS-1251', from_encoding).iconv(self)
|
30
|
+
(ICONVS['WINDOWS-1251<'+from_encoding] ||= Iconv.new('WINDOWS-1251', from_encoding)).iconv(self)
|
31
31
|
end
|
32
32
|
|
33
33
|
def utf!(from_encoding='WINDOWS-1251')
|
@@ -3,26 +3,26 @@ RMTools::require 'lang/ansi'
|
|
3
3
|
|
4
4
|
class String
|
5
5
|
include RMTools::Cyrillic
|
6
|
+
|
7
|
+
def swap
|
8
|
+
sub(/([a-zA-Z])|([А-пр-ёЁ])/) {|m| return $~[1]? en2ru: ru2en}
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
def caps?
|
13
|
+
self =~ /^[А-ЯЁ][А-ЯЁ\d ]+$/
|
14
|
+
end
|
15
|
+
|
16
|
+
def cyr?
|
17
|
+
self !~ /[^А-пр-ёЁ]/
|
18
|
+
end
|
19
|
+
|
20
|
+
if RUBY_VERSION > "1.9"
|
6
21
|
|
7
22
|
def translit
|
8
|
-
gsub(
|
9
|
-
end
|
10
|
-
|
11
|
-
def swap
|
12
|
-
sub(/([a-zA-Z])|([А-пр-ёЁ])/) {|m| return $~[1]? en2ru: ru2en}
|
13
|
-
self
|
23
|
+
gsub(/ё/i, 'yo').gsub(/й/i, 'y').gsub(/ц/i, 'c').gsub(/у/i, 'u').gsub(/к/i, 'k').gsub(/е/i, 'e').gsub(/н/i, 'n').gsub(/г/i, 'g').gsub(/ш/i, 'sh').gsub(/щ/i, 'sch').gsub(/з/i, 'z').gsub(/х/i, 'h').gsub(/[ьъ]/i, "'").gsub(/ф/i, 'f').gsub(/[иы]/i, 'i').gsub(/в/i, 'v').gsub(/а/i, 'a').gsub(/п/i, 'p').gsub(/р/i, 'r').gsub(/о/i, 'o').gsub(/л/i, 'l').gsub(/д/i, 'd').gsub(/ж/i, 'j').gsub(/э/i, 'e').gsub(/я/i, 'ya').gsub(/ч/i, 'ch').gsub(/с/i, 's').gsub(/м/i, 'm').gsub(/т/i, 't').gsub(/б/i, 'b').gsub(/ю/i, 'yu')
|
14
24
|
end
|
15
25
|
|
16
|
-
def caps?
|
17
|
-
self =~ /^[А-ЯЁ][А-ЯЁ\d ]+$/
|
18
|
-
end
|
19
|
-
|
20
|
-
def cyr?
|
21
|
-
self !~ /[^А-пр-ёЁ]/
|
22
|
-
end
|
23
|
-
|
24
|
-
if RUBY_VERSION > "1.9"
|
25
|
-
|
26
26
|
def ru2en
|
27
27
|
tr "ёйцукенгшщзхъфывапролдэячсмить/.ю?,б\"№;:жЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИВТЬБЮ", "`qwertyuiop[]asdfghjkl'zxcvbnm|/.&?,@\#$^;~QWERTYUIOP{}ASDFGHJKL:\"ZXCVBDNM<>"
|
28
28
|
end
|
@@ -61,7 +61,12 @@ class String
|
|
61
61
|
alias csqueeze squeeze
|
62
62
|
|
63
63
|
def ci; self end
|
64
|
+
|
64
65
|
else
|
66
|
+
|
67
|
+
def translit
|
68
|
+
gsub(/[ёЁ]/, 'yo').gsub(/[йЙ]/, 'y').gsub(/[цЦ]/, 'c').gsub(/[уУ]/, 'u').gsub(/[кК]/, 'k').gsub(/[еЕ]/, 'e').gsub(/[нН]/, 'n').gsub(/[гГ]/, 'g').gsub(/[шШ]/, 'sh').gsub(/[щЩ]/, 'sch').gsub(/[зЗ]/, 'z').gsub(/[хХ]/, 'h').gsub(/[ьЬъЪ]/, "'").gsub(/[фФ]/, 'f').gsub(/[иИыЫ]/, 'i').gsub(/[вВ]/, 'v').gsub(/[аА]/, 'a').gsub(/[пП]/, 'p').gsub(/[рР]/, 'r').gsub(/[оО]/, 'o').gsub(/[лЛ]/, 'l').gsub(/[дД]/, 'd').gsub(/[жЖ]/, 'j').gsub(/[эЭ]/, 'e').gsub(/[яЯ]/, 'ya').gsub(/[чЧ]/, 'ch').gsub(/[сС]/, 's').gsub(/[мМ]/, 'm').gsub(/[тТ]/, 't').gsub(/[бБ]/, 'b').gsub(/[юЮ]/, 'yu')
|
69
|
+
end
|
65
70
|
|
66
71
|
def csize
|
67
72
|
UTF2ANSI[self].size
|
data/lib/rmtools/text/regexp.rb
CHANGED
@@ -4,7 +4,11 @@ RMTools::require 'conversions/string'
|
|
4
4
|
class String
|
5
5
|
CALLER_RE = %r{^(.*?([^/\\]+?))#{ # ( path ( file ) )
|
6
6
|
}:(\d+)(?::in #{ # :( line )[ :in
|
7
|
-
}
|
7
|
+
}`(block (?:\((\d+) levels\) )?in )?(.+?)'#{ # `[ block in ] ( closure )' ]
|
8
|
+
})?$}
|
9
|
+
SIMPLE_CALLER_RE = %r{^(.*?([^/\\]+?))#{ # ( path ( file ) )
|
10
|
+
}:(\d+)(?::in #{ # :( line )[ :in
|
11
|
+
}`(.+?)'#{ # `( closure )' ]
|
8
12
|
})?$}
|
9
13
|
URL_RE = %r{^((?:([^:]+)://)#{ # ( protocol
|
10
14
|
}([^/:]*(?::(\d+))?))?#{ # root[:port] )
|
@@ -38,10 +42,11 @@ class String
|
|
38
42
|
{ 'path' => m[1],
|
39
43
|
'file' => m[2],
|
40
44
|
'line' => m[3].to_i,
|
41
|
-
'
|
42
|
-
'
|
43
|
-
|
44
|
-
|
45
|
+
'block_level' => m[4] && (m[5] || 1).to_i, # > 1.9
|
46
|
+
'func' => m[6],
|
47
|
+
'fullpath' => m[1] =~ /[\(\[]/ ?
|
48
|
+
m[1] :
|
49
|
+
File.expand_path(m[1]) }
|
45
50
|
when :ip; self[IP_RE]
|
46
51
|
when :ip_range; (m = match IP_RANGE_RE) && m[1]..m[2]
|
47
52
|
else raise ArgumentError, "Incorrect flag. Correct flags: :uri, :caller, :ip, :ip_range"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmtools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 3
|
5
|
+
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
-
|
11
|
-
version: 1.2.
|
9
|
+
- 10
|
10
|
+
- b
|
11
|
+
version: 1.2.10b
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Sergey Baev
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-
|
19
|
+
date: 2012-08-01 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: rake
|
@@ -195,12 +195,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
195
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
196
|
none: false
|
197
197
|
requirements:
|
198
|
-
- - "
|
198
|
+
- - ">"
|
199
199
|
- !ruby/object:Gem::Version
|
200
|
-
hash:
|
200
|
+
hash: 25
|
201
201
|
segments:
|
202
|
-
-
|
203
|
-
|
202
|
+
- 1
|
203
|
+
- 3
|
204
|
+
- 1
|
205
|
+
version: 1.3.1
|
204
206
|
requirements: []
|
205
207
|
|
206
208
|
rubyforge_project: rmtools
|