Sha256: 42f50192349221ba141d8b8d9e980979820dfcd48fd7897d2ef636a0cd94c16c

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

require 'hashie'

module Polytrix
  class StateFileLoadError < StandardError; end
  class StateFile
    def initialize(polytrix_root, name)
      @file_name = File.expand_path(
        File.join(polytrix_root, '.polytrix', "#{name}.yml")
      )
    end

    def read
      if File.exist?(file_name)
        Hashie::Mash.load(file_name).dup
      else
        Hashie::Mash.new
      end
    end

    def write(state)
      dir = File.dirname(file_name)
      serialized_string = serialize_hash(Util.stringified_hash(state))

      FileUtils.mkdir_p(dir) unless File.directory?(dir)
      File.open(file_name, 'wb') { |f| f.write(serialized_string) }
    end

    def destroy
      FileUtils.rm_f(file_name) if File.exist?(file_name)
    end

    def diagnose
      raw = read
      result = {}
      raw.keys.sort.each { |k| result[k] = raw[k] }
      result
    end

    private

    attr_reader :file_name

    # @api private
    def read_file
      IO.read(file_name)
    end

    # @api private
    def deserialize_string(string)
      SafeYAML.load(string)
    rescue SyntaxError, Psych::SyntaxError => ex
      raise StateFileLoadError, "Error parsing #{file_name} (#{ex.message})"
    end

    # @api private
    def serialize_hash(hash)
      ::YAML.dump(hash)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
polytrix-0.1.0 lib/polytrix/state_file.rb