Sha256: f60abc4dd3c2f12fbce4a264d734afae35d538e3637e95b789ad153bc0243e1a

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

require 'rack-sparklines/cachers/abstract'
require 'fileutils'

class Rack::Sparklines
  module Cachers
    # Reads sparkline data from CSV files.  Only the first line of numbers are 
    # read.  Requests for "/sparks/stats.csv" will pass a data_path of "stats.csv"
    class Filesystem < Abstract
      attr_accessor :directory

      def initialize(directory)
        @directory = directory
        super()
      end

      def png_path=(s)
        @cache_file = File.join(@directory, s)
        @png_path   = s
      end

      def size
        @size ||= File.size(@cache_file)
      end

      def exists?
        File.file?(@cache_file)
      end

      def updated_at
        @updated_at ||= File.mtime(@cache_file)
      end

      def save(data, options)
        FileUtils.mkdir_p(File.dirname(@cache_file))
        File.open(@cache_file, 'wb') do |png|
          png << create_sparklines(data, options)
        end
      end

      def stream
        ::File.open(@cache_file, "rb") do |file|
          while part = file.read(8192)
            yield part
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rack-sparklines-1.1.0 lib/rack-sparklines/cachers/filesystem.rb
rack-sparklines-1.0.0 lib/rack-sparklines/cachers/filesystem.rb