Sha256: 0161644b3060aa80e7f1b1fab4bb87b1fc6cc4f6e98cc6863ccefb1f0f77275c

Contents?: true

Size: 1.3 KB

Versions: 30

Compression:

Stored size: 1.3 KB

Contents

require "digest/md5"
require "fileutils"
require "ruco/core_ext/file"

module Ruco
  class FileStore
    def initialize(folder, options={})
      @folder = File.expand_path(folder)
      @options = options
    end

    def set(key, value)
      FileUtils.mkdir_p @folder unless File.exist? @folder
      File.write(file(key), serialize(value))
      cleanup if @options[:keep]
    end

    def get(key)
      file = file(key)
      deserialize File.binary_read(file) if File.exist?(file)
    end

    def cache(key, &block)
      value = get(key)
      if value.nil?
        value = yield
        set(key, value)
      end
      value
    end

    def delete(key)
      FileUtils.rm(file(key))
    rescue Errno::ENOENT
    end

    def clear
      FileUtils.rm_rf(@folder)
    end

    def file(key)
      "#{@folder}/#{Digest::MD5.hexdigest(key)}.yml"
    end

    private

    def entries
      (Dir.entries(@folder) - ['.','..']).
        map{|entry| File.join(@folder, entry) }.
        sort_by{|file| File.mtime(file) }
    end

    def cleanup
      delete = entries[0...-@options[:keep]] || []
      delete.each{|f| File.delete(f) }
    end

    def serialize(value)
      @options[:string] ? value : Marshal.dump(value)
    end

    def deserialize(value)
      @options[:string] ? value : Marshal.load(value)
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
ruco-0.4.0 lib/ruco/file_store.rb
ruco-0.3.0 lib/ruco/file_store.rb
ruco-0.2.23 lib/ruco/file_store.rb
ruco-0.2.22 lib/ruco/file_store.rb
ruco-0.2.21 lib/ruco/file_store.rb
ruco-0.2.20 lib/ruco/file_store.rb
ruco-0.2.19 lib/ruco/file_store.rb
ruco-0.2.18 lib/ruco/file_store.rb
ruco-0.2.17 lib/ruco/file_store.rb
ruco-0.2.16 lib/ruco/file_store.rb
ruco-0.2.15 lib/ruco/file_store.rb
ruco-0.2.14 lib/ruco/file_store.rb
ruco-0.2.13 lib/ruco/file_store.rb
ruco-0.2.12 lib/ruco/file_store.rb
ruco-0.2.11 lib/ruco/file_store.rb
ruco-0.2.10 lib/ruco/file_store.rb
ruco-0.2.9 lib/ruco/file_store.rb
ruco-0.2.8 lib/ruco/file_store.rb
ruco-0.2.7 lib/ruco/file_store.rb
ruco-0.2.6 lib/ruco/file_store.rb