Sha256: d117f43b496626535561504dc07fa943032346dc88d06c527aca492567fbd43c
Contents?: true
Size: 1.92 KB
Versions: 16
Compression:
Stored size: 1.92 KB
Contents
require 'json' module Marvin # Implements a simple datastore interface, designed to make # it easy to develop handlers which have persistent data. class DataStore cattr_accessor :logger, :registered_stores self.logger = Marvin::Logger.logger self.registered_stores = {} # Returns the path to the data store relative to this file. # Used when loading / dumping the data. def self.datastore_location path = Marvin::Settings[:datastore_location] ? Marvin::Settings.datastore_location : "tmp/datastore.json" return Marvin::Settings.root / path end # Dump the current data store contents to file. def self.dump! File.open(self.datastore_location, "w+") do |f| f.write self.registered_stores.to_json end end # Load the current data store contents from file. def self.load! results = {} if File.exists?(self.datastore_location) begin json = JSON.load(File.read(self.datastore_location)) results = json if json.is_a?(Hash) rescue JSON::ParserError end end self.registered_stores = results end # For each individual datastore. attr_accessor :name def initialize(name) self.name = name.to_s self.registered_stores ||= {} self.registered_stores[self.name] ||= {} end def [](key) ((self.registered_stores||={})[self.name]||={})[key.to_s] end def []=(key,value) self.registered_stores[self.name][key.to_s] = value end def method_missing(name, *args, &blk) if name.to_s =~ /^(.*)=$/i self[$1.to_s] = args.first elsif self.registered_stores[self.name].has_key?(name.to_s) return self.registered_stores[self.name][name.to_s] else super(name, *args, &blk) end end def to_hash self.registered_stores[self.name] end end end
Version data entries
16 entries across 16 versions & 2 rubygems