rdoba 0.9.1 → 0.9.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.
- checksums.yaml +7 -7
- data/.gitignore +4 -0
- data/.travis.yml +28 -0
- data/CHANGES.md +6 -0
- data/Gemfile +5 -0
- data/README.md +87 -108
- data/Rakefile +62 -54
- data/TODO +6 -0
- data/features/mixin.feature +85 -0
- data/features/step_definitions/mixin_steps.rb +305 -0
- data/features/support/env.rb +35 -145
- data/features/support/mixin_support.rb +17 -0
- data/html/.keep +0 -0
- data/lib/rdoba/_version_.rb +3 -1
- data/lib/rdoba/a.rb +44 -42
- data/lib/rdoba/bcd.rb +43 -26
- data/lib/rdoba/blank.rb +14 -0
- data/lib/rdoba/combinations.rb +17 -15
- data/lib/rdoba/common.rb +53 -68
- data/lib/rdoba/debug.rb +9 -3
- data/lib/rdoba/deploy.rb +55 -50
- data/lib/rdoba/dup.rb +31 -31
- data/lib/rdoba/fe.rb +6 -5
- data/lib/rdoba/gem.rb +33 -29
- data/lib/rdoba/hashorder.rb +24 -24
- data/lib/rdoba/io.rb +81 -74
- data/lib/rdoba/merge.rb +21 -0
- data/lib/rdoba/mixin/time.rb +17 -0
- data/lib/rdoba/mixin/try.rb +11 -0
- data/lib/rdoba/mixin/try_1_9_0.rb +9 -0
- data/lib/rdoba/mixin/wait_if.rb +27 -0
- data/lib/rdoba/mixin.rb +373 -52
- data/lib/rdoba/numeric.rb +19 -17
- data/lib/rdoba/os.rb +127 -0
- data/lib/rdoba/re.rb +4 -4
- data/lib/rdoba/require.rb +24 -19
- data/lib/rdoba/roman.rb +32 -22
- data/lib/rdoba/strings.rb +6 -144
- data/lib/rdoba/yaml.rb +20 -18
- data/lib/rdoba.rb +50 -47
- data/rdoba.gemspec +33 -26
- data/tddium.yml +11 -0
- metadata +184 -77
- data/features/bcd.feature +0 -29
- data/features/log.feature +0 -206
- data/features/step_definitions/bcd_steps.rb +0 -69
- data/features/step_definitions/log_steps.rb +0 -164
- data/lib/rdoba/log.rb +0 -248
- data/test/helper.rb +0 -18
- data/test/rdoba_test.rb.stub +0 -59
- data/test/test_rdoba.rb +0 -7
@@ -1,164 +0,0 @@
|
|
1
|
-
When /appl(?:y|ied) Rdoba (Log|Debug) module(?: with set([\w\s,:]+ keywords?| a file name) for :(io|as|in|functions|prefix) option| with an (invalid) :io option value)?(?: inside a (class))?/ do |kind, subs, opt, invalid, cls|
|
2
|
-
rdoba_sim kind.downcase.to_sym, :init, opt, subs, cls
|
3
|
-
end
|
4
|
-
|
5
|
-
When /issue a call to the function/ do
|
6
|
-
rdoba_sim :log, :call
|
7
|
-
end
|
8
|
-
|
9
|
-
When /issue a creation of the class/ do
|
10
|
-
rdoba_sim :log, :create
|
11
|
-
end
|
12
|
-
|
13
|
-
When /(issue|define) an output of an? (variable|number|string|array)(?: inside an? (initializer|singleton function))?(?: using (?:the|an?) (keyword|invalid keyword|class))?/ do |issue, subject, inside, cond|
|
14
|
-
|
15
|
-
case inside
|
16
|
-
when 'initializer'
|
17
|
-
rdoba_sim :log, :def, :init
|
18
|
-
when 'singleton function'
|
19
|
-
rdoba_sim :log, :def, :single ; end
|
20
|
-
|
21
|
-
func = :func
|
22
|
-
case subject
|
23
|
-
when 'variable'
|
24
|
-
rdoba_sim :log, func, cond, :>, { variable: 'value' }
|
25
|
-
when 'number'
|
26
|
-
rdoba_sim :log, func, cond, :>, 1
|
27
|
-
when 'string'
|
28
|
-
rdoba_sim :log, func, cond, :>, "string"
|
29
|
-
when 'array'
|
30
|
-
rdoba_sim :log, func, cond, :>, [ 'array value1', 'array value2' ] ; end ; end
|
31
|
-
|
32
|
-
When /issue an? :(extended|info|warn|enter|leave|compat) output of a variable/ do |key|
|
33
|
-
case key
|
34
|
-
when 'extended'
|
35
|
-
rdoba_sim :log, :func, :self, :>>, { variable: 'value' }
|
36
|
-
when 'info'
|
37
|
-
rdoba_sim :log, :func, :self, :*, { variable: 'value' }
|
38
|
-
when 'warn'
|
39
|
-
rdoba_sim :log, :func, :self, :%, { variable: 'value' }
|
40
|
-
when 'enter'
|
41
|
-
rdoba_sim :log, :func, :self, :+, { variable: 'value' }
|
42
|
-
when 'leave'
|
43
|
-
rdoba_sim :log, :func, :self, :-, true # TODO check return
|
44
|
-
when 'compat'
|
45
|
-
rdoba_sim :log, :func, :dbp11, "'variable: \"value\"'" ; end ; end
|
46
|
-
|
47
|
-
When /issue an output of the thrown (exception|standard error)(.*)/ do |type, note|
|
48
|
-
case type
|
49
|
-
when 'exception'
|
50
|
-
if note =~ /out/
|
51
|
-
rdoba_sim :log, :func, :self, :e, :'Exception.new', :$stdout
|
52
|
-
else
|
53
|
-
rdoba_sim :log, :func, :self, :e, :'Exception.new' ; end
|
54
|
-
when 'standard error'
|
55
|
-
if note =~ /notification/
|
56
|
-
rdoba_sim :log, :func, :self, :e, :'StandardError.new',
|
57
|
-
[ 'standard error extended info' ]
|
58
|
-
else
|
59
|
-
rdoba_sim :log, :func, :self, :e, :'StandardError.new' ; end ; end ; end
|
60
|
-
|
61
|
-
When /look into(?: the)? (stdout|stderr|file|IO)/ do |ioname|
|
62
|
-
@res = case ioname
|
63
|
-
when 'file'
|
64
|
-
rdoba_sim :log, :exec, :file
|
65
|
-
when 'IO'
|
66
|
-
rdoba_sim :log, :exec, :io
|
67
|
-
when 'stdout'
|
68
|
-
rdoba_sim :log, :exec, :stdout
|
69
|
-
when 'stderr'
|
70
|
-
rdoba_sim :log, :exec, :stderr; end ; end
|
71
|
-
|
72
|
-
When /(remove|add) :(basic|extended|info|warn|enter|leave|compat) keyword.* :(functions) option/ do |act, key, opt|
|
73
|
-
if act == 'remove'
|
74
|
-
rdoba_sim :log, :func, :self, :>=, [ key.to_sym ]
|
75
|
-
else
|
76
|
-
rdoba_sim :log, :func, :self, :<=, [ key.to_sym ] ; end ; end
|
77
|
-
|
78
|
-
When /clear the :(functions) option/ do |opt|
|
79
|
-
rdoba_sim :log, :func, :self, :>=, [ :* ]
|
80
|
-
end
|
81
|
-
|
82
|
-
Then /see the (variable|string|number|array|'true' value) output(?: with the :(basic|extended|info|warn|enter|leave) notice)?(?: preficed with the :(.*))?/ do |subject, notice, prefices|
|
83
|
-
case subject
|
84
|
-
when 'variable'
|
85
|
-
sym = notice && { 'basic' => '>', 'extended' => '>>', 'info' => '***',
|
86
|
-
'warn' => '%%%', 'enter' => '<<<', 'leave' => '>>>' }[ notice ] || '>'
|
87
|
-
symr = sym.to_s.gsub ( '*' ) do |x| "\\#{x}" end
|
88
|
-
prefices = match_keywords prefices
|
89
|
-
if prefices.empty?
|
90
|
-
if @res !~ /variable: "value"/
|
91
|
-
raise "Invalid answer: #{@res}, must be \"variable: \"value\"" ; end
|
92
|
-
else
|
93
|
-
case prefices
|
94
|
-
when [:timestamp]
|
95
|
-
if @res !~ /\[\d\d:\d\d:\d\d\.\d{9}\]#{symr} variable: "value"/
|
96
|
-
raise "Invalid answer: #{@res.chomp}, must be like " +
|
97
|
-
"[00:00:00.000000000]#{sym} variable: \"value\"" ; end
|
98
|
-
when [:timestamp, :pid]
|
99
|
-
if @res !~ /\[\d\d:\d\d:\d\d\.\d{9}\]\{\d+\}#{symr} variable: "value"/
|
100
|
-
raise "Invalid answer: #{@res.chomp}, must be like " +
|
101
|
-
"[00:00:00.000000000]{0000}#{sym} variable: \"value\"" ; end
|
102
|
-
when [:timestamp, :pid, :function_name]
|
103
|
-
if @res !~ /\[\d\d:\d\d:\d\d\.\d{9}\]\{\d+\}\(.+\)#{symr} variable: "value"/
|
104
|
-
raise "Invalid answer: #{@res.chomp}, must be like " +
|
105
|
-
"[00:00:00.000000000]{0000}(name)#{sym} variable: \"value\"" ; end
|
106
|
-
when [:timestamp, :pid, :function_name, :function_line]
|
107
|
-
if @res !~ /\[\d\d:\d\d:\d\d\.\d{9}\]\{\d+\}\([^:]+:\d+\)#{symr} variable: "value"/
|
108
|
-
raise "Invalid answer: #{@res.chomp}, must be like " +
|
109
|
-
"[00:00:00.000000000]{0000}(name:0)#{sym} variable: \"value\"" ; end
|
110
|
-
else
|
111
|
-
raise "Invalid answer: #{@res}"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
when 'string'
|
115
|
-
if @res !~ /string/
|
116
|
-
raise "Invalid answer: #{@res}, must be \"string\"" ; end
|
117
|
-
when 'number'
|
118
|
-
if @res !~ /1/
|
119
|
-
raise "Invalid answer: #{@res.inspect}, must be \"1\"" ; end
|
120
|
-
when "'true' value"
|
121
|
-
if @res !~ /true/
|
122
|
-
raise "Invalid answer: #{@res.inspect}, must be \"true\"" ; end
|
123
|
-
when 'array'
|
124
|
-
if @res !~ /array value1, array value2/
|
125
|
-
raise "Invalid answer: #{@res.inspect}, must be an enum: \"array value1, array value2\"" ; end ; end ; end
|
126
|
-
|
127
|
-
Then /see the (standard error|exception) info(.*)/ do |subject, notice|
|
128
|
-
case subject
|
129
|
-
when 'exception'
|
130
|
-
if @res !~/Exception:%> Exception/
|
131
|
-
raise "Invalid answer: #{@res.inspect}, must be like " +
|
132
|
-
"'Exception:%> Exception'" ; end
|
133
|
-
when 'standard error'
|
134
|
-
if notice =~ /notification/
|
135
|
-
if @res !~ /StandardError:%> StandardError\n\tstandard error extended info/
|
136
|
-
raise "Invalid answer: #{@res.inspect}, must be like " +
|
137
|
-
"'StandardError:%> StandardError\n\tstandard error " +
|
138
|
-
"extended info'" ; end
|
139
|
-
else
|
140
|
-
if @res !~ /StandardError:%> StandardError/
|
141
|
-
raise "Invalid answer: #{@res.inspect}, must be like " +
|
142
|
-
"'StandardError:%> StandardError'" ; end ; end ; end ; end
|
143
|
-
|
144
|
-
Then /see(?: a| the)? (nothing|warning|.* error exception)/ do |subject|
|
145
|
-
case subject
|
146
|
-
when 'nothing'
|
147
|
-
if !@res.empty?
|
148
|
-
raise "Invalid answer: #{@res.inspect}, must be empty" ; end
|
149
|
-
when 'warning'
|
150
|
-
if @res !~ /Warning:/
|
151
|
-
raise "Invalid answer: #{@res.inspect}, must be a warning " +
|
152
|
-
"with the description" ; end
|
153
|
-
'log\': main is not a class/module (TypeError)'
|
154
|
-
when /no method error/
|
155
|
-
if @res !~ /undefined method .* \(NoMethodError\)/
|
156
|
-
raise "Invalid answer: #{@res.inspect}, must notify" +
|
157
|
-
" that the interpreter has not found the specified method" ; end
|
158
|
-
when /name error/
|
159
|
-
if @res !~ /undefined local variable or method .* \(NameError\)/
|
160
|
-
raise "Invalid answer: #{@res.inspect}, must notify" +
|
161
|
-
" that the the specified name isn't declared" ; end
|
162
|
-
else
|
163
|
-
raise "Invalid answer: #{@res.inspect}" ; end ; end
|
164
|
-
|
data/lib/rdoba/log.rb
DELETED
@@ -1,248 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Rdoba
|
4
|
-
def self.log options = {}
|
5
|
-
# options: {
|
6
|
-
# :as - name of method to apply the log functions, default: self
|
7
|
-
# :in - name of class or namespace to implement to the log, default: Kernel
|
8
|
-
# :functions = [
|
9
|
-
# :basic
|
10
|
-
# :warn
|
11
|
-
# :info
|
12
|
-
# :enter
|
13
|
-
# :leave
|
14
|
-
# :extended
|
15
|
-
# :compat - enable old style log strings dbgXX
|
16
|
-
# ]
|
17
|
-
# :prefix = [
|
18
|
-
# :timestamp
|
19
|
-
# :pid
|
20
|
-
# :function_name
|
21
|
-
# :function_line
|
22
|
-
# ]
|
23
|
-
# :io - An IO object to send log output to, default is $stdout
|
24
|
-
# }
|
25
|
-
# if empty the default value (enter, leave) is applied
|
26
|
-
# format of log message is the following:
|
27
|
-
# [<timestamp>]{pid}(<function name>)<log type> <debug text>"
|
28
|
-
# TODO add enum of options hash to convert values to symbols
|
29
|
-
# TODO make common format, and format for each of methods >, >>, +, -, %, *
|
30
|
-
# TODO add syntax redefinition ability for the methods >, >>, +, -, %, *
|
31
|
-
# TODO add multiple output (to more than only the IO)
|
32
|
-
|
33
|
-
# options[ :io ] = File.new('txt.log','w+')
|
34
|
-
# STDERR.puts options.inspect
|
35
|
-
# STDERR.puts options[ :io ].method( :puts ).inspect
|
36
|
-
# options.map
|
37
|
-
funcname = ( options[ :as ] || :self ).to_s.to_sym
|
38
|
-
pfx = ';if true;(Rdoba::Log::log @@rdoba_log_io_method,"' #TODO remove if
|
39
|
-
io = options[ :io ] || $stdout
|
40
|
-
io_m = io.method :puts
|
41
|
-
if prefix = ( options[ :prefix ].is_a?( Array ) && options[ :prefix ] ||
|
42
|
-
[ options[ :prefix ] ] )
|
43
|
-
if prefix.include?( :timestamp )
|
44
|
-
pfx << '[#{Time.now.strftime( "%H:%M:%S.%N" )}]'; end
|
45
|
-
if prefix.include?( :pid )
|
46
|
-
pfx << '{#{Process.pid}}'; end
|
47
|
-
if prefix.include?( :function_name )
|
48
|
-
if prefix.include?( :function_line )
|
49
|
-
pfx << '(#{m,f,l=get_stack_function_data_at_level(2);f+":"+l})'
|
50
|
-
else
|
51
|
-
pfx << '(#{get_stack_function_data_at_level(2)[1]})'; end ; end ; end
|
52
|
-
|
53
|
-
target = options[ :in ] || Kernel
|
54
|
-
# STDERR.puts "self: #{self.to_s}"
|
55
|
-
# STDERR.puts "funcname: #{funcname.inspect}"
|
56
|
-
# STDERR.puts "target: #{target.inspect}"
|
57
|
-
|
58
|
-
initfunc = Proc.new do
|
59
|
-
self.class_variable_set :@@rdoba_log_prefix, pfx
|
60
|
-
self.class_variable_set :@@rdoba_log_io_method, io_m
|
61
|
-
extend Rdoba::Log::ClassFunctions
|
62
|
-
include Rdoba::Log::Functions
|
63
|
-
self <= options[ :functions ] ; end
|
64
|
-
|
65
|
-
if funcname == :self
|
66
|
-
if target.to_s != 'main'
|
67
|
-
# CASE: class Cls; def method; self > end; end
|
68
|
-
target.instance_eval &initfunc ; end
|
69
|
-
# CASE: main { self > }
|
70
|
-
# CASE: class Cls; self > end
|
71
|
-
target.class.instance_eval &initfunc
|
72
|
-
else
|
73
|
-
host = ( target.to_s == 'main' && Kernel || target ) ## TODO check and remove
|
74
|
-
if target.to_s != 'main'
|
75
|
-
# CASE: class Cls; log > end
|
76
|
-
target.class.class_eval "class RdobaDebug;end"
|
77
|
-
target.class.send :class_eval, "def #{funcname};@#{funcname}||=RdobaDebug.new;end"
|
78
|
-
target.class::RdobaDebug.class_eval &initfunc ; end
|
79
|
-
# CASE: main { log > }
|
80
|
-
# CASE: class Cls; def method; log > end; end
|
81
|
-
host.class_eval "class RdobaDebug;end"
|
82
|
-
host.send :class_eval, "def #{funcname};@#{funcname}||=RdobaDebug.new;end"
|
83
|
-
host::RdobaDebug.class_eval &initfunc ; end
|
84
|
-
|
85
|
-
# STDERR.puts 2
|
86
|
-
# STDERR.puts target.inspect
|
87
|
-
# STDERR.puts target.class.methods.sort.inspect
|
88
|
-
=begin
|
89
|
-
target.class.instance_eval do # main { self > }
|
90
|
-
# target.class_eval do # main { log > }
|
91
|
-
self.class_variable_set( :@@log_prefix, pfx )
|
92
|
-
self.class_variable_set( :@@log_io_method, io_m )
|
93
|
-
extend Rdoba::Log::ClassFunctions
|
94
|
-
include Rdoba::Log::Functions
|
95
|
-
STDERR.puts pfx
|
96
|
-
STDERR.puts io_m.inspect
|
97
|
-
self <= functions; end;
|
98
|
-
=end
|
99
|
-
end; end
|
100
|
-
|
101
|
-
module Rdoba
|
102
|
-
module Log
|
103
|
-
class Error < StandardError
|
104
|
-
def initialize options = {}
|
105
|
-
case options
|
106
|
-
when :compat
|
107
|
-
"Debug compatibility mode can't be enabled for " +
|
108
|
-
"the specified object"
|
109
|
-
when :main
|
110
|
-
"An :as option can't be default or set to 'self' value for " +
|
111
|
-
"a main application. Please set up it correctly"; end; end; end
|
112
|
-
|
113
|
-
module Functions
|
114
|
-
def <= functions = []
|
115
|
-
self.class <= functions; end
|
116
|
-
|
117
|
-
def >= functions = []
|
118
|
-
self.class >= functions; end
|
119
|
-
|
120
|
-
def e *args
|
121
|
-
io = case args.last
|
122
|
-
when IO
|
123
|
-
args.pop
|
124
|
-
else
|
125
|
-
$stderr ; end
|
126
|
-
e = $! || args.shift
|
127
|
-
dump = ( [ $@ || args.shift ] + args ).flatten.compact
|
128
|
-
io.send :puts, "#{e.class}:%> #{e}\n\t#{dump.join("\n\t")}"; end
|
129
|
-
|
130
|
-
def get_stack_function_data_at_level( level )
|
131
|
-
raise Exception
|
132
|
-
rescue Exception
|
133
|
-
#TODO check match a method containing '`'
|
134
|
-
$@[ level ] =~ /([^\/]+):(\d+):in `(.*?)'$/
|
135
|
-
[ $1, $3, $2 ]; end; end
|
136
|
-
|
137
|
-
module ClassFunctions
|
138
|
-
def <= functions
|
139
|
-
functions = Rdoba::Log::update_functions functions, self, :+
|
140
|
-
pfx = self.class_variable_get :@@rdoba_log_prefix
|
141
|
-
code = Rdoba::Log::make_code functions, pfx, self
|
142
|
-
self.class_eval code; end
|
143
|
-
|
144
|
-
def >= functions # TODO make check for instance log, not only for class
|
145
|
-
functions = Rdoba::Log::update_functions functions, self, :-
|
146
|
-
pfx = self.class_variable_get :@@rdoba_log_prefix
|
147
|
-
code = Rdoba::Log::make_code functions, pfx, self
|
148
|
-
self.class_eval code; end; end
|
149
|
-
|
150
|
-
def self.update_functions functions, obj, method
|
151
|
-
if functions.is_a?( Array ) && functions.include?( :* )
|
152
|
-
functions = [ :basic, :enter, :leave, :warn, :info, :extended, :compat ]
|
153
|
-
end
|
154
|
-
cf = begin
|
155
|
-
obj.class_variable_get :@@rdoba_log_functions
|
156
|
-
rescue NameError
|
157
|
-
[] ; end
|
158
|
-
functions = cf.send( method, functions.is_a?( Array ) && functions ||
|
159
|
-
functions.is_a?( NilClass) && [] || [ functions.to_s.to_sym ] )
|
160
|
-
obj.class_variable_set :@@rdoba_log_functions, functions
|
161
|
-
functions
|
162
|
-
end
|
163
|
-
|
164
|
-
def self.make_code functions, pfx, obj
|
165
|
-
code = ''
|
166
|
-
psfx = ' ",params);end;end;'
|
167
|
-
if functions.include?( :enter )
|
168
|
-
code << 'def + *params' + pfx + '<<<' + psfx
|
169
|
-
else
|
170
|
-
code << 'def + *params;end;'; end
|
171
|
-
if functions.include?( :leave )
|
172
|
-
code << 'def - ev' + pfx + '>>> ",[[ev.inspect]]);end;ev;end;'
|
173
|
-
else
|
174
|
-
code << 'def - ev;ev;end;'; end
|
175
|
-
if functions.include?( :basic )
|
176
|
-
code << "def > *params#{pfx}>#{psfx}"
|
177
|
-
else
|
178
|
-
code << 'def > *params;end;'; end
|
179
|
-
if functions.include?( :extended )
|
180
|
-
code << 'def >> *params' + pfx + '>>' + psfx
|
181
|
-
else
|
182
|
-
code << 'def >> *params;end;'; end
|
183
|
-
if functions.include?( :warn )
|
184
|
-
code << "def % *params#{pfx}%%%#{psfx}"
|
185
|
-
else
|
186
|
-
code << 'def % *params;end;'; end
|
187
|
-
if functions.include?( :info )
|
188
|
-
code << "def * *params#{pfx}***#{psfx}"
|
189
|
-
else
|
190
|
-
code << 'def * *params;end;'; end
|
191
|
-
if functions.include?( :compat )
|
192
|
-
obj.send :include, Rdoba::Log::DebugCompat
|
193
|
-
code << "$dbgl_#{self.class}=0;"
|
194
|
-
(1..0xF).each do |x|
|
195
|
-
(1..0xF).each do |y|
|
196
|
-
idx = sprintf "%x%x", x, y
|
197
|
-
code << "def dbp#{idx}(text); dbp(0x#{idx},text); end;"
|
198
|
-
code << "def dbg#{idx}(text); dbg(0x#{idx},text); end;"; end; end; end
|
199
|
-
code; end
|
200
|
-
|
201
|
-
def self.log io_m, prefix, params
|
202
|
-
text = prefix
|
203
|
-
text << params.map do |prm|
|
204
|
-
case prm
|
205
|
-
when Hash
|
206
|
-
r = []
|
207
|
-
prm.each do |key, value| r << "#{key}: #{value.inspect}" end
|
208
|
-
r.join(", ")
|
209
|
-
when Array
|
210
|
-
prm.join(', ')
|
211
|
-
when String
|
212
|
-
prm
|
213
|
-
else
|
214
|
-
prm.inspect
|
215
|
-
end
|
216
|
-
end.join(', ')
|
217
|
-
# NOTE: the shell over text id requires to proper output
|
218
|
-
# in multiprocess environment
|
219
|
-
io_m.call "#{text}\n"; end
|
220
|
-
|
221
|
-
module DebugCompat
|
222
|
-
def dbgl
|
223
|
-
@dbgl; end
|
224
|
-
|
225
|
-
def dbgl= level
|
226
|
-
@dbgl = level; end
|
227
|
-
|
228
|
-
def dbc level
|
229
|
-
level = level.to_i
|
230
|
-
if level > 0
|
231
|
-
clevel = @dbgl || begin
|
232
|
-
eval "$dbgl_#{self.class}"
|
233
|
-
rescue
|
234
|
-
nil; end
|
235
|
-
clevel || ( clevel.to_i & level ) == level
|
236
|
-
else
|
237
|
-
false; end; end
|
238
|
-
|
239
|
-
def dbp level, text
|
240
|
-
if dbc level
|
241
|
-
Kernel.puts text; end; end
|
242
|
-
|
243
|
-
def dbg level, code, vars = {}
|
244
|
-
if dbc level
|
245
|
-
if vars
|
246
|
-
vars.each_pair do |var, value|
|
247
|
-
instance_variable_set( var, value ); end; end
|
248
|
-
eval code; end; end; end ;end; end
|
data/test/helper.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bundler'
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require 'test/unit'
|
11
|
-
require 'shoulda'
|
12
|
-
|
13
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
-
require 'rdoba'
|
16
|
-
|
17
|
-
class Test::Unit::TestCase
|
18
|
-
end
|
data/test/rdoba_test.rb.stub
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -KU
|
2
|
-
|
3
|
-
if $0 == __FILE__
|
4
|
-
s = 'АцWуУуqцууууЦ+-* | »«1«2+121»'
|
5
|
-
k = s.ord
|
6
|
-
p s
|
7
|
-
p s.downcase
|
8
|
-
p s.downcase(String::FirstChar)
|
9
|
-
p s.upcase
|
10
|
-
p s.upcase(String::FirstChar)
|
11
|
-
p s.to_res
|
12
|
-
[1,2,3,4,5].each_comby do |c|
|
13
|
-
p c
|
14
|
-
end
|
15
|
-
|
16
|
-
len = 4
|
17
|
-
value = 100
|
18
|
-
p sprintf("%.*X", len, value )
|
19
|
-
|
20
|
-
s = ' 1221 eeee 4564 wwww ' + 258.to_p
|
21
|
-
ppp = s.scanf(' %d %s %d %s %.2+c')
|
22
|
-
p ppp
|
23
|
-
p 258.to_p.to_i(String::BE)
|
24
|
-
lll = 3
|
25
|
-
lll.debug = 1
|
26
|
-
lll.dbgF2("puts(1)")
|
27
|
-
lll.debug = 0x2
|
28
|
-
lll.dbgF2("puts(2)")
|
29
|
-
lll.debug = 0xF3
|
30
|
-
lll.dbgF2("puts(3)")
|
31
|
-
lll.debug = 0xF2
|
32
|
-
lll.dbpF2("4")
|
33
|
-
|
34
|
-
null = nil
|
35
|
-
p null.class, null
|
36
|
-
null <<= 'qweqweqweqwe'
|
37
|
-
p null.class, null
|
38
|
-
null << 'qweqweqweqwe'
|
39
|
-
p null.class, null
|
40
|
-
i = 12
|
41
|
-
p sprintf("0x%X", i)
|
42
|
-
p sprintf("%.3X", i)
|
43
|
-
|
44
|
-
p '----------'
|
45
|
-
|
46
|
-
str = <<STR
|
47
|
-
<font size="4" face="Irmologion Ucs">и3зhде
|
48
|
-
повелёніе t кeсарz ѓvгуста, написaти всю2
|
49
|
-
вселeнную</font>
|
50
|
-
STR
|
51
|
-
|
52
|
-
|
53
|
-
str = '/font><font size="4">III</font><i> </i>греч.<font size="4"><i></i> </font><font size="4" face="Irmologion Ucs">Мёсzца ѓvгуста въ Gi-й дeнь. Слyжба с™и1телю и3 чудотв0рцу тЂхwну, є3пcкпу вор0нежскому.</font>13 августа, Тихона Воронежского, заголовок службы m_aug\13p.hip'
|
54
|
-
re = /<font size="4" face="Irmologion Ucs">([ -"'-\?A-BD-HJ-\[\]`-hj-\}¤¦-§©«-®±µ-·»Ё-ЌЎ-яё-ќў-џҐ-ґ–-—‘-‚“-„†-•…‰‹-›€№™∙]+?)<\/font>/
|
55
|
-
|
56
|
-
p(str.match re)
|
57
|
-
end
|
58
|
-
|
59
|
-
|