Sha256: 04950d4358c25f97a4bb5939690c6b199a0284301550885c323d45f2b4ec2a13
Contents?: true
Size: 1.82 KB
Versions: 3
Compression:
Stored size: 1.82 KB
Contents
require 'json' require 'pstore' require 'fileutils' require 'thread' module Nutella # Implements basic run-dependent persistence for nutella bots. module Persist # This module exposes a single method to retrieve a JSONStore def Persist.getJsonStore(file_name) dir = file_name[0..file_name.rindex('/')] file = file_name[file_name.rindex('/')..file_name.length-1] new_dir = dir + Nutella.run_id FileUtils.mkdir_p new_dir JSONStore.new(new_dir + file) end end # JSONStore provides the same functionality as PStore, except it uses JSON # to dump objects instead of Marshal. # Example use: # store = nutella.persist.getJsonStore("json_store/json_test.json") # # Write # store.transaction { store["key"]="value" } # # Read # value = store.transaction { store["key"] } # puts value # prints "value" # # Dump the whole store # hash = store.transaction { store.to_h } # p hash # prints {"key" => "value"} class JSONStore < PStore def initialize(path) super @semaphore = Mutex.new end def dump(table) table.to_json end def load(content) JSON.parse(content) end def transaction(read_only=false, &block) @semaphore.synchronize { # access shared resource super } end # Dumps the whole store to hash # example: # store = JSONStore.new("my_file.json") # hash = store.transaction { store.to_h } def to_h @table end def merge!( hash ) @table.merge!(hash) end def marshal_dump_supports_canonical_option? false end EMPTY_MARSHAL_DATA = {}.to_json EMPTY_MARSHAL_CHECKSUM = Digest::MD5.digest(EMPTY_MARSHAL_DATA) def empty_marshal_data EMPTY_MARSHAL_DATA end def empty_marshal_checksum EMPTY_MARSHAL_CHECKSUM end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
nutella_lib-0.4.2 | lib/nutella_lib/persist.rb |
nutella_lib-0.4.1 | lib/nutella_lib/persist.rb |
nutella_lib-0.4.0 | lib/nutella_lib/persist.rb |