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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/experimental_method.rb +24 -11
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06f3d089f71ad105e882431a961af1f1fac82891adf50b48dcb75dc359723201
4
- data.tar.gz: 43359518bfc351809fbb5c7eff5359ecd0fe4b9fc218deb1c9acddc07c4e5759
3
+ metadata.gz: 12738bd8ddd32e0a5fece27e0b63d95b54e4d83bc0de69b3d399ae758f98fb5f
4
+ data.tar.gz: 7fd430d047de8f73e6e0b684270d02fc46afb41fd55980e11bd918036a8e1bea
5
5
  SHA512:
6
- metadata.gz: f46e65a930680085b59ff89a82ea14de225f450a4bcb94320bc477bc9b5485f1a1fa2b9a00d4b1f6e4656e82510b337e83541b7acef60099fda0c74ed8b0b427
7
- data.tar.gz: 4aa8190ad8a0208175fac9b25e9ebe4372f9be2d8462ef132c3aacd1f99317da16420ea68d244b85bf76c9d3577272c5fcf215741cdee65e2435275321cc3acf
6
+ metadata.gz: 5c5b724bbc62247e5daf8f9a554cc5369b521f118bfd94f96bc345fc11ebe607524d040ce58426365781c7091d08da51c0408febf24d2193ce20b092c7ff714c
7
+ data.tar.gz: 7dc46819a2f69aaac5dec776a9186d496af23f81c1f89dee46c18ef6928a40c748341792be3a849bbc67ec34861c9a1d3a1b4b2fc300f355a3c52c2eccfa9963
@@ -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
- if "#{self.class.name}" == "Class"
9
- klass = "#{self.name}"
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
- puts "#{Time.now.to_i} Experimental: #{klass}#{scope_separator}#{method_name}(..) use #{file}"
17
- if File.exists?(file)
18
- return block.call(*args, &spied_method_block)
19
- end
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: experimental_method
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazuyoshi Tlacaelel