lib/isomorfeus/data/object_expander.rb in isomorfeus-data-2.0.22 vs lib/isomorfeus/data/object_expander.rb in isomorfeus-data-2.1.0
- old
+ new
@@ -1,54 +1,28 @@
module Isomorfeus
module Data
class ObjectExpander
class << self
- def environment
- @environment
+ def finalize(ins)
+ proc { ins.environment.close rescue nil }
end
-
- def environment=(env)
- @environment = env
- end
-
- def ref
- @ref ||= 0
- end
-
- def ref=(val)
- @ref = val
- end
-
- def refa
- self.ref += 1
- end
-
- def refs
- self.ref -= 1 if self.ref > 0
- end
-
- def finalize(cls)
- proc do
- cls.refs
- if cls.ref == 0
- cls.environment.close rescue nil
- end
- end
- end
end
- def initialize(&block)
+ attr_accessor :environment
+
+ def initialize(object_class_name, &block)
if block_given?
res = block.call(self)
- self.class.environment = res unless self.class.environment
+ self.environment = res unless self.environment
else
+ @env_path = File.expand_path(File.join(Isomorfeus.data_object_envs_path, object_class_name.underscore))
open_environment
end
- @db = self.class.environment.database('objects', create: true)
- @index_db = self.class.environment.database('index', create: true, dupsort: true)
+ @db = self.environment.database('objects', create: true)
+ @index_db = self.environment.database('index', create: true, dupsort: true)
@use_class_cache = !Isomorfeus.development?
- ObjectSpace.define_finalizer(self, self.class.finalize(self.class))
+ ObjectSpace.define_finalizer(self, self.class.finalize(self))
end
def create_object(sid_s, obj)
Isomorfeus::Hamster::Marshal.dump(@db, sid_s, obj, class_cache: @use_class_cache)
end
@@ -89,13 +63,11 @@
end
private
def open_environment
- return self.class.refa if self.class.environment
- FileUtils.mkdir_p(Isomorfeus.data_object_env_path) unless Dir.exist?(Isomorfeus.data_object_env_path)
- self.class.environment = Isomorfeus::Hamster.new(Isomorfeus.data_object_env_path, mapsize: Isomorfeus.hamster_mapsize)
- self.class.refa
+ FileUtils.mkdir_p(@env_path) unless Dir.exist?(@env_path)
+ self.environment = Isomorfeus::Hamster.new(@env_path, mapsize: Isomorfeus.hamster_mapsize)
end
end
end
end