<commit_before># Libcache [![Build Status](https://travis-ci.org/silk8192/libcache.svg?branch=master)](https://travis-ci.org/silk8192/libcache) [![Gem Version](https://badge.fury.io/rb/libcache.svg)](https://badge.fury.io/rb/libcache)

A simple caching library that provides flexible and powerful caching features such as in-memory and file based caching similar to Guava's Caching system.

## Features

* Supports in-memory cache
* Supports filesystem based cache
* Limiting the size of the cache through eviction based on a specified max size
* Allows for expiration behavior based on the time since an object was placed in the cache or when it was last accessed/updated
* Allows custom refresh functions for reloading expensive data once it has been discarded 



## Installation

Add this line to your application's Gemfile:

```ruby
gem 'libcache'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install libcache

## Usage

For an in memory Cache with an expiry time of 3 seconds, store location at 'foo\bar', a max size of 500, and refresh method where 100 is added to the key (of course more sophisticated value retrieving operations will replace this method). Of course these additions are optional and configurable. The simplest form of an in-memory cache is ```CacheBuilder.with(Cache).build```
```ruby

cache = CacheBuilder.with(Cache).set_expiry('3s').set_max(500).set_refresh(Proc.new { |key| key + 100 }).build

cache.put(1, 5)
cache.get(1) # will return 5
sleep 4 # note that this is more than the expiry time
cache.get(1) # will return 105 as the data has been refreshed
cache.exists?(1) # will return true. if there is no set_refresh method provided then it will return false

# delete all data on exit of program
at_exit do
  cache.invalidateAll
end

```

For an file-based Cache with an expiry time of 3 seconds, store location at 'foo\bar', and refresh method where 100 is added to the key (of course more sophisticated value retrieving operations will replace this method). Of course these additions are optional and configurable. The only thing that is non-removable is the ```set_store``` method. 
```ruby
cache = CacheBuilder.with(FileCache).set_store('foo\bar').set_expiry('3s').set_expiry('3s').set_max(500).set_refresh(Proc.new { |key| key + 100 }).build

cache.put(1, 5)
cache.get(1) # will return 5<commit_msg>Fixed error in example code<commit_after># Libcache [![Build Status](https://travis-ci.org/silk8192/libcache.svg?branch=master)](https://travis-ci.org/silk8192/libcache) [![Gem Version](https://badge.fury.io/rb/libcache.svg)](https://badge.fury.io/rb/libcache)

A simple caching library that provides flexible and powerful caching features such as in-memory and file based caching similar to Guava's Caching system.

## Features

* Supports in-memory cache
* Supports filesystem based cache
* Limiting the size of the cache through eviction based on a specified max size
* Allows for expiration behavior based on the time since an object was placed in the cache or when it was last accessed/updated
* Allows custom refresh functions for reloading expensive data once it has been discarded 



## Installation

Add this line to your application's Gemfile:

```ruby
gem 'libcache'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install libcache

## Usage

For an in memory Cache with an expiry time of 3 seconds, store location at 'foo\bar', a max size of 500, and refresh method where 100 is added to the key (of course more sophisticated value retrieving operations will replace this method). Of course these additions are optional and configurable. The simplest form of an in-memory cache is ```CacheBuilder.with(Cache).build```
```ruby

cache = CacheBuilder.with(Cache).set_expiry('3s').set_max(500).set_refresh(Proc.new { |key| key + 100 }).build

cache.put(1, 5)
cache.get(1) # will return 5
sleep 4 # note that this is more than the expiry time
cache.get(1) # will return 105 as the data has been refreshed
cache.exists?(1) # will return true. if there is no set_refresh method provided then it will return false

# delete all data on exit of program
at_exit do
  cache.invalidateAll
end

```

For an file-based Cache with an expiry time of 3 seconds, store location at 'foo\bar', and refresh method where 100 is added to the key (of course more sophisticated value retrieving operations will replace this method). Of course these additions are optional and configurable. The only thing that is non-removable is the ```set_store``` method. 
```ruby
cache = CacheBuilder.with(FileCache).set_store('foo\bar').set_expiry('3s').set_max(500).set_refresh(Proc.new { |key| key + 100 }).build

cache.put(1, 5)
cache.get(1) # will return 5
{'fraction_non_alphanumeric': 0.09025575988163179, 'fraction_numerical': 0.020080321285140562, 'mean_word_length': 4.646778042959427, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1932876', 'n_tokens_mistral': 1450, 'n_tokens_neox': 1322, 'n_words': 597}