Class: Object

Inherits:
BasicObject
Defined in:
lib/ruby_sync/util/metaid.rb,
lib/ruby_sync/util/utilities.rb

Overview

This file is extracted from an article published by “why the lucky stiff” at whytheluckystiff.net/articles/seeingMetaclassesClearly.html

Hopefully Why will publish a meta-programming gem later and RubySync can just make that a dependency.

Instance Method Summary collapse

Instance Method Details

#class_def(name, &blk) ⇒ Object

Defines an instance method within a class



21
22
23
# File 'lib/ruby_sync/util/metaid.rb', line 21

def class_def name, &blk
  class_eval { define_method name, &blk }
end

#logObject

Make the log method globally available



33
34
35
36
37
38
39
40
# File 'lib/ruby_sync/util/utilities.rb', line 33

def log
  unless defined? @@log
    @@log = Logger.new(STDOUT)
    #@@log.level = Logger::DEBUG
    @@log.datetime_format = "%H:%M:%S"
  end
  @@log
end

#meta_def(name, &blk) ⇒ Object

Adds methods to a metaclass



16
17
18
# File 'lib/ruby_sync/util/metaid.rb', line 16

def meta_def name, &blk
  meta_eval { define_method name, &blk }
end

#meta_eval(&blk) ⇒ Object



13
# File 'lib/ruby_sync/util/metaid.rb', line 13

def meta_eval(&blk); metaclass.instance_eval(&blk); end

#metaclassObject

The hidden singleton lurks behind everyone



12
# File 'lib/ruby_sync/util/metaid.rb', line 12

def metaclass; class << self; self; end; end