rmtools 1.2.8.1 → 1.2.10b
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.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
|