Sha256: 409d1a043b2399b0561a9cea40f9482668a86bf26dc483a88a7d2140b367c0e8

Contents?: true

Size: 628 Bytes

Versions: 2

Compression:

Stored size: 628 Bytes

Contents

module TaskHelper
  module API
    class Cache
      def initialize(limit: 0, **call_defaults)
        @limit = limit
        @call_defaults = call_defaults
        @calls = []
      end

      def get(**args)
        new_call = Call.new(@call_defaults.merge(args))
        cached_call = @calls.find { |call| call == new_call }
        if cached_call
          cached_call.run
        else
          @calls << new_call
          sort_calls.pop if @calls.size > @limit
          new_call.run
        end
      end

      private

      def sort_calls
        @calls.sort! { |x, y| y.time <=> x.time }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
task_helper-0.0.3 lib/task_helper/api/cache.rb
task_helper-0.0.2 lib/task_helper/api/cache.rb