Code tagged with meta

Confusication

Posted by Jon Distad 4 months ago
# Summoned into existence by my co-worker Ehren

def confusicate_class(klass)
  methods = {}
  (klass.instance_methods - Object.instance_methods).each do |meth|
    methods[meth] = klass.instance_method(meth.to_sym)
  end

  klass.class_eval do
    methods.keys.each do |meth_name|
      define_method(meth_name) do 
        current = methods.keys[rand(methods.keys.size)] 
        meth = methods[current]
        methods.delete(current)
        meth.bind(self).call
      end
    end
  end
end

class Foo
  def one; 1; end
  def two; 2; end
  def three; 3; end
end

confusicate_class(Foo)
f = Foo.new
%w{one two three}.each do |n|
  puts "#{n} => #{f.send(n)}"
end

# OUTPUT
# ~/$ ruby r.rb
# one => 3
# two => 1
# three => 2
# ~/$ ruby r.rb
# one => 3
# two => 2
# three => 1
# ~/$ ruby r.rb
# one => 2
# two => 1
# three => 3
Language Ruby / Tagged with meta

Where is this defined?

Posted by Chad Humphries 5 months ago
# The original version of this code was found on http://holgerkohnen.blogspot.com/ 
# long ago.  It has since been modified a good deal, renamed, and improved.

module Kernel

  # which { some_object.some_method() } => ::
  def where_is_this_defined(settings={}, &block)
    settings[:debug] ||= false
    settings[:educated_guess] ||= false
    
    events = []
    
    set_trace_func lambda { |event, file, line, id, binding, classname|
      events << { :event => event, :file => file, :line => line, :id => id, :binding => binding, :classname => classname }
      
      if settings[:debug]
        puts "event => #{event}"
        puts "file => #{file}"
        puts "line => #{line}"
        puts "id => #{id}"
        puts "binding => #{binding}"
        puts "classname => #{classname}"
        puts ''
      end
    }
    yield
    set_trace_func(nil)

    events.each do |event|
      next unless event[:event] == 'call' or (event[:event] == 'return' and event[:classname].included_modules.include?(ActiveRecord::Associations))
      return "#{event[:classname]} received message '#{event[:id]}', Line \##{event[:line]} of #{event[:file]}"
    end
    
    # def self.crazy_custom_finder
    #  return find(:all......)
    # end
    # return unless event == 'call' or (event == 'return' and classname.included_modules.include?(ActiveRecord::Associations))
    # which_file = "Line \##{line} of #{file}"
    if settings[:educated_guess] and events.size > 3
      event = events[-3]
      return "#{event[:classname]} received message '#{event[:id]}', Line \##{event[:line]} of #{event[:file]}"
    end
    
    return 'Unable to determine where method was defined.'
  end

end
Language Ruby / Tagged with meta

Find the current method name inside a ruby script

Posted by Chad Humphries over 2 years ago / Source: http://www.ruby-forum.com/topic/75258
module Kernel
private
   def this_method
     caller[0] =~ /`([^']*)'/ and $1
   end
end
Language Ruby / Tagged with meta