]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
fixes registry for 2.3.0, bug caused by wrong #get_impl
authorMatthias Hecker <apoc@geekosphere.org>
Fri, 25 Mar 2016 16:10:50 +0000 (17:10 +0100)
committerMatthias Hecker <apoc@geekosphere.org>
Fri, 25 Mar 2016 16:10:50 +0000 (17:10 +0100)
previously getimpl returned eigenclasses aswell which
always was an issue but i guess a minor change in ruby
triggered this.

lib/rbot/registry.rb

index 5e905ebb9408ba9774ce2ad3f43fddd925c59824..04892d73d69bd4dd3cfa3aba773df3f7fba55eee 100644 (file)
@@ -57,6 +57,15 @@ class Registry
     @libpath = File.join(File.dirname(__FILE__), 'registry')
     @format = format
     load File.join(@libpath, @format+'.rb') if format
+    # The get_impl method will return all implementations of the
+    # abstract accessor interface, since we only ever load one
+    # (the configured one) accessor implementation, we can just assume
+    # it to be the correct accessor to use.
+    accessors = AbstractAccessor.get_impl
+    if accessors.length > 1
+      warning 'multiple accessor implementations loaded!'
+    end
+    @accessor_class = accessors.first
   end
 
   # Returns a list of supported registry database formats.
@@ -68,12 +77,7 @@ class Registry
 
   # Creates a new Accessor object for the specified database filename.
   def create(path, filename)
-    # The get_impl method will return a list of all the classes that
-    # implement the accessor interface, since we only ever load one
-    # (the configured one) accessor implementation, we can just assume
-    # it to be the correct accessor to use.
-    cls = AbstractAccessor.get_impl.first
-    db = cls.new(File.join(path, 'registry_' + @format, filename.downcase))
+    db = @accessor_class.new(File.join(path, 'registry_' + @format, filename.downcase))
     db.optimize
     db
   end
@@ -330,7 +334,7 @@ class Registry
 
     # Returns all classes from the namespace that implement this interface
     def self.get_impl
-      ObjectSpace.each_object(Class).select { |klass| klass < self }
+      ObjectSpace.each_object(Class).select { |klass| klass.ancestors[1] == self }
     end
   end