fat_cache 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -4,14 +4,13 @@ fat_cache
4
4
  Data migration got you down? RAM to spare? Let `fat_cache` do the work for you.
5
5
  `fat_cache` wastes resources for the sake of speed, intentionally!
6
6
 
7
- Use Case
8
- ========
7
+ Case Study / Motivation
8
+ -----------------------
9
9
 
10
10
  Say you are importing bank accounts associated with your users from an old
11
11
  system, maybe 10,000 of them.
12
12
 
13
- Naive Implementation
14
- --------------------
13
+ ### Naive Implementation
15
14
 
16
15
  You might write code that looks something like this:
17
16
 
@@ -27,8 +26,7 @@ You might write code that looks something like this:
27
26
 
28
27
  But this is slow, two queries for each of your 10,000 accounts.
29
28
 
30
- Refactor One: Fat Query
31
- -----------------------
29
+ ### Refactor One: Fat Query
32
30
 
33
31
  You can attack the speed problem by loading all your users into memory first.
34
32
  You pay for a fat query up front, but you get a speed boost afterwards.
@@ -45,8 +43,7 @@ You pay for a fat query up front, but you get a speed boost afterwards.
45
43
  But now instead of spending all your time in the network stack doing queries,
46
44
  you're spinning the CPU doing a linear search through the `all_users` array.
47
45
 
48
- Refactor Two: Indexed Hash
49
- --------------------------
46
+ ### Refactor Two: Indexed Hash
50
47
 
51
48
  A similar "pay up front, gain later" strategy can be used on the in-memory data
52
49
  structure by indexing it on the key that we will be searching on.
@@ -67,8 +64,7 @@ structure by indexing it on the key that we will be searching on.
67
64
 
68
65
  Now finding a user for an account is constant time lookup in the hash.
69
66
 
70
- FatCache makes this strategy simpler
71
- ------------------------------------
67
+ ### FatCache makes this strategy simpler
72
68
 
73
69
  FatCache is a simple abstraction and encapsulation of the strategies used in
74
70
  each refactor. Here is how the code looks:
@@ -84,3 +80,8 @@ each refactor. Here is how the code looks:
84
80
  And in fact, the call to `index` is optional, since `lookup` will create the
85
81
  index the first time you call it if one doesn't exist, and you're still only
86
82
  paying O(N) once.
83
+
84
+ How to use
85
+ ----------
86
+
87
+ TODO: basic howto, until then look at the specs!
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -0,0 +1,17 @@
1
+ class FatCache
2
+ module Shortcuts
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ def cache
9
+ FatCache
10
+ end
11
+ end
12
+
13
+ def cache
14
+ FatCache
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe FatCache::Shortcuts do
4
+
5
+ describe 'when included in a class' do
6
+ before do
7
+ @manatee_class = Class.new
8
+ @manatee_class.send(:include, FatCache::Shortcuts)
9
+ end
10
+
11
+ it 'provides a `cache` method at the class level' do
12
+ @manatee_class.should respond_to(:cache)
13
+ end
14
+
15
+ it 'provides a `cache` method at the instance level' do
16
+ @manatee_class.new.should respond_to(:cache)
17
+ end
18
+
19
+ describe 'the class level `cache` method' do
20
+ it 'yields the FatCache class' do
21
+ @manatee_class.cache
22
+ end
23
+ end
24
+
25
+ describe 'the instance level `cache` method' do
26
+ it 'yields the FatCache class' do
27
+ @manatee_class.new.cache
28
+ end
29
+ end
30
+ end
31
+
32
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'fat_cache'
4
+ require 'fat_cache/shortcuts'
4
5
  require 'spec'
5
6
  require 'spec/autorun'
6
7
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fat_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - phinze
@@ -49,6 +49,8 @@ files:
49
49
  - Rakefile
50
50
  - VERSION
51
51
  - lib/fat_cache.rb
52
+ - lib/fat_cache/shortcuts.rb
53
+ - spec/fat_cache_shortcuts_spec.rb
52
54
  - spec/fat_cache_spec.rb
53
55
  - spec/spec.opts
54
56
  - spec/spec_helper.rb
@@ -82,4 +84,5 @@ specification_version: 3
82
84
  summary: A dead simple pure-ruby caching framework for large datasets.
83
85
  test_files:
84
86
  - spec/fat_cache_spec.rb
87
+ - spec/fat_cache_shortcuts_spec.rb
85
88
  - spec/spec_helper.rb