experimental_method 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/experimental_method.rb +24 -11
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12738bd8ddd32e0a5fece27e0b63d95b54e4d83bc0de69b3d399ae758f98fb5f
|
4
|
+
data.tar.gz: 7fd430d047de8f73e6e0b684270d02fc46afb41fd55980e11bd918036a8e1bea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c5b724bbc62247e5daf8f9a554cc5369b521f118bfd94f96bc345fc11ebe607524d040ce58426365781c7091d08da51c0408febf24d2193ce20b092c7ff714c
|
7
|
+
data.tar.gz: 7dc46819a2f69aaac5dec776a9186d496af23f81c1f89dee46c18ef6928a40c748341792be3a849bbc67ec34861c9a1d3a1b4b2fc300f355a3c52c2eccfa9963
|
data/lib/experimental_method.rb
CHANGED
@@ -1,22 +1,35 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'fileutils'
|
4
|
+
|
3
5
|
class Module
|
4
6
|
def experimental_method(method_name, &block)
|
5
7
|
return if method_defined?(:"experimental_method_#{method_name}")
|
6
8
|
alias_method :"experimental_method_#{method_name}", "#{method_name}"
|
7
9
|
define_method method_name.to_sym do |*args, &spied_method_block|
|
8
|
-
|
9
|
-
|
10
|
-
scope_separator = '.'
|
11
|
-
else
|
12
|
-
klass = "#{self.class.name}"
|
13
|
-
scope_separator = '#'
|
14
|
-
end
|
10
|
+
static = self.is_a?(Class)
|
11
|
+
klass = "#{static ? self : self.class}"
|
15
12
|
file = "/tmp/use_experimental_method_#{klass.downcase}_#{method_name}"
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
efile = "#{file}.error"
|
14
|
+
file_exists = File.exists?(file)
|
15
|
+
version = file_exists ? 'experimental' : 'original'
|
16
|
+
scope = static ? 'static' : 'instance'
|
17
|
+
program = 'Experimental Method'
|
18
|
+
timestamp = Time.now.to_i
|
19
|
+
template = '%s [%s] %s is using (%s code) in %s method [%s] switch: %s'
|
20
|
+
bindings = [timestamp, program, klass, version, scope, method_name, file]
|
21
|
+
puts template % bindings
|
22
|
+
begin
|
23
|
+
return instance_eval(&block) if file_exists
|
24
|
+
rescue => error
|
25
|
+
FileUtils.mv(file, efile)
|
26
|
+
File.open(efile, 'w+') do |file|
|
27
|
+
file.puts error.message
|
28
|
+
error.backtrace.each do |line|
|
29
|
+
file.puts line
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
20
33
|
send(:"experimental_method_#{method_name}", *args, &spied_method_block)
|
21
34
|
end
|
22
35
|
end
|