cache_tree 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc CHANGED
@@ -17,24 +17,150 @@ in some sort of background job solution.
17
17
 
18
18
  Trees are cool :)
19
19
 
20
- == Contributing to cache_tree
20
+ == Simple example.
21
21
 
22
22
  require 'rubygems'
23
23
  require 'cache_tree'
24
24
 
25
- class Record
26
- def id
27
- 1
25
+ # Setup
26
+ CacheTree::Node.directory = 'cache/tree'
27
+
28
+ # Create a cache node in the tree
29
+ node = CacheTree.node({:name => 'node', :value => 1})
30
+
31
+ # Store data into cache!
32
+ puts CacheTree.use(node) { 'This is my complex operation!' }
33
+
34
+ # Pull data from the cache, if exists in cache and all that is
35
+ # handled internally!
36
+ puts CacheTree.use(node) { 'Even if this changes cached data will be returned' }
37
+
38
+ # Expiring!
39
+ node.expire
40
+
41
+ # Removing expired files!
42
+ node.clean
43
+
44
+ == Connecting nodes example.
45
+
46
+ require 'rubygems'
47
+ require 'cache_tree'
48
+
49
+ # Setup
50
+ CacheTree::Node.directory = 'cache/tree'
51
+
52
+ # Create/Handle two separated cache trees.
53
+ parent_1 = CacheTree.node({:name => 'parent_1', :value => 1})
54
+ parent_2 = CacheTree.node({:name => 'parent_2', :value => 2})
55
+
56
+ # Each tree has sub-nodes.
57
+ child_1 = CacheTree.node({:name => 'child_1', :value => 1})
58
+ child_2 = CacheTree.node({:name => 'child_2', :value => 2})
59
+ child_3 = CacheTree.node({:name => 'child_3', :value => 3})
60
+
61
+ # Create a cache tree relationship between the nodes.
62
+ parent_1.add_child(child_1)
63
+ parent_2.add_child(child_2)
64
+ parent_1.add_child(child_3)
65
+
66
+ puts CacheTree.use(child_1) { 'This is child 1 cache' }
67
+ puts CacheTree.use(child_2) { 'This is child 2 cache' }
68
+ puts CacheTree.use(child_3) { 'This is child 3 cache' }
69
+
70
+ # Expire cache for all nodes below parent 1.
71
+ parent_1.expire
72
+
73
+ # parent 2 cache is still active at this point, parent 1 cache needs to be regenerated.
74
+
75
+ # remove expired files from child nodes (1, 3)
76
+ child_1.clean
77
+ child_3.clean
78
+
79
+ == Example Output
80
+
81
+ bash-3.2$ ruby cache_tree.usage_example.rb
82
+ This is child 1 cache
83
+ This is child 2 cache
84
+ This is child 3 cache
85
+ bash-3.2$ tree cache
86
+ cache
87
+ `-- tree
88
+ |-- parent_1
89
+ | `-- 1
90
+ | |-- btree.key
91
+ | |-- child_1
92
+ | | `-- 1
93
+ | | `-- btree.key
94
+ | `-- child_3
95
+ | `-- 3
96
+ | `-- btree.key
97
+ `-- parent_2
98
+ `-- 2
99
+ |-- btree.key
100
+ `-- child_2
101
+ `-- 2
102
+ |-- btree.key
103
+ `-- c1533963ef2c86a1f8c80cde871d0b09.cache
104
+
105
+ 11 directories, 6 files
106
+ bash-3.2$ cat cache/tree/parent_2/2/child_2/2/c1533963ef2c86a1f8c80cde871d0b09.cache
107
+ This is child 2 cache
108
+
109
+ == Complex example.
110
+
111
+ require 'rubygems'
112
+ require 'cache_tree'
113
+
114
+ # Mocks
115
+ class ActiveRecordMock
116
+ attr_accessor :id
117
+ def initialize
118
+ @id = 1
28
119
  end
29
120
  end
30
121
 
31
- CacheTree::Node.directory = 'cache_tree'
32
- record = CacheTree::Node.new(Record.new)
33
- CacheTree::Manager.instance.use(record)
34
- unless CacheTree::Manager.instance.exists?
35
- CacheTree::Manager.instance.save('data')
36
- end
37
- puts CacheTree::Manager.instance.read
122
+ class User < ActiveRecordMock; end
123
+ class Post < ActiveRecordMock; end
124
+ class Comment < ActiveRecordMock; end
125
+ class Like < ActiveRecordMock; end
126
+
127
+ # Easily Setup complex cached trees.
128
+ user = CacheTree.node(User.new)
129
+ post = CacheTree.node(Post.new)
130
+ comment = CacheTree.node(Comment.new)
131
+ like = CacheTree.node(Like.new)
132
+
133
+ user.add_child(post)
134
+ post.add_child(comment)
135
+ comment.add_child(like)
136
+
137
+ # Setup
138
+ CacheTree::Node.directory = 'cache/tree'
139
+
140
+ # Example Usage.
141
+ # - first time block gets executed
142
+ # - second time will be pulled out from cache!
143
+ # - you can grab any of the nodes and expire all the cache below that
144
+ # node
145
+ puts CacheTree.use(like) { 'Generating cache' }
146
+
147
+ # Expire all cache below post with id 1 but leave user cache alone.
148
+ post.expire
149
+
150
+ puts CacheTree.use(like) { 'Generating new cache' }
151
+ puts CacheTree.use(like) { 'xxxxxxxxxxxxxxxxxxxx' } # => will output 'Generating new cache'
152
+
153
+ # you can debug any node to figure out what is going on with the cache
154
+ # at that particular point.
155
+ # - when debugging, the actual cache file will be shown in green
156
+ # (active cache)
157
+ # - all dead cache will be shown in red
158
+ # - if cache file has not been generated it would be printed in yellow!
159
+ like.debug
160
+
161
+ # Use this to remove expired cache files.
162
+ like.clean
163
+
38
164
 
39
165
  == Copyright
40
166
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/cache_tree.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cache_tree}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["kazuyoshi tlacaelel"]
12
- s.date = %q{2012-11-02}
12
+ s.date = %q{2013-04-22}
13
13
  s.description = %q{Cache based on btrees, for large ammounts of cache.}
14
14
  s.email = %q{kazu.dev@gmail.com}
15
15
  s.extra_rdoc_files = [
data/lib/cache_tree.rb CHANGED
@@ -107,7 +107,7 @@ module CacheTree
107
107
 
108
108
  # Updates current node stamp from btree_key
109
109
  def load
110
- @stamp = eval(File.read(btree_key))
110
+ @stamp = eval(File.read(btree_key).to_s.inspect)
111
111
  end
112
112
 
113
113
  # Updates current node stamp from btree_key
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cache_tree
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - kazuyoshi tlacaelel
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-11-02 00:00:00 -06:00
18
+ date: 2013-04-22 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency