Sha256: f57b601d11cb3e8679098702181150973627641c753c6843e6d9967527b8e193

Contents?: true

Size: 1.45 KB

Versions: 3

Compression:

Stored size: 1.45 KB

Contents

require 'abstract_reflection'
require 'ruby/reflection/mirror'
require 'ruby/reflection/object_mirror'
require 'ruby/reflection/class_mirror'
require 'ruby/reflection/field_mirror'
require 'ruby/reflection/thread_mirror'
require 'ruby/reflection/stack_frame_mirror'
require 'ruby/reflection/method_mirror'

module Ruby
  class Reflection
    include AbstractReflection

    def self.codebase
      nil.class
    end

    def initialize(ignored = nil)
    end

    def modules
      instances_of(Module)
    end

    def classes
      instances_of(Class)
    end

    def instances_of(klass)
      mirrors ObjectSpace.each_object(klass).select {|obj| obj.class == klass }
    end

    def object_by_id(id)
      if obj = ObjectSpace._id2ref(id)
        reflect obj
      else
        nil
      end
    end

    def threads
      instances_of(Thread)
    end

    def platform
      Object::RUBY_PLATFORM
    end

    def engine
      Object::RUBY_ENGINE
    end

    def version
      Object.const_get("#{engine.upcase}_VERSION")
    end

    def implementations_of(str)
      mirrors methods.select {|m| m.name.to_s == str.to_s }
    end

    private
    def methods
      ObjectSpace.each_object(Module).collect do |m|
        ims = m.instance_methods(false).collect {|s| m.instance_method(s) }
        cms = m.methods(false).collect {|s| m.method(s) }
        ims + cms
      end.flatten
    end

    def mirrors(list)
      list.collect {|each| reflect each }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rubymirrors-0.0.3 lib/ruby/reflection.rb
rubymirrors-0.0.2 lib/ruby/reflection.rb
rubymirrors-0.0.1 lib/ruby/reflection.rb