Sha256: 8f8619a8bc73ef9469d189f340cdf6e87952db2538b4ce04a39e6b6a5efa0753

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

require 'fileutils'

module MetraSchedule
  class Cacher
    
    attr_accessor :cache_dir

    def initialize
      @cache_dir = "/home/#{ENV['USER']}/.metra_schedule"
    end

    def self.load_from_cache(line)
      self.new.retrieve_line(line)
    end

    def self.store_to_cache(line)
      self.new.persist_line(line)
    end

    def create_cache_dir_if_not_exists
      unless check_for_metra_cache_dir
        create_metra_cache_dir 
        true
      else
        false
      end
    end

    def check_for_metra_cache_dir
      File.exists?(@cache_dir) and File.directory?(@cache_dir)
    end

    def create_metra_cache_dir
      FileUtils.mkdir(@cache_dir)      
    end

    def line_exists?(line)
      filename = line.line_key.to_s
      if File.exists?(File.join(@cache_dir, filename))
        true
      else
        false
      end
    end

    def persist_line(line)
      create_cache_dir_if_not_exists
      true if File.open(File.join(@cache_dir, line.line_key.to_s), 'w') {|f| Marshal.dump(line, f)}
    end

    def retrieve_line(line)
      if line_exists?(line)
        File.open(File.join(@cache_dir, line.line_key.to_s), 'r') {|f| Marshal.load(f)}
      else
        nil
      end
    end
    
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
metra_schedule-0.2 lib/metra/cacher.rb
metra_schedule-0.1 lib/metra/cacher.rb