Sha256: e9c734287ea30859571e4d1cd1f89fee0869560fea38c040a25f1173e56ea3b5

Contents?: true

Size: 1.72 KB

Versions: 5

Compression:

Stored size: 1.72 KB

Contents

class Class

  # get singleton methods to target class without super class methods
  def class_methods
    self.methods - Object.methods
  end

  # bind a singleton method to a class object
  def create_class_method(method,&block)
    self.class_eval do
      define_singleton_method method do |*args|
        block.call *args
      end
    end
  end

  # create an instance method
  def create_instance_method(method,&block)
    self.class_eval do
      define_method method do |*args|
        block.call *args
      end
    end
  end

  # Iterates over all subclasses (direct and indirect)
  def each_subclass
    ObjectSpace.each_object(Class) { | candidate |
      begin
        yield candidate if candidate < self
      rescue ArgumentError
        # comparison of Class with Class failed (ArgumentError)
      end
    }
  end

  # Returns an Array of subclasses (direct and indirect)
  def subclasses
    ret = []
    each_subclass {|c| ret << c}
    ret
  end

  # Returns an Array of direct subclasses
  def direct_subclasses
    ret = []
    each_subclass {|c| ret << c if c.superclass == self }
    ret
  end

  # create singleton attribute
  def class_attr_accessor(name)

    ### GET
    begin
      define_method name do
        class_variable_get "@@#{name}"
      end
    end

    ### SET
    begin
      define_method "#{name}=" do |new_val|
        class_variable_set "@@#{name}", new_val
      end
    end

  end

  # create class instance attribute
  def instance_attr_accessor(name)

    ### GET
    begin
      define_method name do
        instance_variable_get "@#{name}"
      end
    end

    ### SET
    begin
      define_method "#{name}=" do |new_val|
        instance_variable_set "@#{name}", new_val
      end
    end

  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
procemon-0.0.9 lib/procemon/mpatch/class.rb
procemon-0.0.8 lib/procemon/mpatch/class.rb
procemon-0.0.7 lib/procemon/mpatch/class.rb
procemon-0.0.6 lib/procemon/mpatch/class.rb
procemon-0.0.5 lib/procemon/mpatch/class.rb