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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # Catche [![Build Status](https://secure.travis-ci.org/Arjeno/catche.png?branch=master)](http://travis-ci.org/Arjeno/catche)
2
2
 
3
- Catche is a caching library for Ruby on Rails. It automates automated resource and collection caching/expiration. It basically tags cached outputs and expires those tags based on configuration.
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
- For advanced usage such as advanced caching you need to configure this in the model.
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
- On resource `update` and `destroy` this will expire:
55
+ This will result in the following expirations:
41
56
 
42
- * Resource: `tasks_1`
43
- * Collection: `tasks`
44
- * Collection: `projects_1_tasks_1`
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
- On resource `create` this will expire:
68
+ # => Expires /tasks
69
+ # => Expires: /projects/1/tasks
70
+ ```
47
71
 
48
- * Collection: `tasks`
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.
@@ -32,13 +32,12 @@ module Catche
32
32
  set_tags = []
33
33
  expire_tags = []
34
34
 
35
- if association_tags.any?
36
- set_tags << Tag.join(*association_tags, resource_class.catche_tag)
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
 
@@ -1,3 +1,3 @@
1
1
  module Catche
2
- VERSION = "0.2"
2
+ VERSION = "0.2.1"
3
3
  end
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: '0.2'
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: &70299120119960 !ruby/object:Gem::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: *70299120119960
24
+ version_requirements: *70193875371180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sqlite3
27
- requirement: &70299120118620 !ruby/object:Gem::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: *70299120118620
35
+ version_requirements: *70193875370760
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec-rails
38
- requirement: &70299120117540 !ruby/object:Gem::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: *70299120117540
46
+ version_requirements: *70193875370300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: capybara
49
- requirement: &70299120115880 !ruby/object:Gem::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: *70299120115880
57
+ version_requirements: *70193875369880
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: guard-rspec
60
- requirement: &70299120113480 !ruby/object:Gem::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: *70299120113480
68
+ version_requirements: *70193875369460
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-spork
71
- requirement: &70299120112920 !ruby/object:Gem::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: *70299120112920
79
+ version_requirements: *70193875369040
80
80
  description: ''
81
81
  email:
82
82
  - mail@arjen.me