class Asperalm::PersistencyFile
Persist data on file system
Constants
- FILE_FIELD_SEPARATOR
- FILE_SUFFIX
- WINDOWS_PROTECTED_CHAR
Public Class Methods
default_folder=(val)
click to toggle source
# File lib/asperalm/persistency_file.rb, line 12 def self.default_folder=(val);@@persistency_folder=val;end
new(options)
click to toggle source
@param :data Mandatory data to persist (assume array by default) @param :ids Mandatory identifiers @param :delete Optional delete persistency condition @param :parse Optional parse method (default to JSON) @param :format Optional dump method (default to JSON) @param :merge Optional merge data from file to current data
# File lib/asperalm/persistency_file.rb, line 20 def initialize(options) Log.log.debug("persistency: #{options}") raise "options shall be Hash" unless options.is_a?(Hash) raise "mandatory :data" if options[:data].nil? raise "mandatory :ids (Array)" unless options[:ids].is_a?(Array) raise "mandatory 1 element in :ids" unless options[:ids].length >= 1 # do not re-assign @Data=options[:data] @persist_category=options[:ids].first # by default , at save time, file is deleted if data is nil @delete_condition=options[:delete] || lambda{|d|d.empty?} @persist_format=options[:format] || lambda {|h| JSON.generate(h)} persist_parse=options[:parse] || lambda {|t| JSON.parse(t)} persist_merge=options[:merge] || lambda {|current,file| current.concat(file).uniq rescue current} identifiers=options[:ids] if identifiers[1].is_a?(String) and identifiers[1] =~ URI::ABS_URI identifiers=identifiers.clone identifiers[1]=URI.parse(identifiers[1]).host end basename=identifiers. join(FILE_FIELD_SEPARATOR). downcase. gsub(WINDOWS_PROTECTED_CHAR,FILE_FIELD_SEPARATOR) #.gsub(/[^a-z]+/,FILE_FIELD_SEPARATOR) @persist_filepath=File.join(@@persistency_folder,basename+FILE_SUFFIX) Log.log.debug("persistency(#{@persist_category}) = #{@persist_filepath}") if File.exist?(@persist_filepath) persist_merge.call(@Data,persist_parse.call(File.read(@persist_filepath))) else Log.log.debug("no persistency exists: #{@persist_filepath}") end end
Public Instance Methods
flush_all()
click to toggle source
# File lib/asperalm/persistency_file.rb, line 63 def flush_all # TODO persist_files=Dir[File.join(@@persistency_folder,@persist_category+'*'+FILE_SUFFIX)] persist_files.each do |filepath| File.delete(filepath) end return persist_files end
save()
click to toggle source
# File lib/asperalm/persistency_file.rb, line 53 def save if @delete_condition.call(@Data) Log.log.debug("empty data, deleting: #{@persist_filepath}") File.delete(@persist_filepath) if File.exist?(@persist_filepath) else Log.log.debug("saving: #{@persist_filepath}") File.write(@persist_filepath,@persist_format.call(@Data)) end end