catche 0.2 → 0.2.1
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.md +75 -10
- data/lib/catche/tag/collect.rb +4 -5
- data/lib/catche/version.rb +1 -1
- metadata +13 -13
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Catche [](http://travis-ci.org/Arjeno/catche)
|
2
2
|
|
3
|
-
Catche is a caching library for Ruby on Rails. It automates
|
3
|
+
Catche is a caching library for Ruby on Rails. It automates resource and collection caching/expiration. It basically tags cached outputs and expires those tags based on configuration.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -21,9 +21,24 @@ class ProjectsController < ApplicationController
|
|
21
21
|
end
|
22
22
|
```
|
23
23
|
|
24
|
+
This will result in the following expirations:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
@project.update_attributes({ :title => 'Update!' }) # or @project.destroy
|
28
|
+
|
29
|
+
# => Expires /projects
|
30
|
+
# => Expires: /projects/1
|
31
|
+
```
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
@project.create
|
35
|
+
|
36
|
+
# => Expires /projects
|
37
|
+
```
|
38
|
+
|
24
39
|
### Associative caching
|
25
40
|
|
26
|
-
|
41
|
+
Catche supports associative (nested) caching.
|
27
42
|
|
28
43
|
```ruby
|
29
44
|
class Task < ActiveRecord::Base
|
@@ -37,18 +52,26 @@ class TasksController < ApplicationController
|
|
37
52
|
end
|
38
53
|
```
|
39
54
|
|
40
|
-
|
55
|
+
This will result in the following expirations:
|
41
56
|
|
42
|
-
|
43
|
-
|
44
|
-
|
57
|
+
```ruby
|
58
|
+
@task.update_attributes({ :title => 'Update!' }) # or @task.destroy
|
59
|
+
|
60
|
+
# => Expires /tasks
|
61
|
+
# => Expires: /projects/1/tasks
|
62
|
+
# => Expires: /projects/1/tasks/1
|
63
|
+
```
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
@project.tasks.create
|
45
67
|
|
46
|
-
|
68
|
+
# => Expires /tasks
|
69
|
+
# => Expires: /projects/1/tasks
|
70
|
+
```
|
47
71
|
|
48
|
-
|
49
|
-
* Collection: `projects_1_tasks_1`
|
72
|
+
### Multiple associations
|
50
73
|
|
51
|
-
You can use as many associations as you would like
|
74
|
+
You can use as many associations as you would like. Associations are not nested.
|
52
75
|
|
53
76
|
```ruby
|
54
77
|
class Task < ActiveRecord::Base
|
@@ -56,6 +79,26 @@ class Task < ActiveRecord::Base
|
|
56
79
|
end
|
57
80
|
```
|
58
81
|
|
82
|
+
This will result in the following expirations:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
@task.update_attributes({ :title => 'Update!' }) # or @task.destroy
|
86
|
+
|
87
|
+
# => Expires /tasks
|
88
|
+
# => Expires: /projects/1/tasks
|
89
|
+
# => Expires: /projects/1/tasks/1
|
90
|
+
# => Expires: /users/1/tasks
|
91
|
+
# => Expires: /users/1/tasks/1
|
92
|
+
```
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
@project.tasks.create
|
96
|
+
|
97
|
+
# => Expires /tasks
|
98
|
+
# => Expires: /projects/1/tasks
|
99
|
+
# => Expires: /users/1/tasks
|
100
|
+
```
|
101
|
+
|
59
102
|
### Advanced configuration
|
60
103
|
|
61
104
|
```ruby
|
@@ -81,6 +124,28 @@ class Task < ActiveRecord::Base
|
|
81
124
|
end
|
82
125
|
```
|
83
126
|
|
127
|
+
## Manually expiring a cache
|
128
|
+
|
129
|
+
```ruby
|
130
|
+
@task.expire_resource!
|
131
|
+
@task.expire_collection!
|
132
|
+
@task.expire.expire_resource_and_collection!
|
133
|
+
```
|
134
|
+
|
135
|
+
## Supported cache stores
|
136
|
+
|
137
|
+
Catche currently supports:
|
138
|
+
|
139
|
+
* MemoryStore
|
140
|
+
* Memcached
|
141
|
+
* Dalli
|
142
|
+
|
143
|
+
Want support for more? Just fork and open up a pull request.
|
144
|
+
|
145
|
+
## Roadmap
|
146
|
+
|
147
|
+
* View cache
|
148
|
+
|
84
149
|
## License
|
85
150
|
|
86
151
|
This project is released under the MIT license.
|
data/lib/catche/tag/collect.rb
CHANGED
@@ -32,13 +32,12 @@ module Catche
|
|
32
32
|
set_tags = []
|
33
33
|
expire_tags = []
|
34
34
|
|
35
|
-
|
36
|
-
set_tags << Tag.join(
|
37
|
-
else
|
38
|
-
# Without any associations, add just the collection tag
|
39
|
-
set_tags << resource_class.catche_tag
|
35
|
+
association_tags.each do |tag|
|
36
|
+
set_tags << Tag.join(tag, resource_class.catche_tag)
|
40
37
|
end
|
41
38
|
|
39
|
+
set_tags << resource_class.catche_tag if association_tags.blank?
|
40
|
+
|
42
41
|
expire_tags << resource_class.catche_tag if include_base
|
43
42
|
expire_tags += set_tags
|
44
43
|
|
data/lib/catche/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: catche
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-06-22 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70193875371180 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70193875371180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &70193875370760 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70193875370760
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &70193875370300 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70193875370300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: capybara
|
49
|
-
requirement: &
|
49
|
+
requirement: &70193875369880 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70193875369880
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: guard-rspec
|
60
|
-
requirement: &
|
60
|
+
requirement: &70193875369460 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70193875369460
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard-spork
|
71
|
-
requirement: &
|
71
|
+
requirement: &70193875369040 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70193875369040
|
80
80
|
description: ''
|
81
81
|
email:
|
82
82
|
- mail@arjen.me
|