mpatch 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +92 -42
- data/VERSION +1 -1
- data/examples/test.rb +6 -3
- data/lib/mpatch/all.rb +7 -0
- data/lib/mpatch/array.rb +123 -115
- data/lib/mpatch/class.rb +75 -66
- data/lib/mpatch/hash.rb +100 -91
- data/lib/mpatch/injector.rb +62 -0
- data/lib/mpatch/integer.rb +15 -7
- data/lib/mpatch/module.rb +56 -45
- data/lib/mpatch/object.rb +127 -118
- data/lib/mpatch/proc.rb +19 -10
- data/lib/mpatch/process.rb +18 -9
- data/lib/mpatch/random.rb +34 -25
- data/lib/mpatch/string.rb +73 -64
- data/lib/mpatch/yml.rb +14 -7
- data/lib/mpatch.rb +1 -44
- metadata +4 -2
data/lib/mpatch/object.rb
CHANGED
@@ -1,166 +1,175 @@
|
|
1
|
-
module MPatch
|
2
|
-
module Object
|
1
|
+
module MPatch
|
3
2
|
|
4
|
-
|
5
|
-
!!self == self
|
6
|
-
end
|
3
|
+
module Include
|
7
4
|
|
8
|
-
|
9
|
-
self == true
|
10
|
-
end
|
5
|
+
module Object
|
11
6
|
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
def boolean?
|
8
|
+
!!self == self
|
9
|
+
end
|
15
10
|
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
def true?
|
12
|
+
self == true
|
13
|
+
end
|
19
14
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
def false?
|
16
|
+
self == false
|
17
|
+
end
|
18
|
+
|
19
|
+
def class?
|
20
|
+
self.class == ::Class
|
21
|
+
end
|
22
|
+
|
23
|
+
# basic validations for those who fear the DUCK!
|
24
|
+
def must_be class_name
|
25
|
+
if class_name.class == ::Class
|
26
|
+
begin
|
27
|
+
if self.class != class_name
|
28
|
+
raise ::ArgumentError, "invalid parameter given: #{self}"
|
29
|
+
end
|
26
30
|
end
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
else
|
32
|
+
begin
|
33
|
+
if self != class_name
|
34
|
+
raise ::ArgumentError, "invalid parameter given: #{self}"
|
35
|
+
end
|
32
36
|
end
|
33
37
|
end
|
38
|
+
return self
|
34
39
|
end
|
35
|
-
return self
|
36
|
-
end
|
37
40
|
|
38
|
-
|
39
|
-
|
41
|
+
# The hidden singleton lurks behind everyone
|
42
|
+
def metaclass; class << self; self; end; end
|
40
43
|
|
41
|
-
|
42
|
-
|
44
|
+
# extend the metaclass with an instance eval
|
45
|
+
def meta_eval &blk; metaclass.instance_eval &blk; end
|
43
46
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
47
|
+
# Adds methods to a metaclass
|
48
|
+
def meta_def name, &blk
|
49
|
+
meta_eval { define_method name, &blk }
|
50
|
+
end
|
48
51
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
52
|
+
# Defines an instance method within a class
|
53
|
+
def class_def name, &blk
|
54
|
+
class_eval { define_method name, &blk }
|
55
|
+
end
|
53
56
|
|
54
|
-
|
55
|
-
|
57
|
+
# constantize object
|
58
|
+
def constantize
|
56
59
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
+
camel_cased_word= self.to_s
|
61
|
+
names = camel_cased_word.split('::')
|
62
|
+
names.shift if names.empty? || names.first.empty?
|
60
63
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
+
constant = ::Object
|
65
|
+
names.each do |name|
|
66
|
+
constant = constant.const_defined?(name, false) ? constant.const_get(name) : constant.const_missing(name)
|
67
|
+
end
|
68
|
+
constant
|
64
69
|
end
|
65
|
-
constant
|
66
|
-
end
|
67
|
-
|
68
|
-
#convert class instance instance variables into a hash object
|
69
|
-
def convert_to_hash
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
#raise ::NoMethodError, "undefined method `to_hash' for #{self.inspect}"
|
74
|
-
end
|
71
|
+
#convert class instance instance variables into a hash object
|
72
|
+
def convert_to_hash
|
75
73
|
|
76
|
-
|
74
|
+
unless self.class.class <= ::Class
|
75
|
+
super
|
76
|
+
#raise ::NoMethodError, "undefined method `to_hash' for #{self.inspect}"
|
77
|
+
end
|
77
78
|
|
78
|
-
|
79
|
-
tmp_hash[var.to_s.delete("@")] = self.instance_variable_get(var)
|
80
|
-
end
|
79
|
+
tmp_hash= ::Hash.new()
|
81
80
|
|
82
|
-
|
81
|
+
self.instance_variables.each do|var|
|
82
|
+
tmp_hash[var.to_s.delete("@")] = self.instance_variable_get(var)
|
83
|
+
end
|
83
84
|
|
84
|
-
|
85
|
+
return tmp_hash
|
85
86
|
|
86
|
-
|
87
|
-
# defined or not in the runtime memory
|
88
|
-
def class_exists?
|
89
|
-
klass = ::Module.const_get(self)
|
90
|
-
return klass.is_a?(::Class)
|
91
|
-
rescue ::NameError
|
92
|
-
return false
|
93
|
-
end
|
87
|
+
end
|
94
88
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
# hw_var = HelloWorld.new
|
103
|
-
# hw_var.sup = "Fine thanks!"
|
104
|
-
# hw_var.test = 5
|
105
|
-
#
|
106
|
-
# puts hw_var.test
|
107
|
-
#
|
108
|
-
# #> produce 5 :Integer
|
109
|
-
#
|
110
|
-
# you can also use this formats
|
111
|
-
# :HelloWorld , "hello.world",
|
112
|
-
# "hello/world", "Hello::World",
|
113
|
-
# "hello:world"...
|
114
|
-
def convert_to_class(*attributes)
|
115
|
-
|
116
|
-
unless self.class <= ::Symbol || self.class <= ::String || self.class <= ::Class
|
117
|
-
raise ::ArgumentError, "object must be symbol or string to make able build class to it"
|
89
|
+
# this will check that the class is
|
90
|
+
# defined or not in the runtime memory
|
91
|
+
def class_exists?
|
92
|
+
klass = ::Module.const_get(self)
|
93
|
+
return klass.is_a?(::Class)
|
94
|
+
rescue ::NameError
|
95
|
+
return false
|
118
96
|
end
|
119
97
|
|
120
|
-
|
98
|
+
# This will convert a symbol or string and format to be a valid
|
99
|
+
# constant name and create from it a class with instance attribute accessors
|
100
|
+
# Best use is when you get raw data in string from external source
|
101
|
+
# and you want make them class objects
|
102
|
+
#
|
103
|
+
# :hello_world.to_class(:test)
|
104
|
+
# HelloWorld.to_class(:sup)
|
105
|
+
# hw_var = HelloWorld.new
|
106
|
+
# hw_var.sup = "Fine thanks!"
|
107
|
+
# hw_var.test = 5
|
108
|
+
#
|
109
|
+
# puts hw_var.test
|
110
|
+
#
|
111
|
+
# #> produce 5 :Integer
|
112
|
+
#
|
113
|
+
# you can also use this formats
|
114
|
+
# :HelloWorld , "hello.world",
|
115
|
+
# "hello/world", "Hello::World",
|
116
|
+
# "hello:world"...
|
117
|
+
def convert_to_class(*attributes)
|
118
|
+
|
119
|
+
unless self.class <= ::Symbol || self.class <= ::String || self.class <= ::Class
|
120
|
+
raise ::ArgumentError, "object must be symbol or string to make able build class to it"
|
121
|
+
end
|
122
|
+
|
123
|
+
class_name= self.to_s
|
121
124
|
|
122
|
-
|
125
|
+
unless self.class <= ::Class
|
123
126
|
|
124
|
-
|
125
|
-
|
127
|
+
class_name= class_name[0].upcase+class_name[1..class_name.length]
|
128
|
+
%w[ _ . : / ].each do |one_sym|
|
129
|
+
|
130
|
+
loop do
|
131
|
+
index_nmb= class_name.index(one_sym)
|
132
|
+
break if index_nmb.nil?
|
133
|
+
class_name[index_nmb..index_nmb+1]= class_name[index_nmb+1].upcase
|
134
|
+
end
|
126
135
|
|
127
|
-
loop do
|
128
|
-
index_nmb= class_name.index(one_sym)
|
129
|
-
break if index_nmb.nil?
|
130
|
-
class_name[index_nmb..index_nmb+1]= class_name[index_nmb+1].upcase
|
131
136
|
end
|
132
137
|
|
133
138
|
end
|
134
139
|
|
135
|
-
|
136
|
-
|
137
|
-
create_attribute = ::Proc.new do |*args|
|
140
|
+
create_attribute = ::Proc.new do |*args|
|
138
141
|
|
139
|
-
|
142
|
+
end
|
140
143
|
|
141
|
-
|
144
|
+
unless class_name.class_exists?
|
142
145
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
146
|
+
self.class.const_set(
|
147
|
+
class_name,
|
148
|
+
::Class.new
|
149
|
+
)
|
147
150
|
|
148
|
-
|
151
|
+
end
|
149
152
|
|
150
153
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
+
class_name.constantize.class_eval do
|
155
|
+
attributes.each do |one_attribute|
|
156
|
+
attr_accessor one_attribute.to_s.to_sym
|
157
|
+
end
|
154
158
|
end
|
155
|
-
end
|
156
159
|
|
157
160
|
|
158
161
|
|
159
|
-
|
162
|
+
return true
|
160
163
|
|
161
|
-
|
164
|
+
end
|
162
165
|
|
163
|
-
|
166
|
+
alias :create_attributes :convert_to_class
|
167
|
+
|
168
|
+
end
|
164
169
|
|
165
170
|
end
|
171
|
+
|
172
|
+
require File.join 'mpatch','injector'
|
173
|
+
|
174
|
+
|
166
175
|
end
|
data/lib/mpatch/proc.rb
CHANGED
@@ -1,14 +1,23 @@
|
|
1
|
-
module MPatch
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
module MPatch
|
2
|
+
|
3
|
+
module Include
|
4
|
+
|
5
|
+
module Proc
|
6
|
+
|
7
|
+
# sugar syntax for proc * operator
|
8
|
+
# a = ->(x){x+1}
|
9
|
+
# b = ->(x){x*10}
|
10
|
+
# c = b*a
|
11
|
+
# c.call(1) #=> 20
|
12
|
+
def *(other)
|
13
|
+
self.class.new { |*args| self[*other[*args]] }
|
14
|
+
end
|
15
|
+
|
11
16
|
end
|
12
17
|
|
13
18
|
end
|
19
|
+
|
20
|
+
require File.join 'mpatch','injector'
|
21
|
+
|
22
|
+
|
14
23
|
end
|
data/lib/mpatch/process.rb
CHANGED
@@ -1,17 +1,26 @@
|
|
1
|
-
module MPatch
|
2
|
-
module Process
|
1
|
+
module MPatch
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
module Extend
|
4
|
+
|
5
|
+
module Process
|
6
|
+
|
7
|
+
# return a string obj that include the memory usage info
|
8
|
+
def memory_usage
|
9
|
+
|
10
|
+
begin
|
11
|
+
return `pmap #{self.pid}`.lines.to_a(
|
12
|
+
).last.chomp.scan(/ *\w* *(\w+)/)[0][0]
|
13
|
+
rescue ::NoMethodError
|
14
|
+
return nil
|
15
|
+
end
|
6
16
|
|
7
|
-
begin
|
8
|
-
return `pmap #{self.pid}`.lines.to_a(
|
9
|
-
).last.chomp.scan(/ *\w* *(\w+)/)[0][0]
|
10
|
-
rescue ::NoMethodError
|
11
|
-
return nil
|
12
17
|
end
|
13
18
|
|
14
19
|
end
|
15
20
|
|
16
21
|
end
|
22
|
+
|
23
|
+
require File.join 'mpatch','injector'
|
24
|
+
|
25
|
+
|
17
26
|
end
|
data/lib/mpatch/random.rb
CHANGED
@@ -1,37 +1,46 @@
|
|
1
|
-
module MPatch
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
module MPatch
|
2
|
+
|
3
|
+
module Extend
|
4
|
+
|
5
|
+
module Random
|
6
|
+
|
7
|
+
def string(length= 7,amount=1,hyphen= " ")
|
8
|
+
amount_container= []
|
9
|
+
amount.times do
|
10
|
+
mrg= ""
|
11
|
+
mrg= (0...length).map{ ('a'..'z').to_a[rand(26)] }.join
|
12
|
+
amount_container.push mrg
|
13
|
+
end
|
14
|
+
return amount_container.join(hyphen)
|
10
15
|
end
|
11
|
-
return amount_container.join(hyphen)
|
12
|
-
end
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
def integer(length= 3)
|
18
|
+
self.rand(length)
|
19
|
+
end
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
+
def boolean
|
22
|
+
self.rand(2) == 1
|
23
|
+
end
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
def time from = Time.at(1114924812), to = Time.now
|
26
|
+
self.rand(from..to)
|
27
|
+
end
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
def date from = Time.at(1114924812), to = Time.now
|
30
|
+
self.rand(from..to).to_date
|
31
|
+
end
|
32
|
+
|
33
|
+
def datetime from = Time.at(1114924812), to = Time.now
|
34
|
+
self.rand(from..to).to_datetime
|
35
|
+
end
|
29
36
|
|
30
|
-
def datetime from = Time.at(1114924812), to = Time.now
|
31
|
-
self.rand(from..to).to_datetime
|
32
37
|
end
|
33
38
|
|
34
39
|
end
|
40
|
+
|
41
|
+
require File.join 'mpatch','injector'
|
42
|
+
|
43
|
+
|
35
44
|
end
|
36
45
|
|
37
46
|
## alias in Random from RND
|
data/lib/mpatch/string.rb
CHANGED
@@ -1,80 +1,89 @@
|
|
1
|
-
module MPatch
|
2
|
-
module String
|
1
|
+
module MPatch
|
3
2
|
|
4
|
-
|
5
|
-
def positions(oth_string)
|
3
|
+
module Include
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
module String
|
6
|
+
|
7
|
+
# Find string in othere string
|
8
|
+
def positions(oth_string)
|
9
|
+
|
10
|
+
special_chrs=%w[# _ & < > @ $ . , -]+[*(0..9)]+[*("A".."Z")]+[*("a".."z")]
|
11
|
+
loop do
|
12
|
+
if oth_string.include? special_chrs[0]
|
13
|
+
special_chrs.shift
|
14
|
+
else
|
15
|
+
break
|
16
|
+
end
|
13
17
|
end
|
14
|
-
end
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
string=self
|
20
|
+
return_array = []
|
21
|
+
loop do
|
22
|
+
break if string.index(oth_string).nil?
|
23
|
+
range_value= ((string.index(oth_string))..(string.index(oth_string)+oth_string.length-1))
|
24
|
+
return_array.push range_value
|
25
|
+
[*range_value].each do |one_index|
|
26
|
+
string[one_index]= special_chrs[0]
|
27
|
+
end
|
24
28
|
end
|
29
|
+
|
30
|
+
# return value
|
31
|
+
return return_array
|
25
32
|
end
|
26
33
|
|
27
|
-
#
|
28
|
-
|
29
|
-
|
34
|
+
# Standard in rails. See official documentation
|
35
|
+
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
|
36
|
+
def camelize(first_letter = :upper)
|
37
|
+
if first_letter == :upper
|
38
|
+
gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
|
39
|
+
else
|
40
|
+
self[0..0].downcase + camelize[1..-1]
|
41
|
+
end
|
42
|
+
end unless method_defined? :camelize
|
30
43
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
44
|
+
# Standard in rails. See official documentation
|
45
|
+
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
|
46
|
+
def dasherize
|
47
|
+
gsub(/_/, '-')
|
48
|
+
end unless method_defined? :dasherize
|
49
|
+
|
50
|
+
# Standard in rails. See official documentation
|
51
|
+
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
|
52
|
+
def demodulize
|
53
|
+
gsub(/^.*::/, '')
|
54
|
+
end unless method_defined? :demodulize
|
55
|
+
|
56
|
+
# Standard in rails. See official documentation
|
57
|
+
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
|
58
|
+
def underscore
|
59
|
+
gsub(/::/, '/').
|
60
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
61
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
62
|
+
tr("-", "_").
|
63
|
+
downcase
|
64
|
+
end unless method_defined? :underscore
|
65
|
+
|
66
|
+
# Check that instance of String is start with an upper case or not
|
67
|
+
def capitalized?
|
68
|
+
self.match(/^[[:upper:]]/) ? true : false
|
38
69
|
end
|
39
|
-
end unless method_defined? :camelize
|
40
|
-
|
41
|
-
# Standard in rails. See official documentation
|
42
|
-
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
|
43
|
-
def dasherize
|
44
|
-
gsub(/_/, '-')
|
45
|
-
end unless method_defined? :dasherize
|
46
|
-
|
47
|
-
# Standard in rails. See official documentation
|
48
|
-
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
|
49
|
-
def demodulize
|
50
|
-
gsub(/^.*::/, '')
|
51
|
-
end unless method_defined? :demodulize
|
52
|
-
|
53
|
-
# Standard in rails. See official documentation
|
54
|
-
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
|
55
|
-
def underscore
|
56
|
-
gsub(/::/, '/').
|
57
|
-
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
58
|
-
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
59
|
-
tr("-", "_").
|
60
|
-
downcase
|
61
|
-
end unless method_defined? :underscore
|
62
|
-
|
63
|
-
# Check that instance of String is start with an upper case or not
|
64
|
-
def capitalized?
|
65
|
-
self.match(/^[[:upper:]]/) ? true : false
|
66
|
-
end
|
67
70
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
# return the number how often the str is with in the self
|
72
|
+
# by default with \b regex border
|
73
|
+
def frequency(str)
|
74
|
+
begin
|
75
|
+
if str.class == String
|
76
|
+
str= '\b'+str+'\b'
|
77
|
+
end
|
74
78
|
end
|
79
|
+
self.scan(/#{str}/).count
|
75
80
|
end
|
76
|
-
|
81
|
+
|
77
82
|
end
|
78
83
|
|
79
84
|
end
|
85
|
+
|
86
|
+
require File.join 'mpatch','injector'
|
87
|
+
|
88
|
+
|
80
89
|
end
|
data/lib/mpatch/yml.rb
CHANGED
@@ -1,15 +1,22 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
|
-
module MPatch
|
3
|
+
module MPatch
|
4
4
|
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
module Extend
|
6
|
+
|
7
|
+
module YAML
|
8
|
+
def save_file(file_path,config_hash)
|
9
|
+
File.open(file_path, 'w+') {|f| f.write(config_hash.to_yaml) }
|
10
|
+
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
+
def load_file(file_path)
|
13
|
+
::YAML.load(File.open(file_path))
|
14
|
+
end
|
12
15
|
end
|
16
|
+
|
13
17
|
end
|
14
18
|
|
19
|
+
require File.join 'mpatch','injector'
|
20
|
+
|
21
|
+
|
15
22
|
end
|
data/lib/mpatch.rb
CHANGED
@@ -1,49 +1,6 @@
|
|
1
1
|
#encoding: UTF-8
|
2
2
|
module MPatch
|
3
3
|
|
4
|
-
|
5
|
-
module Extend;end
|
6
|
-
|
7
|
-
Dir.glob(File.join(File.absolute_path(File.dirname(__FILE__)),"mpatch","**","*.{rb,ru}")).each{|e|require e}
|
8
|
-
extend MPatch::Include::Module
|
9
|
-
|
10
|
-
self.submodules.each do |module_name|
|
11
|
-
|
12
|
-
method_name= module_name.to_s.split('::').last.downcase.to_s.to_sym
|
13
|
-
|
14
|
-
module_name.__send__ :extend, MPatch::Include::Module
|
15
|
-
module_name.submodules.each do |sub_module_name|
|
16
|
-
|
17
|
-
constant= ::Object
|
18
|
-
constant_name= sub_module_name.to_s.split('::').last
|
19
|
-
array_of_target_constant= []
|
20
|
-
|
21
|
-
case true
|
22
|
-
|
23
|
-
when sub_module_name.to_s.include?('And')
|
24
|
-
sub_module_name.to_s.split('::').last.split('And').each do |tag_module|
|
25
|
-
array_of_target_constant.push tag_module
|
26
|
-
end
|
27
|
-
|
28
|
-
else
|
29
|
-
array_of_target_constant.push constant_name
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
array_of_target_constant.each do |name|
|
34
|
-
|
35
|
-
begin
|
36
|
-
target_constant = constant.const_defined?(name, false) ? constant.const_get(name) : constant.const_missing(name)
|
37
|
-
target_constant.__send__ method_name, sub_module_name
|
38
|
-
rescue ::NoMethodError => ex
|
39
|
-
STDERR.puts ex
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
end
|
4
|
+
require File.join 'mpatch','all'
|
48
5
|
|
49
6
|
end
|