class Riml::ClassMap

Map of {“ClassName” => ClassDefinitionNode} Can also query object for superclass of a named class, etc…

Ex : class_map.superclass(“g:SomeClass”) => “g:SomeClassBase”

Attributes

globbed_imports[R]

Public Class Methods

new() click to toggle source
# File lib/riml/class_map.rb, line 12
def initialize
  @map = {}
  # list of ImportedClass objects that are #globbed?
  @globbed_imports = []
end

Public Instance Methods

[](key) click to toggle source
# File lib/riml/class_map.rb, line 18
def [](key)
  ensure_key_is_string!(key)
  klass = @map[key]
  return klass if klass
  if key[0..1] == 'g:'
    globbed_imports.each do |imported_class|
      if imported_class.match?(key)
        return @map[key] = ImportedClass.new(key)
      end
    end
  end
  raise ClassNotFound, "class #{key.inspect} not found."
end
[]=(key, val) click to toggle source
# File lib/riml/class_map.rb, line 32
def []=(key, val)
  ensure_key_is_string!(key)
  if class_node = @map[key]
    if !class_node.instance_variable_get("@registered_state") &&
       !val.instance_variable_get("@registered_state")
      class_redefinition!(key)
    end
  end
  @map[key] = val
end
class_names() click to toggle source
# File lib/riml/class_map.rb, line 52
def class_names
  @map.keys
end
classes() click to toggle source
# File lib/riml/class_map.rb, line 48
def classes
  @map.values
end
has_global_import?() click to toggle source
# File lib/riml/class_map.rb, line 60
def has_global_import?
  @globbed_imports.any? { |import| import.global_import? }
end
safe_fetch(key) click to toggle source
# File lib/riml/class_map.rb, line 56
def safe_fetch(key)
  @map[key]
end
superclass(key) click to toggle source
# File lib/riml/class_map.rb, line 43
def superclass(key)
  super_key = self[key].superclass_name
  self[super_key]
end

Protected Instance Methods

class_redefinition!(key) click to toggle source
# File lib/riml/class_map.rb, line 72
def class_redefinition!(key)
  # allow class redefinitions in repl
  return if Riml.config && Riml.config.repl
  raise ClassRedefinitionError, "can't redefine class #{key.inspect}."
end
ensure_key_is_string!(key) click to toggle source
# File lib/riml/class_map.rb, line 66
def ensure_key_is_string!(key)
  unless key.is_a?(String)
    raise ArgumentError, "key must be name of class (String)"
  end
end